@aquera/ngx-smart-table 0.0.17-patch-0.2 → 0.0.17-patch-0.3

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.
@@ -225,6 +225,29 @@ export class NileCodeEditor {
225
225
  // Silently handle any errors
226
226
  }
227
227
  }
228
+ /**
229
+ * Read the live value directly from CodeMirror's internal state,
230
+ * bypassing debounced nile-change events and the possibly-stale .value property.
231
+ */
232
+ getLiveEditorValue() {
233
+ if (!this.editor)
234
+ return '';
235
+ try {
236
+ const shadowRoot = this.editor.shadowRoot;
237
+ if (shadowRoot) {
238
+ const cmEditor = shadowRoot.querySelector('.cm-editor');
239
+ if (cmEditor?.cmView?.view) {
240
+ return cmEditor.cmView.view.state.doc.toString();
241
+ }
242
+ }
243
+ }
244
+ catch {
245
+ // Fall through to other methods
246
+ }
247
+ if (this.trackedValue !== null)
248
+ return this.trackedValue;
249
+ return this.editor.value ?? '';
250
+ }
228
251
  /**
229
252
  * Open the full editor dialog
230
253
  */
@@ -251,7 +274,7 @@ export class NileCodeEditor {
251
274
  // Create full editor
252
275
  this.dialogEditor = document.createElement('nile-code-editor');
253
276
  const minLines = this.options?.dialogMinLines ?? 20;
254
- const currentValue = this.editor?.value || '';
277
+ const currentValue = this.getLiveEditorValue();
255
278
  const currentLineCount = (currentValue.match(/\n/g) || []).length + 1;
256
279
  const paddingLines = Math.max(0, minLines - currentLineCount);
257
280
  this.dialogEditor.value = currentValue + '\n'.repeat(paddingLines);
@@ -598,7 +621,7 @@ export class NileCodeEditor {
598
621
  getCurrentValue() {
599
622
  if (!this.editor)
600
623
  return '';
601
- const value = (this.trackedValue !== null ? this.trackedValue : this.editor.value ?? '');
624
+ const value = this.getLiveEditorValue();
602
625
  return value.replace(/\n+$/, '');
603
626
  }
604
627
  /**
@@ -616,4 +639,4 @@ export class NileCodeEditor {
616
639
  return this.editor;
617
640
  }
618
641
  }
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jb2RlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvZWRpdG9ycy9uaWxlLWNvZGUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQXFISDs7R0FFRztBQUNILElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLFNBQVMsc0JBQXNCO0lBQzdCLElBQUksd0JBQXdCO1FBQUUsT0FBTztJQUNyQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFFaEMsTUFBTSxPQUFPLEdBQUcsOEJBQThCLENBQUM7SUFDL0MsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0ZuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWF6QixZQUE2QixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQVBwRCxtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO0lBRW9CLENBQUM7SUFFaEUsSUFBSSxDQUFDLE9BQTZCO1FBQ2hDLElBQUksQ0FBQyxPQUFP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ZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVDb2RlRWRpdG9yIGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBUaGlzIHByb3ZpZGVzIGNvZGUgZWRpdGluZyBjYXBhYmlsaXRpZXMgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciB0YWJsZSBjZWxsc1xuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEF1dG9jb21wbGV0aW9uIGl0ZW0gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVFZGl0b3JDb21wbGV0aW9uIHtcbiAgLyoqIFRoZSBjb21wbGV0aW9uIGxhYmVsIHNob3duIGluIGRyb3Bkb3duICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBUaGUgdmFsdWUgdG8gaW5zZXJ0ICovXG4gIHZhbHVlPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgZGVzY3JpcHRpb24gKi9cbiAgZGV0YWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF1dG9jb21wbGV0ZSBzdHlsZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlU3R5bGUge1xuICAvKiogV2lkdGggb2YgdGhlIGF1dG9jb21wbGV0ZSBkcm9wZG93biAqL1xuICB3aWR0aD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSBtdWx0aWxpbmUgY29udGVudCBpbiBhdXRvY29tcGxldGUgKi9cbiAgbXVsdGlsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUNvZGVFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaWxlQ29kZUVkaXRvck9wdGlvbnMge1xuICAvLyBMYW5ndWFnZSBhbmQgc3ludGF4XG4gIC8qKiBMYW5ndWFnZSBtb2RlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nICovXG4gIGxhbmd1YWdlPzogJ2phdmFzY3JpcHQnIHwgJ3NxbCcgfCAnanNvbicgfCAnaHRtbCc7XG4gIC8qKiBEaXNhYmxlIHN5bnRheCBoaWdobGlnaHRpbmcgKi9cbiAgZGlzYWJsZVN5bnRheEhpZ2hsaWdodGluZz86IGJvb2xlYW47XG5cbiAgLy8gRWRpdG9yIGFwcGVhcmFuY2VcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBlbXB0eSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNob3cgbGluZSBudW1iZXJzIChzaW5nbGUtbGluZSBtb2RlKSAqL1xuICBsaW5lTnVtYmVycz86IGJvb2xlYW47XG4gIC8qKiBTaG93IGxpbmUgbnVtYmVycyBpbiBtdWx0aWxpbmUgbW9kZSAqL1xuICBsaW5lTnVtYmVyc011bHRpbGluZT86IGJvb2xlYW47XG4gIC8qKiBBbGxvdyBtdWx0aS1saW5lIGVkaXRpbmcgKi9cbiAgbXVsdGlsaW5lPzogYm9vbGVhbjtcbiAgLyoqIFJlbmRlciB3aXRob3V0IGJvcmRlciAqL1xuICBub2JvcmRlcj86IGJvb2xlYW47XG4gIC8qKiBVc2UgZGVmYXVsdCBmb250IGluc3RlYWQgb2YgaW5oZXJpdCAqL1xuICBkZWZhdWx0Rm9udD86IGJvb2xlYW47XG5cbiAgLy8gRWRpdG9yIGJlaGF2aW9yXG4gIC8qKiBBdXRvIGZvY3VzIG9uIGVkaXQgKi9cbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgLyoqIFJlYWQtb25seSBtb2RlICovXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgLyoqIERpc2FibGVkIHN0YXRlICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBUYWItdG8tY29tcGxldGUgKi9cbiAgdGFiQ29tcGxldGlvbj86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc2VhcmNoIGtleW1hcCAqL1xuICBlbmFibGVTZWFyY2g/OiBib29sZWFuO1xuICAvKiogU2hvdyBjb2RlIGZvbGRpbmcgZ3V0dGVycyAqL1xuICBlbmFibGVGb2xkR3V0dGVycz86IGJvb2xlYW47XG4gIC8qKiBJbnRlcm5hbCBzY3JvbGwgY29udGFpbmVyICovXG4gIGhhc1Njcm9sbGVyPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgZXhwYW5kIGNvbnRyb2wgKG5hdGl2ZSBuaWxlLWNvZGUtZWRpdG9yIGV4cGFuZCkgKi9cbiAgZXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIC8qKiBJY29uIGZvciBleHBhbmQgY29udHJvbCAqL1xuICBleHBhbmRJY29uPzogc3RyaW5nO1xuICBcbiAgLy8gRGlhbG9nIGV4cGFuZCBmZWF0dXJlXG4gIC8qKiBTaG93IGV4cGFuZCBidXR0b24gdG8gb3BlbiBmdWxsIGVkaXRvciBkaWFsb2cgKGRlZmF1bHQ6IHRydWUpICovXG4gIHNob3dFeHBhbmRCdXR0b24/OiBib29sZWFuO1xuICAvKiogRGlhbG9nIHRpdGxlIChkZWZhdWx0OiAnRWRpdCBDb2RlJykgKi9cbiAgZGlhbG9nVGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBEaWFsb2cgd2lkdGggKGRlZmF1bHQ6ICc2MDBweCcpICovXG4gIGRpYWxvZ1dpZHRoPzogc3RyaW5nO1xuICAvKiogRGlhbG9nIG1heCBoZWlnaHQgKGRlZmF1bHQ6ICc4MHZoJykgKi9cbiAgZGlhbG9nTWF4SGVpZ2h0Pzogc3RyaW5nO1xuICAvKiogRGlhbG9nIGVkaXRvciBtaW4gaGVpZ2h0IChkZWZhdWx0OiAnMzAwcHgnKSAqL1xuICBkaWFsb2dFZGl0b3JIZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiB2aXNpYmxlIGxpbmVzIGluIHRoZSBkaWFsb2cgZWRpdG9yIChkZWZhdWx0OiAyMCkgKi9cbiAgZGlhbG9nTWluTGluZXM/OiBudW1iZXI7XG5cbiAgLy8gQXV0b2NvbXBsZXRpb25cbiAgLyoqIElubGluZSBjb21wbGV0aW9uIGRhdGFzZXQgKi9cbiAgY3VzdG9tQXV0b0NvbXBsZXRpb25zPzogUmVjb3JkPHN0cmluZywgQ29kZUVkaXRvckNvbXBsZXRpb25bXT4gfCBDb2RlRWRpdG9yQ29tcGxldGlvbltdO1xuICAvKiogUGF0aHMgdG8gZmV0Y2ggY29tcGxldGlvbiBkYXRhc2V0cyBmcm9tICovXG4gIGN1c3RvbUNvbXBsZXRpb25zUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqIEVuYWJsZSB2YXJpYWJsZXMgaW4gc3VnZ2VzdGlvbnMgKi9cbiAgYWxsb3dWYXJpYWJsZUluQ3VzdG9tU3VnZ2VzdGlvbj86IGJvb2xlYW47XG4gIC8qKiBTaG93IGF1dG9jb21wbGV0ZSBhYm92ZSBjdXJzb3IgKi9cbiAgYWJvdmVDdXJzb3I/OiBib29sZWFuO1xuICAvKiogU3R5bGUgY29uZmlnIGZvciBhdXRvY29tcGxldGUgZHJvcGRvd24gKi9cbiAgYXV0b0NvbXBsZXRlU3R5bGU/OiBBdXRvQ29tcGxldGVTdHlsZTtcblxuICAvLyBDaGFuZ2UgaGFuZGxpbmdcbiAgLyoqIERlYm91bmNlIGNoYW5nZSBldmVudHMgKi9cbiAgZGVib3VuY2U/OiBib29sZWFuO1xuICAvKiogRGVib3VuY2UgZGVsYXkgaW4gbXMgKi9cbiAgZGVib3VuY2VUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8vIFZpc3VhbCBzdGF0ZXNcbiAgLyoqIEVycm9yIHN0YXRlICovXG4gIGVycm9yPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLy8gQ3VzdG9tIHRoZW1lXG4gIC8qKiBDdXN0b20gdGhlbWUgQ1NTIG9iamVjdCAqL1xuICBjdXN0b21UaGVtZUNTUz86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuXG4gIC8vIFZhbGlkYXRpb24gYmVoYXZpb3JcbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1jb2RlLWVkaXRvciBpbiB0YWJsZSBjZWxsc1xuICovXG5sZXQgY29kZUVkaXRvclN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3RDb2RlRWRpdG9yU3R5bGVzKCk6IHZvaWQge1xuICBpZiAoY29kZUVkaXRvclN0eWxlc0luamVjdGVkKSByZXR1cm47XG4gIGNvZGVFZGl0b3JTdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLWNvZGUtZWRpdG9yLWNlbGwtc3R5bGVzJztcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlSWQpKSByZXR1cm47XG5cbiAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5pZCA9IHN0eWxlSWQ7XG4gIHN0eWxlLnRleHRDb250ZW50ID0gYFxuICAgIC8qIE5pbGUgQ29kZSBFZGl0b3IgY2VsbCBzdHlsaW5nICovXG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvciB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvcjo6cGFydChjb2RlLWVkaXRvci1iYXNlKSB7XG4gICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBFbnN1cmUgcHJvcGVyIHNpemluZyB3aXRoaW4gdGFibGUgY2VsbCAqL1xuICAgIC5zdC1uaWxlLWNvZGUtZWRpdG9yIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMjhweDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBDb2RlTWlycm9yIGNvbnRlbnQgc2hvdWxkIGluaGVyaXQgZm9udCBzaXplICovXG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvciAuY20tY29udGVudCxcbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yIC5jbS1saW5lIHtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbnRhaW5lciB3cmFwcGVyIGZvciBlZGl0b3IgKyBleHBhbmQgYnV0dG9uICovXG4gICAgLnN0LWNvZGUtZWRpdG9yLXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGdhcDogNHB4O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciAuc3QtY29kZS1lZGl0b3ItaW5wdXQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLXdyYXBwZXIgLnN0LWV4cGFuZC1idXR0b24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgbWluLXdpZHRoOiAyNHB4O1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgY29sb3I6IHZhcigtLW5pbGUtY29sb3ItbmV1dHJhbC01MDAsICM2YjcyODApO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci13cmFwcGVyIC5zdC1leHBhbmQtYnV0dG9uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLW5pbGUtY29sb3ItbmV1dHJhbC0xMDAsICNmM2Y0ZjYpO1xuICAgICAgY29sb3I6IHZhcigtLW5pbGUtY29sb3ItbmV1dHJhbC03MDAsICMzNzQxNTEpO1xuICAgIH1cbiAgICAvKiBEaWFsb2cgY29kZSBlZGl0b3Igc3R5bGluZyAqL1xuICAgIC5zdC1jb2RlLWVkaXRvci1kaWFsb2c6OnBhcnQocGFuZWwpIHtcbiAgICAgIG1heC1oZWlnaHQ6IHZhcigtLW1heC1oZWlnaHQsIDgwdmgpICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci1kaWFsb2c6OnBhcnQoYm9keSkge1xuICAgICAgb3ZlcmZsb3c6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZyBuaWxlLWNvZGUtZWRpdG9yIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci1kaWFsb2cgbmlsZS1jb2RlLWVkaXRvcjo6cGFydChjb2RlLWVkaXRvci1iYXNlKSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1uaWxlLWNvbG9yLW5ldXRyYWwtMjAwLCAjZTVlN2ViKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4ICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWluLWhlaWdodDogdmFyKC0tZGlhbG9nLWVkaXRvci1taW4taGVpZ2h0LCAzMDBweCkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZyBuaWxlLWNvZGUtZWRpdG9yIC5jbS1lZGl0b3Ige1xuICAgICAgbWluLWhlaWdodDogdmFyKC0tZGlhbG9nLWVkaXRvci1taW4taGVpZ2h0LCAzMDBweCkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZyBuaWxlLWNvZGUtZWRpdG9yIC5jbS1jb250ZW50IHtcbiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWRpYWxvZy1lZGl0b3ItbWluLWhlaWdodCwgMzAwcHgpICFpbXBvcnRhbnQ7XG4gICAgfVxuICBgO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxuLyoqXG4gKiBDdXN0b20gZWRpdG9yIHRoYXQgdXNlcyBOaWxlQ29kZUVkaXRvciBjb21wb25lbnRcbiAqIFByb3ZpZGVzIGNvZGUgZWRpdGluZyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIHRhYmxlIGNlbGxzXG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAodHlwaWNhbGx5IHN0cmluZylcbiAqL1xuZXhwb3J0IGNsYXNzIE5pbGVDb2RlRWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIHByaXZhdGUgZWRpdG9yPzogYW55O1xuICBwcml2YXRlIHdyYXBwZXI/OiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBleHBhbmRCdXR0b24/OiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgcHJpdmF0ZSBkaWFsb2c/OiBhbnk7XG4gIHByaXZhdGUgZGlhbG9nRWRpdG9yPzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcbiAgcHJpdmF0ZSBjb250ZXh0PzogQ2VsbEVkaXRvckNvbnRleHQ8VD47XG4gIHByaXZhdGUgZGlhbG9nT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIGV4cGFuZEJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkb2N1bWVudENsaWNrSGFuZGxlcj86IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIHRyYWNrZWRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zPzogTmlsZUNvZGVFZGl0b3JPcHRpb25zKSB7fVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVDb2RlRWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMudHJhY2tlZFZhbHVlID0gbnVsbDtcblxuICAgIC8vIEluamVjdCBnbG9iYWwgc3R5bGVzIG9uY2VcbiAgICBpbmplY3RDb2RlRWRpdG9yU3R5bGVzKCk7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgc2hvdyBleHBhbmQgYnV0dG9uIChkZWZhdWx0OiB0cnVlKVxuICAgIGNvbnN0IHNob3dFeHBhbmRCdXR0b24gPSB0aGlzLm9wdGlvbnM/LnNob3dFeHBhbmRCdXR0b24gIT09IGZhbHNlO1xuXG4gICAgaWYgKHNob3dFeHBhbmRCdXR0b24pIHtcbiAgICAgIC8vIENyZWF0ZSB3cmFwcGVyIGZvciBlZGl0b3IgKyBleHBhbmQgYnV0dG9uXG4gICAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSAnc3QtY29kZS1lZGl0b3Itd3JhcHBlcic7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZWRpdG9yIGNvbnRhaW5lclxuICAgICAgY29uc3QgZWRpdG9yQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBlZGl0b3JDb250YWluZXIuY2xhc3NOYW1lID0gJ3N0LWNvZGUtZWRpdG9yLWlucHV0JztcblxuICAgICAgLy8gQ3JlYXRlIE5pbGVDb2RlRWRpdG9yIGN1c3RvbSBlbGVtZW50XG4gICAgICB0aGlzLmVkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtY29kZS1lZGl0b3InKTtcbiAgICAgIHRoaXMuZWRpdG9yLnZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUgPz8gJycpO1xuICAgICAgdGhpcy5lZGl0b3IuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yIHN0LW5pbGUtY29kZS1lZGl0b3InO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG4gICAgICB0aGlzLmVkaXRvci5ub2JvcmRlciA9IHRoaXMub3B0aW9ucz8ubm9ib3JkZXIgIT09IGZhbHNlO1xuXG4gICAgICBlZGl0b3JDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lZGl0b3IpO1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKGVkaXRvckNvbnRhaW5lcik7XG5cbiAgICAgIC8vIENyZWF0ZSBleHBhbmQgYnV0dG9uXG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24uY2xhc3NOYW1lID0gJ3N0LWV4cGFuZC1idXR0b24nO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24udGl0bGUgPSAnRXhwYW5kIGVkaXRvcic7XG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi5pbm5lckhUTUwgPSAnPG5pbGUtaWNvbiBuYW1lPVwiZXhwYW5kLTA2XCIgc2l6ZT1cIjE2XCI+PC9uaWxlLWljb24+JztcbiAgICAgIFxuICAgICAgLy8gVXNlIG1vdXNlZG93biB0byBzZXQgZmxhZyBCRUZPUkUgYmx1ciBldmVudCBmaXJlc1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm9wZW5EaWFsb2coKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZXhwYW5kQnV0dG9uKTtcblxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgd3JhcHBlclxuICAgICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgTmlsZUNvZGVFZGl0b3IgY3VzdG9tIGVsZW1lbnQgd2l0aG91dCB3cmFwcGVyXG4gICAgICB0aGlzLmVkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtY29kZS1lZGl0b3InKTtcbiAgICAgIHRoaXMuZWRpdG9yLnZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUgPz8gJycpO1xuICAgICAgdGhpcy5lZGl0b3IuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yIHN0LW5pbGUtY29kZS1lZGl0b3InO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG4gICAgICB0aGlzLmVkaXRvci5ub2JvcmRlciA9IHRoaXMub3B0aW9ucz8ubm9ib3JkZXIgIT09IGZhbHNlO1xuXG4gICAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCBlZGl0b3JcbiAgICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuXG4gICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0KTtcblxuICAgIC8vIEF1dG8gZm9jdXMgLSBuZWVkIGEgc2xpZ2h0IGRlbGF5IGZvciBuaWxlLWNvZGUtZWRpdG9yIHRvIGZ1bGx5IGluaXRpYWxpemVcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvRm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBuaWxlLWFmdGVyLWluaXQgZXZlbnQgd2hpY2ggZmlyZXMgd2hlbiBlZGl0b3IgaXMgcmVhZHlcbiAgICAgIGNvbnN0IGluaXRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbmlsZS1hZnRlci1pbml0JywgaW5pdEhhbmRsZXIpO1xuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1hZnRlci1pbml0JywgaW5pdEhhbmRsZXIpO1xuICAgICAgXG4gICAgICAvLyBGYWxsYmFjazogYWxzbyB0cnkgYWZ0ZXIgYSBkZWxheSBpbiBjYXNlIHRoZSBldmVudCBhbHJlYWR5IGZpcmVkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIGVkaXRvciBhbmQgcGxhY2UgY3Vyc29yXG4gICAqL1xuICBwcml2YXRlIGZvY3VzRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ2FsbCB0aGUgY29tcG9uZW50J3MgZm9jdXMgbWV0aG9kXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpO1xuICAgICAgXG4gICAgICAvLyBUcnkgdG8gZGlyZWN0bHkgZm9jdXMgdGhlIENvZGVNaXJyb3IgY29udGVudCBhcmVhXG4gICAgICBjb25zdCBzaGFkb3dSb290ID0gdGhpcy5lZGl0b3Iuc2hhZG93Um9vdDtcbiAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGNtQ29udGVudCA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmNtLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKGNtQ29udGVudCkge1xuICAgICAgICAgIGNtQ29udGVudC5mb2N1cygpO1xuICAgICAgICAgIC8vIERpc3BhdGNoIGEgY2xpY2sgZXZlbnQgdG8gZW5zdXJlIGN1cnNvciBwbGFjZW1lbnRcbiAgICAgICAgICBjbUNvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgICBjbUNvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2V1cCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgYW55IGVycm9yc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmdWxsIGVkaXRvciBkaWFsb2dcbiAgICovXG4gIHByaXZhdGUgb3BlbkRpYWxvZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaWFsb2dPcGVuKSByZXR1cm47XG4gICAgdGhpcy5kaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQgPSBmYWxzZTsgLy8gUmVzZXQgZmxhZyBub3cgdGhhdCBkaWFsb2cgaXMgb3BlbmluZ1xuXG4gICAgLy8gQ3JlYXRlIGRpYWxvZyB3aXRoIGNvbmZpZ3VyYWJsZSBkaW1lbnNpb25zXG4gICAgY29uc3QgZGlhbG9nV2lkdGggPSB0aGlzLm9wdGlvbnM/LmRpYWxvZ1dpZHRoIHx8ICc2MDBweCc7XG4gICAgY29uc3QgZGlhbG9nTWF4SGVpZ2h0ID0gdGhpcy5vcHRpb25zPy5kaWFsb2dNYXhIZWlnaHQgfHwgJzgwdmgnO1xuICAgIGNvbnN0IGRpYWxvZ0VkaXRvckhlaWdodCA9IHRoaXMub3B0aW9ucz8uZGlhbG9nRWRpdG9ySGVpZ2h0IHx8ICczMDBweCc7XG4gICAgY29uc3QgZGlhbG9nVGl0bGUgPSB0aGlzLm9wdGlvbnM/LmRpYWxvZ1RpdGxlIHx8ICdFZGl0IENvZGUnO1xuXG4gICAgdGhpcy5kaWFsb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWRpYWxvZycpO1xuICAgIHRoaXMuZGlhbG9nLmNsYXNzTmFtZSA9ICdzdC1jb2RlLWVkaXRvci1kaWFsb2cnO1xuICAgIHRoaXMuZGlhbG9nLmxhYmVsID0gZGlhbG9nVGl0bGU7XG4gICAgdGhpcy5kaWFsb2cuc3R5bGUuc2V0UHJvcGVydHkoJy0td2lkdGgnLCBkaWFsb2dXaWR0aCk7XG4gICAgdGhpcy5kaWFsb2cuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4LWhlaWdodCcsIGRpYWxvZ01heEhlaWdodCk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGVudC5zdHlsZS5wYWRkaW5nID0gJzE2cHgnO1xuICAgIGNvbnRlbnQuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtkaWFsb2dNYXhIZWlnaHR9IC0gODBweClgO1xuICAgIGNvbnRlbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG5cbiAgICAvLyBDcmVhdGUgZnVsbCBlZGl0b3JcbiAgICB0aGlzLmRpYWxvZ0VkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtY29kZS1lZGl0b3InKTtcbiAgICBjb25zdCBtaW5MaW5lcyA9IHRoaXMub3B0aW9ucz8uZGlhbG9nTWluTGluZXMgPz8gMjA7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5lZGl0b3I/LnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGN1cnJlbnRMaW5lQ291bnQgPSAoY3VycmVudFZhbHVlLm1hdGNoKC9cXG4vZykgfHwgW10pLmxlbmd0aCArIDE7XG4gICAgY29uc3QgcGFkZGluZ0xpbmVzID0gTWF0aC5tYXgoMCwgbWluTGluZXMgLSBjdXJyZW50TGluZUNvdW50KTtcbiAgICB0aGlzLmRpYWxvZ0VkaXRvci52YWx1ZSA9IGN1cnJlbnRWYWx1ZSArICdcXG4nLnJlcGVhdChwYWRkaW5nTGluZXMpO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLm11bHRpbGluZSA9IHRydWU7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3IubGluZU51bWJlcnNNdWx0aWxpbmUgPSB0cnVlO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmhhc1Njcm9sbGVyID0gdHJ1ZTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0UHggPSAyMDtcbiAgICBjb25zdCBtaW5IZWlnaHRGcm9tTGluZXMgPSBgJHttaW5MaW5lcyAqIGxpbmVIZWlnaHRQeH1weGA7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3Iuc3R5bGUubWluSGVpZ2h0ID0gYG1heCgke2RpYWxvZ0VkaXRvckhlaWdodH0sICR7bWluSGVpZ2h0RnJvbUxpbmVzfSlgO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7ZGlhbG9nTWF4SGVpZ2h0fSAtIDEyMHB4KWA7XG4gICAgY29udGVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kaWFsb2ctZWRpdG9yLW1pbi1oZWlnaHQnLCBgbWF4KCR7ZGlhbG9nRWRpdG9ySGVpZ2h0fSwgJHttaW5IZWlnaHRGcm9tTGluZXN9KWApO1xuXG4gICAgLy8gQXBwbHkgc2FtZSBvcHRpb25zIHRvIGRpYWxvZyBlZGl0b3JcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IubGFuZ3VhZ2UgPSB0aGlzLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8udGFiQ29tcGxldGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci50YWJDb21wbGV0aW9uID0gdGhpcy5vcHRpb25zLnRhYkNvbXBsZXRpb247XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZVNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5lbmFibGVTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZW5hYmxlU2VhcmNoO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5lbmFibGVGb2xkR3V0dGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5lbmFibGVGb2xkR3V0dGVycyA9IHRoaXMub3B0aW9ucy5lbmFibGVGb2xkR3V0dGVycztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tQXV0b0NvbXBsZXRpb25zKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5jdXN0b21BdXRvQ29tcGxldGlvbnMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQXV0b0NvbXBsZXRpb25zO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21Db21wbGV0aW9uc1BhdGhzKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5jdXN0b21Db21wbGV0aW9uc1BhdGhzID0gdGhpcy5vcHRpb25zLmN1c3RvbUNvbXBsZXRpb25zUGF0aHM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbVRoZW1lQ1NTKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5jdXN0b21UaGVtZUNTUyA9IHRoaXMub3B0aW9ucy5jdXN0b21UaGVtZUNTUztcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ0VkaXRvci5leHBhbmRhYmxlID0gZmFsc2U7XG5cbiAgICAvLyBSZWFsLXRpbWUgc3luYzogVXBkYXRlIGNlbGwgZWRpdG9yIHdoZW5ldmVyIGRpYWxvZyBlZGl0b3IgY2hhbmdlc1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgKGU6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dWYWx1ZSA9IGUuZGV0YWlsPy52YWx1ZSB8fCAnJztcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlID0gZGlhbG9nVmFsdWU7XG4gICAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBkaWFsb2dWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9uQ2hhbmdlKGRpYWxvZ1ZhbHVlIGFzIFQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmRpYWxvZ0VkaXRvcik7XG4gICAgdGhpcy5kaWFsb2cuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAvLyBIYW5kbGUgZGlhbG9nIGNsb3NlIGV2ZW50cyAoY2xpY2tpbmcgWCBidXR0b24gLSBzdGF5IGluIGVkaXQgbW9kZSlcbiAgICB0aGlzLmRpYWxvZy5hZGRFdmVudExpc3RlbmVyKCduaWxlLXJlcXVlc3QtY2xvc2UnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIC8vIENoZWNrIGlmIGNsb3NlIHdhcyB0cmlnZ2VyZWQgYnkgb3ZlcmxheSBjbGljayAoY2xpY2tpbmcgb3V0c2lkZSlcbiAgICAgIGlmIChjdXN0b21FdmVudC5kZXRhaWw/LnNvdXJjZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIC8vIENsaWNraW5nIG91dHNpZGUgdGhlIGRpYWxvZyAtIHNhdmUgYW5kIGV4aXQgZWRpdCBtb2RlXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2codHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDbGlja2luZyBYIGJ1dHRvbiAtIHN0YXkgaW4gZWRpdCBtb2RlXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIEVzY2FwZSBrZXkgaW4gZGlhbG9nIC0gc3RheSBpbiBlZGl0IG1vZGVcbiAgICB0aGlzLmRpYWxvZy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFwcGVuZCB0byBib2R5IGFuZCBzaG93XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRpYWxvZyk7XG4gICAgXG4gICAgLy8gT3BlbiBkaWFsb2cgYWZ0ZXIgYSB0aWNrIHRvIGVuc3VyZSBpdCdzIGluIHRoZSBET01cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRpYWxvZykge1xuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuID0gdHJ1ZTtcbiAgICAgICAgLy8gRm9jdXMgdGhlIGRpYWxvZyBlZGl0b3JcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaWFsb2dFZGl0b3I/LmZvY3VzKCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRpYWxvZyBhbmQgb3B0aW9uYWxseSBzYXZlL2V4aXQgZWRpdCBtb2RlXG4gICAqL1xuICBwcml2YXRlIGNsb3NlRGlhbG9nKHNhdmVBbmRFeGl0OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nT3BlbikgcmV0dXJuO1xuXG4gICAgLy8gUmVzZXQgZmxhZyBpbW1lZGlhdGVseSBzbyBkb2N1bWVudCBjbGljayBoYW5kbGVyIHdvcmtzXG4gICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG5cbiAgICAvLyBDbG9zZSBhbmQgcmVtb3ZlIGRpYWxvZ1xuICAgIGlmICh0aGlzLmRpYWxvZykge1xuICAgICAgdGhpcy5kaWFsb2cub3BlbiA9IGZhbHNlO1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2c7XG4gICAgICBjb25zdCBkaWFsb2dFZGl0b3JSZWYgPSB0aGlzLmRpYWxvZ0VkaXRvcjtcbiAgICAgIHRoaXMuZGlhbG9nID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IgPSB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIERPTSBhZnRlciBhbmltYXRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkaWFsb2dSZWY/LnJlbW92ZSgpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIFxuICAgICAgaWYgKHNhdmVBbmRFeGl0ICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgICAvLyBTYXZlIGFuZCBleGl0IGVkaXQgbW9kZVxuICAgICAgICB0aGlzLmNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVmb2N1cyB0aGUgY2VsbCBlZGl0b3IgdG8gc3RheSBpbiBlZGl0IG1vZGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIE5pbGVDb2RlRWRpdG9yIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcblxuICAgIC8vIExhbmd1YWdlIGFuZCBzeW50YXhcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5lZGl0b3IubGFuZ3VhZ2UgPSB0aGlzLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGlzYWJsZVN5bnRheEhpZ2hsaWdodGluZykge1xuICAgICAgdGhpcy5lZGl0b3IuZGlzYWJsZVN5bnRheEhpZ2hsaWdodGluZyA9IHRoaXMub3B0aW9ucy5kaXNhYmxlU3ludGF4SGlnaGxpZ2h0aW5nO1xuICAgIH1cblxuICAgIC8vIEVkaXRvciBhcHBlYXJhbmNlXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmxpbmVOdW1iZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmxpbmVOdW1iZXJzID0gdGhpcy5vcHRpb25zLmxpbmVOdW1iZXJzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmxpbmVOdW1iZXJzTXVsdGlsaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmxpbmVOdW1iZXJzTXVsdGlsaW5lID0gdGhpcy5vcHRpb25zLmxpbmVOdW1iZXJzTXVsdGlsaW5lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lm11bHRpbGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5tdWx0aWxpbmUgPSB0aGlzLm9wdGlvbnMubXVsdGlsaW5lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRlZmF1bHRGb250ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlZmF1bHRGb250ID0gdGhpcy5vcHRpb25zLmRlZmF1bHRGb250O1xuICAgIH1cblxuICAgIC8vIEVkaXRvciBiZWhhdmlvclxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnJlYWRvbmx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnJlYWRvbmx5ID0gdGhpcy5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnRhYkNvbXBsZXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IudGFiQ29tcGxldGlvbiA9IHRoaXMub3B0aW9ucy50YWJDb21wbGV0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZVNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5lbmFibGVTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZW5hYmxlU2VhcmNoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZUZvbGRHdXR0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmVuYWJsZUZvbGRHdXR0ZXJzID0gdGhpcy5vcHRpb25zLmVuYWJsZUZvbGRHdXR0ZXJzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lmhhc1Njcm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmhhc1Njcm9sbGVyID0gdGhpcy5vcHRpb25zLmhhc1Njcm9sbGVyO1xuICAgIH1cblxuICAgIC8vIEV4cGFuZGFibGUgLSBkZWZhdWx0IHRvIGZhbHNlIGZvciBjZWxsIGVkaXRpbmdcbiAgICB0aGlzLmVkaXRvci5leHBhbmRhYmxlID0gdGhpcy5vcHRpb25zPy5leHBhbmRhYmxlID8/IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXhwYW5kSWNvbikge1xuICAgICAgdGhpcy5lZGl0b3IuZXhwYW5kSWNvbiA9IHRoaXMub3B0aW9ucy5leHBhbmRJY29uO1xuICAgIH1cblxuICAgIC8vIEF1dG9jb21wbGV0aW9uXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tQXV0b0NvbXBsZXRpb25zKSB7XG4gICAgICB0aGlzLmVkaXRvci5jdXN0b21BdXRvQ29tcGxldGlvbnMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQXV0b0NvbXBsZXRpb25zO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbUNvbXBsZXRpb25zUGF0aHMpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmN1c3RvbUNvbXBsZXRpb25zUGF0aHMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQ29tcGxldGlvbnNQYXRocztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd1ZhcmlhYmxlSW5DdXN0b21TdWdnZXN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmFsbG93VmFyaWFibGVJbkN1c3RvbVN1Z2dlc3Rpb24gPSB0aGlzLm9wdGlvbnMuYWxsb3dWYXJpYWJsZUluQ3VzdG9tU3VnZ2VzdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hYm92ZUN1cnNvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5hYm92ZUN1cnNvciA9IHRoaXMub3B0aW9ucy5hYm92ZUN1cnNvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvQ29tcGxldGVTdHlsZSkge1xuICAgICAgdGhpcy5lZGl0b3IuYXV0b0NvbXBsZXRlU3R5bGUgPSB0aGlzLm9wdGlvbnMuYXV0b0NvbXBsZXRlU3R5bGU7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIGhhbmRsaW5nXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGVib3VuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVib3VuY2UgPSB0aGlzLm9wdGlvbnMuZGVib3VuY2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGVib3VuY2VUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlYm91bmNlVGltZW91dCA9IHRoaXMub3B0aW9ucy5kZWJvdW5jZVRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVmlzdWFsIHN0YXRlc1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmVycm9yID0gdGhpcy5vcHRpb25zLmVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5lZGl0b3IuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBDdXN0b20gdGhlbWVcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21UaGVtZUNTUykge1xuICAgICAgdGhpcy5lZGl0b3IuY3VzdG9tVGhlbWVDU1MgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVGhlbWVDU1M7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIHdpdGggcHJvcGVyIGNsZWFudXAgdHJhY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbGlkYXRlT25TYXZlID0gdGhpcy5vcHRpb25zPy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzXG4gICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGtleUV2ZW50ID0gZSBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgXG4gICAgICAvLyBGb3Igc2luZ2xlLWxpbmUgbW9kZSwgRW50ZXIgc2F2ZXNcbiAgICAgIGlmICghdGhpcy5vcHRpb25zPy5tdWx0aWxpbmUgJiYga2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVzY2FwZSBjYW5jZWxzXG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29udGV4dC5vbkNhbmNlbCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuaWxlLWJsdXIgZXZlbnQgZm9yIHNhdmluZyBvbiBibHVyXG4gICAgY29uc3QgYmx1ckhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAvLyBEb24ndCBzYXZlIGlmIGRpYWxvZyBpcyBvcGVuXG4gICAgICBpZiAodGhpcy5kaWFsb2dPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRG9uJ3Qgc2F2ZSBpZiBleHBhbmQgYnV0dG9uIHdhcyBjbGlja2VkIChtb3VzZWRvd24gc2V0cyB0aGlzIGZsYWcpXG4gICAgICBpZiAodGhpcy5leHBhbmRCdXR0b25DbGlja2VkKSB7XG4gICAgICAgIC8vIFJlc2V0IGZsYWcgLSB0aGUgY2xpY2sgaGFuZGxlciB3aWxsIG9wZW4gdGhlIGRpYWxvZ1xuICAgICAgICB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIGFuZCBleGl0IGVkaXQgbW9kZVxuICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1ibHVyJywgYmx1ckhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1ibHVyJywgaGFuZGxlcjogYmx1ckhhbmRsZXIgfSk7XG5cbiAgICAvLyBEb2N1bWVudC1sZXZlbCBtb3VzZWRvd24gaGFuZGxlciB0byBkZXRlY3QgY2xpY2tzIG91dHNpZGUgdGhlIGVkaXRvclxuICAgIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBpZiBkaWFsb2cgaXMgb3BlbiBvciBleHBhbmQgYnV0dG9uIHdhcyBjbGlja2VkXG4gICAgICBpZiAodGhpcy5kaWFsb2dPcGVuIHx8IHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBjb21wb3NlZFBhdGggdG8gaGFuZGxlIFNoYWRvdyBET00gYm91bmRhcmllc1xuICAgICAgY29uc3QgcGF0aCA9IGUuY29tcG9zZWRQYXRoKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGFueSBlbGVtZW50IGluIHRoZSBwYXRoIGlzIG91ciB3cmFwcGVyLCBlZGl0b3IsIG9yIGV4cGFuZCBidXR0b25cbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXRoKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLndyYXBwZXIgfHwgZWxlbWVudCA9PT0gdGhpcy5lZGl0b3IgfHwgZWxlbWVudCA9PT0gdGhpcy5leHBhbmRCdXR0b24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxzbyBjaGVjayBpZiBpdCdzIHRoZSBjb250YWluZXIgKHRoZSBjZWxsKVxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gY29udGV4dC5jb250YWluZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xpY2sgaXMgb3V0c2lkZSAtIHNhdmUgYW5kIGV4aXRcbiAgICAgIHRoaXMuc2F2ZVZhbHVlKGNvbnRleHQsIHZhbGlkYXRlT25TYXZlKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHdpdGggYSBzbWFsbCBkZWxheSB0byBhdm9pZCBjYXB0dXJpbmcgdGhlIGluaXRpYWwgY2xpY2sgdGhhdCBvcGVuZWQgdGhlIGVkaXRvclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciEsIHRydWUpO1xuICAgIH0sIDUwKTtcblxuICAgIC8vIFJlYWwtdGltZSB2YWx1ZSB1cGRhdGVzIHVzaW5nIG5pbGUtY2hhbmdlXG4gICAgY29uc3QgY2hhbmdlSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlID8/ICcnO1xuICAgICAgdGhpcy50cmFja2VkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGNvbnRleHQub25DaGFuZ2UobmV3VmFsdWUgYXMgVCk7XG4gICAgfTtcbiAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIGNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuXG4gICAgLy8gSGFuZGxlIGV4cGFuZCBldmVudCBpZiBleHBhbmRhYmxlXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXhwYW5kYWJsZSkge1xuICAgICAgY29uc3QgZXhwYW5kSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBhIGN1c3RvbSBldmVudCB0aGF0IHRoZSBwYXJlbnQgY2FuIGxpc3RlbiB0b1xuICAgICAgICBjb25zdCBleHBhbmRFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnc3QtY29kZS1lZGl0b3ItZXhwYW5kJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5kaXNwYXRjaEV2ZW50KGV4cGFuZEV2ZW50KTtcbiAgICAgIH07XG4gICAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWV4cGFuZCcsIGV4cGFuZEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWV4cGFuZCcsIGhhbmRsZXI6IGV4cGFuZEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICAvLyBDb2RlIGVkaXRvciBkb2Vzbid0IGhhdmUgYnVpbHQtaW4gdmFsaWRhdGlvbiBsaWtlIGlucHV0XG4gICAgLy8gQnV0IHdlIGNhbiBjaGVjayBmb3IgZXJyb3Igc3RhdGVcbiAgICBpZiAodmFsaWRhdGUgJiYgdGhpcy5vcHRpb25zPy5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDdXJyZW50VmFsdWUoKTtcbiAgICBjb250ZXh0Lm9uU2F2ZSh2YWx1ZSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSBkb2N1bWVudCBjbGljayBoYW5kbGVyXG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBkaWFsb2cgaWYgb3BlblxuICAgIGlmICh0aGlzLmRpYWxvZ09wZW4gJiYgdGhpcy5kaWFsb2cpIHtcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGlhbG9nLnJlbW92ZSgpO1xuICAgICAgdGhpcy5kaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICAgICAgdGhpcy5lZGl0b3IucmVtb3ZlKCk7XG4gICAgICB0aGlzLmVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgd3JhcHBlciBpZiBleGlzdHNcbiAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZXhwYW5kIGJ1dHRvbiByZWZlcmVuY2VcbiAgICB0aGlzLmV4cGFuZEJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkID0gZmFsc2U7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvcj8uZm9jdXMoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRWYWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm4gJycgYXMgdW5rbm93biBhcyBUO1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMudHJhY2tlZFZhbHVlICE9PSBudWxsID8gdGhpcy50cmFja2VkVmFsdWUgOiB0aGlzLmVkaXRvci52YWx1ZSA/PyAnJykgYXMgc3RyaW5nO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXG4rJC8sICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHZhbHVlIHByb2dyYW1tYXRpY2FsbHlcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci52YWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ29kZU1pcnJvciBpbnN0YW5jZSAoaWYgbmVlZGVkIGZvciBhZHZhbmNlZCB1c2FnZSlcbiAgICovXG4gIGdldEVkaXRvckluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yO1xuICB9XG59XG4iXX0=
642
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jb2RlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvZWRpdG9ycy9uaWxlLWNvZGUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQXFISDs7R0FFRztBQUNILElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLFNBQVMsc0JBQXNCO0lBQzdCLElBQUksd0JBQXdCO1FBQUUsT0FBTztJQUNyQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFFaEMsTUFBTSxPQUFPLEdBQUcsOEJBQThCLENBQUM7SUFDL0MsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0ZuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWF6QixZQUE2QixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQVBwRCxtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO0lBRW9CLENBQUM7SUFFaEUsSUFBSSxDQUFDLE9BQTZCO1FBQ2hDLElBQUksQ0FBQyxPQUFP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SCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFrQixDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFpQixDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxLQUFRO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN1c3RvbSBlZGl0b3IgdXNpbmcgTmlsZUNvZGVFZGl0b3IgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgcHJvdmlkZXMgY29kZSBlZGl0aW5nIGNhcGFiaWxpdGllcyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIHRhYmxlIGNlbGxzXG4gKi9cblxuaW1wb3J0IHsgQ2VsbEVkaXRvciwgQ2VsbEVkaXRvckNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0b2NvbXBsZXRpb24gaXRlbSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUVkaXRvckNvbXBsZXRpb24ge1xuICAvKiogVGhlIGNvbXBsZXRpb24gbGFiZWwgc2hvd24gaW4gZHJvcGRvd24gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSB2YWx1ZSB0byBpbnNlcnQgKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBkZXNjcmlwdGlvbiAqL1xuICBkZXRhaWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXV0b2NvbXBsZXRlIHN0eWxlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvQ29tcGxldGVTdHlsZSB7XG4gIC8qKiBXaWR0aCBvZiB0aGUgYXV0b2NvbXBsZXRlIGRyb3Bkb3duICovXG4gIHdpZHRoPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIG11bHRpbGluZSBjb250ZW50IGluIGF1dG9jb21wbGV0ZSAqL1xuICBtdWx0aWxpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlQ29kZUVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbGVDb2RlRWRpdG9yT3B0aW9ucyB7XG4gIC8vIExhbmd1YWdlIGFuZCBzeW50YXhcbiAgLyoqIExhbmd1YWdlIG1vZGUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcgKi9cbiAgbGFuZ3VhZ2U/OiAnamF2YXNjcmlwdCcgfCAnc3FsJyB8ICdqc29uJyB8ICdodG1sJztcbiAgLyoqIERpc2FibGUgc3ludGF4IGhpZ2hsaWdodGluZyAqL1xuICBkaXNhYmxlU3ludGF4SGlnaGxpZ2h0aW5nPzogYm9vbGVhbjtcblxuICAvLyBFZGl0b3IgYXBwZWFyYW5jZVxuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB3aGVuIGVtcHR5ICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogU2hvdyBsaW5lIG51bWJlcnMgKHNpbmdsZS1saW5lIG1vZGUpICovXG4gIGxpbmVOdW1iZXJzPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgbGluZSBudW1iZXJzIGluIG11bHRpbGluZSBtb2RlICovXG4gIGxpbmVOdW1iZXJzTXVsdGlsaW5lPzogYm9vbGVhbjtcbiAgLyoqIEFsbG93IG11bHRpLWxpbmUgZWRpdGluZyAqL1xuICBtdWx0aWxpbmU/OiBib29sZWFuO1xuICAvKiogUmVuZGVyIHdpdGhvdXQgYm9yZGVyICovXG4gIG5vYm9yZGVyPzogYm9vbGVhbjtcbiAgLyoqIFVzZSBkZWZhdWx0IGZvbnQgaW5zdGVhZCBvZiBpbmhlcml0ICovXG4gIGRlZmF1bHRGb250PzogYm9vbGVhbjtcblxuICAvLyBFZGl0b3IgYmVoYXZpb3JcbiAgLyoqIEF1dG8gZm9jdXMgb24gZWRpdCAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICAvKiogUmVhZC1vbmx5IG1vZGUgKi9cbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAvKiogRGlzYWJsZWQgc3RhdGUgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIFRhYi10by1jb21wbGV0ZSAqL1xuICB0YWJDb21wbGV0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBzZWFyY2gga2V5bWFwICovXG4gIGVuYWJsZVNlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBTaG93IGNvZGUgZm9sZGluZyBndXR0ZXJzICovXG4gIGVuYWJsZUZvbGRHdXR0ZXJzPzogYm9vbGVhbjtcbiAgLyoqIEludGVybmFsIHNjcm9sbCBjb250YWluZXIgKi9cbiAgaGFzU2Nyb2xsZXI/OiBib29sZWFuO1xuICAvKiogU2hvdyBleHBhbmQgY29udHJvbCAobmF0aXZlIG5pbGUtY29kZS1lZGl0b3IgZXhwYW5kKSAqL1xuICBleHBhbmRhYmxlPzogYm9vbGVhbjtcbiAgLyoqIEljb24gZm9yIGV4cGFuZCBjb250cm9sICovXG4gIGV4cGFuZEljb24/OiBzdHJpbmc7XG4gIFxuICAvLyBEaWFsb2cgZXhwYW5kIGZlYXR1cmVcbiAgLyoqIFNob3cgZXhwYW5kIGJ1dHRvbiB0byBvcGVuIGZ1bGwgZWRpdG9yIGRpYWxvZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2hvd0V4cGFuZEJ1dHRvbj86IGJvb2xlYW47XG4gIC8qKiBEaWFsb2cgdGl0bGUgKGRlZmF1bHQ6ICdFZGl0IENvZGUnKSAqL1xuICBkaWFsb2dUaXRsZT86IHN0cmluZztcbiAgLyoqIERpYWxvZyB3aWR0aCAoZGVmYXVsdDogJzYwMHB4JykgKi9cbiAgZGlhbG9nV2lkdGg/OiBzdHJpbmc7XG4gIC8qKiBEaWFsb2cgbWF4IGhlaWdodCAoZGVmYXVsdDogJzgwdmgnKSAqL1xuICBkaWFsb2dNYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBEaWFsb2cgZWRpdG9yIG1pbiBoZWlnaHQgKGRlZmF1bHQ6ICczMDBweCcpICovXG4gIGRpYWxvZ0VkaXRvckhlaWdodD86IHN0cmluZztcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIHZpc2libGUgbGluZXMgaW4gdGhlIGRpYWxvZyBlZGl0b3IgKGRlZmF1bHQ6IDIwKSAqL1xuICBkaWFsb2dNaW5MaW5lcz86IG51bWJlcjtcblxuICAvLyBBdXRvY29tcGxldGlvblxuICAvKiogSW5saW5lIGNvbXBsZXRpb24gZGF0YXNldCAqL1xuICBjdXN0b21BdXRvQ29tcGxldGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb2RlRWRpdG9yQ29tcGxldGlvbltdPiB8IENvZGVFZGl0b3JDb21wbGV0aW9uW107XG4gIC8qKiBQYXRocyB0byBmZXRjaCBjb21wbGV0aW9uIGRhdGFzZXRzIGZyb20gKi9cbiAgY3VzdG9tQ29tcGxldGlvbnNQYXRocz86IHN0cmluZ1tdO1xuICAvKiogRW5hYmxlIHZhcmlhYmxlcyBpbiBzdWdnZXN0aW9ucyAqL1xuICBhbGxvd1ZhcmlhYmxlSW5DdXN0b21TdWdnZXN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgYXV0b2NvbXBsZXRlIGFib3ZlIGN1cnNvciAqL1xuICBhYm92ZUN1cnNvcj86IGJvb2xlYW47XG4gIC8qKiBTdHlsZSBjb25maWcgZm9yIGF1dG9jb21wbGV0ZSBkcm9wZG93biAqL1xuICBhdXRvQ29tcGxldGVTdHlsZT86IEF1dG9Db21wbGV0ZVN0eWxlO1xuXG4gIC8vIENoYW5nZSBoYW5kbGluZ1xuICAvKiogRGVib3VuY2UgY2hhbmdlIGV2ZW50cyAqL1xuICBkZWJvdW5jZT86IGJvb2xlYW47XG4gIC8qKiBEZWJvdW5jZSBkZWxheSBpbiBtcyAqL1xuICBkZWJvdW5jZVRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogRXJyb3Igc3RhdGUgKi9cbiAgZXJyb3I/OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcblxuICAvLyBDdXN0b20gdGhlbWVcbiAgLyoqIEN1c3RvbSB0aGVtZSBDU1Mgb2JqZWN0ICovXG4gIGN1c3RvbVRoZW1lQ1NTPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cbiAgLy8gVmFsaWRhdGlvbiBiZWhhdmlvclxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEluamVjdCBnbG9iYWwgc3R5bGVzIGZvciBuaWxlLWNvZGUtZWRpdG9yIGluIHRhYmxlIGNlbGxzXG4gKi9cbmxldCBjb2RlRWRpdG9yU3R5bGVzSW5qZWN0ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGluamVjdENvZGVFZGl0b3JTdHlsZXMoKTogdm9pZCB7XG4gIGlmIChjb2RlRWRpdG9yU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgY29kZUVkaXRvclN0eWxlc0luamVjdGVkID0gdHJ1ZTtcblxuICBjb25zdCBzdHlsZUlkID0gJ25pbGUtY29kZS1lZGl0b3ItY2VsbC1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTmlsZSBDb2RlIEVkaXRvciBjZWxsIHN0eWxpbmcgKi9cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KGNvZGUtZWRpdG9yLWJhc2UpIHtcbiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgbWluLWhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIEVuc3VyZSBwcm9wZXIgc2l6aW5nIHdpdGhpbiB0YWJsZSBjZWxsICovXG4gICAgLnN0LW5pbGUtY29kZS1lZGl0b3Ige1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAyOHB4O1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvZGVNaXJyb3IgY29udGVudCBzaG91bGQgaW5oZXJpdCBmb250IHNpemUgKi9cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yIC5jbS1jb250ZW50LFxuICAgIG5pbGUtY29kZS1lZGl0b3Iuc3QtY2VsbC1lZGl0b3IgLmNtLWxpbmUge1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogQ29udGFpbmVyIHdyYXBwZXIgZm9yIGVkaXRvciArIGV4cGFuZCBidXR0b24gKi9cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci13cmFwcGVyIC5zdC1jb2RlLWVkaXRvci1pbnB1dCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciAuc3QtZXhwYW5kLWJ1dHRvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBtaW4td2lkdGg6IDI0cHg7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTUwMCwgIzZiNzI4MCk7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLXdyYXBwZXIgLnN0LWV4cGFuZC1idXR0b246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTEwMCwgI2YzZjRmNik7XG4gICAgICBjb2xvcjogdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTcwMCwgIzM3NDE1MSk7XG4gICAgfVxuICAgIC8qIERpYWxvZyBjb2RlIGVkaXRvciBzdHlsaW5nICovXG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZzo6cGFydChwYW5lbCkge1xuICAgICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LWhlaWdodCwgODB2aCkgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZzo6cGFydChib2R5KSB7XG4gICAgICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nIG5pbGUtY29kZS1lZGl0b3Ige1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZyBuaWxlLWNvZGUtZWRpdG9yOjpwYXJ0KGNvZGUtZWRpdG9yLWJhc2UpIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW5pbGUtY29sb3ItbmV1dHJhbC0yMDAsICNlNWU3ZWIpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiB2YXIoLS1kaWFsb2ctZWRpdG9yLW1pbi1oZWlnaHQsIDMwMHB4KSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nIG5pbGUtY29kZS1lZGl0b3IgLmNtLWVkaXRvciB7XG4gICAgICBtaW4taGVpZ2h0OiB2YXIoLS1kaWFsb2ctZWRpdG9yLW1pbi1oZWlnaHQsIDMwMHB4KSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nIG5pbGUtY29kZS1lZGl0b3IgLmNtLWNvbnRlbnQge1xuICAgICAgbWluLWhlaWdodDogdmFyKC0tZGlhbG9nLWVkaXRvci1taW4taGVpZ2h0LCAzMDBweCkgIWltcG9ydGFudDtcbiAgICB9XG4gIGA7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVDb2RlRWRpdG9yIGNvbXBvbmVudFxuICogUHJvdmlkZXMgY29kZSBlZGl0aW5nIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgdGFibGUgY2VsbHNcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB2YWx1ZSB0eXBlICh0eXBpY2FsbHkgc3RyaW5nKVxuICovXG5leHBvcnQgY2xhc3MgTmlsZUNvZGVFZGl0b3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDZWxsRWRpdG9yPFQ+IHtcbiAgcHJpdmF0ZSBlZGl0b3I/OiBhbnk7XG4gIHByaXZhdGUgd3JhcHBlcj86IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIGV4cGFuZEJ1dHRvbj86IEhUTUxCdXR0b25FbGVtZW50O1xuICBwcml2YXRlIGRpYWxvZz86IGFueTtcbiAgcHJpdmF0ZSBkaWFsb2dFZGl0b3I/OiBhbnk7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuICBwcml2YXRlIGNvbnRleHQ/OiBDZWxsRWRpdG9yQ29udGV4dDxUPjtcbiAgcHJpdmF0ZSBkaWFsb2dPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgZXhwYW5kQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGRvY3VtZW50Q2xpY2tIYW5kbGVyPzogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM/OiBOaWxlQ29kZUVkaXRvck9wdGlvbnMpIHt9XG5cbiAgZWRpdChjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghY29udGV4dC5jb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmlsZUNvZGVFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy50cmFja2VkVmFsdWUgPSBudWxsO1xuXG4gICAgLy8gSW5qZWN0IGdsb2JhbCBzdHlsZXMgb25jZVxuICAgIGluamVjdENvZGVFZGl0b3JTdHlsZXMoKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBzaG93IGV4cGFuZCBidXR0b24gKGRlZmF1bHQ6IHRydWUpXG4gICAgY29uc3Qgc2hvd0V4cGFuZEJ1dHRvbiA9IHRoaXMub3B0aW9ucz8uc2hvd0V4cGFuZEJ1dHRvbiAhPT0gZmFsc2U7XG5cbiAgICBpZiAoc2hvd0V4cGFuZEJ1dHRvbikge1xuICAgICAgLy8gQ3JlYXRlIHdyYXBwZXIgZm9yIGVkaXRvciArIGV4cGFuZCBidXR0b25cbiAgICAgIHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTmFtZSA9ICdzdC1jb2RlLWVkaXRvci13cmFwcGVyJztcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBjb25zdCBlZGl0b3JDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGVkaXRvckNvbnRhaW5lci5jbGFzc05hbWUgPSAnc3QtY29kZS1lZGl0b3ItaW5wdXQnO1xuXG4gICAgICAvLyBDcmVhdGUgTmlsZUNvZGVFZGl0b3IgY3VzdG9tIGVsZW1lbnRcbiAgICAgIHRoaXMuZWRpdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1jb2RlLWVkaXRvcicpO1xuICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBTdHJpbmcoY29udGV4dC52YWx1ZSA/PyAnJyk7XG4gICAgICB0aGlzLmVkaXRvci5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3Igc3QtbmlsZS1jb2RlLWVkaXRvcic7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHRoaXMuZWRpdG9yLm5vYm9yZGVyID0gdGhpcy5vcHRpb25zPy5ub2JvcmRlciAhPT0gZmFsc2U7XG5cbiAgICAgIGVkaXRvckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvcik7XG4gICAgICB0aGlzLndyYXBwZXIuYXBwZW5kQ2hpbGQoZWRpdG9yQ29udGFpbmVyKTtcblxuICAgICAgLy8gQ3JlYXRlIGV4cGFuZCBidXR0b25cbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi5jbGFzc05hbWUgPSAnc3QtZXhwYW5kLWJ1dHRvbic7XG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi50eXBlID0gJ2J1dHRvbic7XG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi50aXRsZSA9ICdFeHBhbmQgZWRpdG9yJztcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLmlubmVySFRNTCA9ICc8bmlsZS1pY29uIG5hbWU9XCJleHBhbmQtMDZcIiBzaXplPVwiMTZcIj48L25pbGUtaWNvbj4nO1xuICAgICAgXG4gICAgICAvLyBVc2UgbW91c2Vkb3duIHRvIHNldCBmbGFnIEJFRk9SRSBibHVyIGV2ZW50IGZpcmVzXG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCA9IHRydWU7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhpcy5leHBhbmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMub3BlbkRpYWxvZygpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLndyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5leHBhbmRCdXR0b24pO1xuXG4gICAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCB3cmFwcGVyXG4gICAgICBjb250ZXh0LmNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICAgIGNvbnRleHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBOaWxlQ29kZUVkaXRvciBjdXN0b20gZWxlbWVudCB3aXRob3V0IHdyYXBwZXJcbiAgICAgIHRoaXMuZWRpdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1jb2RlLWVkaXRvcicpO1xuICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBTdHJpbmcoY29udGV4dC52YWx1ZSA/PyAnJyk7XG4gICAgICB0aGlzLmVkaXRvci5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3Igc3QtbmlsZS1jb2RlLWVkaXRvcic7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHRoaXMuZWRpdG9yLm5vYm9yZGVyID0gdGhpcy5vcHRpb25zPy5ub2JvcmRlciAhPT0gZmFsc2U7XG5cbiAgICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIGVkaXRvclxuICAgICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQXV0byBmb2N1cyAtIG5lZWQgYSBzbGlnaHQgZGVsYXkgZm9yIG5pbGUtY29kZS1lZGl0b3IgdG8gZnVsbHkgaW5pdGlhbGl6ZVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmF1dG9Gb2N1cyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgdGhlIG5pbGUtYWZ0ZXItaW5pdCBldmVudCB3aGljaCBmaXJlcyB3aGVuIGVkaXRvciBpcyByZWFkeVxuICAgICAgY29uc3QgaW5pdEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5yZW1vdmVFdmVudExpc3RlbmVyKCduaWxlLWFmdGVyLWluaXQnLCBpbml0SGFuZGxlcik7XG4gICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWFmdGVyLWluaXQnLCBpbml0SGFuZGxlcik7XG4gICAgICBcbiAgICAgIC8vIEZhbGxiYWNrOiBhbHNvIHRyeSBhZnRlciBhIGRlbGF5IGluIGNhc2UgdGhlIGV2ZW50IGFscmVhZHkgZmlyZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgZWRpdG9yIGFuZCBwbGFjZSBjdXJzb3JcbiAgICovXG4gIHByaXZhdGUgZm9jdXNFZGl0b3IoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBDYWxsIHRoZSBjb21wb25lbnQncyBmb2N1cyBtZXRob2RcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBkaXJlY3RseSBmb2N1cyB0aGUgQ29kZU1pcnJvciBjb250ZW50IGFyZWFcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSB0aGlzLmVkaXRvci5zaGFkb3dSb290O1xuICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgY29uc3QgY21Db250ZW50ID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuY20tY29udGVudCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoY21Db250ZW50KSB7XG4gICAgICAgICAgY21Db250ZW50LmZvY3VzKCk7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggYSBjbGljayBldmVudCB0byBlbnN1cmUgY3Vyc29yIHBsYWNlbWVudFxuICAgICAgICAgIGNtQ29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgIGNtQ29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZXVwJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBhbnkgZXJyb3JzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIGxpdmUgdmFsdWUgZGlyZWN0bHkgZnJvbSBDb2RlTWlycm9yJ3MgaW50ZXJuYWwgc3RhdGUsXG4gICAqIGJ5cGFzc2luZyBkZWJvdW5jZWQgbmlsZS1jaGFuZ2UgZXZlbnRzIGFuZCB0aGUgcG9zc2libHktc3RhbGUgLnZhbHVlIHByb3BlcnR5LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMaXZlRWRpdG9yVmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm4gJyc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHRoaXMuZWRpdG9yLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICBjb25zdCBjbUVkaXRvciA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmNtLWVkaXRvcicpIGFzIGFueTtcbiAgICAgICAgaWYgKGNtRWRpdG9yPy5jbVZpZXc/LnZpZXcpIHtcbiAgICAgICAgICByZXR1cm4gY21FZGl0b3IuY21WaWV3LnZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBvdGhlciBtZXRob2RzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhY2tlZFZhbHVlICE9PSBudWxsKSByZXR1cm4gdGhpcy50cmFja2VkVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGZ1bGwgZWRpdG9yIGRpYWxvZ1xuICAgKi9cbiAgcHJpdmF0ZSBvcGVuRGlhbG9nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpYWxvZ09wZW4pIHJldHVybjtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xuICAgIHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIG5vdyB0aGF0IGRpYWxvZyBpcyBvcGVuaW5nXG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIHdpdGggY29uZmlndXJhYmxlIGRpbWVuc2lvbnNcbiAgICBjb25zdCBkaWFsb2dXaWR0aCA9IHRoaXMub3B0aW9ucz8uZGlhbG9nV2lkdGggfHwgJzYwMHB4JztcbiAgICBjb25zdCBkaWFsb2dNYXhIZWlnaHQgPSB0aGlzLm9wdGlvbnM/LmRpYWxvZ01heEhlaWdodCB8fCAnODB2aCc7XG4gICAgY29uc3QgZGlhbG9nRWRpdG9ySGVpZ2h0ID0gdGhpcy5vcHRpb25zPy5kaWFsb2dFZGl0b3JIZWlnaHQgfHwgJzMwMHB4JztcbiAgICBjb25zdCBkaWFsb2dUaXRsZSA9IHRoaXMub3B0aW9ucz8uZGlhbG9nVGl0bGUgfHwgJ0VkaXQgQ29kZSc7XG5cbiAgICB0aGlzLmRpYWxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtZGlhbG9nJyk7XG4gICAgdGhpcy5kaWFsb2cuY2xhc3NOYW1lID0gJ3N0LWNvZGUtZWRpdG9yLWRpYWxvZyc7XG4gICAgdGhpcy5kaWFsb2cubGFiZWwgPSBkaWFsb2dUaXRsZTtcbiAgICB0aGlzLmRpYWxvZy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13aWR0aCcsIGRpYWxvZ1dpZHRoKTtcbiAgICB0aGlzLmRpYWxvZy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtaGVpZ2h0JywgZGlhbG9nTWF4SGVpZ2h0KTtcblxuICAgIC8vIENyZWF0ZSBkaWFsb2cgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250ZW50LnN0eWxlLnBhZGRpbmcgPSAnMTZweCc7XG4gICAgY29udGVudC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke2RpYWxvZ01heEhlaWdodH0gLSA4MHB4KWA7XG4gICAgY29udGVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcblxuICAgIC8vIENyZWF0ZSBmdWxsIGVkaXRvclxuICAgIHRoaXMuZGlhbG9nRWRpdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1jb2RlLWVkaXRvcicpO1xuICAgIGNvbnN0IG1pbkxpbmVzID0gdGhpcy5vcHRpb25zPy5kaWFsb2dNaW5MaW5lcyA/PyAyMDtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmdldExpdmVFZGl0b3JWYWx1ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRMaW5lQ291bnQgPSAoY3VycmVudFZhbHVlLm1hdGNoKC9cXG4vZykgfHwgW10pLmxlbmd0aCArIDE7XG4gICAgY29uc3QgcGFkZGluZ0xpbmVzID0gTWF0aC5tYXgoMCwgbWluTGluZXMgLSBjdXJyZW50TGluZUNvdW50KTtcbiAgICB0aGlzLmRpYWxvZ0VkaXRvci52YWx1ZSA9IGN1cnJlbnRWYWx1ZSArICdcXG4nLnJlcGVhdChwYWRkaW5nTGluZXMpO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLm11bHRpbGluZSA9IHRydWU7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3IubGluZU51bWJlcnNNdWx0aWxpbmUgPSB0cnVlO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmhhc1Njcm9sbGVyID0gdHJ1ZTtcbiAgICBjb25zdCBsaW5lSGVpZ2h0UHggPSAyMDtcbiAgICBjb25zdCBtaW5IZWlnaHRGcm9tTGluZXMgPSBgJHttaW5MaW5lcyAqIGxpbmVIZWlnaHRQeH1weGA7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3Iuc3R5bGUubWluSGVpZ2h0ID0gYG1heCgke2RpYWxvZ0VkaXRvckhlaWdodH0sICR7bWluSGVpZ2h0RnJvbUxpbmVzfSlgO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7ZGlhbG9nTWF4SGVpZ2h0fSAtIDEyMHB4KWA7XG4gICAgY29udGVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kaWFsb2ctZWRpdG9yLW1pbi1oZWlnaHQnLCBgbWF4KCR7ZGlhbG9nRWRpdG9ySGVpZ2h0fSwgJHttaW5IZWlnaHRGcm9tTGluZXN9KWApO1xuXG4gICAgLy8gQXBwbHkgc2FtZSBvcHRpb25zIHRvIGRpYWxvZyBlZGl0b3JcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IubGFuZ3VhZ2UgPSB0aGlzLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8udGFiQ29tcGxldGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci50YWJDb21wbGV0aW9uID0gdGhpcy5vcHRpb25zLnRhYkNvbXBsZXRpb247XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZVNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5lbmFibGVTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZW5hYmxlU2VhcmNoO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5lbmFibGVGb2xkR3V0dGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5lbmFibGVGb2xkR3V0dGVycyA9IHRoaXMub3B0aW9ucy5lbmFibGVGb2xkR3V0dGVycztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tQXV0b0NvbXBsZXRpb25zKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5jdXN0b21BdXRvQ29tcGxldGlvbnMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQXV0b0NvbXBsZXRpb25zO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21Db21wbGV0aW9uc1BhdGhzKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5jdXN0b21Db21wbGV0aW9uc1BhdGhzID0gdGhpcy5vcHRpb25zLmN1c3RvbUNvbXBsZXRpb25zUGF0aHM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbVRoZW1lQ1NTKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5jdXN0b21UaGVtZUNTUyA9IHRoaXMub3B0aW9ucy5jdXN0b21UaGVtZUNTUztcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ0VkaXRvci5leHBhbmRhYmxlID0gZmFsc2U7XG5cbiAgICAvLyBSZWFsLXRpbWUgc3luYzogVXBkYXRlIGNlbGwgZWRpdG9yIHdoZW5ldmVyIGRpYWxvZyBlZGl0b3IgY2hhbmdlc1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgKGU6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dWYWx1ZSA9IGUuZGV0YWlsPy52YWx1ZSB8fCAnJztcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlID0gZGlhbG9nVmFsdWU7XG4gICAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBkaWFsb2dWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9uQ2hhbmdlKGRpYWxvZ1ZhbHVlIGFzIFQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmRpYWxvZ0VkaXRvcik7XG4gICAgdGhpcy5kaWFsb2cuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAvLyBIYW5kbGUgZGlhbG9nIGNsb3NlIGV2ZW50cyAoY2xpY2tpbmcgWCBidXR0b24gLSBzdGF5IGluIGVkaXQgbW9kZSlcbiAgICB0aGlzLmRpYWxvZy5hZGRFdmVudExpc3RlbmVyKCduaWxlLXJlcXVlc3QtY2xvc2UnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIC8vIENoZWNrIGlmIGNsb3NlIHdhcyB0cmlnZ2VyZWQgYnkgb3ZlcmxheSBjbGljayAoY2xpY2tpbmcgb3V0c2lkZSlcbiAgICAgIGlmIChjdXN0b21FdmVudC5kZXRhaWw/LnNvdXJjZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIC8vIENsaWNraW5nIG91dHNpZGUgdGhlIGRpYWxvZyAtIHNhdmUgYW5kIGV4aXQgZWRpdCBtb2RlXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2codHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDbGlja2luZyBYIGJ1dHRvbiAtIHN0YXkgaW4gZWRpdCBtb2RlXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIEVzY2FwZSBrZXkgaW4gZGlhbG9nIC0gc3RheSBpbiBlZGl0IG1vZGVcbiAgICB0aGlzLmRpYWxvZy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFwcGVuZCB0byBib2R5IGFuZCBzaG93XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRpYWxvZyk7XG4gICAgXG4gICAgLy8gT3BlbiBkaWFsb2cgYWZ0ZXIgYSB0aWNrIHRvIGVuc3VyZSBpdCdzIGluIHRoZSBET01cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRpYWxvZykge1xuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuID0gdHJ1ZTtcbiAgICAgICAgLy8gRm9jdXMgdGhlIGRpYWxvZyBlZGl0b3JcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaWFsb2dFZGl0b3I/LmZvY3VzKCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRpYWxvZyBhbmQgb3B0aW9uYWxseSBzYXZlL2V4aXQgZWRpdCBtb2RlXG4gICAqL1xuICBwcml2YXRlIGNsb3NlRGlhbG9nKHNhdmVBbmRFeGl0OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nT3BlbikgcmV0dXJuO1xuXG4gICAgLy8gUmVzZXQgZmxhZyBpbW1lZGlhdGVseSBzbyBkb2N1bWVudCBjbGljayBoYW5kbGVyIHdvcmtzXG4gICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG5cbiAgICAvLyBDbG9zZSBhbmQgcmVtb3ZlIGRpYWxvZ1xuICAgIGlmICh0aGlzLmRpYWxvZykge1xuICAgICAgdGhpcy5kaWFsb2cub3BlbiA9IGZhbHNlO1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2c7XG4gICAgICBjb25zdCBkaWFsb2dFZGl0b3JSZWYgPSB0aGlzLmRpYWxvZ0VkaXRvcjtcbiAgICAgIHRoaXMuZGlhbG9nID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IgPSB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIERPTSBhZnRlciBhbmltYXRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkaWFsb2dSZWY/LnJlbW92ZSgpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIFxuICAgICAgaWYgKHNhdmVBbmRFeGl0ICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgICAvLyBTYXZlIGFuZCBleGl0IGVkaXQgbW9kZVxuICAgICAgICB0aGlzLmNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVmb2N1cyB0aGUgY2VsbCBlZGl0b3IgdG8gc3RheSBpbiBlZGl0IG1vZGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIE5pbGVDb2RlRWRpdG9yIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcblxuICAgIC8vIExhbmd1YWdlIGFuZCBzeW50YXhcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5lZGl0b3IubGFuZ3VhZ2UgPSB0aGlzLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGlzYWJsZVN5bnRheEhpZ2hsaWdodGluZykge1xuICAgICAgdGhpcy5lZGl0b3IuZGlzYWJsZVN5bnRheEhpZ2hsaWdodGluZyA9IHRoaXMub3B0aW9ucy5kaXNhYmxlU3ludGF4SGlnaGxpZ2h0aW5nO1xuICAgIH1cblxuICAgIC8vIEVkaXRvciBhcHBlYXJhbmNlXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmxpbmVOdW1iZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmxpbmVOdW1iZXJzID0gdGhpcy5vcHRpb25zLmxpbmVOdW1iZXJzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmxpbmVOdW1iZXJzTXVsdGlsaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmxpbmVOdW1iZXJzTXVsdGlsaW5lID0gdGhpcy5vcHRpb25zLmxpbmVOdW1iZXJzTXVsdGlsaW5lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lm11bHRpbGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5tdWx0aWxpbmUgPSB0aGlzLm9wdGlvbnMubXVsdGlsaW5lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRlZmF1bHRGb250ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlZmF1bHRGb250ID0gdGhpcy5vcHRpb25zLmRlZmF1bHRGb250O1xuICAgIH1cblxuICAgIC8vIEVkaXRvciBiZWhhdmlvclxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnJlYWRvbmx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnJlYWRvbmx5ID0gdGhpcy5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnRhYkNvbXBsZXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IudGFiQ29tcGxldGlvbiA9IHRoaXMub3B0aW9ucy50YWJDb21wbGV0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZVNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5lbmFibGVTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZW5hYmxlU2VhcmNoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZUZvbGRHdXR0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmVuYWJsZUZvbGRHdXR0ZXJzID0gdGhpcy5vcHRpb25zLmVuYWJsZUZvbGRHdXR0ZXJzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lmhhc1Njcm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmhhc1Njcm9sbGVyID0gdGhpcy5vcHRpb25zLmhhc1Njcm9sbGVyO1xuICAgIH1cblxuICAgIC8vIEV4cGFuZGFibGUgLSBkZWZhdWx0IHRvIGZhbHNlIGZvciBjZWxsIGVkaXRpbmdcbiAgICB0aGlzLmVkaXRvci5leHBhbmRhYmxlID0gdGhpcy5vcHRpb25zPy5leHBhbmRhYmxlID8/IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXhwYW5kSWNvbikge1xuICAgICAgdGhpcy5lZGl0b3IuZXhwYW5kSWNvbiA9IHRoaXMub3B0aW9ucy5leHBhbmRJY29uO1xuICAgIH1cblxuICAgIC8vIEF1dG9jb21wbGV0aW9uXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tQXV0b0NvbXBsZXRpb25zKSB7XG4gICAgICB0aGlzLmVkaXRvci5jdXN0b21BdXRvQ29tcGxldGlvbnMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQXV0b0NvbXBsZXRpb25zO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbUNvbXBsZXRpb25zUGF0aHMpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmN1c3RvbUNvbXBsZXRpb25zUGF0aHMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQ29tcGxldGlvbnNQYXRocztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd1ZhcmlhYmxlSW5DdXN0b21TdWdnZXN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmFsbG93VmFyaWFibGVJbkN1c3RvbVN1Z2dlc3Rpb24gPSB0aGlzLm9wdGlvbnMuYWxsb3dWYXJpYWJsZUluQ3VzdG9tU3VnZ2VzdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hYm92ZUN1cnNvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5hYm92ZUN1cnNvciA9IHRoaXMub3B0aW9ucy5hYm92ZUN1cnNvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvQ29tcGxldGVTdHlsZSkge1xuICAgICAgdGhpcy5lZGl0b3IuYXV0b0NvbXBsZXRlU3R5bGUgPSB0aGlzLm9wdGlvbnMuYXV0b0NvbXBsZXRlU3R5bGU7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIGhhbmRsaW5nXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGVib3VuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVib3VuY2UgPSB0aGlzLm9wdGlvbnMuZGVib3VuY2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGVib3VuY2VUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlYm91bmNlVGltZW91dCA9IHRoaXMub3B0aW9ucy5kZWJvdW5jZVRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVmlzdWFsIHN0YXRlc1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmVycm9yID0gdGhpcy5vcHRpb25zLmVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5lZGl0b3IuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBDdXN0b20gdGhlbWVcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21UaGVtZUNTUykge1xuICAgICAgdGhpcy5lZGl0b3IuY3VzdG9tVGhlbWVDU1MgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVGhlbWVDU1M7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIHdpdGggcHJvcGVyIGNsZWFudXAgdHJhY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbGlkYXRlT25TYXZlID0gdGhpcy5vcHRpb25zPy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzXG4gICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGtleUV2ZW50ID0gZSBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgXG4gICAgICAvLyBGb3Igc2luZ2xlLWxpbmUgbW9kZSwgRW50ZXIgc2F2ZXNcbiAgICAgIGlmICghdGhpcy5vcHRpb25zPy5tdWx0aWxpbmUgJiYga2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVzY2FwZSBjYW5jZWxzXG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29udGV4dC5vbkNhbmNlbCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuaWxlLWJsdXIgZXZlbnQgZm9yIHNhdmluZyBvbiBibHVyXG4gICAgY29uc3QgYmx1ckhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAvLyBEb24ndCBzYXZlIGlmIGRpYWxvZyBpcyBvcGVuXG4gICAgICBpZiAodGhpcy5kaWFsb2dPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRG9uJ3Qgc2F2ZSBpZiBleHBhbmQgYnV0dG9uIHdhcyBjbGlja2VkIChtb3VzZWRvd24gc2V0cyB0aGlzIGZsYWcpXG4gICAgICBpZiAodGhpcy5leHBhbmRCdXR0b25DbGlja2VkKSB7XG4gICAgICAgIC8vIFJlc2V0IGZsYWcgLSB0aGUgY2xpY2sgaGFuZGxlciB3aWxsIG9wZW4gdGhlIGRpYWxvZ1xuICAgICAgICB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIGFuZCBleGl0IGVkaXQgbW9kZVxuICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1ibHVyJywgYmx1ckhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1ibHVyJywgaGFuZGxlcjogYmx1ckhhbmRsZXIgfSk7XG5cbiAgICAvLyBEb2N1bWVudC1sZXZlbCBtb3VzZWRvd24gaGFuZGxlciB0byBkZXRlY3QgY2xpY2tzIG91dHNpZGUgdGhlIGVkaXRvclxuICAgIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBpZiBkaWFsb2cgaXMgb3BlbiBvciBleHBhbmQgYnV0dG9uIHdhcyBjbGlja2VkXG4gICAgICBpZiAodGhpcy5kaWFsb2dPcGVuIHx8IHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBjb21wb3NlZFBhdGggdG8gaGFuZGxlIFNoYWRvdyBET00gYm91bmRhcmllc1xuICAgICAgY29uc3QgcGF0aCA9IGUuY29tcG9zZWRQYXRoKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGFueSBlbGVtZW50IGluIHRoZSBwYXRoIGlzIG91ciB3cmFwcGVyLCBlZGl0b3IsIG9yIGV4cGFuZCBidXR0b25cbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXRoKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLndyYXBwZXIgfHwgZWxlbWVudCA9PT0gdGhpcy5lZGl0b3IgfHwgZWxlbWVudCA9PT0gdGhpcy5leHBhbmRCdXR0b24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxzbyBjaGVjayBpZiBpdCdzIHRoZSBjb250YWluZXIgKHRoZSBjZWxsKVxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gY29udGV4dC5jb250YWluZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xpY2sgaXMgb3V0c2lkZSAtIHNhdmUgYW5kIGV4aXRcbiAgICAgIHRoaXMuc2F2ZVZhbHVlKGNvbnRleHQsIHZhbGlkYXRlT25TYXZlKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHdpdGggYSBzbWFsbCBkZWxheSB0byBhdm9pZCBjYXB0dXJpbmcgdGhlIGluaXRpYWwgY2xpY2sgdGhhdCBvcGVuZWQgdGhlIGVkaXRvclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciEsIHRydWUpO1xuICAgIH0sIDUwKTtcblxuICAgIC8vIFJlYWwtdGltZSB2YWx1ZSB1cGRhdGVzIHVzaW5nIG5pbGUtY2hhbmdlXG4gICAgY29uc3QgY2hhbmdlSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlID8/ICcnO1xuICAgICAgdGhpcy50cmFja2VkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGNvbnRleHQub25DaGFuZ2UobmV3VmFsdWUgYXMgVCk7XG4gICAgfTtcbiAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIGNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuXG4gICAgLy8gSGFuZGxlIGV4cGFuZCBldmVudCBpZiBleHBhbmRhYmxlXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXhwYW5kYWJsZSkge1xuICAgICAgY29uc3QgZXhwYW5kSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBhIGN1c3RvbSBldmVudCB0aGF0IHRoZSBwYXJlbnQgY2FuIGxpc3RlbiB0b1xuICAgICAgICBjb25zdCBleHBhbmRFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnc3QtY29kZS1lZGl0b3ItZXhwYW5kJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5kaXNwYXRjaEV2ZW50KGV4cGFuZEV2ZW50KTtcbiAgICAgIH07XG4gICAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWV4cGFuZCcsIGV4cGFuZEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWV4cGFuZCcsIGhhbmRsZXI6IGV4cGFuZEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICAvLyBDb2RlIGVkaXRvciBkb2Vzbid0IGhhdmUgYnVpbHQtaW4gdmFsaWRhdGlvbiBsaWtlIGlucHV0XG4gICAgLy8gQnV0IHdlIGNhbiBjaGVjayBmb3IgZXJyb3Igc3RhdGVcbiAgICBpZiAodmFsaWRhdGUgJiYgdGhpcy5vcHRpb25zPy5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDdXJyZW50VmFsdWUoKTtcbiAgICBjb250ZXh0Lm9uU2F2ZSh2YWx1ZSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSBkb2N1bWVudCBjbGljayBoYW5kbGVyXG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBkaWFsb2cgaWYgb3BlblxuICAgIGlmICh0aGlzLmRpYWxvZ09wZW4gJiYgdGhpcy5kaWFsb2cpIHtcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGlhbG9nLnJlbW92ZSgpO1xuICAgICAgdGhpcy5kaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICAgICAgdGhpcy5lZGl0b3IucmVtb3ZlKCk7XG4gICAgICB0aGlzLmVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgd3JhcHBlciBpZiBleGlzdHNcbiAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZXhwYW5kIGJ1dHRvbiByZWZlcmVuY2VcbiAgICB0aGlzLmV4cGFuZEJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkID0gZmFsc2U7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvcj8uZm9jdXMoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRWYWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm4gJycgYXMgdW5rbm93biBhcyBUO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRMaXZlRWRpdG9yVmFsdWUoKTtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxuKyQvLCAnJykgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB2YWx1ZSBwcm9ncmFtbWF0aWNhbGx5XG4gICAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBTdHJpbmcodmFsdWUgPz8gJycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIENvZGVNaXJyb3IgaW5zdGFuY2UgKGlmIG5lZWRlZCBmb3IgYWR2YW5jZWQgdXNhZ2UpXG4gICAqL1xuICBnZXRFZGl0b3JJbnN0YW5jZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcjtcbiAgfVxufVxuIl19
@@ -4942,11 +4942,35 @@ class NileCodeEditor {
4942
4942
  // Silently handle any errors
4943
4943
  }
4944
4944
  }
4945
+ /**
4946
+ * Read the live value directly from CodeMirror's internal state,
4947
+ * bypassing debounced nile-change events and the possibly-stale .value property.
4948
+ */
4949
+ getLiveEditorValue() {
4950
+ var _a, _b;
4951
+ if (!this.editor)
4952
+ return '';
4953
+ try {
4954
+ const shadowRoot = this.editor.shadowRoot;
4955
+ if (shadowRoot) {
4956
+ const cmEditor = shadowRoot.querySelector('.cm-editor');
4957
+ if ((_a = cmEditor === null || cmEditor === void 0 ? void 0 : cmEditor.cmView) === null || _a === void 0 ? void 0 : _a.view) {
4958
+ return cmEditor.cmView.view.state.doc.toString();
4959
+ }
4960
+ }
4961
+ }
4962
+ catch (_c) {
4963
+ // Fall through to other methods
4964
+ }
4965
+ if (this.trackedValue !== null)
4966
+ return this.trackedValue;
4967
+ return (_b = this.editor.value) !== null && _b !== void 0 ? _b : '';
4968
+ }
4945
4969
  /**
4946
4970
  * Open the full editor dialog
4947
4971
  */
4948
4972
  openDialog() {
4949
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
4973
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
4950
4974
  if (this.dialogOpen)
4951
4975
  return;
4952
4976
  this.dialogOpen = true;
@@ -4969,7 +4993,7 @@ class NileCodeEditor {
4969
4993
  // Create full editor
4970
4994
  this.dialogEditor = document.createElement('nile-code-editor');
4971
4995
  const minLines = (_f = (_e = this.options) === null || _e === void 0 ? void 0 : _e.dialogMinLines) !== null && _f !== void 0 ? _f : 20;
4972
- const currentValue = ((_g = this.editor) === null || _g === void 0 ? void 0 : _g.value) || '';
4996
+ const currentValue = this.getLiveEditorValue();
4973
4997
  const currentLineCount = (currentValue.match(/\n/g) || []).length + 1;
4974
4998
  const paddingLines = Math.max(0, minLines - currentLineCount);
4975
4999
  this.dialogEditor.value = currentValue + '\n'.repeat(paddingLines);
@@ -4982,28 +5006,28 @@ class NileCodeEditor {
4982
5006
  this.dialogEditor.style.maxHeight = `calc(${dialogMaxHeight} - 120px)`;
4983
5007
  content.style.setProperty('--dialog-editor-min-height', `max(${dialogEditorHeight}, ${minHeightFromLines})`);
4984
5008
  // Apply same options to dialog editor
4985
- if ((_h = this.options) === null || _h === void 0 ? void 0 : _h.language) {
5009
+ if ((_g = this.options) === null || _g === void 0 ? void 0 : _g.language) {
4986
5010
  this.dialogEditor.language = this.options.language;
4987
5011
  }
4988
- if ((_j = this.options) === null || _j === void 0 ? void 0 : _j.placeholder) {
5012
+ if ((_h = this.options) === null || _h === void 0 ? void 0 : _h.placeholder) {
4989
5013
  this.dialogEditor.placeholder = this.options.placeholder;
4990
5014
  }
4991
- if (((_k = this.options) === null || _k === void 0 ? void 0 : _k.tabCompletion) !== undefined) {
5015
+ if (((_j = this.options) === null || _j === void 0 ? void 0 : _j.tabCompletion) !== undefined) {
4992
5016
  this.dialogEditor.tabCompletion = this.options.tabCompletion;
4993
5017
  }
4994
- if (((_l = this.options) === null || _l === void 0 ? void 0 : _l.enableSearch) !== undefined) {
5018
+ if (((_k = this.options) === null || _k === void 0 ? void 0 : _k.enableSearch) !== undefined) {
4995
5019
  this.dialogEditor.enableSearch = this.options.enableSearch;
4996
5020
  }
4997
- if (((_m = this.options) === null || _m === void 0 ? void 0 : _m.enableFoldGutters) !== undefined) {
5021
+ if (((_l = this.options) === null || _l === void 0 ? void 0 : _l.enableFoldGutters) !== undefined) {
4998
5022
  this.dialogEditor.enableFoldGutters = this.options.enableFoldGutters;
4999
5023
  }
5000
- if ((_o = this.options) === null || _o === void 0 ? void 0 : _o.customAutoCompletions) {
5024
+ if ((_m = this.options) === null || _m === void 0 ? void 0 : _m.customAutoCompletions) {
5001
5025
  this.dialogEditor.customAutoCompletions = this.options.customAutoCompletions;
5002
5026
  }
5003
- if ((_p = this.options) === null || _p === void 0 ? void 0 : _p.customCompletionsPaths) {
5027
+ if ((_o = this.options) === null || _o === void 0 ? void 0 : _o.customCompletionsPaths) {
5004
5028
  this.dialogEditor.customCompletionsPaths = this.options.customCompletionsPaths;
5005
5029
  }
5006
- if ((_q = this.options) === null || _q === void 0 ? void 0 : _q.customThemeCSS) {
5030
+ if ((_p = this.options) === null || _p === void 0 ? void 0 : _p.customThemeCSS) {
5007
5031
  this.dialogEditor.customThemeCSS = this.options.customThemeCSS;
5008
5032
  }
5009
5033
  this.dialogEditor.expandable = false;
@@ -5325,10 +5349,9 @@ class NileCodeEditor {
5325
5349
  (_a = this.editor) === null || _a === void 0 ? void 0 : _a.focus();
5326
5350
  }
5327
5351
  getCurrentValue() {
5328
- var _a;
5329
5352
  if (!this.editor)
5330
5353
  return '';
5331
- const value = (this.trackedValue !== null ? this.trackedValue : (_a = this.editor.value) !== null && _a !== void 0 ? _a : '');
5354
+ const value = this.getLiveEditorValue();
5332
5355
  return value.replace(/\n+$/, '');
5333
5356
  }
5334
5357
  /**