@cqa-lib/cqa-ui 1.1.389 → 1.1.390

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.
@@ -44,9 +44,9 @@ export class CodeEditorComponent {
44
44
  ngOnInit() {
45
45
  this.codeValue = this.value ?? '';
46
46
  this.updateEditorOptions();
47
- if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
48
- this.scheduleFallbackSyntaxCheck(this.codeValue);
49
- }
47
+ // if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
48
+ // this.scheduleFallbackSyntaxCheck(this.codeValue);
49
+ // }
50
50
  }
51
51
  ngOnDestroy() {
52
52
  if (this.fallbackSyntaxTimer)
@@ -61,12 +61,12 @@ export class CodeEditorComponent {
61
61
  if (changes['value'] && changes['value'].currentValue !== undefined) {
62
62
  const newVal = changes['value'].currentValue ?? '';
63
63
  // Only update when value actually changed - avoids overwriting user input during typing
64
- if (newVal !== this.codeValue) {
65
- this.codeValue = newVal;
66
- if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
67
- this.scheduleFallbackSyntaxCheck(newVal);
68
- }
69
- }
64
+ // if (newVal !== this.codeValue) {
65
+ // this.codeValue = newVal;
66
+ // if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
67
+ // this.scheduleFallbackSyntaxCheck(newVal);
68
+ // }
69
+ // }
70
70
  }
71
71
  // Only update editor options when language or readOnly changes - value changes must NOT
72
72
  // recreate editorOptions or ngx-monaco-editor will re-init and dispose the editor,
@@ -80,7 +80,7 @@ export class CodeEditorComponent {
80
80
  const hasDiagnostics = ['javascript', 'typescript'].includes(monacoLang);
81
81
  this.editorOptions = {
82
82
  theme: 'vs',
83
- language: monacoLang,
83
+ language: 'javascript',
84
84
  minimap: { enabled: false },
85
85
  scrollBeyondLastLine: false,
86
86
  automaticLayout: true,
@@ -94,24 +94,37 @@ export class CodeEditorComponent {
94
94
  // bundled environments (Storybook, some webpack setups). Running in main thread
95
95
  // avoids "define is not defined" and worker creation errors.
96
96
  ...(hasDiagnostics ? { quickSuggestions: true } : {}),
97
+ quickSuggestions: true,
98
+ suggestOnTriggerCharacters: true,
99
+ acceptSuggestionOnEnter: "on",
100
+ tabCompletion: "on",
101
+ wordBasedSuggestions: true,
102
+ parameterHints: {
103
+ enabled: true
104
+ },
105
+ // Disable TypeScript features
97
106
  useWorker: false,
107
+ // Disable TypeScript validation
108
+ validate: false,
109
+ // Disable TypeScript diagnostics
110
+ diagnostics: false
98
111
  };
99
112
  }
100
113
  onCodeChange(newValue) {
101
114
  this.codeValue = newValue;
102
115
  this.valueChange.emit(newValue);
103
- if (!this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
104
- this.scheduleFallbackSyntaxCheck(newValue);
105
- }
116
+ // if (!this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
117
+ // this.scheduleFallbackSyntaxCheck(newValue);
118
+ // }
106
119
  }
107
120
  onFallbackInput(event) {
108
121
  const target = event.target;
109
122
  const newValue = target?.value ?? '';
110
123
  this.codeValue = newValue;
111
124
  this.valueChange.emit(newValue);
112
- if (['javascript', 'typescript'].includes(this.language)) {
113
- this.scheduleFallbackSyntaxCheck(newValue);
114
- }
125
+ // if (['javascript', 'typescript'].includes(this.language)) {
126
+ // this.scheduleFallbackSyntaxCheck(newValue);
127
+ // }
115
128
  }
116
129
  /** Debounced syntax check for fallback mode - avoids running on every keystroke */
117
130
  scheduleFallbackSyntaxCheck(code) {
@@ -135,7 +148,10 @@ export class CodeEditorComponent {
135
148
  return;
136
149
  }
137
150
  try {
138
- new Function(code);
151
+ // Use AsyncFunction so that top-level `await` (valid in async contexts) is not
152
+ // flagged as a syntax error by the Function constructor.
153
+ const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
154
+ new AsyncFunction(code);
139
155
  this.validationErrors = [];
140
156
  }
141
157
  catch (e) {
@@ -157,10 +173,45 @@ export class CodeEditorComponent {
157
173
  }
158
174
  onEditorInit(editor) {
159
175
  this.editorInstance = editor;
160
- this.setupMarkersListener(editor);
176
+ // this.configureMonacoForAsyncCode();
177
+ // this.setupMarkersListener(editor);
161
178
  editor.onDidBlurEditorWidget?.(() => this.blur.emit());
162
- if (['javascript', 'typescript'].includes(this.language)) {
163
- this.scheduleFallbackSyntaxCheck(this.codeValue);
179
+ // if (['javascript', 'typescript'].includes(this.language)) {
180
+ // this.scheduleFallbackSyntaxCheck(this.codeValue);
181
+ // }
182
+ }
183
+ /** Configure Monaco JS/TS language defaults to allow top-level await.
184
+ * Sets module target to ESNext (enables top-level await as a module) and
185
+ * suppresses error code 1308 ("await is only valid in async functions") which
186
+ * Monaco incorrectly raises when code runs in an async context on the test runner. */
187
+ configureMonacoForAsyncCode() {
188
+ const win = window;
189
+ try {
190
+ const tsDefaults = win.monaco?.languages?.typescript;
191
+ if (!tsDefaults?.javascriptDefaults)
192
+ return;
193
+ const jsDefaults = tsDefaults.javascriptDefaults;
194
+ // Set module to ESNext so Monaco treats code as a module → top-level await is valid
195
+ if (jsDefaults.setCompilerOptions) {
196
+ jsDefaults.setCompilerOptions({
197
+ ...(jsDefaults.getCompilerOptions?.() ?? {}),
198
+ target: tsDefaults.ScriptTarget?.ESNext ?? 99,
199
+ module: tsDefaults.ModuleKind?.ESNext ?? 99,
200
+ });
201
+ }
202
+ // Relax Monaco diagnostics so async snippets with top-level `await`
203
+ // (executed inside an async context in the runner) are not flagged.
204
+ if (jsDefaults.setDiagnosticsOptions) {
205
+ jsDefaults.setDiagnosticsOptions({
206
+ // Disable semantic diagnostics (where TS1308 comes from) but keep
207
+ // basic syntax highlighting/validation. Our own fallback checker
208
+ // still validates syntax using AsyncFunction.
209
+ noSemanticValidation: true,
210
+ });
211
+ }
212
+ }
213
+ catch {
214
+ // Monaco not available — safe to ignore
164
215
  }
165
216
  }
166
217
  setupMarkersListener(editor) {
@@ -264,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
264
315
  type: ViewChild,
265
316
  args: ['monacoEditor', { static: false }]
266
317
  }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQUUxRCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ3pELFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQWVGLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPVyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLFlBQVksQ0FBQztRQUN4QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLDRCQUE0QixDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQiwwRkFBMEY7UUFDakYsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUMvQix1R0FBdUc7UUFDOUYsZ0JBQVcs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O2dIQXBQVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixta0JDdENoQyx5K0VBOERBOzJGRHhCYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLFVBRW5CLENBQUMsa0JBQWtCLENBQUMsUUFDdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUV1QyxlQUFlO3NCQUE1RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENPREVfRURJVE9SX1NUWUxFUyB9IGZyb20gJy4vY29kZS1lZGl0b3Iuc3R5bGVzJztcblxuLyoqIE1hcHMgY3VzdG9tIGNvZGUgc3RlcCBsYW5ndWFnZSB2YWx1ZXMgdG8gTW9uYWNvIGVkaXRvciBsYW5ndWFnZSBJRHMgKi9cbmV4cG9ydCBjb25zdCBNT05BQ09fTEFOR1VBR0VfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBqYXZhc2NyaXB0OiAnamF2YXNjcmlwdCcsXG4gIHR5cGVzY3JpcHQ6ICd0eXBlc2NyaXB0JyxcbiAgcHl0aG9uOiAncHl0aG9uJyxcbiAgamF2YTogJ2phdmEnLFxuICBydWJ5OiAncnVieScsXG4gIGdvOiAnZ28nLFxuICBydXN0OiAncnVzdCcsXG4gIGNzaGFycDogJ2NzaGFycCcsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVFZGl0b3JNYXJrZXIge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xuICBsaW5lTnVtYmVyOiBudW1iZXI7XG4gIGNvbHVtbj86IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNvZGUtZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbQ09ERV9FRElUT1JfU1RZTEVTXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBDb2RlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlID0gJ2phdmFzY3JpcHQnO1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcvLyBXcml0ZSB5b3VyIGNvZGUgaGVyZS4uLic7XG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IHRydWU7XG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICcnO1xuICBASW5wdXQoKSBtaW5IZWlnaHQgPSAnMjAwcHgnO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICAvKiogRXh0ZXJuYWwgZXJyb3IgbWVzc2FnZXMgKGUuZy4gZnJvbSBmb3JtIHZhbGlkYXRpb24pLiBTaG93biBhbG9uZ3NpZGUgc3ludGF4IGVycm9ycy4gKi9cbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogV2hlbiB0cnVlLCB1c2UgYSBwbGFpbiB0ZXh0YXJlYSBpbnN0ZWFkIG9mIE1vbmFjbyAoZS5nLiBmb3IgU3Rvcnlib29rIHdoZXJlIE1vbmFjbyBtYXkgbm90IGxvYWQpICovXG4gIEBJbnB1dCgpIHVzZUZhbGxiYWNrID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb2RlRWRpdG9yTWFya2VyW10+KCk7XG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ21vbmFjb0VkaXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBtb25hY29FZGl0b3JSZWY6IHVua25vd247XG5cbiAgY29kZVZhbHVlID0gJyc7XG4gIHZhbGlkYXRpb25FcnJvcnM6IENvZGVFZGl0b3JNYXJrZXJbXSA9IFtdO1xuICBlZGl0b3JPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBwcml2YXRlIGVkaXRvckluc3RhbmNlOiB1bmtub3duID0gbnVsbDtcbiAgcHJpdmF0ZSBtYXJrZXJzU3Vic2NyaXB0aW9uOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmYWxsYmFja1N5bnRheFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vbmFjb01hcmtlcnNUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvZGVWYWx1ZSA9IHRoaXMudmFsdWUgPz8gJyc7XG4gICAgdGhpcy51cGRhdGVFZGl0b3JPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMudXNlRmFsbGJhY2sgJiYgWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sodGhpcy5jb2RlVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIpIGNsZWFyVGltZW91dCh0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIpO1xuICAgIGlmICh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW9uYWNvTWFya2Vyc1RpbWVyKTtcbiAgICAgIHRoaXMubW9uYWNvTWFya2Vyc1RpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5tYXJrZXJzU3Vic2NyaXB0aW9uPy4oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmFsdWUnXSAmJiBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBuZXdWYWwgPSBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA/PyAnJztcbiAgICAgIC8vIE9ubHkgdXBkYXRlIHdoZW4gdmFsdWUgYWN0dWFsbHkgY2hhbmdlZCAtIGF2b2lkcyBvdmVyd3JpdGluZyB1c2VyIGlucHV0IGR1cmluZyB0eXBpbmdcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMuY29kZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29kZVZhbHVlID0gbmV3VmFsO1xuICAgICAgICBpZiAodGhpcy51c2VGYWxsYmFjayAmJiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sobmV3VmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBPbmx5IHVwZGF0ZSBlZGl0b3Igb3B0aW9ucyB3aGVuIGxhbmd1YWdlIG9yIHJlYWRPbmx5IGNoYW5nZXMgLSB2YWx1ZSBjaGFuZ2VzIG11c3QgTk9UXG4gICAgLy8gcmVjcmVhdGUgZWRpdG9yT3B0aW9ucyBvciBuZ3gtbW9uYWNvLWVkaXRvciB3aWxsIHJlLWluaXQgYW5kIGRpc3Bvc2UgdGhlIGVkaXRvcixcbiAgICAvLyBjYXVzaW5nIFwiQ2FuY2VsZWRcIiBlcnJvcnMgZnJvbSBNb25hY28ncyBhc3luYyBvcGVyYXRpb25zICh3b3JkIGhpZ2hsaWdodGluZywgZXRjLilcbiAgICBpZiAoY2hhbmdlc1snbGFuZ3VhZ2UnXSB8fCBjaGFuZ2VzWydyZWFkT25seSddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVkaXRvck9wdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbW9uYWNvTGFuZyA9IE1PTkFDT19MQU5HVUFHRV9NQVBbdGhpcy5sYW5ndWFnZV0gfHwgdGhpcy5sYW5ndWFnZSB8fCAncGxhaW50ZXh0JztcbiAgICBjb25zdCBoYXNEaWFnbm9zdGljcyA9IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0J10uaW5jbHVkZXMobW9uYWNvTGFuZyk7XG5cbiAgICB0aGlzLmVkaXRvck9wdGlvbnMgPSB7XG4gICAgICB0aGVtZTogJ3ZzJyxcbiAgICAgIGxhbmd1YWdlOiBtb25hY29MYW5nLFxuICAgICAgbWluaW1hcDogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgc2Nyb2xsQmV5b25kTGFzdExpbmU6IGZhbHNlLFxuICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxuICAgICAgZm9udFNpemU6IDEzLFxuICAgICAgbGluZU51bWJlcnM6ICdvbicsXG4gICAgICByb3VuZGVkU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5LFxuICAgICAgY3Vyc29yU3R5bGU6ICdsaW5lJyxcbiAgICAgIHdvcmRXcmFwOiAnb24nLFxuICAgICAgLy8gdXNlV29ya2VyOiBmYWxzZSAtIE1vbmFjbyB3b3JrZXJzIHJlcXVpcmUgQU1EIGxvYWRlciAoZGVmaW5lKSB3aGljaCBmYWlscyBpblxuICAgICAgLy8gYnVuZGxlZCBlbnZpcm9ubWVudHMgKFN0b3J5Ym9vaywgc29tZSB3ZWJwYWNrIHNldHVwcykuIFJ1bm5pbmcgaW4gbWFpbiB0aHJlYWRcbiAgICAgIC8vIGF2b2lkcyBcImRlZmluZSBpcyBub3QgZGVmaW5lZFwiIGFuZCB3b3JrZXIgY3JlYXRpb24gZXJyb3JzLlxuICAgICAgLi4uKGhhc0RpYWdub3N0aWNzID8geyBxdWlja1N1Z2dlc3Rpb25zOiB0cnVlIH0gOiB7fSksXG4gICAgICB1c2VXb3JrZXI6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBvbkNvZGVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICBpZiAoIXRoaXMudXNlRmFsbGJhY2sgJiYgWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmFsbGJhY2tJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5jb2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgIGlmIChbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayhuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlYm91bmNlZCBzeW50YXggY2hlY2sgZm9yIGZhbGxiYWNrIG1vZGUgLSBhdm9pZHMgcnVubmluZyBvbiBldmVyeSBrZXlzdHJva2UgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2soY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcik7XG4gICAgdGhpcy5mYWxsYmFja1N5bnRheFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jaGVja0ZhbGxiYWNrU3ludGF4KGNvZGUpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiogU3ludGF4IHZhbGlkYXRpb24gZm9yIGZhbGxiYWNrICh0ZXh0YXJlYSkgbW9kZSAtIEpTL1RTIG9ubHkgKi9cbiAgcHJpdmF0ZSBjaGVja0ZhbGxiYWNrU3ludGF4KGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW107XG4gICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNvZGUgfHwgIWNvZGUudHJpbSgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsaWRhdGlvbkVycm9ycyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBuZXcgRnVuY3Rpb24oY29kZSk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IGUgYXMgU3ludGF4RXJyb3IgJiB7IGxpbmVOdW1iZXI/OiBudW1iZXI7IGNvbHVtbk51bWJlcj86IG51bWJlciB9O1xuICAgICAgICBjb25zdCBsaW5lID0gZXJyLmxpbmVOdW1iZXIgPz8gMTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW3tcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCAnU3ludGF4IGVycm9yJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLFxuICAgICAgICAgIGNvbHVtbjogZXJyLmNvbHVtbk51bWJlcixcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uQ2hhbmdlLmVtaXQodGhpcy52YWxpZGF0aW9uRXJyb3JzKTtcbiAgfVxuXG4gIG9uRWRpdG9ySW5pdChlZGl0b3I6IHtcbiAgICBnZXRNb2RlbD86ICgpID0+IHsgdXJpPzogeyB0b1N0cmluZz86ICgpID0+IHN0cmluZyB9IH07XG4gICAgb25EaWRDaGFuZ2VNb2RlbENvbnRlbnQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgICBvbkRpZEJsdXJFZGl0b3JXaWRnZXQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBlZGl0b3I7XG4gICAgdGhpcy5zZXR1cE1hcmtlcnNMaXN0ZW5lcihlZGl0b3IpO1xuICAgIGVkaXRvci5vbkRpZEJsdXJFZGl0b3JXaWRnZXQ/LigoKSA9PiB0aGlzLmJsdXIuZW1pdCgpKTtcbiAgICBpZiAoWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sodGhpcy5jb2RlVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBNYXJrZXJzTGlzdGVuZXIoZWRpdG9yOiB7XG4gICAgZ2V0TW9kZWw/OiAoKSA9PiB7IHVyaT86IHVua25vd24gfTtcbiAgICBvbkRpZENoYW5nZU1vZGVsQ29udGVudD86IChmbjogKCkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5tYXJrZXJzU3Vic2NyaXB0aW9uPy4oKTtcblxuICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsPy4oKTtcbiAgICBpZiAoIW1vZGVsPy51cmkpIHJldHVybjtcblxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgIG1vbmFjbz86IHtcbiAgICAgICAgZWRpdG9yPzoge1xuICAgICAgICAgIGdldE1vZGVsTWFya2Vycz86IChmaWx0ZXI6IHsgcmVzb3VyY2U/OiB1bmtub3duIH0pID0+IEFycmF5PHtcbiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICAgICAgICBzZXZlcml0eT86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcj86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uPzogbnVtYmVyO1xuICAgICAgICAgIH0+O1xuICAgICAgICAgIG9uRGlkQ2hhbmdlTWFya2Vycz86IChmbjogKHVyaXM6IHVua25vd25bXSkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tNYXJrZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCF3aW4ubW9uYWNvPy5lZGl0b3I/LmdldE1vZGVsTWFya2VycykgcmV0dXJuO1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gd2luLm1vbmFjby5lZGl0b3IuZ2V0TW9kZWxNYXJrZXJzKHsgcmVzb3VyY2U6IG1vZGVsLnVyaSB9KSB8fCBbXTtcbiAgICAgICAgY29uc3QgbW9uYWNvRXJyb3JzID0gbWFya2Vyc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0uc2V2ZXJpdHkgPT09IDgpIC8vIDggPSBFcnJvciBpbiBNb25hY29cbiAgICAgICAgICAubWFwKChtKSA9PiAoe1xuICAgICAgICAgICAgbWVzc2FnZTogbS5tZXNzYWdlIHx8ICdTeW50YXggZXJyb3InLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicgYXMgY29uc3QsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBtLnN0YXJ0TGluZU51bWJlciB8fCAxLFxuICAgICAgICAgICAgY29sdW1uOiBtLnN0YXJ0Q29sdW1uLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgLy8gT25seSB1cGRhdGUgZnJvbSBNb25hY28gd2hlbiBpdCBoYXMgbWFya2VycyAtIG90aGVyd2lzZSBrZWVwIGZhbGxiYWNrIHJlc3VsdHNcbiAgICAgICAgLy8gKE1vbmFjbyBtYXkgbm90IHByb2R1Y2UgbWFya2VycyB3aGVuIHVzZVdvcmtlcjogZmFsc2UgaW4gYnVuZGxlZCBlbnZpcm9ubWVudHMpXG4gICAgICAgIGlmIChtb25hY29FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IG1vbmFjb0Vycm9ycztcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTW9uYWNvIG1heSBub3QgYmUgbG9hZGVkIHlldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkaXNwb3NlTWFya2VycyA9IHdpbi5tb25hY28/LmVkaXRvcj8ub25EaWRDaGFuZ2VNYXJrZXJzPy4oKCkgPT4ge1xuICAgICAgY2hlY2tNYXJrZXJzKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZWR1bGVDaGVja01hcmtlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5tb25hY29NYXJrZXJzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcik7XG4gICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICAgIGNoZWNrTWFya2VycygpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9O1xuICAgIGVkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudD8uKHNjaGVkdWxlQ2hlY2tNYXJrZXJzKTtcbiAgICBzZXRUaW1lb3V0KGNoZWNrTWFya2VycywgNjAwKTtcblxuICAgIHRoaXMubWFya2Vyc1N1YnNjcmlwdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb25hY29NYXJrZXJzVGltZXIpO1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBkaXNwb3NlTWFya2Vycz8uZGlzcG9zZT8uKCk7XG4gICAgfTtcbiAgfVxuXG4gIGdldCBoYXNWYWxpZGF0aW9uRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmVycm9ycz8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnM7XG4gIH1cblxuICAvKiogQWxsIGVycm9yIG1lc3NhZ2VzOiBleHRlcm5hbCBlcnJvcnMgKyBzeW50YXggZXJyb3JzIGZvcm1hdHRlZCBhcyBzdHJpbmdzICovXG4gIGdldCBhbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBleHRlcm5hbCA9IHRoaXMuZXJyb3JzID8/IFtdO1xuICAgIGNvbnN0IHN5bnRheCA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5tYXAoXG4gICAgICAoZSkgPT4gYExpbmUgJHtlLmxpbmVOdW1iZXJ9OiAke2UubWVzc2FnZX1gXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLmV4dGVybmFsLCAuLi5zeW50YXhdO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gIDxsYWJlbFxuICAgICpuZ0lmPVwibGFiZWxcIlxuICAgIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgIHt7IGxhYmVsIH19XG4gICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gRmFsbGJhY2s6IHBsYWluIHRleHRhcmVhIHdoZW4gTW9uYWNvIGlzIG5vdCBhdmFpbGFibGUgKGUuZy4gU3Rvcnlib29rKSAtLT5cbiAgPGRpdlxuICAgICpuZ0lmPVwidXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtY29kZS1lZGl0b3ItZmFsbGJhY2sgY3FhLXctZnVsbFwiXG4gICAgW2NsYXNzLmNxYS1oYXMtZXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgW3N0eWxlLmhlaWdodF09XCJtaW5IZWlnaHRcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgY2xhc3M9XCJjcWEtY29kZS1lZGl0b3ItdGV4dGFyZWFcIlxuICAgICAgW3ZhbHVlXT1cImNvZGVWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25GYWxsYmFja0lucHV0KCRldmVudClcIlxuICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBsYWJlbCB8fCAnQ29kZSBlZGl0b3InXCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNcIlxuICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgIDwvdGV4dGFyZWE+XG4gIDwvZGl2PlxuICA8IS0tIE1vbmFjbyBlZGl0b3IgKHVzZWQgaW4gbWFpbiBhcHApIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhdXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtdy1mdWxsXCJcbiAgICBbY2xhc3MuY3FhLWhhcy1lcnJvcnNdPVwiaGFzRXJyb3JzXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluSGVpZ2h0XCI+XG4gICAgPG5neC1tb25hY28tZWRpdG9yXG4gICAgICAjbW9uYWNvRWRpdG9yXG4gICAgICBjbGFzcz1cImNxYS1tb25hY28tZWRpdG9yXCJcbiAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgW25nTW9kZWxdPVwiY29kZVZhbHVlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChvbkluaXQpPVwib25FZGl0b3JJbml0KCRldmVudClcIj5cbiAgICA8L25neC1tb25hY28tZWRpdG9yPlxuICA8L2Rpdj5cblxuICA8IS0tIEVycm9yIG1lc3NhZ2VzIChzYW1lIHN0eWxlIGFzIGN1c3RvbS10ZXh0YXJlYSkgLS0+XG4gIDxkaXYgKm5nSWY9XCJoYXNFcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW10LTEuNVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yIG9mIGFsbEVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgIGhlaWdodD1cIjE0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxNCAxNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtbXQtMC41XCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgIHt7IGVycm9yIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQUUxRCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ3pELFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQWVGLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPVyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLFlBQVksQ0FBQztRQUN4QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLDRCQUE0QixDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQiwwRkFBMEY7UUFDakYsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUMvQix1R0FBdUc7UUFDOUYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFbkIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQzFELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBSTFDLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO1FBQzFDLGtCQUFhLEdBQTRCLEVBQUUsQ0FBQztRQUNwQyxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQix3QkFBbUIsR0FBd0IsSUFBSSxDQUFDO1FBQ2hELHdCQUFtQixHQUF5QyxJQUFJLENBQUM7UUFDakUsdUJBQWtCLEdBQXlDLElBQUksQ0FBQztLQTRSekU7SUExUkMsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0Isa0ZBQWtGO1FBQ2xGLHNEQUFzRDtRQUN0RCxJQUFJO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDbkUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDbkQsd0ZBQXdGO1lBQ3hGLG1DQUFtQztZQUNuQyw2QkFBNkI7WUFDN0Isb0ZBQW9GO1lBQ3BGLGdEQUFnRDtZQUNoRCxNQUFNO1lBQ04sSUFBSTtTQUNMO1FBQ0Qsd0ZBQXdGO1FBQ3hGLG1GQUFtRjtRQUNuRixxRkFBcUY7UUFDckYsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUM7UUFDdEYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsWUFBWTtZQUN0QixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQzNCLG9CQUFvQixFQUFFLEtBQUs7WUFDM0IsZUFBZSxFQUFFLElBQUk7WUFDckIsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsSUFBSTtZQUNqQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLCtFQUErRTtZQUMvRSxnRkFBZ0Y7WUFDaEYsNkRBQTZEO1lBQzdELEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixhQUFhLEVBQUUsSUFBSTtZQUNuQixvQkFBb0IsRUFBRSxJQUFJO1lBQzFCLGNBQWMsRUFBRTtnQkFDZCxPQUFPLEVBQUUsSUFBSTthQUNkO1lBQ0QsOEJBQThCO1lBQzlCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGdDQUFnQztZQUNoQyxRQUFRLEVBQUUsS0FBSztZQUNmLGlDQUFpQztZQUNqQyxXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFnQjtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxtRkFBbUY7UUFDbkYsZ0RBQWdEO1FBQ2hELElBQUk7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVk7UUFDMUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQTZCLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsOERBQThEO1FBQzlELGdEQUFnRDtRQUNoRCxJQUFJO0lBQ04sQ0FBQztJQUVELG1GQUFtRjtJQUMzRSwyQkFBMkIsQ0FBQyxJQUFZO1FBQzlDLElBQUksSUFBSSxDQUFDLG1CQUFtQjtZQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsa0VBQWtFO0lBQzFELG1CQUFtQixDQUFDLElBQVk7UUFDdEMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xELE9BQU87U0FDUjtRQUNELElBQUk7WUFDRiwrRUFBK0U7WUFDL0UseURBQXlEO1lBQ3pELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxlQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUM5RSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1NBQzVCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxXQUFXLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxHQUFHLENBQWlFLENBQUM7Z0JBQzlFLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQzt3QkFDdkIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksY0FBYzt3QkFDdEMsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLFlBQVk7cUJBQ3pCLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7YUFDNUI7U0FDRjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUlaO1FBQ0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0Isc0NBQXNDO1FBQ3RDLHFDQUFxQztRQUNyQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsOERBQThEO1FBQzlELHNEQUFzRDtRQUN0RCxJQUFJO0lBQ04sQ0FBQztJQUVEOzs7MkZBR3VGO0lBQy9FLDJCQUEyQjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxNQWNYLENBQUM7UUFDRixJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO1lBQ3JELElBQUksQ0FBQyxVQUFVLEVBQUUsa0JBQWtCO2dCQUFFLE9BQU87WUFDNUMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixDQUFDO1lBRWpELG9GQUFvRjtZQUNwRixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakMsVUFBVSxDQUFDLGtCQUFrQixDQUFDO29CQUM1QixHQUFHLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQzVDLE1BQU0sRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxFQUFFO29CQUM3QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksRUFBRTtpQkFDNUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLElBQUksVUFBVSxDQUFDLHFCQUFxQixFQUFFO2dCQUNwQyxVQUFVLENBQUMscUJBQXFCLENBQUM7b0JBQy9CLGtFQUFrRTtvQkFDbEUsaUVBQWlFO29CQUNqRSw4Q0FBOEM7b0JBQzlDLG9CQUFvQixFQUFFLElBQUk7aUJBQzNCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFBQyxNQUFNO1lBQ04sd0NBQXdDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BRzVCO1FBQ0MsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztRQUU3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUc7WUFBRSxPQUFPO1FBRXhCLE1BQU0sR0FBRyxHQUFHLE1BWVgsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLEdBQVMsRUFBRTtZQUM5QixJQUFJO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlO29CQUFFLE9BQU87Z0JBQ2pELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pGLE1BQU0sWUFBWSxHQUFHLE9BQU87cUJBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7cUJBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDWCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxjQUFjO29CQUNwQyxRQUFRLEVBQUUsT0FBZ0I7b0JBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsZUFBZSxJQUFJLENBQUM7b0JBQ2xDLE1BQU0sRUFBRSxDQUFDLENBQUMsV0FBVztpQkFDdEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sZ0ZBQWdGO2dCQUNoRixpRkFBaUY7Z0JBQ2pGLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7WUFBQyxNQUFNO2dCQUNOLCtCQUErQjthQUNoQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ25FLFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFTLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCO2dCQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztnQkFDL0IsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLHVCQUF1QixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RCxVQUFVLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFTLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzthQUNoQztZQUNELGNBQWMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwRSxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLElBQUksZ0JBQWdCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQ3RDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUM1QyxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7Z0hBdFRVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLG1rQkN0Q2hDLHkrRUE4REE7MkZEeEJhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsVUFFbkIsQ0FBQyxrQkFBa0IsQ0FBQyxRQUN0QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBR3JCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBRXVDLGVBQWU7c0JBQTVELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ09ERV9FRElUT1JfU1RZTEVTIH0gZnJvbSAnLi9jb2RlLWVkaXRvci5zdHlsZXMnO1xuXG4vKiogTWFwcyBjdXN0b20gY29kZSBzdGVwIGxhbmd1YWdlIHZhbHVlcyB0byBNb25hY28gZWRpdG9yIGxhbmd1YWdlIElEcyAqL1xuZXhwb3J0IGNvbnN0IE1PTkFDT19MQU5HVUFHRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGphdmFzY3JpcHQ6ICdqYXZhc2NyaXB0JyxcbiAgdHlwZXNjcmlwdDogJ3R5cGVzY3JpcHQnLFxuICBweXRob246ICdweXRob24nLFxuICBqYXZhOiAnamF2YScsXG4gIHJ1Ynk6ICdydWJ5JyxcbiAgZ286ICdnbycsXG4gIHJ1c3Q6ICdydXN0JyxcbiAgY3NoYXJwOiAnY3NoYXJwJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUVkaXRvck1hcmtlciB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2V2ZXJpdHk6ICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbyc7XG4gIGxpbmVOdW1iZXI6IG51bWJlcjtcbiAgY29sdW1uPzogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY29kZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtDT0RFX0VESVRPUl9TVFlMRVNdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgQElucHV0KCkgbGFuZ3VhZ2UgPSAnamF2YXNjcmlwdCc7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJy8vIFdyaXRlIHlvdXIgY29kZSBoZXJlLi4uJztcbiAgQElucHV0KCkgZnVsbFdpZHRoID0gdHJ1ZTtcbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIG1pbkhlaWdodCA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIC8qKiBFeHRlcm5hbCBlcnJvciBtZXNzYWdlcyAoZS5nLiBmcm9tIGZvcm0gdmFsaWRhdGlvbikuIFNob3duIGFsb25nc2lkZSBzeW50YXggZXJyb3JzLiAqL1xuICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBXaGVuIHRydWUsIHVzZSBhIHBsYWluIHRleHRhcmVhIGluc3RlYWQgb2YgTW9uYWNvIChlLmcuIGZvciBTdG9yeWJvb2sgd2hlcmUgTW9uYWNvIG1heSBub3QgbG9hZCkgKi9cbiAgQElucHV0KCkgdXNlRmFsbGJhY2sgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvZGVFZGl0b3JNYXJrZXJbXT4oKTtcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbW9uYWNvRWRpdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1vbmFjb0VkaXRvclJlZjogdW5rbm93bjtcblxuICBjb2RlVmFsdWUgPSAnJztcbiAgdmFsaWRhdGlvbkVycm9yczogQ29kZUVkaXRvck1hcmtlcltdID0gW107XG4gIGVkaXRvck9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIHByaXZhdGUgZWRpdG9ySW5zdGFuY2U6IHVua25vd24gPSBudWxsO1xuICBwcml2YXRlIG1hcmtlcnNTdWJzY3JpcHRpb246ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZhbGxiYWNrU3ludGF4VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbW9uYWNvTWFya2Vyc1RpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbHVlID0gdGhpcy52YWx1ZSA/PyAnJztcbiAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbnMoKTtcbiAgICAvLyBpZiAodGhpcy51c2VGYWxsYmFjayAmJiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgLy8gICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayh0aGlzLmNvZGVWYWx1ZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcik7XG4gICAgaWYgKHRoaXMubW9uYWNvTWFya2Vyc1RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb25hY29NYXJrZXJzVGltZXIpO1xuICAgICAgdGhpcy5tb25hY29NYXJrZXJzVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLm1hcmtlcnNTdWJzY3JpcHRpb24/LigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddICYmIGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbCA9IGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlID8/ICcnO1xuICAgICAgLy8gT25seSB1cGRhdGUgd2hlbiB2YWx1ZSBhY3R1YWxseSBjaGFuZ2VkIC0gYXZvaWRzIG92ZXJ3cml0aW5nIHVzZXIgaW5wdXQgZHVyaW5nIHR5cGluZ1xuICAgICAgLy8gaWYgKG5ld1ZhbCAhPT0gdGhpcy5jb2RlVmFsdWUpIHtcbiAgICAgIC8vICAgdGhpcy5jb2RlVmFsdWUgPSBuZXdWYWw7XG4gICAgICAvLyAgIGlmICh0aGlzLnVzZUZhbGxiYWNrICYmIFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0J10uaW5jbHVkZXModGhpcy5sYW5ndWFnZSkpIHtcbiAgICAgIC8vICAgICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayhuZXdWYWwpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgfVxuICAgIC8vIE9ubHkgdXBkYXRlIGVkaXRvciBvcHRpb25zIHdoZW4gbGFuZ3VhZ2Ugb3IgcmVhZE9ubHkgY2hhbmdlcyAtIHZhbHVlIGNoYW5nZXMgbXVzdCBOT1RcbiAgICAvLyByZWNyZWF0ZSBlZGl0b3JPcHRpb25zIG9yIG5neC1tb25hY28tZWRpdG9yIHdpbGwgcmUtaW5pdCBhbmQgZGlzcG9zZSB0aGUgZWRpdG9yLFxuICAgIC8vIGNhdXNpbmcgXCJDYW5jZWxlZFwiIGVycm9ycyBmcm9tIE1vbmFjbydzIGFzeW5jIG9wZXJhdGlvbnMgKHdvcmQgaGlnaGxpZ2h0aW5nLCBldGMuKVxuICAgIGlmIChjaGFuZ2VzWydsYW5ndWFnZSddIHx8IGNoYW5nZXNbJ3JlYWRPbmx5J10pIHtcbiAgICAgIHRoaXMudXBkYXRlRWRpdG9yT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRWRpdG9yT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBtb25hY29MYW5nID0gTU9OQUNPX0xBTkdVQUdFX01BUFt0aGlzLmxhbmd1YWdlXSB8fCB0aGlzLmxhbmd1YWdlIHx8ICdwbGFpbnRleHQnO1xuICAgIGNvbnN0IGhhc0RpYWdub3N0aWNzID0gWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyhtb25hY29MYW5nKTtcblxuICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IHtcbiAgICAgIHRoZW1lOiAndnMnLFxuICAgICAgbGFuZ3VhZ2U6ICdqYXZhc2NyaXB0JyxcbiAgICAgIG1pbmltYXA6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIHNjcm9sbEJleW9uZExhc3RMaW5lOiBmYWxzZSxcbiAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSxcbiAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgIGxpbmVOdW1iZXJzOiAnb24nLFxuICAgICAgcm91bmRlZFNlbGVjdGlvbjogZmFsc2UsXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSxcbiAgICAgIGN1cnNvclN0eWxlOiAnbGluZScsXG4gICAgICB3b3JkV3JhcDogJ29uJyxcbiAgICAgIC8vIHVzZVdvcmtlcjogZmFsc2UgLSBNb25hY28gd29ya2VycyByZXF1aXJlIEFNRCBsb2FkZXIgKGRlZmluZSkgd2hpY2ggZmFpbHMgaW5cbiAgICAgIC8vIGJ1bmRsZWQgZW52aXJvbm1lbnRzIChTdG9yeWJvb2ssIHNvbWUgd2VicGFjayBzZXR1cHMpLiBSdW5uaW5nIGluIG1haW4gdGhyZWFkXG4gICAgICAvLyBhdm9pZHMgXCJkZWZpbmUgaXMgbm90IGRlZmluZWRcIiBhbmQgd29ya2VyIGNyZWF0aW9uIGVycm9ycy5cbiAgICAgIC4uLihoYXNEaWFnbm9zdGljcyA/IHsgcXVpY2tTdWdnZXN0aW9uczogdHJ1ZSB9IDoge30pLFxuICAgICAgcXVpY2tTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICAgIHN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzOiB0cnVlLFxuICAgICAgYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXI6IFwib25cIixcbiAgICAgIHRhYkNvbXBsZXRpb246IFwib25cIixcbiAgICAgIHdvcmRCYXNlZFN1Z2dlc3Rpb25zOiB0cnVlLFxuICAgICAgcGFyYW1ldGVySGludHM6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIC8vIERpc2FibGUgVHlwZVNjcmlwdCBmZWF0dXJlc1xuICAgICAgdXNlV29ya2VyOiBmYWxzZSxcbiAgICAgIC8vIERpc2FibGUgVHlwZVNjcmlwdCB2YWxpZGF0aW9uXG4gICAgICB2YWxpZGF0ZTogZmFsc2UsXG4gICAgICAvLyBEaXNhYmxlIFR5cGVTY3JpcHQgZGlhZ25vc3RpY3NcbiAgICAgIGRpYWdub3N0aWNzOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBvbkNvZGVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICAvLyBpZiAoIXRoaXMudXNlRmFsbGJhY2sgJiYgWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgIC8vICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sobmV3VmFsdWUpO1xuICAgIC8vIH1cbiAgfVxuXG4gIG9uRmFsbGJhY2tJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5jb2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgIC8vIGlmIChbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgLy8gICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayhuZXdWYWx1ZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgLyoqIERlYm91bmNlZCBzeW50YXggY2hlY2sgZm9yIGZhbGxiYWNrIG1vZGUgLSBhdm9pZHMgcnVubmluZyBvbiBldmVyeSBrZXlzdHJva2UgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2soY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcik7XG4gICAgdGhpcy5mYWxsYmFja1N5bnRheFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jaGVja0ZhbGxiYWNrU3ludGF4KGNvZGUpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiogU3ludGF4IHZhbGlkYXRpb24gZm9yIGZhbGxiYWNrICh0ZXh0YXJlYSkgbW9kZSAtIEpTL1RTIG9ubHkgKi9cbiAgcHJpdmF0ZSBjaGVja0ZhbGxiYWNrU3ludGF4KGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW107XG4gICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNvZGUgfHwgIWNvZGUudHJpbSgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsaWRhdGlvbkVycm9ycyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgQXN5bmNGdW5jdGlvbiBzbyB0aGF0IHRvcC1sZXZlbCBgYXdhaXRgICh2YWxpZCBpbiBhc3luYyBjb250ZXh0cykgaXMgbm90XG4gICAgICAvLyBmbGFnZ2VkIGFzIGEgc3ludGF4IGVycm9yIGJ5IHRoZSBGdW5jdGlvbiBjb25zdHJ1Y3Rvci5cbiAgICAgIGNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24gKCkge30pLmNvbnN0cnVjdG9yO1xuICAgICAgbmV3IEFzeW5jRnVuY3Rpb24oY29kZSk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IGUgYXMgU3ludGF4RXJyb3IgJiB7IGxpbmVOdW1iZXI/OiBudW1iZXI7IGNvbHVtbk51bWJlcj86IG51bWJlciB9O1xuICAgICAgICBjb25zdCBsaW5lID0gZXJyLmxpbmVOdW1iZXIgPz8gMTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW3tcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCAnU3ludGF4IGVycm9yJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLFxuICAgICAgICAgIGNvbHVtbjogZXJyLmNvbHVtbk51bWJlcixcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uQ2hhbmdlLmVtaXQodGhpcy52YWxpZGF0aW9uRXJyb3JzKTtcbiAgfVxuXG4gIG9uRWRpdG9ySW5pdChlZGl0b3I6IHtcbiAgICBnZXRNb2RlbD86ICgpID0+IHsgdXJpPzogeyB0b1N0cmluZz86ICgpID0+IHN0cmluZyB9IH07XG4gICAgb25EaWRDaGFuZ2VNb2RlbENvbnRlbnQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgICBvbkRpZEJsdXJFZGl0b3JXaWRnZXQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBlZGl0b3I7XG4gICAgLy8gdGhpcy5jb25maWd1cmVNb25hY29Gb3JBc3luY0NvZGUoKTtcbiAgICAvLyB0aGlzLnNldHVwTWFya2Vyc0xpc3RlbmVyKGVkaXRvcik7XG4gICAgZWRpdG9yLm9uRGlkQmx1ckVkaXRvcldpZGdldD8uKCgpID0+IHRoaXMuYmx1ci5lbWl0KCkpO1xuICAgIC8vIGlmIChbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgLy8gICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayh0aGlzLmNvZGVWYWx1ZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgLyoqIENvbmZpZ3VyZSBNb25hY28gSlMvVFMgbGFuZ3VhZ2UgZGVmYXVsdHMgdG8gYWxsb3cgdG9wLWxldmVsIGF3YWl0LlxuICAgKiAgU2V0cyBtb2R1bGUgdGFyZ2V0IHRvIEVTTmV4dCAoZW5hYmxlcyB0b3AtbGV2ZWwgYXdhaXQgYXMgYSBtb2R1bGUpIGFuZFxuICAgKiAgc3VwcHJlc3NlcyBlcnJvciBjb2RlIDEzMDggKFwiYXdhaXQgaXMgb25seSB2YWxpZCBpbiBhc3luYyBmdW5jdGlvbnNcIikgd2hpY2hcbiAgICogIE1vbmFjbyBpbmNvcnJlY3RseSByYWlzZXMgd2hlbiBjb2RlIHJ1bnMgaW4gYW4gYXN5bmMgY29udGV4dCBvbiB0aGUgdGVzdCBydW5uZXIuICovXG4gIHByaXZhdGUgY29uZmlndXJlTW9uYWNvRm9yQXN5bmNDb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgIG1vbmFjbz86IHtcbiAgICAgICAgbGFuZ3VhZ2VzPzoge1xuICAgICAgICAgIHR5cGVzY3JpcHQ/OiB7XG4gICAgICAgICAgICBqYXZhc2NyaXB0RGVmYXVsdHM/OiB7XG4gICAgICAgICAgICAgIHNldENvbXBpbGVyT3B0aW9ucz86IChvcHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbiAgICAgICAgICAgICAgZ2V0Q29tcGlsZXJPcHRpb25zPzogKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIHNldERpYWdub3N0aWNzT3B0aW9ucz86IChvcHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBTY3JpcHRUYXJnZXQ/OiB7IEVTTmV4dD86IG51bWJlciB9O1xuICAgICAgICAgICAgTW9kdWxlS2luZD86IHsgRVNOZXh0PzogbnVtYmVyIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHNEZWZhdWx0cyA9IHdpbi5tb25hY28/Lmxhbmd1YWdlcz8udHlwZXNjcmlwdDtcbiAgICAgIGlmICghdHNEZWZhdWx0cz8uamF2YXNjcmlwdERlZmF1bHRzKSByZXR1cm47XG4gICAgICBjb25zdCBqc0RlZmF1bHRzID0gdHNEZWZhdWx0cy5qYXZhc2NyaXB0RGVmYXVsdHM7XG5cbiAgICAgIC8vIFNldCBtb2R1bGUgdG8gRVNOZXh0IHNvIE1vbmFjbyB0cmVhdHMgY29kZSBhcyBhIG1vZHVsZSDihpIgdG9wLWxldmVsIGF3YWl0IGlzIHZhbGlkXG4gICAgICBpZiAoanNEZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMpIHtcbiAgICAgICAganNEZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMoe1xuICAgICAgICAgIC4uLihqc0RlZmF1bHRzLmdldENvbXBpbGVyT3B0aW9ucz8uKCkgPz8ge30pLFxuICAgICAgICAgIHRhcmdldDogdHNEZWZhdWx0cy5TY3JpcHRUYXJnZXQ/LkVTTmV4dCA/PyA5OSxcbiAgICAgICAgICBtb2R1bGU6IHRzRGVmYXVsdHMuTW9kdWxlS2luZD8uRVNOZXh0ID8/IDk5LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVsYXggTW9uYWNvIGRpYWdub3N0aWNzIHNvIGFzeW5jIHNuaXBwZXRzIHdpdGggdG9wLWxldmVsIGBhd2FpdGBcbiAgICAgIC8vIChleGVjdXRlZCBpbnNpZGUgYW4gYXN5bmMgY29udGV4dCBpbiB0aGUgcnVubmVyKSBhcmUgbm90IGZsYWdnZWQuXG4gICAgICBpZiAoanNEZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMpIHtcbiAgICAgICAganNEZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgICAgIC8vIERpc2FibGUgc2VtYW50aWMgZGlhZ25vc3RpY3MgKHdoZXJlIFRTMTMwOCBjb21lcyBmcm9tKSBidXQga2VlcFxuICAgICAgICAgIC8vIGJhc2ljIHN5bnRheCBoaWdobGlnaHRpbmcvdmFsaWRhdGlvbi4gT3VyIG93biBmYWxsYmFjayBjaGVja2VyXG4gICAgICAgICAgLy8gc3RpbGwgdmFsaWRhdGVzIHN5bnRheCB1c2luZyBBc3luY0Z1bmN0aW9uLlxuICAgICAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE1vbmFjbyBub3QgYXZhaWxhYmxlIOKAlCBzYWZlIHRvIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBNYXJrZXJzTGlzdGVuZXIoZWRpdG9yOiB7XG4gICAgZ2V0TW9kZWw/OiAoKSA9PiB7IHVyaT86IHVua25vd24gfTtcbiAgICBvbkRpZENoYW5nZU1vZGVsQ29udGVudD86IChmbjogKCkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5tYXJrZXJzU3Vic2NyaXB0aW9uPy4oKTtcblxuICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsPy4oKTtcbiAgICBpZiAoIW1vZGVsPy51cmkpIHJldHVybjtcblxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgIG1vbmFjbz86IHtcbiAgICAgICAgZWRpdG9yPzoge1xuICAgICAgICAgIGdldE1vZGVsTWFya2Vycz86IChmaWx0ZXI6IHsgcmVzb3VyY2U/OiB1bmtub3duIH0pID0+IEFycmF5PHtcbiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICAgICAgICBzZXZlcml0eT86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcj86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uPzogbnVtYmVyO1xuICAgICAgICAgIH0+O1xuICAgICAgICAgIG9uRGlkQ2hhbmdlTWFya2Vycz86IChmbjogKHVyaXM6IHVua25vd25bXSkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tNYXJrZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCF3aW4ubW9uYWNvPy5lZGl0b3I/LmdldE1vZGVsTWFya2VycykgcmV0dXJuO1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gd2luLm1vbmFjby5lZGl0b3IuZ2V0TW9kZWxNYXJrZXJzKHsgcmVzb3VyY2U6IG1vZGVsLnVyaSB9KSB8fCBbXTtcbiAgICAgICAgY29uc3QgbW9uYWNvRXJyb3JzID0gbWFya2Vyc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0uc2V2ZXJpdHkgPT09IDgpIC8vIDggPSBFcnJvciBpbiBNb25hY29cbiAgICAgICAgICAubWFwKChtKSA9PiAoe1xuICAgICAgICAgICAgbWVzc2FnZTogbS5tZXNzYWdlIHx8ICdTeW50YXggZXJyb3InLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicgYXMgY29uc3QsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBtLnN0YXJ0TGluZU51bWJlciB8fCAxLFxuICAgICAgICAgICAgY29sdW1uOiBtLnN0YXJ0Q29sdW1uLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgLy8gT25seSB1cGRhdGUgZnJvbSBNb25hY28gd2hlbiBpdCBoYXMgbWFya2VycyAtIG90aGVyd2lzZSBrZWVwIGZhbGxiYWNrIHJlc3VsdHNcbiAgICAgICAgLy8gKE1vbmFjbyBtYXkgbm90IHByb2R1Y2UgbWFya2VycyB3aGVuIHVzZVdvcmtlcjogZmFsc2UgaW4gYnVuZGxlZCBlbnZpcm9ubWVudHMpXG4gICAgICAgIGlmIChtb25hY29FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IG1vbmFjb0Vycm9ycztcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTW9uYWNvIG1heSBub3QgYmUgbG9hZGVkIHlldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkaXNwb3NlTWFya2VycyA9IHdpbi5tb25hY28/LmVkaXRvcj8ub25EaWRDaGFuZ2VNYXJrZXJzPy4oKCkgPT4ge1xuICAgICAgY2hlY2tNYXJrZXJzKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZWR1bGVDaGVja01hcmtlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5tb25hY29NYXJrZXJzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcik7XG4gICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICAgIGNoZWNrTWFya2VycygpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9O1xuICAgIGVkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudD8uKHNjaGVkdWxlQ2hlY2tNYXJrZXJzKTtcbiAgICBzZXRUaW1lb3V0KGNoZWNrTWFya2VycywgNjAwKTtcblxuICAgIHRoaXMubWFya2Vyc1N1YnNjcmlwdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb25hY29NYXJrZXJzVGltZXIpO1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBkaXNwb3NlTWFya2Vycz8uZGlzcG9zZT8uKCk7XG4gICAgfTtcbiAgfVxuXG4gIGdldCBoYXNWYWxpZGF0aW9uRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmVycm9ycz8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnM7XG4gIH1cblxuICAvKiogQWxsIGVycm9yIG1lc3NhZ2VzOiBleHRlcm5hbCBlcnJvcnMgKyBzeW50YXggZXJyb3JzIGZvcm1hdHRlZCBhcyBzdHJpbmdzICovXG4gIGdldCBhbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBleHRlcm5hbCA9IHRoaXMuZXJyb3JzID8/IFtdO1xuICAgIGNvbnN0IHN5bnRheCA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5tYXAoXG4gICAgICAoZSkgPT4gYExpbmUgJHtlLmxpbmVOdW1iZXJ9OiAke2UubWVzc2FnZX1gXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLmV4dGVybmFsLCAuLi5zeW50YXhdO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gIDxsYWJlbFxuICAgICpuZ0lmPVwibGFiZWxcIlxuICAgIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgIHt7IGxhYmVsIH19XG4gICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gRmFsbGJhY2s6IHBsYWluIHRleHRhcmVhIHdoZW4gTW9uYWNvIGlzIG5vdCBhdmFpbGFibGUgKGUuZy4gU3Rvcnlib29rKSAtLT5cbiAgPGRpdlxuICAgICpuZ0lmPVwidXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtY29kZS1lZGl0b3ItZmFsbGJhY2sgY3FhLXctZnVsbFwiXG4gICAgW2NsYXNzLmNxYS1oYXMtZXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgW3N0eWxlLmhlaWdodF09XCJtaW5IZWlnaHRcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgY2xhc3M9XCJjcWEtY29kZS1lZGl0b3ItdGV4dGFyZWFcIlxuICAgICAgW3ZhbHVlXT1cImNvZGVWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25GYWxsYmFja0lucHV0KCRldmVudClcIlxuICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBsYWJlbCB8fCAnQ29kZSBlZGl0b3InXCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNcIlxuICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgIDwvdGV4dGFyZWE+XG4gIDwvZGl2PlxuICA8IS0tIE1vbmFjbyBlZGl0b3IgKHVzZWQgaW4gbWFpbiBhcHApIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhdXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtdy1mdWxsXCJcbiAgICBbY2xhc3MuY3FhLWhhcy1lcnJvcnNdPVwiaGFzRXJyb3JzXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluSGVpZ2h0XCI+XG4gICAgPG5neC1tb25hY28tZWRpdG9yXG4gICAgICAjbW9uYWNvRWRpdG9yXG4gICAgICBjbGFzcz1cImNxYS1tb25hY28tZWRpdG9yXCJcbiAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgW25nTW9kZWxdPVwiY29kZVZhbHVlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChvbkluaXQpPVwib25FZGl0b3JJbml0KCRldmVudClcIj5cbiAgICA8L25neC1tb25hY28tZWRpdG9yPlxuICA8L2Rpdj5cblxuICA8IS0tIEVycm9yIG1lc3NhZ2VzIChzYW1lIHN0eWxlIGFzIGN1c3RvbS10ZXh0YXJlYSkgLS0+XG4gIDxkaXYgKm5nSWY9XCJoYXNFcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW10LTEuNVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yIG9mIGFsbEVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgIGhlaWdodD1cIjE0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxNCAxNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtbXQtMC41XCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgIHt7IGVycm9yIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -34,7 +34,7 @@ export class StepBuilderCustomCodeComponent {
34
34
  this.advancedExpanded = true;
35
35
  this.codeValidationErrors = [];
36
36
  this.customCodeForm = this.fb.group({
37
- language: ['', Validators.required],
37
+ language: ['javascript', Validators.required],
38
38
  code: ['', Validators.required],
39
39
  metadata: [''],
40
40
  description: ['']
@@ -303,4 +303,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
303
303
  }], cancelled: [{
304
304
  type: Output
305
305
  }] } });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS9zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQW9CNUYsTUFBTSxPQUFPLDhCQUE4QjtJQW9DekMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFuQ25DLG9DQUFvQztRQUMzQixvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFFOUMscUNBQXFDO1FBQzVCLGFBQVEsR0FBMEIsSUFBSSxDQUFDO1FBRWhELG1HQUFtRztRQUMxRix5QkFBb0IsR0FBdUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUEsQ0FBQSxDQUFDLENBQUM7UUFDdkYsMkZBQTJGO1FBQ2xGLGlDQUE0QixHQUF3RCxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFBLENBQUMsQ0FBQztRQU92RyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXJDLGtHQUFrRztRQUN6RixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRTlELDBCQUEwQjtR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OlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9zdGVwLWJ1aWxkZXItYWN0aW9uL3N0ZXAtYnVpbGRlci1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvZGVFZGl0b3JNYXJrZXIgfSBmcm9tICcuLi8uLi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUNvZGVGb3JtRGF0YSB7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbiAgbWV0YWRhdGE/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0ZW1wbGF0ZVZhcmlhYmxlcz86IGFueVtdO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzPzogYW55W107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBCdWlsZGVyQ3VzdG9tQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIGxhbmd1YWdlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogVGVtcGxhdGUgdG8gZ2V0IHZhcmlhYmxlcyBmcm9tICovXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSB8IG51bGwgPSBudWxsO1xuICBcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSB2YXJpYWJsZSBwcm9jZXNzaW5nIG9yIGN1c3RvbSBsb2dpYy4gQ2FuIGJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldFRlbXBsYXRlVmFyaWFibGVzOiAodmFyaWFibGVzOiBBY3Rpb25UZW1wbGF0ZSkgPT4gYW55ID0gKCkgPT4geyByZXR1cm4gW119O1xuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcy4gQ2FuIGJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6ICh0ZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUsIHRlc3RTdGVwPzogYW55KSA9PiBhbnlbXSA9ICgpID0+IHsgcmV0dXJuIFtdfTtcbiAgXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdGluZyBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxDb2RlPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsTGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxNZXRhZGF0YT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoKSBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUgU3RlcCBidXR0b24gKi9cbiAgQElucHV0KCkgaXNDcmVhdGluZ1N0ZXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBpcyBjcmVhdGVkICovXG4gIEBPdXRwdXQoKSBjcmVhdGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21Db2RlRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjdXN0b21Db2RlRm9ybTogRm9ybUdyb3VwO1xuICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgdmFyaWFibGVzRm9ybTogRm9ybUdyb3VwO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcbiAgYWR2YW5jZWRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIGNvZGVWYWxpZGF0aW9uRXJyb3JzOiBDb2RlRWRpdG9yTWFya2VyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxhbmd1YWdlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgY29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLnZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmb3JtIHdpdGggaW5pdGlhbCB2YWx1ZXMgaWYgaW4gZWRpdCBtb2RlXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybVdpdGhWYWx1ZXMoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB0ZW1wbGF0ZSB2YXJpYWJsZXMgaWYgdGVtcGxhdGUgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVWYXJpYWJsZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3RlbXBsYXRlJ10gJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVWYXJpYWJsZXMoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmUtaW5pdGlhbGl6ZSBmb3JtIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZVxuICAgIGlmICgoY2hhbmdlc1snaW5pdGlhbENvZGUnXSB8fCBjaGFuZ2VzWydpbml0aWFsTGFuZ3VhZ2UnXSB8fCBjaGFuZ2VzWydpbml0aWFsTWV0YWRhdGEnXSB8fCBcbiAgICAgICAgIGNoYW5nZXNbJ2luaXRpYWxEZXNjcmlwdGlvbiddIHx8IGNoYW5nZXNbJ2lzRWRpdE1vZGUnXSkgJiYgdGhpcy5pc0VkaXRNb2RlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtV2l0aFZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1XaXRoVmFsdWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxDb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0ucGF0Y2hWYWx1ZSh7IGNvZGU6IHRoaXMuaW5pdGlhbENvZGUgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmluaXRpYWxMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgbGFuZ3VhZ2U6IHRoaXMuaW5pdGlhbExhbmd1YWdlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsTWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgbWV0YWRhdGE6IHRoaXMuaW5pdGlhbE1ldGFkYXRhIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsRGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgZGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRlbXBsYXRlVmFyaWFibGVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlICYmIHRoaXMuc2V0VGVtcGxhdGVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldFRlbXBsYXRlVmFyaWFibGVzKHRoaXMudGVtcGxhdGUpO1xuICAgICAgdGhpcy5idWlsZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIFxuICAgICAgLy8gSW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXNcbiAgICAgIGlmICh0aGlzLnNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzID0gdGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKHRoaXMudGVtcGxhdGUpO1xuICAgICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBjb250cm9sc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudmFyaWFibGVzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBmb3JtIGNvbnRyb2xzIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBib29sZWFuIHZhcmlhYmxlcyAtIHVzZSBib29sZWFuIHZhbHVlLCBvdGhlcnMgdXNlIHN0cmluZ1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZS5uYW1lLCBuZXcgRm9ybUNvbnRyb2woZGVmYXVsdFZhbHVlKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWxlY3RDb25maWcodmFyaWFibGU6IGFueSk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSAodmFyaWFibGUub3B0aW9ucyB8fCBbXSkubWFwKChvcHQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGlkOiBvcHQsXG4gICAgICB2YWx1ZTogb3B0LFxuICAgICAgbmFtZTogb3B0LFxuICAgICAgbGFiZWw6IG9wdFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHZhcmlhYmxlLm5hbWUsXG4gICAgICBwbGFjZWhvbGRlcjogYFNlbGVjdCAke3ZhcmlhYmxlLmxhYmVsfWAsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZU5hbWUsIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldExhbmd1YWdlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5sYW5ndWFnZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZvcm0gZ3JvdXBzIGZvciBlYWNoIGFkdmFuY2VkIHZhcmlhYmxlXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCB0eXBlc1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgLy8gRm9yIHN0cl9saXN0LCBjcmVhdGUgYSBGb3JtQXJyYXlcbiAgICAgICAgY29uc3QgdmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFyaWFibGUudmFsdWUpID8gdmFyaWFibGUudmFsdWUgOiBbXTtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5VmFsdWUgPSB0aGlzLmZiLmFycmF5KFxuICAgICAgICAgIHZhbHVlQXJyYXkubGVuZ3RoID4gMCBcbiAgICAgICAgICAgID8gdmFsdWVBcnJheS5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5mYi5jb250cm9sKGl0ZW0pKVxuICAgICAgICAgICAgOiBbdGhpcy5mYi5jb250cm9sKCcnKV0gLy8gU3RhcnQgd2l0aCBvbmUgZW1wdHkgY29udHJvbFxuICAgICAgICApO1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBmb3JtQXJyYXlWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgRm9ybUdyb3VwIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgLy8gRm9yIHN0cl9saXN0LCB0aGUgRm9ybUFycmF5IGlzIGFscmVhZHkgbWFuYWdlZCBpbnNpZGUgQWR2YW5jZWRWYXJpYWJsZXNGb3JtQ29tcG9uZW50LFxuICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIG9yIHVwZGF0ZSBpdCBoZXJlIHRvIGF2b2lkIGZvY3VzIGxvc3MuXG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hZHZhbmNlZEV4cGFuZGVkID0gIXRoaXMuYWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIG9uQ29kZVZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbUNvZGVGb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgb25Db2RlVmFsaWRhdGlvbkNoYW5nZShlcnJvcnM6IENvZGVFZGl0b3JNYXJrZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbGlkYXRpb25FcnJvcnMgPSBlcnJvcnMgfHwgW107XG4gIH1cblxuICBnZXQgaGFzQ29kZVN5bnRheEVycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2RlVmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIEZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgZm9yIHRoZSBjb2RlIGZpZWxkIChlLmcuIFwiQ29kZSBpcyByZXF1aXJlZFwiKSAtIHBhc3NlZCB0byBjb2RlIGVkaXRvciBbZXJyb3JzXSAqL1xuICBnZXQgY29kZUZpZWxkRXJyb3JzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb2RlQ29udHJvbCA9IHRoaXMuY3VzdG9tQ29kZUZvcm0uZ2V0KCdjb2RlJyk7XG4gICAgaWYgKCFjb2RlQ29udHJvbD8uaW52YWxpZCB8fCAhY29kZUNvbnRyb2w/LnRvdWNoZWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBlcnIgPSBjb2RlQ29udHJvbC5lcnJvcnM7XG4gICAgaWYgKCFlcnIpIHJldHVybiBbXTtcbiAgICBpZiAoZXJyWydyZXF1aXJlZCddKSByZXR1cm4gWydDb2RlIGlzIHJlcXVpcmVkJ107XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1c3RvbUNvZGVGb3JtLnZhbGlkKSB7XG4gICAgICAvLyBTeW5jIGFkdmFuY2VkIHZhcmlhYmxlcyBmcm9tIGZvcm0gdG8gYXJyYXlcbiAgICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk/LnZhbHVlO1xuICAgICAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnICYmIGZvcm1WYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBGb3JtQXJyYXlcbiAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlLmNvbnRyb2xzLm1hcChjb250cm9sID0+IGNvbnRyb2wudmFsdWUpLmZpbHRlcigodmFsOiBzdHJpbmcpID0+IHZhbCAmJiB2YWwudHJpbSgpICE9PSAnJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuY3VzdG9tQ29kZUZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogQ3VzdG9tQ29kZUZvcm1EYXRhID0ge1xuICAgICAgICBsYW5ndWFnZTogZm9ybVZhbHVlLmxhbmd1YWdlIHx8ICcnLFxuICAgICAgICBjb2RlOiBmb3JtVmFsdWUuY29kZSB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgdGVtcGxhdGVWYXJpYWJsZXM6IHRoaXMudGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMCA/IHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwID8gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAgQ3VzdG9tIENvZGUgU3RlcFxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtbWF4LWgtWzUwMHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICBcblxuICAgIDwhLS0gTGFuZ3VhZ2UgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0zXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIExhbmd1YWdlPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS13LWZ1bGxcIiBbZm9ybV09XCJjdXN0b21Db2RlRm9ybVwiIFtjb25maWddPVwiZ2V0TGFuZ3VhZ2VDb25maWcoKVwiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvZGUgRWRpdG9yIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItM1wiPlxuICAgICAgPGNxYS1jb2RlLWVkaXRvclxuICAgICAgICBbbGFiZWxdPVwiJ0NvZGUnXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbdmFsdWVdPVwiY3VzdG9tQ29kZUZvcm0uZ2V0KCdjb2RlJyk/LnZhbHVlXCJcbiAgICAgICAgW2xhbmd1YWdlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbGFuZ3VhZ2UnKT8udmFsdWUgfHwgJ2phdmFzY3JpcHQnXCJcbiAgICAgICAgW21pbkhlaWdodF09XCInMjIwcHgnXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJjb2RlRmllbGRFcnJvcnNcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Db2RlVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICh2YWxpZGF0aW9uQ2hhbmdlKT1cIm9uQ29kZVZhbGlkYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnY29kZScpPy5tYXJrQXNUb3VjaGVkKClcIj5cbiAgICAgIDwvY3FhLWNvZGUtZWRpdG9yPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWN1c3RvbS1mb3JtLWZpZWxkc1wiPlxuICAgICAgPCEtLSBNZXRhZGF0YSBJbnB1dCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICAgIE1ldGFkYXRhXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbWV0YWRhdGEnKT8udmFsdWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZXNjcmlwdGlvbiBJbnB1dCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXBsLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICAgIERlc2NyaXB0aW9uXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgICA8ZGl2ICpuZ0lmPVwidGVtcGxhdGVWYXJpYWJsZXMgJiYgdGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiY3FhLW1iLTRcIj5cbiAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIEZvcm0gRmllbGRzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAteC02IGNxYS1mbGV4LXdyYXAgY3FhLW1iLTRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgdGVtcGxhdGVWYXJpYWJsZXNcIj5cbiAgICAgICAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZSB8fCB2YXJpYWJsZS52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE5vbi1ib29sZWFuLCBub24tY3VzdG9tX2NvZGUgdmFyaWFibGVzIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS5uYW1lICE9PSAnY3VzdG9tX2NvZGUnICYmIHZhcmlhYmxlLnR5cGUgIT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih2YXJpYWJsZS5uYW1lID09PSAndHlwZScgfHwgdmFyaWFibGUubmFtZSA9PT0gJ3Njcm9sbFRvJyk7IGVsc2UgZGVmYXVsdElucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwidmFyaWFibGVzRm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKHZhcmlhYmxlKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIiBbdmFsdWVdPVwidmFyaWFibGUudmFsdWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFkdmFuY2VkIFNldHRpbmdzIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1tYi00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXAtMCBjcWEtbWItMS41XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdXCI+QWR2YW5jZWQ8L3NwYW4+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtYmFzZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJhZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybSBcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc1wiXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImFkdmFuY2VkVmFyaWFibGVzRm9ybVwiXG4gICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiaXNFZGl0TW9kZSA/ICdTYXZlIENoYW5nZXMnIDogJ0NyZWF0ZSBTdGVwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1c3RvbUNvZGVGb3JtLnZhbGlkIHx8IGhhc0NvZGVTeW50YXhFcnJvcnNcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGRpdiAqbmdJZj1cImlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLWZsZXgtMSBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdXCI+XG4gICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQ3JlYXRpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS9zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQW9CNUYsTUFBTSxPQUFPLDhCQUE4QjtJQW9DekMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFuQ25DLG9DQUFvQztRQUMzQixvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFFOUMscUNBQXFDO1FBQzVCLGFBQVEsR0FBMEIsSUFBSSxDQUFDO1FBRWhELG1HQUFtRztRQUMxRix5QkFBb0IsR0FBdUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUEsQ0FBQSxDQUFDLENBQUM7UUFDdkYsMkZBQTJGO1FBQ2xGLGlDQUE0QixHQUF3RCxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFBLENBQUMsQ0FBQztRQU92RyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXJDLGtHQUFrRztRQUN6RixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRTlELDBCQUEwQjtR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OlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9zdGVwLWJ1aWxkZXItYWN0aW9uL3N0ZXAtYnVpbGRlci1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvZGVFZGl0b3JNYXJrZXIgfSBmcm9tICcuLi8uLi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUNvZGVGb3JtRGF0YSB7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbiAgbWV0YWRhdGE/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0ZW1wbGF0ZVZhcmlhYmxlcz86IGFueVtdO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzPzogYW55W107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBCdWlsZGVyQ3VzdG9tQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIGxhbmd1YWdlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogVGVtcGxhdGUgdG8gZ2V0IHZhcmlhYmxlcyBmcm9tICovXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSB8IG51bGwgPSBudWxsO1xuICBcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSB2YXJpYWJsZSBwcm9jZXNzaW5nIG9yIGN1c3RvbSBsb2dpYy4gQ2FuIGJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldFRlbXBsYXRlVmFyaWFibGVzOiAodmFyaWFibGVzOiBBY3Rpb25UZW1wbGF0ZSkgPT4gYW55ID0gKCkgPT4geyByZXR1cm4gW119O1xuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcy4gQ2FuIGJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6ICh0ZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUsIHRlc3RTdGVwPzogYW55KSA9PiBhbnlbXSA9ICgpID0+IHsgcmV0dXJuIFtdfTtcbiAgXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdGluZyBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxDb2RlPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsTGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxNZXRhZGF0YT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoKSBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUgU3RlcCBidXR0b24gKi9cbiAgQElucHV0KCkgaXNDcmVhdGluZ1N0ZXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBpcyBjcmVhdGVkICovXG4gIEBPdXRwdXQoKSBjcmVhdGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21Db2RlRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjdXN0b21Db2RlRm9ybTogRm9ybUdyb3VwO1xuICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgdmFyaWFibGVzRm9ybTogRm9ybUdyb3VwO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcbiAgYWR2YW5jZWRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIGNvZGVWYWxpZGF0aW9uRXJyb3JzOiBDb2RlRWRpdG9yTWFya2VyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxhbmd1YWdlOiBbJ2phdmFzY3JpcHQnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGNvZGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBtZXRhZGF0YTogWycnXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddXG4gICAgfSk7XG4gICAgdGhpcy52YXJpYWJsZXNGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgZm9ybSB3aXRoIGluaXRpYWwgdmFsdWVzIGlmIGluIGVkaXQgbW9kZVxuICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1XaXRoVmFsdWVzKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGVtcGxhdGUgdmFyaWFibGVzIGlmIHRlbXBsYXRlIGlzIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMudGVtcGxhdGUpIHtcbiAgICAgIHRoaXMubG9hZFRlbXBsYXRlVmFyaWFibGVzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd0ZW1wbGF0ZSddICYmIHRoaXMudGVtcGxhdGUpIHtcbiAgICAgIHRoaXMubG9hZFRlbXBsYXRlVmFyaWFibGVzKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlLWluaXRpYWxpemUgZm9ybSBpZiBpbml0aWFsIHZhbHVlcyBjaGFuZ2VcbiAgICBpZiAoKGNoYW5nZXNbJ2luaXRpYWxDb2RlJ10gfHwgY2hhbmdlc1snaW5pdGlhbExhbmd1YWdlJ10gfHwgY2hhbmdlc1snaW5pdGlhbE1ldGFkYXRhJ10gfHwgXG4gICAgICAgICBjaGFuZ2VzWydpbml0aWFsRGVzY3JpcHRpb24nXSB8fCBjaGFuZ2VzWydpc0VkaXRNb2RlJ10pICYmIHRoaXMuaXNFZGl0TW9kZSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybVdpdGhWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVGb3JtV2l0aFZhbHVlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmN1c3RvbUNvZGVGb3JtLnBhdGNoVmFsdWUoeyBjb2RlOiB0aGlzLmluaXRpYWxDb2RlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsTGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0ucGF0Y2hWYWx1ZSh7IGxhbmd1YWdlOiB0aGlzLmluaXRpYWxMYW5ndWFnZSB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5pdGlhbE1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0ucGF0Y2hWYWx1ZSh7IG1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0ucGF0Y2hWYWx1ZSh7IGRlc2NyaXB0aW9uOiB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRUZW1wbGF0ZVZhcmlhYmxlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZSAmJiB0aGlzLnNldFRlbXBsYXRlVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRUZW1wbGF0ZVZhcmlhYmxlcyh0aGlzLnRlbXBsYXRlKTtcbiAgICAgIHRoaXMuYnVpbGRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzXG4gICAgICBpZiAodGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyh0aGlzLnRlbXBsYXRlKTtcbiAgICAgICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRWYXJpYWJsZXNGb3JtKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIGZvcm0gY29udHJvbHNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZhcmlhYmxlc0Zvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMudmFyaWFibGVzRm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZm9ybSBjb250cm9scyBmb3IgZWFjaCB2YXJpYWJsZVxuICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAvLyBIYW5kbGUgYm9vbGVhbiB2YXJpYWJsZXMgLSB1c2UgYm9vbGVhbiB2YWx1ZSwgb3RoZXJzIHVzZSBzdHJpbmdcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJyBcbiAgICAgICAgPyAodmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMSlcbiAgICAgICAgOiAodmFyaWFibGUudmFsdWUgfHwgJycpO1xuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLmFkZENvbnRyb2wodmFyaWFibGUubmFtZSwgbmV3IEZvcm1Db250cm9sKGRlZmF1bHRWYWx1ZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U2VsZWN0Q29uZmlnKHZhcmlhYmxlOiBhbnkpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGNvbnN0IG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gKHZhcmlhYmxlLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0OiBzdHJpbmcpID0+ICh7XG4gICAgICBpZDogb3B0LFxuICAgICAgdmFsdWU6IG9wdCxcbiAgICAgIG5hbWU6IG9wdCxcbiAgICAgIGxhYmVsOiBvcHRcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB2YXJpYWJsZS5uYW1lLFxuICAgICAgcGxhY2Vob2xkZXI6IGBTZWxlY3QgJHt2YXJpYWJsZS5sYWJlbH1gLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25WYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlLm5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgb25WYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSB2YXJpYWJsZSBpbiB0ZW1wbGF0ZVZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBjb250cm9sXG4gICAgaWYgKHRoaXMudmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGVOYW1lKSkge1xuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25WYXJpYWJsZUJvb2xlYW5DaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSB2YXJpYWJsZSBpbiB0ZW1wbGF0ZVZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBjb250cm9sXG4gICAgaWYgKHRoaXMudmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGVOYW1lKSkge1xuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBmb3JtIGNvbnRyb2wgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLmFkZENvbnRyb2wodmFyaWFibGVOYW1lLCBuZXcgRm9ybUNvbnRyb2wodmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBnZXRMYW5ndWFnZUNvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdsYW5ndWFnZScsXG4gICAgICBwbGFjZWhvbGRlcjogJy4uLicsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMubGFuZ3VhZ2VPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIH1cblxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCBhZHZhbmNlZCB2YXJpYWJsZVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgdHlwZXNcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIC8vIEZvciBzdHJfbGlzdCwgY3JlYXRlIGEgRm9ybUFycmF5XG4gICAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKSA/IHZhcmlhYmxlLnZhbHVlIDogW107XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheVZhbHVlID0gdGhpcy5mYi5hcnJheShcbiAgICAgICAgICB2YWx1ZUFycmF5Lmxlbmd0aCA+IDAgXG4gICAgICAgICAgICA/IHZhbHVlQXJyYXkubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuZmIuY29udHJvbChpdGVtKSlcbiAgICAgICAgICAgIDogW3RoaXMuZmIuY29udHJvbCgnJyldIC8vIFN0YXJ0IHdpdGggb25lIGVtcHR5IGNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFyaWFibGUudmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgfHwgJyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBhIEZvcm1Hcm91cCBmb3IgZWFjaCB2YXJpYWJsZVxuICAgICAgY29uc3QgdmFyaWFibGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdmFyaWFibGUubmFtZV0sXG4gICAgICAgIHZhbHVlOiB2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnID8gZGVmYXVsdFZhbHVlIDogW2RlZmF1bHRWYWx1ZV0sXG4gICAgICAgIHR5cGU6IFt2YXJpYWJsZS50eXBlIHx8ICdzdHJpbmcnXSxcbiAgICAgICAgbGFiZWw6IFt2YXJpYWJsZS5sYWJlbCB8fCAnJ11cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgb25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSB2YXJpYWJsZSBpbiBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIC8vIEFsc28gdXBkYXRlIGZvcm0gYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZUluZGV4ID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KHZhcmlhYmxlSW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgIC8vIEZvciBzdHJfbGlzdCwgdGhlIEZvcm1BcnJheSBpcyBhbHJlYWR5IG1hbmFnZWQgaW5zaWRlIEFkdmFuY2VkVmFyaWFibGVzRm9ybUNvbXBvbmVudCxcbiAgICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVidWlsZCBvciB1cGRhdGUgaXQgaGVyZSB0byBhdm9pZCBmb2N1cyBsb3NzLlxuICAgICAgaWYgKHZhcmlhYmxlPy50eXBlICE9PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGZvcm1Hcm91cD8uZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFkdmFuY2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYWR2YW5jZWRFeHBhbmRlZCA9ICF0aGlzLmFkdmFuY2VkRXhwYW5kZWQ7XG4gIH1cblxuICBvbkNvZGVWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXN0b21Db2RlRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIG9uQ29kZVZhbGlkYXRpb25DaGFuZ2UoZXJyb3JzOiBDb2RlRWRpdG9yTWFya2VyW10pOiB2b2lkIHtcbiAgICB0aGlzLmNvZGVWYWxpZGF0aW9uRXJyb3JzID0gZXJyb3JzIHx8IFtdO1xuICB9XG5cbiAgZ2V0IGhhc0NvZGVTeW50YXhFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29kZVZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBGb3JtIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGUgY29kZSBmaWVsZCAoZS5nLiBcIkNvZGUgaXMgcmVxdWlyZWRcIikgLSBwYXNzZWQgdG8gY29kZSBlZGl0b3IgW2Vycm9yc10gKi9cbiAgZ2V0IGNvZGVGaWVsZEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY29kZUNvbnRyb2wgPSB0aGlzLmN1c3RvbUNvZGVGb3JtLmdldCgnY29kZScpO1xuICAgIGlmICghY29kZUNvbnRyb2w/LmludmFsaWQgfHwgIWNvZGVDb250cm9sPy50b3VjaGVkKSByZXR1cm4gW107XG4gICAgY29uc3QgZXJyID0gY29kZUNvbnRyb2wuZXJyb3JzO1xuICAgIGlmICghZXJyKSByZXR1cm4gW107XG4gICAgaWYgKGVyclsncmVxdWlyZWQnXSkgcmV0dXJuIFsnQ29kZSBpcyByZXF1aXJlZCddO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXN0b21Db2RlRm9ybS52YWxpZCkge1xuICAgICAgLy8gU3luYyBhZHZhbmNlZCB2YXJpYWJsZXMgZnJvbSBmb3JtIHRvIGFycmF5XG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JyAmJiBmb3JtVmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgdmFsdWVzIGZyb20gRm9ybUFycmF5XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZvcm1WYWx1ZS5jb250cm9scy5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKS5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgJiYgdmFsLnRyaW0oKSAhPT0gJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZvcm1WYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmN1c3RvbUNvZGVGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEN1c3RvbUNvZGVGb3JtRGF0YSA9IHtcbiAgICAgICAgbGFuZ3VhZ2U6IGZvcm1WYWx1ZS5sYW5ndWFnZSB8fCAnJyxcbiAgICAgICAgY29kZTogZm9ybVZhbHVlLmNvZGUgfHwgJycsXG4gICAgICAgIG1ldGFkYXRhOiBmb3JtVmFsdWUubWV0YWRhdGEgfHwgJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHRlbXBsYXRlVmFyaWFibGVzOiB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmxlbmd0aCA+IDAgPyB0aGlzLnRlbXBsYXRlVmFyaWFibGVzIDogdW5kZWZpbmVkLFxuICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCA/IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlU3RlcC5lbWl0KHN0ZXBEYXRhKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWgtZnVsbFwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIEN1c3RvbSBDb2RlIFN0ZXBcbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW1heC1oLVs1MDBweF0gY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgXG5cbiAgICA8IS0tIExhbmd1YWdlIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItM1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBMYW5ndWFnZTxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdy1mdWxsXCIgW2Zvcm1dPVwiY3VzdG9tQ29kZUZvcm1cIiBbY29uZmlnXT1cImdldExhbmd1YWdlQ29uZmlnKClcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb2RlIEVkaXRvciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTNcIj5cbiAgICAgIDxjcWEtY29kZS1lZGl0b3JcbiAgICAgICAgW2xhYmVsXT1cIidDb2RlJ1wiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnY29kZScpPy52YWx1ZVwiXG4gICAgICAgIFtsYW5ndWFnZV09XCJjdXN0b21Db2RlRm9ybS5nZXQoJ2xhbmd1YWdlJyk/LnZhbHVlIHx8ICdqYXZhc2NyaXB0J1wiXG4gICAgICAgIFttaW5IZWlnaHRdPVwiJzIyMHB4J1wiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwiY29kZUZpZWxkRXJyb3JzXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ29kZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAodmFsaWRhdGlvbkNoYW5nZSk9XCJvbkNvZGVWYWxpZGF0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJjdXN0b21Db2RlRm9ybS5nZXQoJ2NvZGUnKT8ubWFya0FzVG91Y2hlZCgpXCI+XG4gICAgICA8L2NxYS1jb2RlLWVkaXRvcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1jdXN0b20tZm9ybS1maWVsZHNcIj5cbiAgICAgIDwhLS0gTWV0YWRhdGEgSW5wdXQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTIgY3FhLXctMS8yIGNxYS1wci0yXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgICBNZXRhZGF0YVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICAgIFt2YWx1ZV09XCJjdXN0b21Db2RlRm9ybS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlXCJcbiAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjdXN0b21Db2RlRm9ybS5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGVzY3JpcHRpb24gSW5wdXQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctMS8yIGNxYS1wbC0yXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgICBEZXNjcmlwdGlvblxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICAgIFt2YWx1ZV09XCJjdXN0b21Db2RlRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnZhbHVlXCJcbiAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjdXN0b21Db2RlRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICAgPCEtLSBUZW1wbGF0ZSBWYXJpYWJsZXMgU2VjdGlvbiAtLT5cbiAgICAgPGRpdiAqbmdJZj1cInRlbXBsYXRlVmFyaWFibGVzICYmIHRlbXBsYXRlVmFyaWFibGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1tYi00XCI+XG4gICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBGb3JtIEZpZWxkcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLXgtNiBjcWEtZmxleC13cmFwIGNxYS1tYi00XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIHRlbXBsYXRlVmFyaWFibGVzXCI+XG4gICAgICAgICAgPCEtLSBCb29sZWFuIHZhcmlhYmxlcyB3aXRoIG1hdC1zbGlkZS10b2dnbGUgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCIgc3R5bGU9XCJ3aWR0aDogY2FsYyg1MCUgLSAxMnB4KTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ2YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8udmFsdWUgfHwgdmFyaWFibGUudmFsdWUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYXJpYWJsZUJvb2xlYW5DaGFuZ2UodmFyaWFibGUubmFtZSwgJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBOb24tYm9vbGVhbiwgbm9uLWN1c3RvbV9jb2RlIHZhcmlhYmxlcyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUubmFtZSAhPT0gJ2N1c3RvbV9jb2RlJyAmJiB2YXJpYWJsZS50eXBlICE9PSAnYm9vbGVhbidcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodmFyaWFibGUubmFtZSA9PT0gJ3R5cGUnIHx8IHZhcmlhYmxlLm5hbWUgPT09ICdzY3JvbGxUbycpOyBlbHNlIGRlZmF1bHRJbnB1dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgc3R5bGU9XCJ3aWR0aDogY2FsYyg1MCUgLSAxMnB4KTtcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTFcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cInZhcmlhYmxlc0Zvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyh2YXJpYWJsZSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgc3R5bGU9XCJ3aWR0aDogY2FsYyg1MCUgLSAxMnB4KTtcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTFcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ1RleHQgSW5wdXQnXCIgW3ZhbHVlXT1cInZhcmlhYmxlLnZhbHVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBZHZhbmNlZCBTZXR0aW5ncyBWYXJpYWJsZXMgRm9ybSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtbWItNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTIgY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1wLTAgY3FhLW1iLTEuNVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWJhc2VcIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiYWR2YW5jZWRFeHBhbmRlZFwiPlxuICAgICAgICAgICAgZXhwYW5kX21vcmVcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFkdmFuY2VkRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0gXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcIlxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJhZHZhbmNlZFZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICh2YXJpYWJsZUJvb2xlYW5DaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICA8L2NxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWdhcC0yIGNxYS1tdC1hdXRvIGNxYS1wdC00IGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXJvdW5kZWQtWzEwcHhdXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgdGV4dD1cIkNhbmNlbFwiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uICpuZ0lmPVwiIWlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImlzRWRpdE1vZGUgPyAnU2F2ZSBDaGFuZ2VzJyA6ICdDcmVhdGUgU3RlcCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXN0b21Db2RlRm9ybS52YWxpZCB8fCBoYXNDb2RlU3ludGF4RXJyb3JzXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxkaXYgKm5nSWY9XCJpc0NyZWF0aW5nU3RlcFwiIGNsYXNzPVwiY3FhLXctMS8yIGNxYS1mbGV4LTEgY3FhLW1pbi1oLVszOHB4XSBjcWEtcm91bmRlZC1bOHB4XVwiPlxuICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkNyZWF0aW5n4oCmXCIgaWNvbj1cImF1dG9yZW5ld1wiIFtpc0xvYWRpbmddPVwidHJ1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjZW50ZXJDb250ZW50XT1cInRydWVcIlxuICAgICAgICBbaW5saW5lU3R5bGVzXT1cIidtaW4taGVpZ2h0OiAzOHB4OyBoZWlnaHQ6IDM4cHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOydcIlxuICAgICAgICB2YXJpYW50PVwiaW5mb1wiIHNpemU9XCJtZWRpdW1cIj48L2NxYS1iYWRnZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19