@datagrok-libraries/utils 4.6.4 → 4.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "aparamonov@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.6.4",
11
+ "version": "4.6.5",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["query-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["query-builder.ts"],"names":[],"mappings":"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"}
@@ -106,7 +106,8 @@ export class BetweenConditionEditor extends BaseConditionEditor {
106
106
  this.condition.value = [this.condition.value, undefined];
107
107
  this.onChanged.next(this.condition);
108
108
  }
109
- const input1 = ui.input.forProperty(prop, this.condition.value[0], {
109
+ const input1 = ui.input.forProperty(prop, undefined, {
110
+ value: this.condition.value[0],
110
111
  nullable: false,
111
112
  onValueChanged: () => {
112
113
  this.condition.value[0] = input1.value;
@@ -114,7 +115,7 @@ export class BetweenConditionEditor extends BaseConditionEditor {
114
115
  }
115
116
  });
116
117
  input1.addCaption('');
117
- const input2 = ui.input.forProperty(prop, this.condition.value[1], {
118
+ const input2 = ui.input.forProperty(prop, undefined, {
118
119
  value: this.condition.value[1],
119
120
  onValueChanged: () => {
120
121
  this.condition.value[1] = input2.value;
@@ -691,4 +692,4 @@ function suggestionMenuKeyNavigation(inputContainer) {
691
692
  allItems[currentIndex].classList.add('d4-menu-item-hover');
692
693
  });
693
694
  }
694
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFMUQsTUFBTSxLQUFXLFNBQVMsQ0FzQnpCO0FBdEJELFdBQWlCLFNBQVM7SUFDVCxrQkFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0QixZQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ1YscUJBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsbUJBQVMsR0FBRyxXQUFXLENBQUM7SUFDeEIsWUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNULGFBQUcsR0FBRyxJQUFJLENBQUM7SUFDWCxZQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ1QsYUFBRyxHQUFHLElBQUksQ0FBQztJQUNYLFlBQUUsR0FBRyxHQUFHLENBQUM7SUFDVCxnQkFBTSxHQUFHLElBQUksQ0FBQztJQUNkLGdCQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xCLGVBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLGlCQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLG9CQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFCLHNCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTNDLElBQVksT0FHWDtJQUhELFdBQVksT0FBTztRQUNmLHNCQUFXLENBQUE7UUFDWCxvQkFBUyxDQUFBO0lBQ2IsQ0FBQyxFQUhXLE9BQU8sR0FBUCxpQkFBTyxLQUFQLGlCQUFPLFFB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QUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLGlCQUFpQixFQUFFO1lBQy9DLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPO1NBQ1I7UUFDRCxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDMUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICcuLi8uLi9jc3MvcXVlcnktYnVpbGRlci5jc3MnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcblxuZXhwb3J0IGNvbnN0IFNVR0dFU1RJT05TX0ZVTkNUSU9OID0gJ3N1Z2dlc3Rpb25zRnVuY3Rpb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIE9wZXJhdG9ycyB7XG4gICAgZXhwb3J0IGNvbnN0IENPTlRBSU5TID0gJ2NvbnRhaW5zJztcbiAgICBleHBvcnQgY29uc3QgSU4gPSAnaW4nO1xuICAgIGV4cG9ydCBjb25zdCBTVEFSVFNfV0lUSCA9ICdzdGFydHMgd2l0aCc7XG4gICAgZXhwb3J0IGNvbnN0IEVORFNfV0lUSCA9ICdlbmRzIHdpdGgnO1xuICAgIGV4cG9ydCBjb25zdCBHVCA9ICc+JztcbiAgICBleHBvcnQgY29uc3QgR1RFID0gJz49JztcbiAgICBleHBvcnQgY29uc3QgTFQgPSAnPCc7XG4gICAgZXhwb3J0IGNvbnN0IExURSA9ICc8PSc7XG4gICAgZXhwb3J0IGNvbnN0IEVRID0gJz0nO1xuICAgIGV4cG9ydCBjb25zdCBOT1RfRVEgPSAnIT0nO1xuICAgIGV4cG9ydCBjb25zdCBCRUZPUkUgPSAnYmVmb3JlJztcbiAgICBleHBvcnQgY29uc3QgQUZURVIgPSAnYWZ0ZXInO1xuICAgIGV4cG9ydCBjb25zdCBPTiA9ICdvbic7XG4gICAgZXhwb3J0IGNvbnN0IEJFVFdFRU4gPSAnYmV0d2Vlbic7XG4gICAgZXhwb3J0IGNvbnN0IElTX1NJTUlMQVIgPSAnaXMgc2ltaWxhcic7XG4gICAgZXhwb3J0IGNvbnN0IElTX0NPTlRBSU5FRCA9ICdpcyBjb250YWluZWQnO1xuXG4gICAgZXhwb3J0IGVudW0gTG9naWNhbCB7XG4gICAgICAgIGFuZCA9ICdhbmQnLFxuICAgICAgICBvciA9ICdvcicsXG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBRdWVyeUJ1aWxkZXJMYXlvdXQge1xuICAgIFN0YW5kYXJkID0gJ3N0YW5kYXJkJyxcbiAgICBOYXJyb3cgPSAnbmFycm93J1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZUNvbmRpdGlvbjxUID0gYW55PiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBvcGVyYXRvcjogc3RyaW5nO1xuICAgIHZhbHVlOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXhDb25kaXRpb24ge1xuICAgIGxvZ2ljYWxPcGVyYXRvcjogT3BlcmF0b3JzLkxvZ2ljYWw7XG4gICAgY29uZGl0aW9uczogRXhwcmVzc2lvbltdO1xufVxuXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uPFQgPSBhbnk+ID0gU2ltcGxlQ29uZGl0aW9uPFQ+IHwgQ29tcGxleENvbmRpdGlvbjtcblxuXG5leHBvcnQgY2xhc3MgQmFzZUNvbmRpdGlvbkVkaXRvcjxUID0gYW55PiB7XG4gICAgcm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXYoKTtcbiAgICBjb25kaXRpb246IFNpbXBsZUNvbmRpdGlvbjxUPjtcbiAgICBvbkNoYW5nZWQ6IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPFQ+PiA9IG5ldyBTdWJqZWN0PFNpbXBsZUNvbmRpdGlvbjxUPj4oKTtcbiAgICBzaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICBzdWdnZXN0aW9uc01lbnVDbGlja2VkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IFNpbXBsZUNvbmRpdGlvbjxUPikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gPz8ge1xuICAgICAgICAgICAgZmllbGQ6IHByb3AubmFtZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQgYXMgVFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFZGl0b3IocHJvcCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKVxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSB1bmRlZmluZWQgYXMgVDtcbiAgICAgICAgY29uc3QgaW5pdFZhbCA9IHByb3AudHlwZSA9PT0gREcuVFlQRS5EQVRFX1RJTUUgJiYgdHlwZW9mIHRoaXMuY29uZGl0aW9uLnZhbHVlID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICBkYXlqcyh0aGlzLmNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcpIDogdGhpcy5jb25kaXRpb24udmFsdWU7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWx1ZTogaW5pdFZhbCxcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSBhcyBUO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkU3VnZ2VzdGlvbnMocHJvcCwgaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXQuYWRkQ2FwdGlvbignJyk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN1Z2dlc3Rpb25zKHByb3AsIGlucHV0KTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplU3VnZ2VzdGlvbnMocHJvcDogREcuUHJvcGVydHksIGlucHV0OiBERy5JbnB1dEJhc2UpIHtcbiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBwcm9wLnR5cGUgPT09IERHLlRZUEUuU1RSSU5HICYmIHByb3Aub3B0aW9uc1tTVUdHRVNUSU9OU19GVU5DVElPTl07XG4gICAgICAgIGlmICh0aGlzLnNob3dTdWdnZXN0aW9ucykge1xuICAgICAgICAgICBzdWdnZXN0aW9uTWVudUtleU5hdmlnYXRpb24odGhpcy5yb290KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGFkZFN1Z2dlc3Rpb25zKHByb3A6IERHLlByb3BlcnR5LCBpbnB1dDogREcuSW5wdXRCYXNlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dTdWdnZXN0aW9ucyAmJiAhdGhpcy5zdWdnZXN0aW9uc01lbnVDbGlja2VkKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBBcnJheTxzdHJpbmc+ID0gYXdhaXQgcHJvcC5vcHRpb25zW1NVR0dFU1RJT05TX0ZVTkNUSU9OXShpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAxICYmIHN1Z2dlc3Rpb25zWzBdID09PSBpbnB1dC52YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uc01lbnUgPSBERy5NZW51LnBvcHVwKCk7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNNZW51IS5pdGVtKHMsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTWVudUNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdWdnZXN0aW9uc01lbnUuc2hvdyh7IGVsZW1lbnQ6IGlucHV0LnJvb3QsIHk6IGlucHV0LnJvb3Qub2Zmc2V0SGVpZ2h0IH0pO1xuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc01lbnVDbGlja2VkID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmV0d2VlbkNvbmRpdGlvbkVkaXRvciBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3Ige1xuICAgIG92ZXJyaWRlIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbi52YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmNvbmRpdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gW3RoaXMuY29uZGl0aW9uLnZhbHVlLCB1bmRlZmluZWRdO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQxID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdGhpcy5jb25kaXRpb24udmFsdWVbMF0sIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWVbMF0gPSBpbnB1dDEudmFsdWUhO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXQxLmFkZENhcHRpb24oJycpO1xuICAgICAgICBjb25zdCBpbnB1dDIgPSB1aS5pbnB1dC5mb3JQcm9wZXJ0eShwcm9wLCB0aGlzLmNvbmRpdGlvbi52YWx1ZVsxXSwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlWzFdLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZVsxXSA9IGlucHV0Mi52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dDIuYWRkQ2FwdGlvbignJyk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodWkuZGl2SChbaW5wdXQxLnJvb3QsIGlucHV0Mi5yb290XSwgeyBzdHlsZTogeyBnYXA6ICcxMHB4JyB9IH0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29sZWFuQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvciB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uLnZhbHVlKVxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSB0cnVlXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbJ3RydWUnLCAnZmFsc2UnXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgIGl0ZW1zOiBvcHRpb25zLFxuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvciBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3I8c3RyaW5nPiB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICAvL2lmIHdlIHN3aXRoIGZyb20gc2ltaWxhcml0eSBpbnB1dCB0byBzdGFuZGFyZCBtb2xlY3VsZSBpbnB1dCAtIG5lZWQgdG8gbW9kaWZ5IHZhbHVlXG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbi52YWx1ZSAmJiB0eXBlb2YgdGhpcy5jb25kaXRpb24udmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoJ21vbGVjdWxlJyBpbiB0aGlzLmNvbmRpdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSAodGhpcy5jb25kaXRpb24udmFsdWUgYXMgTW9sZWN1bGVTaW1pbGFyaXR5KS5tb2xlY3VsZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubW9sZWN1bGUoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIC8vdG8gYWRqdXN0IHRoZSBmaWx0ZXIgd2lkdGggY29uc2lkZXJpbmcgbW9sZWN1bGUgaW5wdXRcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdUb3AgPSAnMTVweCc7XG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5wYWRkaW5nQm90dG9tID0gJzE1cHgnO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9sZWN1bGVTaW1pbGFyaXR5ID0ge1xuICAgIG1vbGVjdWxlOiBzdHJpbmcsXG4gICAgdGhyZXNob2xkOiBudW1iZXJcbn1cbmV4cG9ydCBjbGFzcyBNb2xlY3VsZVNpbWlsYXJpdHlDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPE1vbGVjdWxlU2ltaWxhcml0eT4ge1xuICAgIG92ZXJyaWRlIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICAgICAgLy9pbiBjYXNlIHdlIHN3aXRjaCBmcm9tIHNvbWUgb3RoZXIgb3BlcmF0b3IsIHdoZXJlIHZhbHVlIGlzIGEgc3RyaW5nIChjb250YWlucywgaXMgY29udGFpbmVkKVxuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uLnZhbHVlIHx8IHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0ge21vbGVjdWxlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA/PyAnJywgdGhyZXNob2xkOiAwLjd9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vbGVjdWxlSW5wdXQgPSB1aS5pbnB1dC5tb2xlY3VsZSgnJywge1xuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZS5tb2xlY3VsZSA9IG1vbGVjdWxlSW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0cmVzaG9sZElucHV0ID0gdWkuaW5wdXQuZmxvYXQoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZS50aHJlc2hvbGQsXG4gICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICBzdGVwOiAwLjAxXG4gICAgICAgIH0pO1xuICAgICAgICBERy5kZWJvdW5jZSh0cmVzaG9sZElucHV0Lm9uQ2hhbmdlZCwgMzAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUudGhyZXNob2xkID0gdHJlc2hvbGRJbnB1dC52YWx1ZSE7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZWKFttb2xlY3VsZUlucHV0LnJvb3QsIHRyZXNob2xkSW5wdXQucm9vdF0pKTtcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdUb3AgPSAnMTVweCc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yU3RyaW5nIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvcjxzdHJpbmdbXT4ge1xuICAgIG92ZXJyaWRlIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0Lmxpc3QoJycsIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JJbnQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIS5tYXAoKGl0KSA9PiBwYXJzZUludChpdCkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yRmxvYXQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIS5tYXAoKGl0KSA9PiBwYXJzZUZsb2F0KGl0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgIH1cbn1cblxuLy8gUmVnaXN0cnkgZm9yIGJvdGggb3BlcmF0b3JzIGFuZCBlZGl0b3JzXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uUmVnaXN0cnkge1xuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb25kaXRpb25SZWdpc3RyeTtcbiAgICBwcml2YXRlIHR5cGVPcGVyYXRvcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHNlbVR5cGVPcGVyYXRvcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGVkaXRvclJlZ2lzdHJ5OiBNYXA8c3RyaW5nLCBuZXcgKHByb3A6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBpbml0aWFsQ29uZGl0aW9uPzogYW55KSA9PiBCYXNlQ29uZGl0aW9uRWRpdG9yPiA9IG5ldyBNYXAoKTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRPcGVyYXRvcnMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdEVkaXRvcnMoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogQ29uZGl0aW9uUmVnaXN0cnkge1xuICAgICAgICBpZiAoIUNvbmRpdGlvblJlZ2lzdHJ5Lmluc3RhbmNlKSB7XG4gICAgICAgICAgICBDb25kaXRpb25SZWdpc3RyeS5pbnN0YW5jZSA9IG5ldyBDb25kaXRpb25SZWdpc3RyeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb25kaXRpb25SZWdpc3RyeS5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVEZWZhdWx0T3BlcmF0b3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBUeXBlIG9wZXJhdG9yc1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLkJPT0wsIFtPcGVyYXRvcnMuRVFdKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5TVFJJTkcsIFtPcGVyYXRvcnMuU1RBUlRTX1dJVEgsIE9wZXJhdG9ycy5DT05UQUlOUywgT3BlcmF0b3JzLkVRLCBPcGVyYXRvcnMuTk9UX0VRLCBPcGVyYXRvcnMuSU5dKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5JTlQsIFtPcGVyYXRvcnMuR1QsIE9wZXJhdG9ycy5MVCwgT3BlcmF0b3JzLkdURSwgT3BlcmF0b3JzLkxURSwgT3BlcmF0b3JzLkVRLFxuICAgICAgICAgICAgT3BlcmF0b3JzLk5PVF9FUSwgT3BlcmF0b3JzLkJFVFdFRU4sIE9wZXJhdG9ycy5JTl0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLkZMT0FULCBbT3BlcmF0b3JzLkdULCBPcGVyYXRvcnMuTFQsIE9wZXJhdG9ycy5HVEUsIE9wZXJhdG9ycy5MVEUsIE9wZXJhdG9ycy5FUSxcbiAgICAgICAgICAgIE9wZXJhdG9ycy5OT1RfRVEsIE9wZXJhdG9ycy5CRVRXRUVOLCBPcGVyYXRvcnMuSU5dKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5EQVRFX1RJTUUsIFtPcGVyYXRvcnMuQkVGT1JFLCBPcGVyYXRvcnMuQUZURVIsIE9wZXJhdG9ycy5CRVRXRUVOXSk7XG5cbiAgICAgICAgLy8gU2VtVHlwZSBvcGVyYXRvcnMgKHRha2UgcHJlY2VkZW5jZSBvdmVyIHR5cGUgb3BlcmF0b3JzKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyU2VtVHlwZU9wZXJhdG9ycyhERy5TRU1UWVBFLk1PTEVDVUxFLCBbT3BlcmF0b3JzLkNPTlRBSU5TLCBPcGVyYXRvcnMuSVNfQ09OVEFJTkVELCBPcGVyYXRvcnMuRVEsIE9wZXJhdG9ycy5JU19TSU1JTEFSXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRGVmYXVsdEVkaXRvcnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGRlZmF1bHQgZWRpdG9ycyBieSBwcm9wZXJ0eSB0eXBlICh3aXRoIGVtcHR5IHNlbVR5cGUgYW5kIG9wZXJhdG9yKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuSU5ULCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuRkxPQVQsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5EQVRFX1RJTUUsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5CT09MLCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIHNwZWNpYWxpemVkIGVkaXRvcnMgZm9yIHNwZWNpZmljIGNvbWJpbmF0aW9uc1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCAnJywgT3BlcmF0b3JzLklOLCBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yU3RyaW5nKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLklOVCwgJycsIE9wZXJhdG9ycy5JTiwgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvckludCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5GTE9BVCwgJycsIE9wZXJhdG9ycy5JTiwgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvckZsb2F0KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkRBVEVfVElNRSwgJycsIE9wZXJhdG9ycy5CRVRXRUVOLCBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLklOVCwgJycsIE9wZXJhdG9ycy5CRVRXRUVOLCBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkZMT0FULCAnJywgT3BlcmF0b3JzLkJFVFdFRU4sIEJldHdlZW5Db25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCBERy5TRU1UWVBFLk1PTEVDVUxFLCBPcGVyYXRvcnMuQ09OVEFJTlMsIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLklTX0NPTlRBSU5FRCwgTW9sZWN1bGVDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCBERy5TRU1UWVBFLk1PTEVDVUxFLCBPcGVyYXRvcnMuRVEsIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLklTX1NJTUlMQVIsIE1vbGVjdWxlU2ltaWxhcml0eUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5CT09MLCAnJywgT3BlcmF0b3JzLkVRLCBCb29sZWFuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICB9XG5cbiAgICAvLyBPcGVyYXRvciByZWdpc3RyYXRpb24gbWV0aG9kc1xuICAgIHJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhwcm9wZXJ0eVR5cGU6IHN0cmluZywgb3BlcmF0b3JzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnR5cGVPcGVyYXRvcnMuc2V0KHByb3BlcnR5VHlwZSwgb3BlcmF0b3JzKTtcbiAgICB9XG5cbiAgICByZWdpc3RlclNlbVR5cGVPcGVyYXRvcnMoc2VtVHlwZTogc3RyaW5nLCBvcGVyYXRvcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VtVHlwZU9wZXJhdG9ycy5zZXQoc2VtVHlwZSwgb3BlcmF0b3JzKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgb3BlcmF0b3JzIGZvciBhIHByb3BlcnR5XG4gICAgZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkocHJvcGVydHk6IERHLlByb3BlcnR5KTogc3RyaW5nW10ge1xuICAgICAgICAvLyBDaGVjayBzZW1UeXBlIGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byB0eXBlXG4gICAgICAgIGNvbnN0IHNlbVR5cGVPcHMgPSB0aGlzLnNlbVR5cGVPcGVyYXRvcnMuZ2V0KHByb3BlcnR5LnNlbVR5cGUpO1xuICAgICAgICBpZiAoc2VtVHlwZU9wcykgcmV0dXJuIHNlbVR5cGVPcHM7XG5cbiAgICAgICAgY29uc3QgdHlwZU9wcyA9IHRoaXMudHlwZU9wZXJhdG9ycy5nZXQocHJvcGVydHkucHJvcGVydHlUeXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVPcHMgfHwgW107XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgb3BlcmF0b3IgaXMgc3VwcG9ydGVkXG4gICAgaXNPcGVyYXRvclN1cHBvcnRlZChwcm9wZXJ0eTogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gdGhpcy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybiBvcGVyYXRvcnMuaW5jbHVkZXMob3BlcmF0b3IpO1xuICAgIH1cblxuICAgIC8vIEVkaXRvciByZWdpc3RyYXRpb24gbWV0aG9kc1xuICAgIHJlZ2lzdGVyRWRpdG9yPFQ+KFxuICAgICAgICBwcm9wZXJ0eVR5cGU6IHN0cmluZyxcbiAgICAgICAgc2VtVHlwZTogc3RyaW5nLFxuICAgICAgICBvcGVyYXRvcjogc3RyaW5nLFxuICAgICAgICBlZGl0b3JDbGFzczogbmV3IChwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZykgPT4gQmFzZUNvbmRpdGlvbkVkaXRvcjxUPlxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eVR5cGUsIHNlbVR5cGUsIG9wZXJhdG9yKTtcbiAgICAgICAgdGhpcy5lZGl0b3JSZWdpc3RyeS5zZXQoa2V5LCBlZGl0b3JDbGFzcyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGVkaXRvciBmb3IgYSBwcm9wZXJ0eSBhbmQgb3BlcmF0b3JcbiAgICBjcmVhdGVFZGl0b3I8VD4ocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBpbml0aWFsQ29uZGl0aW9uPzogU2ltcGxlQ29uZGl0aW9uPFQ+KTogQmFzZUNvbmRpdGlvbkVkaXRvcjxUPiB7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGEgc3BlY2lhbGl6ZWQgZWRpdG9yIGZpcnN0IChwcm9wZXJ0eVR5cGUgKyBzZW1UeXBlICsgb3BlcmF0b3IpXG4gICAgICAgIGNvbnN0IHNwZWNpYWxpemVkS2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHkucHJvcGVydHlUeXBlLCBwcm9wZXJ0eS5zZW1UeXBlLCBvcGVyYXRvcik7XG4gICAgICAgIGxldCBFZGl0b3JDbGFzcyA9IHRoaXMuZWRpdG9yUmVnaXN0cnkuZ2V0KHNwZWNpYWxpemVkS2V5KTtcblxuICAgICAgICAvLyBJZiBubyBzcGVjaWFsaXplZCBlZGl0b3IsIHRyeSB3aXRoIGVtcHR5IHNlbVR5cGUgKHByb3BlcnR5VHlwZSArIG9wZXJhdG9yKVxuICAgICAgICBpZiAoIUVkaXRvckNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlT25seUtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5LnByb3BlcnR5VHlwZSwgJycsIG9wZXJhdG9yKTtcbiAgICAgICAgICAgIEVkaXRvckNsYXNzID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5nZXQodHlwZU9ubHlLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc3RpbGwgbm8gc3BlY2lhbGl6ZWQgZWRpdG9yLCB1c2UgZGVmYXVsdCBlZGl0b3IgZm9yIHByb3BlcnR5IHR5cGUgKHByb3BlcnR5VHlwZSBvbmx5KVxuICAgICAgICBpZiAoIUVkaXRvckNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0S2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHkucHJvcGVydHlUeXBlLCAnJywgJycpO1xuICAgICAgICAgICAgRWRpdG9yQ2xhc3MgPSB0aGlzLmVkaXRvclJlZ2lzdHJ5LmdldChkZWZhdWx0S2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGJhc2UgZWRpdG9yXG4gICAgICAgIGlmICghRWRpdG9yQ2xhc3MpIHtcbiAgICAgICAgICAgIEVkaXRvckNsYXNzID0gQmFzZUNvbmRpdGlvbkVkaXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9yQ2xhc3MocHJvcGVydHksIG9wZXJhdG9yLCBpbml0aWFsQ29uZGl0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgY29uZGl0aW9uIGVkaXRvciBmb3IgYSBwcm9wZXJ0eSBhbmQgb3BlcmF0b3IgKHdpdGggdmFsaWRhdGlvbilcbiAgICBnZXRDb25kaXRpb25FZGl0b3I8VCA9IGFueT4ocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBjb25kaXRpb24/OiBTaW1wbGVDb25kaXRpb248VD4pOiBCYXNlQ29uZGl0aW9uRWRpdG9yPFQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVyYXRvclN1cHBvcnRlZChwcm9wZXJ0eSwgb3BlcmF0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVFZGl0b3IocHJvcGVydHksIG9wZXJhdG9yLCBjb25kaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE9wZXJhdG9yICcke29wZXJhdG9yfScgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJvcGVydHkgdHlwZSAnJHtwcm9wZXJ0eS5wcm9wZXJ0eVR5cGV9J2ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JLZXkocHJvcGVydHlUeXBlOiBzdHJpbmcsIHNlbVR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtwcm9wZXJ0eVR5cGV9OiR7c2VtVHlwZX06JHtvcGVyYXRvcn1gO1xuICAgIH1cbn1cblxuXG5leHBvcnQgdHlwZSBIaXN0b3J5SXRlbSA9IHtcbiAgICBkYXRlOiBERy5UWVBFLkRBVEVfVElNRSxcbiAgICB2YWx1ZTogc3RyaW5nLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUhpc3Rvcnkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgY29sbGVjdGlvbjogSGlzdG9yeUl0ZW1bXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyAnW10nKTtcbiAgICBjb25zdCBuZXdJdGVtID0geyBkYXRlOiBuZXcgRGF0ZSgpLCB2YWx1ZTogdmFsdWUgfTtcbiAgICBpZiAoIWNvbGxlY3Rpb24ubGVuZ3RoKVxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KFtuZXdJdGVtXSkpO1xuICAgIGVsc2Uge1xuICAgICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbi5maWx0ZXIoKGl0KSA9PiBpdC52YWx1ZSAhPT0gdmFsdWUpXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoW25ld0l0ZW0sIC4uLmNvbGxlY3Rpb24uc2xpY2UoMCwgOSldKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlzdG9yeShrZXk6IHN0cmluZyk6IEhpc3RvcnlJdGVtW10ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gJ1tdJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXIge1xuICAgIHJvb3Q6IEhUTUxFbGVtZW50O1xuICAgIGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbjtcbiAgICBwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdO1xuICAgIHN0cnVjdHVyZUNoYW5nZWQ6IFN1YmplY3Q8Q29tcGxleENvbmRpdGlvbj4gPSBuZXcgU3ViamVjdDxDb21wbGV4Q29uZGl0aW9uPigpO1xuICAgIGZpbHRlclZhbHVlQ2hhbmdlZDogU3ViamVjdDxTaW1wbGVDb25kaXRpb24+ID0gbmV3IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPigpO1xuICAgIGxheW91dDogUXVlcnlCdWlsZGVyTGF5b3V0O1xuICAgIHByaXZhdGUgX2hpc3RvcnlDYWNoZUtleTogc3RyaW5nO1xuICAgIHByaXZhdGUgaGlzdG9yeUljb246IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdLCBpbml0aWFsQ29uZGl0aW9uPzogQ29tcGxleENvbmRpdGlvbiwgbGF5b3V0OiBRdWVyeUJ1aWxkZXJMYXlvdXQgPSBRdWVyeUJ1aWxkZXJMYXlvdXQuU3RhbmRhcmQsXG4gICAgICAgIF9oaXN0b3J5Q2FjaGVLZXk6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgICAgICB0aGlzLl9oaXN0b3J5Q2FjaGVLZXkgPSBfaGlzdG9yeUNhY2hlS2V5O1xuICAgICAgICBcbiAgICAgICAgaWYgKGluaXRpYWxDb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRDb25kaXRpb24gPSB0aGlzLmNyZWF0ZURlZmF1bHRTaW1wbGVDb25kaXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCxcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogW2RlZmF1bHRDb25kaXRpb25dXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5idWlsZFVJKHRoaXMuY29uZGl0aW9uLCB1bmRlZmluZWQsIDApO1xuICAgICAgICB0aGlzLnNldHVwSGlzdG9yeUljb24oKTtcbiAgICB9XG5cbiAgICBzZXQgaGlzdG9yeUNhY2hlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2hpc3RvcnlDYWNoZUtleSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXR1cEhpc3RvcnlJY29uKCk7IC8vIFRoaXMgd2lsbCBjb250cm9sIHZpc2liaWxpdHlcbiAgICB9XG5cbiAgICBzYXZlQ29uZGl0aW9uVG9IaXN0b3J5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faGlzdG9yeUNhY2hlS2V5KVxuICAgICAgICAgICAgc2F2ZUhpc3RvcnkodGhpcy5faGlzdG9yeUNhY2hlS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmRpdGlvbikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBIaXN0b3J5SWNvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhpc3RvcnlJY29uKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlJY29uID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0hpc3RvcnlNZW51KCk7XG4gICAgICAgICAgICB9LCAnUXVlcnkgSGlzdG9yeScpO1xuXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlJY29uLmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItaGlzdG9yeS1pY29uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5oaXN0b3J5SWNvbik7XG4gICAgICAgIFxuICAgICAgICAvLyBTZXQgZGF0YSBhdHRyaWJ1dGUgZm9yIENTUyB0byBjb250cm9sIHZpc2liaWxpdHlcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnNldEF0dHJpYnV0ZSgnZGF0YS1oaXN0b3J5JywgdGhpcy5faGlzdG9yeUNhY2hlS2V5ICA9PT0gJycgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0hpc3RvcnlNZW51KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtczogSGlzdG9yeUl0ZW1bXSA9IGdldEhpc3RvcnkodGhpcy5faGlzdG9yeUNhY2hlS2V5KTtcbiAgICAgICAgY29uc3QgbWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgbWVudS5pdGVtcyhpdGVtcy5tYXAoKGl0KSA9PiB1aS50b29scy5jbGljayhcbiAgICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQoaXQuZGF0ZS50b1N0cmluZygpLCB7c3R5bGU6IHtjb2xvcjogJyM3OTkwQTUnfX0pLFxuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQodGhpcy5jb25kaXRpb25Ub1N0cmluZyhKU09OLnBhcnNlKGl0LnZhbHVlKSBhcyBDb21wbGV4Q29uZGl0aW9uKSksXG4gICAgICAgICAgICBdLCB7c3R5bGU6IHtnYXA6ICc1cHgnfX0pLFxuICAgICAgICAoKSA9PiB7dGhpcy5sb2FkQ29uZGl0aW9uKEpTT04ucGFyc2UoaXQudmFsdWUpKX0pKSwgKCkgPT4ge30pO1xuICAgICAgICBtZW51LnNob3coKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRDb25kaXRpb24oY29uZGl0aW9uOiBDb21wbGV4Q29uZGl0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb25kaXRpb24pKTtcbiAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgIH1cblxuICAgIGNvbmRpdGlvblRvU3RyaW5nKGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghY29uZGl0aW9uIHx8ICFjb25kaXRpb24uY29uZGl0aW9ucyB8fCBjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnTm8gY29uZGl0aW9ucyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIGNvbmRpdGlvbiwgZG9uJ3Qgd3JhcCBpdCBpbiBsb2dpY2FsIG9wZXJhdG9yXG4gICAgICAgIGlmIChjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25Ub1N0cmluZyhjb25kaXRpb24uY29uZGl0aW9uc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgbXVsdGlwbGUgY29uZGl0aW9ucywgd3JhcCB0aGVtIGluIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICAgICAgY29uc3QgbG9naWNhbE9wID0gY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA9PT0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kID8gJ0FORCcgOiAnT1InO1xuICAgICAgICBjb25zdCBjb25kaXRpb25TdHJpbmdzID0gY29uZGl0aW9uLmNvbmRpdGlvbnMubWFwKGNvbmQgPT4gdGhpcy5leHByZXNzaW9uVG9TdHJpbmcoY29uZCkpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGAoJHtjb25kaXRpb25TdHJpbmdzLmpvaW4oYCAke2xvZ2ljYWxPcH0gYCl9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uVG9TdHJpbmcoZXhwcmVzc2lvbjogRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgICAgIGlmICgnZmllbGQnIGluIGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBTaW1wbGVDb25kaXRpb25cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNpbXBsZUNvbmRpdGlvblRvU3RyaW5nKGV4cHJlc3Npb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIENvbXBsZXhDb25kaXRpb24gKHJlY3Vyc2l2ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblRvU3RyaW5nKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaW1wbGVDb25kaXRpb25Ub1N0cmluZyhjb25kaXRpb246IFNpbXBsZUNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29uZGl0aW9uLmZpZWxkIHx8ICdVbmtub3duIGZpZWxkJztcbiAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBjb25kaXRpb24ub3BlcmF0b3IgfHwgJ1Vua25vd24gb3BlcmF0b3InO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmRpdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNvbmRpdGlvbi52YWx1ZSAhPT0gbnVsbCA/IFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uLnZhbHVlKSA/IGBbJHtjb25kaXRpb24udmFsdWUuam9pbignLCAnKX1dYCA6IFN0cmluZyhjb25kaXRpb24udmFsdWUpKSA6IFxuICAgICAgICAgICAgJ05vIHZhbHVlJztcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBgJHtmaWVsZH0gJHtvcGVyYXRvcn0gJHt2YWx1ZX1gO1xuICAgIH1cblxuICAgIGNyZWF0ZURlZmF1bHRTaW1wbGVDb25kaXRpb24oKTogU2ltcGxlQ29uZGl0aW9uIHtcbiAgICAgICAgY29uc3QgZmlyc3RQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc1swXTtcbiAgICAgICAgaWYgKGZpcnN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gQ29uZGl0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHJlZ2lzdHJ5LmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KGZpcnN0UHJvcGVydHkpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RPcGVyYXRvciA9IG9wZXJhdG9yc1swXTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaWVsZDogZmlyc3RQcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBmaXJzdE9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnJ1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIHJlYnVpbGRVSSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3Um9vdCA9IHRoaXMuYnVpbGRVSSh0aGlzLmNvbmRpdGlvbiwgdW5kZWZpbmVkLCAwKTtcbiAgICAgICAgdGhpcy5yb290LnJlcGxhY2VXaXRoKG5ld1Jvb3QpO1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXdSb290O1xuICAgICAgICBcbiAgICAgICAgLy8gUmVjcmVhdGUgaGlzdG9yeSBpY29uIGFmdGVyIHJlYnVpbGRpbmcgVUlcbiAgICAgICAgdGhpcy5zZXR1cEhpc3RvcnlJY29uKCk7XG4gICAgfVxuXG4gICAgc2V0TGF5b3V0KGxheW91dDogUXVlcnlCdWlsZGVyTGF5b3V0KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuXG4gICAgICAgIGlmIChsYXlvdXQgPT09IFF1ZXJ5QnVpbGRlckxheW91dC5OYXJyb3cpXG4gICAgICAgICAgICB0aGlzLnJvb3QuY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1uYXJyb3cnKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5yb290LmNsYXNzTGlzdC5yZW1vdmUoJ3F1ZXJ5LWJ1aWxkZXItbmFycm93Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBGaW5kIGFsbCBmaWx0ZXIgY29udGFpbmVycyBhbmQgYXBwbHkvcmVtb3ZlIGxheW91dCBjbGFzc2VzXG4gICAgICAgIGNvbnN0IGZpbHRlckNvbnRhaW5lcnMgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnLnF1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cywgLnF1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnKTtcbiAgICAgICAgXG4gICAgICAgIGZpbHRlckNvbnRhaW5lcnMuZm9yRWFjaChjb250YWluZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxheW91dCA9PT0gUXVlcnlCdWlsZGVyTGF5b3V0Lk5hcnJvdykge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdxdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdxdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TGF5b3V0KCk6IFF1ZXJ5QnVpbGRlckxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dDtcbiAgICB9XG5cbiAgICBidWlsZFVJKFxuICAgICAgICBjb25kaXRpb246IENvbXBsZXhDb25kaXRpb24sXG4gICAgICAgIHBhcmVudENvbmRpdGlvbj86IENvbXBsZXhDb25kaXRpb24sXG4gICAgICAgIG5lc3RpbmdMZXZlbDogbnVtYmVyID0gMFxuICAgICk6IEhUTUxFbGVtZW50IHtcblxuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uZGl0aW9uID0ge1xuICAgICAgICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogT3BlcmF0b3JzLkxvZ2ljYWwuYW5kLFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlT3JSZXBsYWNlQ29uZGl0aW9uID0gKGNvbmRUb1JlbW92ZTogRXhwcmVzc2lvbiwgY29uZEFycmF5PzogRXhwcmVzc2lvbltdLCByZXBsYWNlQ29uZD86IENvbXBsZXhDb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChjb25kQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kSWR4ID0gY29uZEFycmF5LmluZGV4T2YoY29uZFRvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZElkeCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VDb25kID8gY29uZEFycmF5W2NvbmRJZHhdID0gcmVwbGFjZUNvbmQgOiBjb25kQXJyYXkuc3BsaWNlKGNvbmRJZHgsIDEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3JlYXRlUHJvcGVydHlGaWx0ZXJDb250YWluZXIgPSAoY29uZDogU2ltcGxlQ29uZGl0aW9uLCBwYXJlbnRDb25kaXRpb24/OiBDb21wbGV4Q29uZGl0aW9uKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZUZpbHRlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB1aS5lbXB0eShvcGVyYXRvcklucHV0RGl2KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGdldFByb3BCeUZyaWVuZGx5TmFtZShmaWVsZENob2ljZUlucHV0LnZhbHVlISk7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gQ29uZGl0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gcmVnaXN0cnkuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmQub3BlcmF0b3IgfHwgY29uZC5vcGVyYXRvciA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgPSBvcGVyYXRvcnNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChjb25kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvcnNJbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbmQub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogb3BlcmF0b3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gb3BlcmF0b3JzSW5wdXQudmFsdWUhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JJbnB1dERpdi5hcHBlbmQob3BlcmF0b3JzSW5wdXQucm9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVkaXRvcihwcm9wZXJ0eSwgY29uZC5vcGVyYXRvciwgY29uZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVFZGl0b3IgPSAocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBjb25kaXRpb246IFNpbXBsZUNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHVpLmVtcHR5KGNyaXRlcmlhRGl2KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gcmVnaXN0cnkuZ2V0Q29uZGl0aW9uRWRpdG9yKHByb3BlcnR5LCBvcGVyYXRvciwgY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICBlZGl0b3Iub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoZWRpdG9yLmNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjcml0ZXJpYURpdi5hcHBlbmQoZWRpdG9yLnJvb3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BCeU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRQcm9wQnlGcmllbmRseU5hbWUgPSAoZnJpZW5kbHlOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AuZnJpZW5kbHlOYW1lID09PSBmcmllbmRseU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkpXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzLmZpbmQoKHByb3A6IERHLlByb3BlcnR5KSA9PiBwcm9wLm5hbWUgPT09IGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRGaWVsZENob2ljZUlucHV0VmFsID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3AgPSBnZXRQcm9wQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wPy5mcmllbmRseU5hbWUgPz8gcHJvcD8ubmFtZSA/PyAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2V0UHJvcE5hbWVCeUNob2ljZUlucHV0VmFsID0gKGZyaWVuZGx5TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IGdldFByb3BCeUZyaWVuZGx5TmFtZShmcmllbmRseU5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wPy5uYW1lID8/ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25kLmZpZWxkID8/PSB0aGlzLnByb3BlcnRpZXNbMF0/Lm5hbWUgfHwgJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkQ2hvaWNlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgICAgICBpdGVtczogdGhpcy5wcm9wZXJ0aWVzLm1hcCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AuZnJpZW5kbHlOYW1lID8/IHByb3AubmFtZSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGdldEZpZWxkQ2hvaWNlSW5wdXRWYWwoY29uZC5maWVsZCksXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQuZmllbGQgPSBnZXRQcm9wTmFtZUJ5Q2hvaWNlSW5wdXRWYWwoZmllbGRDaG9pY2VJbnB1dC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgICAgICBjb25kLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlZC5uZXh0KGNvbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVGaWVsZEljb24gPSB1aS5pY29ucy5kZWxldGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChmaWx0ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kLCBwYXJlbnRDb25kaXRpb24gPyBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyA6IGNvbmRpdGlvbi5jb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH0sICdSZW1vdmUgY3VycmVudCBjb25kaXRpb24nKTtcblxuICAgICAgICAgICAgY29uc3QgYWRkTmVzdGVkQ29uZGl0aW9uSWNvbiA9IHVpLmljb25zLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29uZCA9IHsgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbC5hbmQsIGNvbmRpdGlvbnM6IFtjb25kXSB9O1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kLCBwYXJlbnRDb25kaXRpb24gPyBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyA6IGNvbmRpdGlvbi5jb25kaXRpb25zLCBwYXJlbnRDb25kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcblxuICAgICAgICAgICAgfSwgJ0FkZCBuZXN0ZWQgY29uZGl0aW9uJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ySW5wdXREaXYgPSB1aS5kaXYoJycsICdxdWVyeS1idWlsZGVyLWZpbHRlci1vcGVyYXRvcicpO1xuICAgICAgICAgICAgY29uc3QgY3JpdGVyaWFEaXYgPSB1aS5kaXYoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29udGFpbmVyID0gdWkuZGl2KFtcbiAgICAgICAgICAgICAgICB1aS5kaXYoW2ZpZWxkQ2hvaWNlSW5wdXQucm9vdF0sICdxdWVyeS1idWlsZGVyLWZpbHRlci1maWVsZCcpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbb3BlcmF0b3JJbnB1dERpdl0sICdxdWVyeS1idWlsZGVyLWZpbHRlci1vcGVyYXRvcicpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbY3JpdGVyaWFEaXZdLCAncXVlcnktYnVpbGRlci1maWx0ZXItdmFsdWUnKSxcbiAgICAgICAgICAgICAgICB1aS5kaXYoW2RlbGV0ZUZpZWxkSWNvbiwgYWRkTmVzdGVkQ29uZGl0aW9uSWNvbl0sICdhZGQtZGVsZXRlLWljb25zJylcbiAgICAgICAgICAgIF0sIHRoaXMubGF5b3V0ID09PSBRdWVyeUJ1aWxkZXJMYXlvdXQuTmFycm93ID8gJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnIDogJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cycpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsdGVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChjb25kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZGluZyBmaWx0ZXIgZmllbGRcbiAgICAgICAgY29uc3QgYWRkRmllbGRJY29uID0gdWkuaWNvbnMuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkZvckZpbHRlcjogU2ltcGxlQ29uZGl0aW9uID0gdGhpcy5jcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk7XG4gICAgICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucz8ucHVzaChjb25kaXRpb25Gb3JGaWx0ZXIpO1xuICAgICAgICAgICAgY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoIDwgMiA/IGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpIDpcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKTtcbiAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH0sICdBZGQgZmllbGQgdG8gdGhlIGNvbmRpdGlvbicpO1xuXG4gICAgICAgIC8vIEFORC9PUiBvcGVyYXRvcnMgaGFuZGxpbmdcbiAgICAgICAgY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA/Pz0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kO1xuXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcGVyYXRvckNob2ljZSA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPT09IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA/ICdhbGwnIDogJ2FueScsXG4gICAgICAgICAgICBpdGVtczogWydhbGwnLCAnYW55J10sXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPSBsb2dpY2FsT3BlcmF0b3JDaG9pY2UudmFsdWUhID09PSAnYWxsJyA/IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA6IE9wZXJhdG9ycy5Mb2dpY2FsLm9yO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcGVyYXRvckRpdiA9IHVpLmRpdkgoW3VpLmRpdlRleHQoJ01hdGNoJyksIGxvZ2ljYWxPcGVyYXRvckNob2ljZS5yb290XSwgJ3F1ZXJ5LWJ1aWxkZXItbWF0Y2gtZGl2Jyk7XG5cbiAgICAgICAgY29uc3QgYWRkRGVsZXRlSWNvbnNEaXYgPSB1aS5kaXZIKFthZGRGaWVsZEljb25dLCAnbmVzdGVkLWFkZC1kZWxldGUtaWNvbnMnKTtcbiAgICAgICAgY29uc3QgaWNvbnNEaXYgPSB1aS5kaXZIKFtsb2dpY2FsT3BlcmF0b3JEaXYsIGFkZERlbGV0ZUljb25zRGl2XSwgJ3F1ZXJ5LWJ1aWxkZXItbmVzdGVkLWNvbmRpdGlvbi1vcGVyYXRvcnMnKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdWkuZGl2VihbaWNvbnNEaXZdLCAncXVlcnktYnVpbGRlci1zZWFyY2gtcXVlcnktb3BlcmF0b3InKTtcblxuXG4gICAgICAgIGlmIChuZXN0aW5nTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLW5lc3RpbmctbGV2ZWwnLCBuZXN0aW5nTGV2ZWwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuZ2VuZXJhdGVOZXN0aW5nQ29sb3IobmVzdGluZ0xldmVsKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZXN0aW5nLWNvbG9yJywgY29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9kZWxldGUgaWNvbiBmb3IgbmVzdGVkIGNvbmRpdGlvbnMgdG8gcmVtb3ZlIHRoZSB3aG9sZSBuZXN0ZWQgY29uZGl0aW9uIGF0IG9uY2VcbiAgICAgICAgaWYgKHBhcmVudENvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlQ29uZGl0aW9uID0gdWkuaWNvbnMuZGVsZXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVPclJlcGxhY2VDb25kaXRpb24oY29uZGl0aW9uLCBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFkZERlbGV0ZUljb25zRGl2LmFwcGVuZChkZWxldGVDb25kaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBuZXN0ZWRDb25kaXRpb24gb2YgY29uZGl0aW9uLmNvbmRpdGlvbnMhKSB7XG4gICAgICAgICAgICBpZiAoJ2ZpZWxkJyBpbiBuZXN0ZWRDb25kaXRpb24pXG4gICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlGaWx0ZXJDb250YWluZXIobmVzdGVkQ29uZGl0aW9uKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZENvbnRhaW5lciA9IHRoaXMuYnVpbGRVSShuZXN0ZWRDb25kaXRpb24gYXMgQ29tcGxleENvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLCBuZXN0aW5nTGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKG5lc3RlZENvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPCAyID8gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3Byb3BlcnR5LXF1ZXJ5LWJ1aWxkZXItbXVsdGlwZS1maWxlbGRzJykgOlxuICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LXF1ZXJ5LWJ1aWxkZXItbXVsdGlwZS1maWxlbGRzJyk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZU5lc3RpbmdDb2xvcihsZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYmFzZUNvbG9yID0geyByOiAxODcsIGc6IDIyMiwgYjogMjUxIH07XG5cbiAgICAgICAgY29uc3QgZGFya2VuaW5nRmFjdG9yID0gTWF0aC5taW4oMC4xICsgKGxldmVsIC0gMSkgKiAwLjA4LCAwLjkpO1xuXG4gICAgICAgIGNvbnN0IHIgPSBNYXRoLnJvdW5kKGJhc2VDb2xvci5yICogKDEgLSBkYXJrZW5pbmdGYWN0b3IpKTtcbiAgICAgICAgY29uc3QgZyA9IE1hdGgucm91bmQoYmFzZUNvbG9yLmcgKiAoMSAtIGRhcmtlbmluZ0ZhY3RvcikpO1xuICAgICAgICBjb25zdCBiID0gTWF0aC5yb3VuZChiYXNlQ29sb3IuYiAqICgxIC0gZGFya2VuaW5nRmFjdG9yKSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0byBoZXhcbiAgICAgICAgcmV0dXJuIGAjJHtyLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Zy50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX0ke2IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gc3VnZ2VzdGlvbk1lbnVLZXlOYXZpZ2F0aW9uKGlucHV0Q29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICBpbnB1dENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgIT09ICdBcnJvd0Rvd24nICYmIGUua2V5ICE9PSAnQXJyb3dVcCcgJiYgZS5rZXkgIT09ICdFbnRlcicpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgY3VycmVudGx5U2VsZWN0ZWQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGlucHV0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5kNC1tZW51LWl0ZW0taG92ZXInKTtcbiAgICBjb25zdCBhbGxJdGVtczogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oaW5wdXRDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmQ0LW1lbnUtaXRlbScpID8/IFtdKTtcbiAgICBpZiAoIWFsbEl0ZW1zIHx8IGFsbEl0ZW1zLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybjtcbiAgICBhbGxJdGVtcy5zb3J0KChhLCBiKSA9PiBhLm9mZnNldFRvcCAtIGIub2Zmc2V0VG9wKTsgLy8gc29ydCBieSB2ZXJ0aWNhbCBwb3NpdGlvblxuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRseVNlbGVjdGVkID8gYWxsSXRlbXMuaW5kZXhPZihjdXJyZW50bHlTZWxlY3RlZCkgOiAtMTtcbiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKVxuICAgICAgY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgYWxsSXRlbXMubGVuZ3RoO1xuICAgIGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpXG4gICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4IC0gMSArIGFsbEl0ZW1zLmxlbmd0aCkgJSBhbGxJdGVtcy5sZW5ndGg7XG4gICAgZWxzZSBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgY3VycmVudGx5U2VsZWN0ZWQpIHtcbiAgICAgIGN1cnJlbnRseVNlbGVjdGVkLmNsaWNrKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnRseVNlbGVjdGVkPy5jbGFzc0xpc3QucmVtb3ZlKCdkNC1tZW51LWl0ZW0taG92ZXInKTtcbiAgICBhbGxJdGVtc1tjdXJyZW50SW5kZXhdLmNsYXNzTGlzdC5hZGQoJ2Q0LW1lbnUtaXRlbS1ob3ZlcicpO1xuICB9KTtcbn1cblxuIl19
695
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFMUQsTUFBTSxLQUFXLFNBQVMsQ0FzQnpCO0FBdEJELFdBQWlCLFNBQVM7SUFDVCxrQkFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0QixZQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ1YscUJBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsbUJBQVMsR0FBRyxXQUFXLENBQUM7SUFDeEIsWUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNULGFBQUcsR0FBRyxJQUFJLENBQUM7SUFDWCxZQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ1QsYUFBRyxHQUFHLElBQUksQ0FBQztJQUNYLFlBQUUsR0FBRyxHQUFHLENBQUM7SUFDVCxnQkFBTSxHQUFHLElBQUksQ0FBQztJQUNkLGdCQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xCLGVBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLGlCQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLG9CQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFCLHNCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTNDLElBQVksT0FHWDtJQUhELFdBQVksT0FBTztRQUNmLHNCQUFXLENBQUE7UUFDWCxvQkFBUyxDQUFBO0lBQ2IsQ0FBQyxFQUhXLE9BQU8sR0FBUCxpQkFBTyxLQUFQLGlCQUFPLFFB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QUFLLE9BQU8sSUFBSSxpQkFBaUIsRUFBRTtZQUMvQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFELFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAnLi4vLi4vY3NzL3F1ZXJ5LWJ1aWxkZXIuY3NzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5cbmV4cG9ydCBjb25zdCBTVUdHRVNUSU9OU19GVU5DVElPTiA9ICdzdWdnZXN0aW9uc0Z1bmN0aW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBPcGVyYXRvcnMge1xuICAgIGV4cG9ydCBjb25zdCBDT05UQUlOUyA9ICdjb250YWlucyc7XG4gICAgZXhwb3J0IGNvbnN0IElOID0gJ2luJztcbiAgICBleHBvcnQgY29uc3QgU1RBUlRTX1dJVEggPSAnc3RhcnRzIHdpdGgnO1xuICAgIGV4cG9ydCBjb25zdCBFTkRTX1dJVEggPSAnZW5kcyB3aXRoJztcbiAgICBleHBvcnQgY29uc3QgR1QgPSAnPic7XG4gICAgZXhwb3J0IGNvbnN0IEdURSA9ICc+PSc7XG4gICAgZXhwb3J0IGNvbnN0IExUID0gJzwnO1xuICAgIGV4cG9ydCBjb25zdCBMVEUgPSAnPD0nO1xuICAgIGV4cG9ydCBjb25zdCBFUSA9ICc9JztcbiAgICBleHBvcnQgY29uc3QgTk9UX0VRID0gJyE9JztcbiAgICBleHBvcnQgY29uc3QgQkVGT1JFID0gJ2JlZm9yZSc7XG4gICAgZXhwb3J0IGNvbnN0IEFGVEVSID0gJ2FmdGVyJztcbiAgICBleHBvcnQgY29uc3QgT04gPSAnb24nO1xuICAgIGV4cG9ydCBjb25zdCBCRVRXRUVOID0gJ2JldHdlZW4nO1xuICAgIGV4cG9ydCBjb25zdCBJU19TSU1JTEFSID0gJ2lzIHNpbWlsYXInO1xuICAgIGV4cG9ydCBjb25zdCBJU19DT05UQUlORUQgPSAnaXMgY29udGFpbmVkJztcblxuICAgIGV4cG9ydCBlbnVtIExvZ2ljYWwge1xuICAgICAgICBhbmQgPSAnYW5kJyxcbiAgICAgICAgb3IgPSAnb3InLFxuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gUXVlcnlCdWlsZGVyTGF5b3V0IHtcbiAgICBTdGFuZGFyZCA9ICdzdGFuZGFyZCcsXG4gICAgTmFycm93ID0gJ25hcnJvdydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVDb25kaXRpb248VCA9IGFueT4ge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IHN0cmluZztcbiAgICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV4Q29uZGl0aW9uIHtcbiAgICBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsO1xuICAgIGNvbmRpdGlvbnM6IEV4cHJlc3Npb25bXTtcbn1cblxuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbjxUID0gYW55PiA9IFNpbXBsZUNvbmRpdGlvbjxUPiB8IENvbXBsZXhDb25kaXRpb247XG5cblxuZXhwb3J0IGNsYXNzIEJhc2VDb25kaXRpb25FZGl0b3I8VCA9IGFueT4ge1xuICAgIHJvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuZGl2KCk7XG4gICAgY29uZGl0aW9uOiBTaW1wbGVDb25kaXRpb248VD47XG4gICAgb25DaGFuZ2VkOiBTdWJqZWN0PFNpbXBsZUNvbmRpdGlvbjxUPj4gPSBuZXcgU3ViamVjdDxTaW1wbGVDb25kaXRpb248VD4+KCk7XG4gICAgc2hvd1N1Z2dlc3Rpb25zID0gZmFsc2U7XG4gICAgc3VnZ2VzdGlvbnNNZW51Q2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJvcDogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcsIGluaXRpYWxDb25kaXRpb24/OiBTaW1wbGVDb25kaXRpb248VD4pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uID8/IHtcbiAgICAgICAgICAgIGZpZWxkOiBwcm9wLm5hbWUsXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkIGFzIFRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdG9yKHByb3ApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogdm9pZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gdW5kZWZpbmVkIGFzIFQ7XG4gICAgICAgIGNvbnN0IGluaXRWYWwgPSBwcm9wLnR5cGUgPT09IERHLlRZUEUuREFURV9USU1FICYmIHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgZGF5anModGhpcy5jb25kaXRpb24udmFsdWUgYXMgc3RyaW5nKSA6IHRoaXMuY29uZGl0aW9uLnZhbHVlO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IGluaXRWYWwsXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gaW5wdXQudmFsdWUgYXMgVDtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Z2dlc3Rpb25zKHByb3AsIGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0LmFkZENhcHRpb24oJycpO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdWdnZXN0aW9ucyhwcm9wLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVN1Z2dlc3Rpb25zKHByb3A6IERHLlByb3BlcnR5LCBpbnB1dDogREcuSW5wdXRCYXNlKSB7XG4gICAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb25zID0gcHJvcC50eXBlID09PSBERy5UWVBFLlNUUklORyAmJiBwcm9wLm9wdGlvbnNbU1VHR0VTVElPTlNfRlVOQ1RJT05dO1xuICAgICAgICBpZiAodGhpcy5zaG93U3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgc3VnZ2VzdGlvbk1lbnVLZXlOYXZpZ2F0aW9uKHRoaXMucm9vdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhZGRTdWdnZXN0aW9ucyhwcm9wOiBERy5Qcm9wZXJ0eSwgaW5wdXQ6IERHLklucHV0QmFzZSkge1xuICAgICAgICBpZiAodGhpcy5zaG93U3VnZ2VzdGlvbnMgJiYgIXRoaXMuc3VnZ2VzdGlvbnNNZW51Q2xpY2tlZCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uczogQXJyYXk8c3RyaW5nPiA9IGF3YWl0IHByb3Aub3B0aW9uc1tTVUdHRVNUSU9OU19GVU5DVElPTl0oaW5wdXQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSAmJiBzdWdnZXN0aW9uc1swXSA9PT0gaW5wdXQudmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNNZW51ID0gREcuTWVudS5wb3B1cCgpO1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zTWVudSEuaXRlbShzLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc01lbnVDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnNNZW51LnNob3coeyBlbGVtZW50OiBpbnB1dC5yb290LCB5OiBpbnB1dC5yb290Lm9mZnNldEhlaWdodCB9KTtcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNNZW51Q2xpY2tlZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJldHdlZW5Db25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yIHtcbiAgICBvdmVycmlkZSBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb24udmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFt0aGlzLmNvbmRpdGlvbi52YWx1ZSwgdW5kZWZpbmVkXTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0MSA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlWzBdLFxuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZVswXSA9IGlucHV0MS52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dDEuYWRkQ2FwdGlvbignJyk7XG4gICAgICAgIGNvbnN0IGlucHV0MiA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlWzFdLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZVsxXSA9IGlucHV0Mi52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dDIuYWRkQ2FwdGlvbignJyk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodWkuZGl2SChbaW5wdXQxLnJvb3QsIGlucHV0Mi5yb290XSwgeyBzdHlsZTogeyBnYXA6ICcxMHB4JyB9IH0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29sZWFuQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvciB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uLnZhbHVlKVxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSB0cnVlXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbJ3RydWUnLCAnZmFsc2UnXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgIGl0ZW1zOiBvcHRpb25zLFxuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvciBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3I8c3RyaW5nPiB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICAvL2lmIHdlIHN3aXRoIGZyb20gc2ltaWxhcml0eSBpbnB1dCB0byBzdGFuZGFyZCBtb2xlY3VsZSBpbnB1dCAtIG5lZWQgdG8gbW9kaWZ5IHZhbHVlXG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbi52YWx1ZSAmJiB0eXBlb2YgdGhpcy5jb25kaXRpb24udmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoJ21vbGVjdWxlJyBpbiB0aGlzLmNvbmRpdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSAodGhpcy5jb25kaXRpb24udmFsdWUgYXMgTW9sZWN1bGVTaW1pbGFyaXR5KS5tb2xlY3VsZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubW9sZWN1bGUoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIC8vdG8gYWRqdXN0IHRoZSBmaWx0ZXIgd2lkdGggY29uc2lkZXJpbmcgbW9sZWN1bGUgaW5wdXRcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdUb3AgPSAnMTVweCc7XG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5wYWRkaW5nQm90dG9tID0gJzE1cHgnO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9sZWN1bGVTaW1pbGFyaXR5ID0ge1xuICAgIG1vbGVjdWxlOiBzdHJpbmcsXG4gICAgdGhyZXNob2xkOiBudW1iZXJcbn1cbmV4cG9ydCBjbGFzcyBNb2xlY3VsZVNpbWlsYXJpdHlDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPE1vbGVjdWxlU2ltaWxhcml0eT4ge1xuICAgIG92ZXJyaWRlIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICAgICAgLy9pbiBjYXNlIHdlIHN3aXRjaCBmcm9tIHNvbWUgb3RoZXIgb3BlcmF0b3IsIHdoZXJlIHZhbHVlIGlzIGEgc3RyaW5nIChjb250YWlucywgaXMgY29udGFpbmVkKVxuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uLnZhbHVlIHx8IHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0ge21vbGVjdWxlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA/PyAnJywgdGhyZXNob2xkOiAwLjd9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vbGVjdWxlSW5wdXQgPSB1aS5pbnB1dC5tb2xlY3VsZSgnJywge1xuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZS5tb2xlY3VsZSA9IG1vbGVjdWxlSW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0cmVzaG9sZElucHV0ID0gdWkuaW5wdXQuZmxvYXQoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZS50aHJlc2hvbGQsXG4gICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICBzdGVwOiAwLjAxXG4gICAgICAgIH0pO1xuICAgICAgICBERy5kZWJvdW5jZSh0cmVzaG9sZElucHV0Lm9uQ2hhbmdlZCwgMzAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUudGhyZXNob2xkID0gdHJlc2hvbGRJbnB1dC52YWx1ZSE7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZWKFttb2xlY3VsZUlucHV0LnJvb3QsIHRyZXNob2xkSW5wdXQucm9vdF0pKTtcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdUb3AgPSAnMTVweCc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yU3RyaW5nIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvcjxzdHJpbmdbXT4ge1xuICAgIG92ZXJyaWRlIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0Lmxpc3QoJycsIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JJbnQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIS5tYXAoKGl0KSA9PiBwYXJzZUludChpdCkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yRmxvYXQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIS5tYXAoKGl0KSA9PiBwYXJzZUZsb2F0KGl0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgIH1cbn1cblxuLy8gUmVnaXN0cnkgZm9yIGJvdGggb3BlcmF0b3JzIGFuZCBlZGl0b3JzXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uUmVnaXN0cnkge1xuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb25kaXRpb25SZWdpc3RyeTtcbiAgICBwcml2YXRlIHR5cGVPcGVyYXRvcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHNlbVR5cGVPcGVyYXRvcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGVkaXRvclJlZ2lzdHJ5OiBNYXA8c3RyaW5nLCBuZXcgKHByb3A6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBpbml0aWFsQ29uZGl0aW9uPzogYW55KSA9PiBCYXNlQ29uZGl0aW9uRWRpdG9yPiA9IG5ldyBNYXAoKTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRPcGVyYXRvcnMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdEVkaXRvcnMoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogQ29uZGl0aW9uUmVnaXN0cnkge1xuICAgICAgICBpZiAoIUNvbmRpdGlvblJlZ2lzdHJ5Lmluc3RhbmNlKSB7XG4gICAgICAgICAgICBDb25kaXRpb25SZWdpc3RyeS5pbnN0YW5jZSA9IG5ldyBDb25kaXRpb25SZWdpc3RyeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb25kaXRpb25SZWdpc3RyeS5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVEZWZhdWx0T3BlcmF0b3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBUeXBlIG9wZXJhdG9yc1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLkJPT0wsIFtPcGVyYXRvcnMuRVFdKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5TVFJJTkcsIFtPcGVyYXRvcnMuU1RBUlRTX1dJVEgsIE9wZXJhdG9ycy5DT05UQUlOUywgT3BlcmF0b3JzLkVRLCBPcGVyYXRvcnMuTk9UX0VRLCBPcGVyYXRvcnMuSU5dKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5JTlQsIFtPcGVyYXRvcnMuR1QsIE9wZXJhdG9ycy5MVCwgT3BlcmF0b3JzLkdURSwgT3BlcmF0b3JzLkxURSwgT3BlcmF0b3JzLkVRLFxuICAgICAgICAgICAgT3BlcmF0b3JzLk5PVF9FUSwgT3BlcmF0b3JzLkJFVFdFRU4sIE9wZXJhdG9ycy5JTl0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLkZMT0FULCBbT3BlcmF0b3JzLkdULCBPcGVyYXRvcnMuTFQsIE9wZXJhdG9ycy5HVEUsIE9wZXJhdG9ycy5MVEUsIE9wZXJhdG9ycy5FUSxcbiAgICAgICAgICAgIE9wZXJhdG9ycy5OT1RfRVEsIE9wZXJhdG9ycy5CRVRXRUVOLCBPcGVyYXRvcnMuSU5dKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5EQVRFX1RJTUUsIFtPcGVyYXRvcnMuQkVGT1JFLCBPcGVyYXRvcnMuQUZURVIsIE9wZXJhdG9ycy5CRVRXRUVOXSk7XG5cbiAgICAgICAgLy8gU2VtVHlwZSBvcGVyYXRvcnMgKHRha2UgcHJlY2VkZW5jZSBvdmVyIHR5cGUgb3BlcmF0b3JzKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyU2VtVHlwZU9wZXJhdG9ycyhERy5TRU1UWVBFLk1PTEVDVUxFLCBbT3BlcmF0b3JzLkNPTlRBSU5TLCBPcGVyYXRvcnMuSVNfQ09OVEFJTkVELCBPcGVyYXRvcnMuRVEsIE9wZXJhdG9ycy5JU19TSU1JTEFSXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRGVmYXVsdEVkaXRvcnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGRlZmF1bHQgZWRpdG9ycyBieSBwcm9wZXJ0eSB0eXBlICh3aXRoIGVtcHR5IHNlbVR5cGUgYW5kIG9wZXJhdG9yKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuSU5ULCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuRkxPQVQsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5EQVRFX1RJTUUsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5CT09MLCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIHNwZWNpYWxpemVkIGVkaXRvcnMgZm9yIHNwZWNpZmljIGNvbWJpbmF0aW9uc1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCAnJywgT3BlcmF0b3JzLklOLCBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yU3RyaW5nKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLklOVCwgJycsIE9wZXJhdG9ycy5JTiwgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvckludCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5GTE9BVCwgJycsIE9wZXJhdG9ycy5JTiwgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvckZsb2F0KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkRBVEVfVElNRSwgJycsIE9wZXJhdG9ycy5CRVRXRUVOLCBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLklOVCwgJycsIE9wZXJhdG9ycy5CRVRXRUVOLCBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkZMT0FULCAnJywgT3BlcmF0b3JzLkJFVFdFRU4sIEJldHdlZW5Db25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCBERy5TRU1UWVBFLk1PTEVDVUxFLCBPcGVyYXRvcnMuQ09OVEFJTlMsIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLklTX0NPTlRBSU5FRCwgTW9sZWN1bGVDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCBERy5TRU1UWVBFLk1PTEVDVUxFLCBPcGVyYXRvcnMuRVEsIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLklTX1NJTUlMQVIsIE1vbGVjdWxlU2ltaWxhcml0eUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5CT09MLCAnJywgT3BlcmF0b3JzLkVRLCBCb29sZWFuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICB9XG5cbiAgICAvLyBPcGVyYXRvciByZWdpc3RyYXRpb24gbWV0aG9kc1xuICAgIHJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhwcm9wZXJ0eVR5cGU6IHN0cmluZywgb3BlcmF0b3JzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnR5cGVPcGVyYXRvcnMuc2V0KHByb3BlcnR5VHlwZSwgb3BlcmF0b3JzKTtcbiAgICB9XG5cbiAgICByZWdpc3RlclNlbVR5cGVPcGVyYXRvcnMoc2VtVHlwZTogc3RyaW5nLCBvcGVyYXRvcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VtVHlwZU9wZXJhdG9ycy5zZXQoc2VtVHlwZSwgb3BlcmF0b3JzKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgb3BlcmF0b3JzIGZvciBhIHByb3BlcnR5XG4gICAgZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkocHJvcGVydHk6IERHLlByb3BlcnR5KTogc3RyaW5nW10ge1xuICAgICAgICAvLyBDaGVjayBzZW1UeXBlIGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byB0eXBlXG4gICAgICAgIGNvbnN0IHNlbVR5cGVPcHMgPSB0aGlzLnNlbVR5cGVPcGVyYXRvcnMuZ2V0KHByb3BlcnR5LnNlbVR5cGUpO1xuICAgICAgICBpZiAoc2VtVHlwZU9wcykgcmV0dXJuIHNlbVR5cGVPcHM7XG5cbiAgICAgICAgY29uc3QgdHlwZU9wcyA9IHRoaXMudHlwZU9wZXJhdG9ycy5nZXQocHJvcGVydHkucHJvcGVydHlUeXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVPcHMgfHwgW107XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgb3BlcmF0b3IgaXMgc3VwcG9ydGVkXG4gICAgaXNPcGVyYXRvclN1cHBvcnRlZChwcm9wZXJ0eTogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gdGhpcy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybiBvcGVyYXRvcnMuaW5jbHVkZXMob3BlcmF0b3IpO1xuICAgIH1cblxuICAgIC8vIEVkaXRvciByZWdpc3RyYXRpb24gbWV0aG9kc1xuICAgIHJlZ2lzdGVyRWRpdG9yPFQ+KFxuICAgICAgICBwcm9wZXJ0eVR5cGU6IHN0cmluZyxcbiAgICAgICAgc2VtVHlwZTogc3RyaW5nLFxuICAgICAgICBvcGVyYXRvcjogc3RyaW5nLFxuICAgICAgICBlZGl0b3JDbGFzczogbmV3IChwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZykgPT4gQmFzZUNvbmRpdGlvbkVkaXRvcjxUPlxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eVR5cGUsIHNlbVR5cGUsIG9wZXJhdG9yKTtcbiAgICAgICAgdGhpcy5lZGl0b3JSZWdpc3RyeS5zZXQoa2V5LCBlZGl0b3JDbGFzcyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGVkaXRvciBmb3IgYSBwcm9wZXJ0eSBhbmQgb3BlcmF0b3JcbiAgICBjcmVhdGVFZGl0b3I8VD4ocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBpbml0aWFsQ29uZGl0aW9uPzogU2ltcGxlQ29uZGl0aW9uPFQ+KTogQmFzZUNvbmRpdGlvbkVkaXRvcjxUPiB7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGEgc3BlY2lhbGl6ZWQgZWRpdG9yIGZpcnN0IChwcm9wZXJ0eVR5cGUgKyBzZW1UeXBlICsgb3BlcmF0b3IpXG4gICAgICAgIGNvbnN0IHNwZWNpYWxpemVkS2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHkucHJvcGVydHlUeXBlLCBwcm9wZXJ0eS5zZW1UeXBlLCBvcGVyYXRvcik7XG4gICAgICAgIGxldCBFZGl0b3JDbGFzcyA9IHRoaXMuZWRpdG9yUmVnaXN0cnkuZ2V0KHNwZWNpYWxpemVkS2V5KTtcblxuICAgICAgICAvLyBJZiBubyBzcGVjaWFsaXplZCBlZGl0b3IsIHRyeSB3aXRoIGVtcHR5IHNlbVR5cGUgKHByb3BlcnR5VHlwZSArIG9wZXJhdG9yKVxuICAgICAgICBpZiAoIUVkaXRvckNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlT25seUtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5LnByb3BlcnR5VHlwZSwgJycsIG9wZXJhdG9yKTtcbiAgICAgICAgICAgIEVkaXRvckNsYXNzID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5nZXQodHlwZU9ubHlLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc3RpbGwgbm8gc3BlY2lhbGl6ZWQgZWRpdG9yLCB1c2UgZGVmYXVsdCBlZGl0b3IgZm9yIHByb3BlcnR5IHR5cGUgKHByb3BlcnR5VHlwZSBvbmx5KVxuICAgICAgICBpZiAoIUVkaXRvckNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0S2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHkucHJvcGVydHlUeXBlLCAnJywgJycpO1xuICAgICAgICAgICAgRWRpdG9yQ2xhc3MgPSB0aGlzLmVkaXRvclJlZ2lzdHJ5LmdldChkZWZhdWx0S2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGJhc2UgZWRpdG9yXG4gICAgICAgIGlmICghRWRpdG9yQ2xhc3MpIHtcbiAgICAgICAgICAgIEVkaXRvckNsYXNzID0gQmFzZUNvbmRpdGlvbkVkaXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9yQ2xhc3MocHJvcGVydHksIG9wZXJhdG9yLCBpbml0aWFsQ29uZGl0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgY29uZGl0aW9uIGVkaXRvciBmb3IgYSBwcm9wZXJ0eSBhbmQgb3BlcmF0b3IgKHdpdGggdmFsaWRhdGlvbilcbiAgICBnZXRDb25kaXRpb25FZGl0b3I8VCA9IGFueT4ocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBjb25kaXRpb24/OiBTaW1wbGVDb25kaXRpb248VD4pOiBCYXNlQ29uZGl0aW9uRWRpdG9yPFQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVyYXRvclN1cHBvcnRlZChwcm9wZXJ0eSwgb3BlcmF0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVFZGl0b3IocHJvcGVydHksIG9wZXJhdG9yLCBjb25kaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE9wZXJhdG9yICcke29wZXJhdG9yfScgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJvcGVydHkgdHlwZSAnJHtwcm9wZXJ0eS5wcm9wZXJ0eVR5cGV9J2ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JLZXkocHJvcGVydHlUeXBlOiBzdHJpbmcsIHNlbVR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtwcm9wZXJ0eVR5cGV9OiR7c2VtVHlwZX06JHtvcGVyYXRvcn1gO1xuICAgIH1cbn1cblxuXG5leHBvcnQgdHlwZSBIaXN0b3J5SXRlbSA9IHtcbiAgICBkYXRlOiBERy5UWVBFLkRBVEVfVElNRSxcbiAgICB2YWx1ZTogc3RyaW5nLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUhpc3Rvcnkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgY29sbGVjdGlvbjogSGlzdG9yeUl0ZW1bXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyAnW10nKTtcbiAgICBjb25zdCBuZXdJdGVtID0geyBkYXRlOiBuZXcgRGF0ZSgpLCB2YWx1ZTogdmFsdWUgfTtcbiAgICBpZiAoIWNvbGxlY3Rpb24ubGVuZ3RoKVxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KFtuZXdJdGVtXSkpO1xuICAgIGVsc2Uge1xuICAgICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbi5maWx0ZXIoKGl0KSA9PiBpdC52YWx1ZSAhPT0gdmFsdWUpXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoW25ld0l0ZW0sIC4uLmNvbGxlY3Rpb24uc2xpY2UoMCwgOSldKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlzdG9yeShrZXk6IHN0cmluZyk6IEhpc3RvcnlJdGVtW10ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gJ1tdJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXIge1xuICAgIHJvb3Q6IEhUTUxFbGVtZW50O1xuICAgIGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbjtcbiAgICBwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdO1xuICAgIHN0cnVjdHVyZUNoYW5nZWQ6IFN1YmplY3Q8Q29tcGxleENvbmRpdGlvbj4gPSBuZXcgU3ViamVjdDxDb21wbGV4Q29uZGl0aW9uPigpO1xuICAgIGZpbHRlclZhbHVlQ2hhbmdlZDogU3ViamVjdDxTaW1wbGVDb25kaXRpb24+ID0gbmV3IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPigpO1xuICAgIGxheW91dDogUXVlcnlCdWlsZGVyTGF5b3V0O1xuICAgIHByaXZhdGUgX2hpc3RvcnlDYWNoZUtleTogc3RyaW5nO1xuICAgIHByaXZhdGUgaGlzdG9yeUljb246IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdLCBpbml0aWFsQ29uZGl0aW9uPzogQ29tcGxleENvbmRpdGlvbiwgbGF5b3V0OiBRdWVyeUJ1aWxkZXJMYXlvdXQgPSBRdWVyeUJ1aWxkZXJMYXlvdXQuU3RhbmRhcmQsXG4gICAgICAgIF9oaXN0b3J5Q2FjaGVLZXk6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgICAgICB0aGlzLl9oaXN0b3J5Q2FjaGVLZXkgPSBfaGlzdG9yeUNhY2hlS2V5O1xuICAgICAgICBcbiAgICAgICAgaWYgKGluaXRpYWxDb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRDb25kaXRpb24gPSB0aGlzLmNyZWF0ZURlZmF1bHRTaW1wbGVDb25kaXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCxcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogW2RlZmF1bHRDb25kaXRpb25dXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5idWlsZFVJKHRoaXMuY29uZGl0aW9uLCB1bmRlZmluZWQsIDApO1xuICAgICAgICB0aGlzLnNldHVwSGlzdG9yeUljb24oKTtcbiAgICB9XG5cbiAgICBzZXQgaGlzdG9yeUNhY2hlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2hpc3RvcnlDYWNoZUtleSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXR1cEhpc3RvcnlJY29uKCk7IC8vIFRoaXMgd2lsbCBjb250cm9sIHZpc2liaWxpdHlcbiAgICB9XG5cbiAgICBzYXZlQ29uZGl0aW9uVG9IaXN0b3J5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faGlzdG9yeUNhY2hlS2V5KVxuICAgICAgICAgICAgc2F2ZUhpc3RvcnkodGhpcy5faGlzdG9yeUNhY2hlS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmRpdGlvbikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBIaXN0b3J5SWNvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhpc3RvcnlJY29uKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlJY29uID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0hpc3RvcnlNZW51KCk7XG4gICAgICAgICAgICB9LCAnUXVlcnkgSGlzdG9yeScpO1xuXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlJY29uLmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItaGlzdG9yeS1pY29uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5oaXN0b3J5SWNvbik7XG4gICAgICAgIFxuICAgICAgICAvLyBTZXQgZGF0YSBhdHRyaWJ1dGUgZm9yIENTUyB0byBjb250cm9sIHZpc2liaWxpdHlcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnNldEF0dHJpYnV0ZSgnZGF0YS1oaXN0b3J5JywgdGhpcy5faGlzdG9yeUNhY2hlS2V5ICA9PT0gJycgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0hpc3RvcnlNZW51KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtczogSGlzdG9yeUl0ZW1bXSA9IGdldEhpc3RvcnkodGhpcy5faGlzdG9yeUNhY2hlS2V5KTtcbiAgICAgICAgY29uc3QgbWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgbWVudS5pdGVtcyhpdGVtcy5tYXAoKGl0KSA9PiB1aS50b29scy5jbGljayhcbiAgICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQoaXQuZGF0ZS50b1N0cmluZygpLCB7c3R5bGU6IHtjb2xvcjogJyM3OTkwQTUnfX0pLFxuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQodGhpcy5jb25kaXRpb25Ub1N0cmluZyhKU09OLnBhcnNlKGl0LnZhbHVlKSBhcyBDb21wbGV4Q29uZGl0aW9uKSksXG4gICAgICAgICAgICBdLCB7c3R5bGU6IHtnYXA6ICc1cHgnfX0pLFxuICAgICAgICAoKSA9PiB7dGhpcy5sb2FkQ29uZGl0aW9uKEpTT04ucGFyc2UoaXQudmFsdWUpKX0pKSwgKCkgPT4ge30pO1xuICAgICAgICBtZW51LnNob3coKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRDb25kaXRpb24oY29uZGl0aW9uOiBDb21wbGV4Q29uZGl0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb25kaXRpb24pKTtcbiAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgIH1cblxuICAgIGNvbmRpdGlvblRvU3RyaW5nKGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghY29uZGl0aW9uIHx8ICFjb25kaXRpb24uY29uZGl0aW9ucyB8fCBjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnTm8gY29uZGl0aW9ucyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIGNvbmRpdGlvbiwgZG9uJ3Qgd3JhcCBpdCBpbiBsb2dpY2FsIG9wZXJhdG9yXG4gICAgICAgIGlmIChjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25Ub1N0cmluZyhjb25kaXRpb24uY29uZGl0aW9uc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgbXVsdGlwbGUgY29uZGl0aW9ucywgd3JhcCB0aGVtIGluIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICAgICAgY29uc3QgbG9naWNhbE9wID0gY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA9PT0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kID8gJ0FORCcgOiAnT1InO1xuICAgICAgICBjb25zdCBjb25kaXRpb25TdHJpbmdzID0gY29uZGl0aW9uLmNvbmRpdGlvbnMubWFwKGNvbmQgPT4gdGhpcy5leHByZXNzaW9uVG9TdHJpbmcoY29uZCkpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGAoJHtjb25kaXRpb25TdHJpbmdzLmpvaW4oYCAke2xvZ2ljYWxPcH0gYCl9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uVG9TdHJpbmcoZXhwcmVzc2lvbjogRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgICAgIGlmICgnZmllbGQnIGluIGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBTaW1wbGVDb25kaXRpb25cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNpbXBsZUNvbmRpdGlvblRvU3RyaW5nKGV4cHJlc3Npb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIENvbXBsZXhDb25kaXRpb24gKHJlY3Vyc2l2ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblRvU3RyaW5nKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaW1wbGVDb25kaXRpb25Ub1N0cmluZyhjb25kaXRpb246IFNpbXBsZUNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29uZGl0aW9uLmZpZWxkIHx8ICdVbmtub3duIGZpZWxkJztcbiAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBjb25kaXRpb24ub3BlcmF0b3IgfHwgJ1Vua25vd24gb3BlcmF0b3InO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmRpdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNvbmRpdGlvbi52YWx1ZSAhPT0gbnVsbCA/IFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uLnZhbHVlKSA/IGBbJHtjb25kaXRpb24udmFsdWUuam9pbignLCAnKX1dYCA6IFN0cmluZyhjb25kaXRpb24udmFsdWUpKSA6IFxuICAgICAgICAgICAgJ05vIHZhbHVlJztcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBgJHtmaWVsZH0gJHtvcGVyYXRvcn0gJHt2YWx1ZX1gO1xuICAgIH1cblxuICAgIGNyZWF0ZURlZmF1bHRTaW1wbGVDb25kaXRpb24oKTogU2ltcGxlQ29uZGl0aW9uIHtcbiAgICAgICAgY29uc3QgZmlyc3RQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc1swXTtcbiAgICAgICAgaWYgKGZpcnN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gQ29uZGl0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHJlZ2lzdHJ5LmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KGZpcnN0UHJvcGVydHkpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RPcGVyYXRvciA9IG9wZXJhdG9yc1swXTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaWVsZDogZmlyc3RQcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBmaXJzdE9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnJ1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIHJlYnVpbGRVSSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3Um9vdCA9IHRoaXMuYnVpbGRVSSh0aGlzLmNvbmRpdGlvbiwgdW5kZWZpbmVkLCAwKTtcbiAgICAgICAgdGhpcy5yb290LnJlcGxhY2VXaXRoKG5ld1Jvb3QpO1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXdSb290O1xuICAgICAgICBcbiAgICAgICAgLy8gUmVjcmVhdGUgaGlzdG9yeSBpY29uIGFmdGVyIHJlYnVpbGRpbmcgVUlcbiAgICAgICAgdGhpcy5zZXR1cEhpc3RvcnlJY29uKCk7XG4gICAgfVxuXG4gICAgc2V0TGF5b3V0KGxheW91dDogUXVlcnlCdWlsZGVyTGF5b3V0KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuXG4gICAgICAgIGlmIChsYXlvdXQgPT09IFF1ZXJ5QnVpbGRlckxheW91dC5OYXJyb3cpXG4gICAgICAgICAgICB0aGlzLnJvb3QuY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1uYXJyb3cnKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5yb290LmNsYXNzTGlzdC5yZW1vdmUoJ3F1ZXJ5LWJ1aWxkZXItbmFycm93Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBGaW5kIGFsbCBmaWx0ZXIgY29udGFpbmVycyBhbmQgYXBwbHkvcmVtb3ZlIGxheW91dCBjbGFzc2VzXG4gICAgICAgIGNvbnN0IGZpbHRlckNvbnRhaW5lcnMgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnLnF1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cywgLnF1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnKTtcbiAgICAgICAgXG4gICAgICAgIGZpbHRlckNvbnRhaW5lcnMuZm9yRWFjaChjb250YWluZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxheW91dCA9PT0gUXVlcnlCdWlsZGVyTGF5b3V0Lk5hcnJvdykge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdxdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdxdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TGF5b3V0KCk6IFF1ZXJ5QnVpbGRlckxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dDtcbiAgICB9XG5cbiAgICBidWlsZFVJKFxuICAgICAgICBjb25kaXRpb246IENvbXBsZXhDb25kaXRpb24sXG4gICAgICAgIHBhcmVudENvbmRpdGlvbj86IENvbXBsZXhDb25kaXRpb24sXG4gICAgICAgIG5lc3RpbmdMZXZlbDogbnVtYmVyID0gMFxuICAgICk6IEhUTUxFbGVtZW50IHtcblxuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uZGl0aW9uID0ge1xuICAgICAgICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogT3BlcmF0b3JzLkxvZ2ljYWwuYW5kLFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlT3JSZXBsYWNlQ29uZGl0aW9uID0gKGNvbmRUb1JlbW92ZTogRXhwcmVzc2lvbiwgY29uZEFycmF5PzogRXhwcmVzc2lvbltdLCByZXBsYWNlQ29uZD86IENvbXBsZXhDb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChjb25kQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kSWR4ID0gY29uZEFycmF5LmluZGV4T2YoY29uZFRvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZElkeCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VDb25kID8gY29uZEFycmF5W2NvbmRJZHhdID0gcmVwbGFjZUNvbmQgOiBjb25kQXJyYXkuc3BsaWNlKGNvbmRJZHgsIDEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3JlYXRlUHJvcGVydHlGaWx0ZXJDb250YWluZXIgPSAoY29uZDogU2ltcGxlQ29uZGl0aW9uLCBwYXJlbnRDb25kaXRpb24/OiBDb21wbGV4Q29uZGl0aW9uKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZUZpbHRlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB1aS5lbXB0eShvcGVyYXRvcklucHV0RGl2KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGdldFByb3BCeUZyaWVuZGx5TmFtZShmaWVsZENob2ljZUlucHV0LnZhbHVlISk7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gQ29uZGl0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gcmVnaXN0cnkuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmQub3BlcmF0b3IgfHwgY29uZC5vcGVyYXRvciA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgPSBvcGVyYXRvcnNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChjb25kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvcnNJbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbmQub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogb3BlcmF0b3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gb3BlcmF0b3JzSW5wdXQudmFsdWUhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JJbnB1dERpdi5hcHBlbmQob3BlcmF0b3JzSW5wdXQucm9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVkaXRvcihwcm9wZXJ0eSwgY29uZC5vcGVyYXRvciwgY29uZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVFZGl0b3IgPSAocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBjb25kaXRpb246IFNpbXBsZUNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHVpLmVtcHR5KGNyaXRlcmlhRGl2KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gcmVnaXN0cnkuZ2V0Q29uZGl0aW9uRWRpdG9yKHByb3BlcnR5LCBvcGVyYXRvciwgY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICBlZGl0b3Iub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoZWRpdG9yLmNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjcml0ZXJpYURpdi5hcHBlbmQoZWRpdG9yLnJvb3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BCeU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRQcm9wQnlGcmllbmRseU5hbWUgPSAoZnJpZW5kbHlOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AuZnJpZW5kbHlOYW1lID09PSBmcmllbmRseU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkpXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzLmZpbmQoKHByb3A6IERHLlByb3BlcnR5KSA9PiBwcm9wLm5hbWUgPT09IGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRGaWVsZENob2ljZUlucHV0VmFsID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3AgPSBnZXRQcm9wQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wPy5mcmllbmRseU5hbWUgPz8gcHJvcD8ubmFtZSA/PyAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2V0UHJvcE5hbWVCeUNob2ljZUlucHV0VmFsID0gKGZyaWVuZGx5TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IGdldFByb3BCeUZyaWVuZGx5TmFtZShmcmllbmRseU5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wPy5uYW1lID8/ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25kLmZpZWxkID8/PSB0aGlzLnByb3BlcnRpZXNbMF0/Lm5hbWUgfHwgJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkQ2hvaWNlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgICAgICBpdGVtczogdGhpcy5wcm9wZXJ0aWVzLm1hcCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AuZnJpZW5kbHlOYW1lID8/IHByb3AubmFtZSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGdldEZpZWxkQ2hvaWNlSW5wdXRWYWwoY29uZC5maWVsZCksXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQuZmllbGQgPSBnZXRQcm9wTmFtZUJ5Q2hvaWNlSW5wdXRWYWwoZmllbGRDaG9pY2VJbnB1dC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgICAgICBjb25kLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlZC5uZXh0KGNvbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVGaWVsZEljb24gPSB1aS5pY29ucy5kZWxldGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChmaWx0ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kLCBwYXJlbnRDb25kaXRpb24gPyBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyA6IGNvbmRpdGlvbi5jb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH0sICdSZW1vdmUgY3VycmVudCBjb25kaXRpb24nKTtcblxuICAgICAgICAgICAgY29uc3QgYWRkTmVzdGVkQ29uZGl0aW9uSWNvbiA9IHVpLmljb25zLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29uZCA9IHsgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbC5hbmQsIGNvbmRpdGlvbnM6IFtjb25kXSB9O1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kLCBwYXJlbnRDb25kaXRpb24gPyBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyA6IGNvbmRpdGlvbi5jb25kaXRpb25zLCBwYXJlbnRDb25kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcblxuICAgICAgICAgICAgfSwgJ0FkZCBuZXN0ZWQgY29uZGl0aW9uJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ySW5wdXREaXYgPSB1aS5kaXYoJycsICdxdWVyeS1idWlsZGVyLWZpbHRlci1vcGVyYXRvcicpO1xuICAgICAgICAgICAgY29uc3QgY3JpdGVyaWFEaXYgPSB1aS5kaXYoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29udGFpbmVyID0gdWkuZGl2KFtcbiAgICAgICAgICAgICAgICB1aS5kaXYoW2ZpZWxkQ2hvaWNlSW5wdXQucm9vdF0sICdxdWVyeS1idWlsZGVyLWZpbHRlci1maWVsZCcpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbb3BlcmF0b3JJbnB1dERpdl0sICdxdWVyeS1idWlsZGVyLWZpbHRlci1vcGVyYXRvcicpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbY3JpdGVyaWFEaXZdLCAncXVlcnktYnVpbGRlci1maWx0ZXItdmFsdWUnKSxcbiAgICAgICAgICAgICAgICB1aS5kaXYoW2RlbGV0ZUZpZWxkSWNvbiwgYWRkTmVzdGVkQ29uZGl0aW9uSWNvbl0sICdhZGQtZGVsZXRlLWljb25zJylcbiAgICAgICAgICAgIF0sIHRoaXMubGF5b3V0ID09PSBRdWVyeUJ1aWxkZXJMYXlvdXQuTmFycm93ID8gJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnIDogJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cycpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsdGVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChjb25kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZGluZyBmaWx0ZXIgZmllbGRcbiAgICAgICAgY29uc3QgYWRkRmllbGRJY29uID0gdWkuaWNvbnMuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkZvckZpbHRlcjogU2ltcGxlQ29uZGl0aW9uID0gdGhpcy5jcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk7XG4gICAgICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucz8ucHVzaChjb25kaXRpb25Gb3JGaWx0ZXIpO1xuICAgICAgICAgICAgY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoIDwgMiA/IGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpIDpcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKTtcbiAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH0sICdBZGQgZmllbGQgdG8gdGhlIGNvbmRpdGlvbicpO1xuXG4gICAgICAgIC8vIEFORC9PUiBvcGVyYXRvcnMgaGFuZGxpbmdcbiAgICAgICAgY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA/Pz0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kO1xuXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcGVyYXRvckNob2ljZSA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPT09IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA/ICdhbGwnIDogJ2FueScsXG4gICAgICAgICAgICBpdGVtczogWydhbGwnLCAnYW55J10sXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPSBsb2dpY2FsT3BlcmF0b3JDaG9pY2UudmFsdWUhID09PSAnYWxsJyA/IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA6IE9wZXJhdG9ycy5Mb2dpY2FsLm9yO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcGVyYXRvckRpdiA9IHVpLmRpdkgoW3VpLmRpdlRleHQoJ01hdGNoJyksIGxvZ2ljYWxPcGVyYXRvckNob2ljZS5yb290XSwgJ3F1ZXJ5LWJ1aWxkZXItbWF0Y2gtZGl2Jyk7XG5cbiAgICAgICAgY29uc3QgYWRkRGVsZXRlSWNvbnNEaXYgPSB1aS5kaXZIKFthZGRGaWVsZEljb25dLCAnbmVzdGVkLWFkZC1kZWxldGUtaWNvbnMnKTtcbiAgICAgICAgY29uc3QgaWNvbnNEaXYgPSB1aS5kaXZIKFtsb2dpY2FsT3BlcmF0b3JEaXYsIGFkZERlbGV0ZUljb25zRGl2XSwgJ3F1ZXJ5LWJ1aWxkZXItbmVzdGVkLWNvbmRpdGlvbi1vcGVyYXRvcnMnKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdWkuZGl2VihbaWNvbnNEaXZdLCAncXVlcnktYnVpbGRlci1zZWFyY2gtcXVlcnktb3BlcmF0b3InKTtcblxuXG4gICAgICAgIGlmIChuZXN0aW5nTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLW5lc3RpbmctbGV2ZWwnLCBuZXN0aW5nTGV2ZWwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuZ2VuZXJhdGVOZXN0aW5nQ29sb3IobmVzdGluZ0xldmVsKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZXN0aW5nLWNvbG9yJywgY29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9kZWxldGUgaWNvbiBmb3IgbmVzdGVkIGNvbmRpdGlvbnMgdG8gcmVtb3ZlIHRoZSB3aG9sZSBuZXN0ZWQgY29uZGl0aW9uIGF0IG9uY2VcbiAgICAgICAgaWYgKHBhcmVudENvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlQ29uZGl0aW9uID0gdWkuaWNvbnMuZGVsZXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVPclJlcGxhY2VDb25kaXRpb24oY29uZGl0aW9uLCBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFkZERlbGV0ZUljb25zRGl2LmFwcGVuZChkZWxldGVDb25kaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBuZXN0ZWRDb25kaXRpb24gb2YgY29uZGl0aW9uLmNvbmRpdGlvbnMhKSB7XG4gICAgICAgICAgICBpZiAoJ2ZpZWxkJyBpbiBuZXN0ZWRDb25kaXRpb24pXG4gICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlGaWx0ZXJDb250YWluZXIobmVzdGVkQ29uZGl0aW9uKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZENvbnRhaW5lciA9IHRoaXMuYnVpbGRVSShuZXN0ZWRDb25kaXRpb24gYXMgQ29tcGxleENvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLCBuZXN0aW5nTGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKG5lc3RlZENvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPCAyID8gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3Byb3BlcnR5LXF1ZXJ5LWJ1aWxkZXItbXVsdGlwZS1maWxlbGRzJykgOlxuICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LXF1ZXJ5LWJ1aWxkZXItbXVsdGlwZS1maWxlbGRzJyk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZU5lc3RpbmdDb2xvcihsZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYmFzZUNvbG9yID0geyByOiAxODcsIGc6IDIyMiwgYjogMjUxIH07XG5cbiAgICAgICAgY29uc3QgZGFya2VuaW5nRmFjdG9yID0gTWF0aC5taW4oMC4xICsgKGxldmVsIC0gMSkgKiAwLjA4LCAwLjkpO1xuXG4gICAgICAgIGNvbnN0IHIgPSBNYXRoLnJvdW5kKGJhc2VDb2xvci5yICogKDEgLSBkYXJrZW5pbmdGYWN0b3IpKTtcbiAgICAgICAgY29uc3QgZyA9IE1hdGgucm91bmQoYmFzZUNvbG9yLmcgKiAoMSAtIGRhcmtlbmluZ0ZhY3RvcikpO1xuICAgICAgICBjb25zdCBiID0gTWF0aC5yb3VuZChiYXNlQ29sb3IuYiAqICgxIC0gZGFya2VuaW5nRmFjdG9yKSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0byBoZXhcbiAgICAgICAgcmV0dXJuIGAjJHtyLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Zy50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX0ke2IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gc3VnZ2VzdGlvbk1lbnVLZXlOYXZpZ2F0aW9uKGlucHV0Q29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICBpbnB1dENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgIT09ICdBcnJvd0Rvd24nICYmIGUua2V5ICE9PSAnQXJyb3dVcCcgJiYgZS5rZXkgIT09ICdFbnRlcicpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgY3VycmVudGx5U2VsZWN0ZWQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGlucHV0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5kNC1tZW51LWl0ZW0taG92ZXInKTtcbiAgICBjb25zdCBhbGxJdGVtczogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oaW5wdXRDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmQ0LW1lbnUtaXRlbScpID8/IFtdKTtcbiAgICBpZiAoIWFsbEl0ZW1zIHx8IGFsbEl0ZW1zLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybjtcbiAgICBhbGxJdGVtcy5zb3J0KChhLCBiKSA9PiBhLm9mZnNldFRvcCAtIGIub2Zmc2V0VG9wKTsgLy8gc29ydCBieSB2ZXJ0aWNhbCBwb3NpdGlvblxuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRseVNlbGVjdGVkID8gYWxsSXRlbXMuaW5kZXhPZihjdXJyZW50bHlTZWxlY3RlZCkgOiAtMTtcbiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKVxuICAgICAgY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgYWxsSXRlbXMubGVuZ3RoO1xuICAgIGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpXG4gICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4IC0gMSArIGFsbEl0ZW1zLmxlbmd0aCkgJSBhbGxJdGVtcy5sZW5ndGg7XG4gICAgZWxzZSBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgY3VycmVudGx5U2VsZWN0ZWQpIHtcbiAgICAgIGN1cnJlbnRseVNlbGVjdGVkLmNsaWNrKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnRseVNlbGVjdGVkPy5jbGFzc0xpc3QucmVtb3ZlKCdkNC1tZW51LWl0ZW0taG92ZXInKTtcbiAgICBhbGxJdGVtc1tjdXJyZW50SW5kZXhdLmNsYXNzTGlzdC5hZGQoJ2Q0LW1lbnUtaXRlbS1ob3ZlcicpO1xuICB9KTtcbn1cblxuIl19
package/src/test.js CHANGED
@@ -483,8 +483,9 @@ export function runTests(options) {
483
483
  return __awaiter(this, void 0, void 0, function* () {
484
484
  try {
485
485
  for (const [key, value] of Object.entries(categoriesToInvoke)) {
486
- if ((!!(options === null || options === void 0 ? void 0 : options.category) && !key.toLowerCase().startsWith(options === null || options === void 0 ? void 0 : options.category.toLowerCase())) ||
487
- ((_a = options.exclude) === null || _a === void 0 ? void 0 : _a.some((c) => key.startsWith(c))))
486
+ if ((!(options === null || options === void 0 ? void 0 : options.category) || ((_a = options.exclude) === null || _a === void 0 ? void 0 : _a.some((c) => key.startsWith(c)))))
487
+ continue;
488
+ if (!(key.toLowerCase().startsWith(`${options === null || options === void 0 ? void 0 : options.category.toLowerCase().trim()} :`) && !options.test) && key.toLowerCase().trim() !== (options === null || options === void 0 ? void 0 : options.category.toLowerCase().trim()))
488
489
  continue;
489
490
  stdLog(`Started ${key} category`);
490
491
  //@ts-ignore
@@ -779,4 +780,4 @@ export function testViewer(v, df, options) {
779
780
  }
780
781
  });
781
782
  }
782
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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LGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JGLElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVc7Z0JBQ3RCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLE9BQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUU5RztnQkFBUztZQUNSLGlEQUFpRDtZQUNqRCx5QkFBeUI7WUFDekIseUJBQXlCO1NBQzFCOztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGVzdERhdGEgfSBmcm9tICcuL2RhdGFmcmFtZS11dGlscyc7XG5pbXBvcnQgVGltZW91dCA9IE5vZGVKUy5UaW1lb3V0O1xuaW1wb3J0IHsgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIGZpbHRlckFzeW5jLCBsb2FkTGF5b3V0LCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50LCB0ZXN0Vmlld2VySW50ZXJuYWwgfSBmcm9tICcuL3Rlc3Qtdmlld2VyLXV0aWxzJztcblxuY29uc3QgU1RBTkRBUlRfVElNRU9VVCA9IDMwMDAwO1xuY29uc3QgQkVOQ0hNQVJLX1RJTUVPVVQgPSAxMDgwMDAwMDtcblxuY29uc3Qgc3RkTG9nID0gY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZEluZm8gPSBjb25zb2xlLmluZm8uYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZFdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZEVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuXG5leHBvcnQgY29uc3QgdGVzdHM6IHtcbiAgW2tleTogc3RyaW5nXTogQ2F0ZWdvcnlcbn0gPSB7fTtcblxuY29uc3QgYXV0b1Rlc3RzQ2F0TmFtZSA9ICdBdXRvIFRlc3RzJztcbmNvbnN0IGRlbW9DYXROYW1lID0gJ0RlbW8nO1xuY29uc3QgZGV0ZWN0b3JzQ2F0TmFtZSA9ICdEZXRlY3RvcnMnO1xuY29uc3QgY29yZUNhdE5hbWUgPSAnQ29yZSc7XG5jb25zdCB3YXNSZWdpc3RlcmVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZztcblxuZXhwb3J0IG5hbWVzcGFjZSBhc3N1cmUge1xuICBleHBvcnQgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1dhcm5UaW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICB1bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0PzogbnVtYmVyO1xuICBza2lwUmVhc29uPzogc3RyaW5nO1xuICBpc0FnZ3JlZ2F0ZWQ/OiBib29sZWFuO1xuICBiZW5jaG1hcms/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UmVzdWx0IHsgXG4gIGRhdGU6IHN0cmluZzsgXG4gIGNhdGVnb3J5OiBzdHJpbmc7IFxuICBuYW1lOiBzdHJpbmc7IFxuICBzdWNjZXNzOiBib29sZWFuOyBcbiAgcmVzdWx0OiBhbnk7IFxuICBtczogbnVtYmVyOyBcbiAgc2tpcHBlZDogYm9vbGVhbjsgXG4gIGxvZ3M6IHN0cmluZzsgXG4gIG93bmVyOiBzdHJpbmc7IFxuICBwYWNrYWdlOiBzdHJpbmc7XG4gIGZsYWtpbmc6IGJvb2xlYW47XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UmVzdWx0RXh0ZW5kZWQgZXh0ZW5kcyBUZXN0UmVzdWx0eyBcbiAgd2lkZ2V0c0RpZmZlcmVuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeU9wdGlvbnMge1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSBTVEFOREFSVF9USU1FT1VUO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50ZXN0ID0gYXN5bmMgKCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKERHLlRlc3QuaXNJbkRlYnVnKVxuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgXG4gICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzPy50b1N0cmluZygpID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZSkgeyBcbiAgICAgICAgICAgIHJlc3VsdCA9ICdDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyc7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyBpbiB0aGUgJHt0aGlzLmNhdGVnb3J5fToke3RoaXMubmFtZX0gdGVzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IHtcbiAgdGVzdHM/OiBUZXN0W107XG4gIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBiZWZvcmVTdGF0dXM/OiBzdHJpbmc7XG4gIGFmdGVyU3RhdHVzPzogc3RyaW5nO1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdEV4ZWN1dGlvbk9wdGlvbnMge1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGVzdD86IHN0cmluZztcbiAgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dDtcbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudDxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IHZvaWQsIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnRBc3luYzxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IFByb21pc2U8dm9pZD4sIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIGhhbmRsZXIoYXJncykudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMhLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG5cbi8qIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55ID0gdHJ1ZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGVycm9yKVxuICAgIGVycm9yID0gYCR7ZXJyb3J9LCBgO1xuICBlbHNlIGVycm9yID0gJyc7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWw6IG51bWJlciwgZXhwZWN0ZWQ6IG51bWJlciwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTmFOICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTmFOKSB8fCAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgPz8gJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gIGlmICghYXJlRXF1YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VGFibGUoYWN0dWFsOiBERy5EYXRhRnJhbWUsIGV4cGVjdGVkOiBERy5EYXRhRnJhbWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkUm93Q291bnQgPSBleHBlY3RlZC5yb3dDb3VudDtcbiAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgPz8gJyd9LCByb3cgY291bnRgKTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUuaXNTYW1lKHZhbHVlKSwgdHJ1ZSwgZXJyb3IpO1xuICAgICAgZWxzZVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0c186ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBDYXRlZ29yeU9wdGlvbnMpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzXygpO1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSkge1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uY2xlYXIgPSBvcHRpb25zPy5jbGVhciA/PyB0cnVlO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQ7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZW5jaG1hcmtzID0gb3B0aW9ucz8uYmVuY2htYXJrcztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnN0cmVzc1Rlc3RzID0gb3B0aW9ucz8uc3RyZXNzVGVzdHM7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5vd25lciA9IG9wdGlvbnM/Lm93bmVyO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBERy5GdW5jKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRBdXRvVGVzdHMocGFja2FnZV86IERHLlBhY2thZ2UsIG1vZHVsZT86IGFueSkge1xuICBjb25zdCBwYWNrYWdlSWQgPSBwYWNrYWdlXy5pZDtcbiAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSkgcmV0dXJuO1xuICBjb25zdCBtb2R1bGVUZXN0cyA9IG1vZHVsZSA/IG1vZHVsZS50ZXN0cyA6IHRlc3RzO1xuICBpZiAocGFja2FnZV8ubmFtZSA9PT0gJ0RldlRvb2xzJyB8fCAoISFtb2R1bGUgJiYgbW9kdWxlLl9wYWNrYWdlLm5hbWUgPT09ICdEZXZUb29scycpKSB7XG4gICAgZm9yIChjb25zdCBmIG9mICg8YW55PndpbmRvdykuZGFydFRlc3RzKSB7XG4gICAgICBjb25zdCBhcnIgPSBmLm5hbWUuc3BsaXQoL1xccypcXHxcXHMqIS9nKTtcbiAgICAgIGxldCBuYW1lID0gYXJyLnBvcCgpID8/IGYubmFtZTtcbiAgICAgIGxldCBjYXQgPSBhcnIubGVuZ3RoID8gY29yZUNhdE5hbWUgKyAnOiAnICsgYXJyLmpvaW4oJzogJykgOiBjb3JlQ2F0TmFtZTtcbiAgICAgIGxldCBmdWxsTmFtZTogc3RyaW5nW10gPSBuYW1lLnNwbGl0KCcgfCAnKTtcbiAgICAgIG5hbWUgPSBmdWxsTmFtZVtmdWxsTmFtZS5sZW5ndGggLSAxXTtcbiAgICAgIGZ1bGxOYW1lLnVuc2hpZnQoY2F0KTtcbiAgICAgIGZ1bGxOYW1lLnBvcCgpO1xuICAgICAgY2F0ID0gZnVsbE5hbWUuam9pbignOiAnKTtcbiAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaChuZXcgVGVzdChjYXQsIG5hbWUsIGYudGVzdCwgeyBpc0FnZ3JlZ2F0ZWQ6IGZhbHNlLCB0aW1lb3V0OiBmLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCwgc2tpcFJlYXNvbjogZi5vcHRpb25zPy5za2lwUmVhc29uLCBvd25lcjogZi5vcHRpb25zPy5vd25lciwgYmVuY2htYXJrOiBmLm9wdGlvbnM/LmJlbmNobWFyayA/PyBmYWxzZSB9KSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZW1vID0gW107XG4gIGNvbnN0IG1vZHVsZURldGVjdG9ycyA9IFtdO1xuICBjb25zdCBwYWNrRnVuY3Rpb25zID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC9za2lwOlxccyooW14sXFxzXSspfHdhaXQ6XFxzKihcXGQrKXxjYXQ6XFxzKihbXixcXHNdKyl8dGltZW91dDpcXHMqKFxcZCspL2cpO1xuICBmb3IgKGNvbnN0IGYgb2YgcGFja0Z1bmN0aW9ucykge1xuICAgIGNvbnN0IHRlc3RzID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgY29uc3QgZGVtbyA9IGYub3B0aW9uc1snZGVtb1BhdGgnXTtcbiAgICBpZiAoKHRlc3RzICYmIEFycmF5LmlzQXJyYXkodGVzdHMpICYmIHRlc3RzLmxlbmd0aCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzID0gKHRlc3RzW2ldIGFzIHN0cmluZykubWF0Y2hBbGwocmVnKTtcbiAgICAgICAgY29uc3QgbWFwOiB7IHNraXA/OiBzdHJpbmcsIHdhaXQ/OiBudW1iZXIsIGNhdD86IHN0cmluZywgdGltZW91dD86IG51bWJlciwgYmVuY2htYXJrVGltZW91dD86IG51bWJlciB9ID0ge307XG4gICAgICAgIEFycmF5LmZyb20ocmVzKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgICBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3NraXAnKSkgbWFwWydza2lwJ10gPSBhcnJbMV07XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3dhaXQnKSkgbWFwWyd3YWl0J10gPSBwYXJzZUludChhcnJbMl0pO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCdjYXQnKSkgbWFwWydjYXQnXSA9IGFyclszXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgndGltZW91dCcpKSBtYXBbJ3RpbWVvdXQnXSA9IHBhcnNlSW50KGFycls0XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QobWFwLmNhdCA/PyBhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmV2YWwoYWRkTmFtZXNwYWNlKHRlc3RzW2ldLCBmKSk7XG4gICAgICAgICAgaWYgKG1hcC53YWl0KSBhd2FpdCBkZWxheShtYXAud2FpdCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Jvb2xlYW4nICYmICFyZXMpIHRocm93IGBGYWlsZWQ6ICR7dGVzdHNbaV19LCBleHBlY3RlZCB0cnVlLCBnb3QgJHtyZXN9YDtcbiAgICAgICAgfSwgeyBza2lwUmVhc29uOiBtYXAuc2tpcCwgdGltZW91dDogREcuVGVzdC5pc0luQmVuY2htYXJrID8gbWFwLmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiBtYXAudGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUIH0pO1xuICAgICAgICBpZiAobWFwLmNhdCkge1xuICAgICAgICAgIGNvbnN0IGNhdDogc3RyaW5nID0gbWFwLmNhdDtcbiAgICAgICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuXG4gICAgICAgICAgLy8gb25seSBiZWZvcmUvYWZ0ZXIgY2FuIGJlIGRlZmluZWQgaW4gdHMgZmlsZXMgdGVzdHMgdW5kZXIgdGhlIGNhdGVnb3J5XG4gICAgICAgICAgaWYgKCFtb2R1bGVUZXN0c1tjYXRdLnRlc3RzKVxuICAgICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cyA9IFtdO1xuICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgbW9kdWxlQXV0b1Rlc3RzLnB1c2godGVzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZW1vKSB7XG4gICAgICBjb25zdCB3YWl0ID0gZi5vcHRpb25zWydkZW1vV2FpdCddID8gcGFyc2VJbnQoZi5vcHRpb25zWydkZW1vV2FpdCddKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZW1vQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGVsYXkoMzAwKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICAgICAgICBhd2FpdCBmLmFwcGx5KCk7XG4gICAgICAgIGF3YWl0IGRlbGF5KHdhaXQgPyB3YWl0IDogMjAwMCk7XG4gICAgICAgIGNvbnN0IHVuaGFuZGxlZCA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgICBpZiAodW5oYW5kbGVkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmhhbmRsZWQpO1xuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ2RlbW9Ta2lwJ10gfSk7XG4gICAgICBtb2R1bGVEZW1vLnB1c2godGVzdCk7XG4gICAgfVxuICAgIGlmIChmLmhhc1RhZygnc2VtVHlwZURldGVjdG9yJykpIHtcbiAgICAgIGxldCBkZXRlY3RvcnNUZXN0RGF0YSA9IHRlc3REYXRhO1xuICAgICAgaWYgKGYub3B0aW9uc1sndGVzdERhdGEnXSkge1xuICAgICAgICBkZXRlY3RvcnNUZXN0RGF0YSA9IGF3YWl0IGdyb2suZGF0YS5maWxlcy5vcGVuVGFibGUoYFN5c3RlbTpBcHBEYXRhLyR7cGFja2FnZV8ubnFOYW1lfS8ke2Yub3B0aW9uc1sndGVzdERhdGEnXX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRldGVjdG9yc0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBjb25zb2xlLmxvZyhgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRldGVjdG9yc1Rlc3REYXRhLmNsb25lKCkuY29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGYuYXBwbHkoW2NvbF0pO1xuICAgICAgICAgIGFyci5wdXNoKHJlcyB8fCBjb2wuc2VtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzQXJyID0gYXJyLmZpbHRlcigoaSkgPT4gaSk7XG4gICAgICAgIGV4cGVjdChyZXNBcnIubGVuZ3RoLCAxKTtcblxuICAgICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YUNvbHVtbk5hbWUnXSlcbiAgICAgICAgICBleHBlY3QocmVzQXJyWzBdLCBmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKTtcblxuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ3NraXBUZXN0J10gfSk7XG4gICAgICBtb2R1bGVEZXRlY3RvcnMucHVzaCh0ZXN0KTtcbiAgICB9XG4gIH1cbiAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgaWYgKG1vZHVsZUF1dG9UZXN0cy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlQXV0b1Rlc3RzLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGVtby5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURlbW8sIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZXRlY3RvcnMubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1tkZXRlY3RvcnNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURldGVjdG9ycywgY2xlYXI6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIHJlZGVmaW5lQ29uc29sZSgpOiBhbnlbXSB7XG4gIGNvbnN0IGxvZ3M6IGFueVtdID0gW107XG4gIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkTG9nKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmluZm8gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRJbmZvKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLndhcm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRXYXJuKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkRXJyb3IoLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiBsb2dzO1xufVxuXG5mdW5jdGlvbiByZXNldENvbnNvbGUoKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nID0gc3RkTG9nO1xuICBjb25zb2xlLmluZm8gPSBzdGRJbmZvO1xuICBjb25zb2xlLndhcm4gPSBzdGRXYXJuO1xuICBjb25zb2xlLmVycm9yID0gc3RkRXJyb3I7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zPzogVGVzdEV4ZWN1dGlvbk9wdGlvbnMpIDogUHJvbWlzZTxUZXN0UmVzdWx0RXh0ZW5kZWRbXT57XG4gIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLScpXG4gIGNvbnN0IHBhY2thZ2VfID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKT8uZnVuYz8ucGFja2FnZSE7XG4gIGNvbnN0IHBhY2thZ2VPd25lciA9ICgocGFja2FnZV8/LnBhY2thZ2VPd25lciA/PyAnJykubWF0Y2gobmV3IFJlZ0V4cCgnW148XSo8KFtePl0qKT4nKSkgPz8gWycnLCAnJ10pWzFdO1xuICBhd2FpdCBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfKTtcbiAgY29uc3QgcmVzdWx0czpUZXN0UmVzdWx0RXh0ZW5kZWRbXSA9IFtdO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBjb25zb2xlLmxvZyhvcHRpb25zKTtcbiAgb3B0aW9ucyA/Pz0ge307XG4gIG9wdGlvbnMhLnRlc3RDb250ZXh0ID8/PSBuZXcgVGVzdENvbnRleHQoKTtcbiAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICBjb25zdCBsb2dzID0gcmVkZWZpbmVDb25zb2xlKCk7XG5cbiAgYXdhaXQgaW52b2tlVGVzdHModGVzdHMsIG9wdGlvbnMpO1xuXG4gIGZvciAobGV0IHIgb2YgcmVzdWx0cykge1xuICAgIHIucmVzdWx0ID0gci5yZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gICAgaWYgKHIubG9ncyAhPSB1bmRlZmluZWQpXG4gICAgICByLmxvZ3MgPSByLmxvZ3MhLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1xcJycpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZUNhdGVnb3J5TWV0aG9kKG1ldGhvZDogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgdW5kZWZpbmVkLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgaW52b2thdGlvblJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgaWYgKG1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG1ldGhvZCgpO1xuICAgICAgICB9LCAxMDAwMDAsIGBiZWZvcmUgJHtjYXRlZ29yeX06IHRpbWVvdXQgZXJyb3JgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIGludm9rYXRpb25SZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHQoeCk7XG4gICAgfVxuICAgIHJldHVybiBpbnZva2F0aW9uUmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VUZXN0c0luQ2F0ZWdvcnkoY2F0ZWdvcnk6IENhdGVnb3J5LCBvcHRpb25zOiBUZXN0RXhlY3V0aW9uT3B0aW9ucyk6IFByb21pc2U8VGVzdFJlc3VsdEV4dGVuZGVkW10+IHtcbiAgICBsZXQgdCA9IGNhdGVnb3J5LnRlc3RzID8/IFtdO1xuICAgIGNvbnN0IHJlcyA6IFRlc3RSZXN1bHRFeHRlbmRlZFtdID0gW107XG4gICAgLy8gbGV0IG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICBjb25zdCB3aWRnZXRzQmVmb3JlID0gZ2V0V2lkZ2V0c0NvdW50U2FmZSgpO1xuXG4gICAgaWYgKGNhdGVnb3J5LmNsZWFyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICBpZiAodFtpXS5vcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghdFtpXS5vcHRpb25zKVxuICAgICAgICAgICAgICB0W2ldLm9wdGlvbnMgPSB7fVxuICAgICAgICAgICAgdFtpXS5vcHRpb25zIS5iZW5jaG1hcmsgPSBjYXRlZ29yeS5iZW5jaG1hcmtzID8/IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdGVzdCA9IHRbaV07XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3QpXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpICE9PSB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgKioqKioqKioke2lzR0JFbmFibGV9YCk7XG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICAvLyBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodGVzdCwgb3B0aW9ucz8udGVzdCwgbG9ncywgREcuVGVzdC5pc0luQmVuY2htYXJrID8gdFtpXS5vcHRpb25zPy5iZW5jaG1hcmtUaW1lb3V0ID8/IEJFTkNITUFSS19USU1FT1VUIDogdFtpXS5vcHRpb25zPy50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQsIHBhY2thZ2VfLm5hbWUsIG9wdGlvbnMudmVyYm9zZSk7XG5cbiAgICAgICAgLy8gaWYgKGlzR0JFbmFibGUpXG4gICAgICAgIC8vICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIGlmICh0ZXN0UnVuKVxuICAgICAgICAgIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgIHdpZGdldHNEaWZmZXJlbmNlOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuICAgICAgICAvLyByZXMucHVzaCh7IC4uLnRlc3RSdW4sIG1lbW9yeURlbHRhOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEZWx0YTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgICBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB0ZXN0ID0gdFtpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVzdClcbiAgICAgICAgICBpZiAob3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYCoqKioqKioqJHtpc0dCRW5hYmxlfWApO1xuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgLy8gbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KHRlc3QsIG9wdGlvbnM/LnRlc3QsIGxvZ3MsIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcblxuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0ZXN0UnVuKVxuICAgICAgICAgIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG4gICAgICAgIC8vIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgbWVtb3J5RGVsdGE6ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemUgLSBtZW1vcnlVc2FnZUJlZm9yZSwgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFdpZGdldHNDb3VudFNhZmUoKSB7XG4gICAgbGV0IGxlbmd0aCA9IC0xO1xuICAgIHRyeSB7XG4gICAgICBsZW5ndGggPSBERy5XaWRnZXQuZ2V0QWxsKCkubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS53YXJuKGUubWVzc2FnZSA/PyBlKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzKGNhdGVnb3JpZXNUb0ludm9rZTogeyBba2V5OiBzdHJpbmddOiBDYXRlZ29yeSB9LCBvcHRpb25zOiBUZXN0RXhlY3V0aW9uT3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjYXRlZ29yaWVzVG9JbnZva2UpKSB7XG4gICAgICAgIGlmICgoISFvcHRpb25zPy5jYXRlZ29yeSAmJiAha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zPy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSkgfHxcbiAgICAgICAgICBvcHRpb25zLmV4Y2x1ZGU/LnNvbWUoKGMpID0+IGtleS5zdGFydHNXaXRoKGMpKSlcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBzdGRMb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBza2lwcGVkID0gdmFsdWUudGVzdHM/LmV2ZXJ5KCh0OiBUZXN0KSA9PiB0Lm9wdGlvbnM/LnNraXBSZWFzb24pO1xuICAgICAgICBpZiAoIXNraXBwZWQpXG4gICAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0gYXdhaXQgaW52b2tlQ2F0ZWdvcnlNZXRob2QodmFsdWUuYmVmb3JlLCBvcHRpb25zLmNhdGVnb3J5ID8/ICcnKTtcblxuICAgICAgICBsZXQgdCA9IHZhbHVlLnRlc3RzID8/IFtdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmVzc1Rlc3QpIHtcbiAgICAgICAgICB0ID0gdC5maWx0ZXIoKGUpID0+IGUub3B0aW9ucz8uc3RyZXNzVGVzdCk7XG4gICAgICAgICAgdCA9IHNodWZmbGUodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKG9wdGlvbnMudGFncz8ubGVuZ3RoID8/IDApID4gMCkge1xuICAgICAgICAgIHQgPSB0LmZpbHRlcigoZSkgPT5cbiAgICAgICAgICAgIGUub3B0aW9ucz8udGFncz8uc29tZSh0YWcgPT4gKG9wdGlvbnM/LnRhZ3MgPz8gW10pLmluY2x1ZGVzKHRhZykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXM6IFRlc3RSZXN1bHRFeHRlbmRlZFtdO1xuICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKSB7XG4gICAgICAgICAgcmVzID0gQXJyYXkuZnJvbSh0Lm1hcCgodGVzdEVsZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7ICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGNhdGVnb3J5OiBrZXksIG5hbWU6IHRlc3RFbGVtLm5hbWUsIHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6ICdiZWZvcmUoKSBmYWlsZWQnLCBtczogMCwgc2tpcHBlZDogZmFsc2UsIGxvZ3M6ICcnLG93bmVyOiBwYWNrYWdlXz8ucGFja2FnZU93bmVyLCBwYWNrYWdlOiBwYWNrYWdlXy5uYW1lLCB3aWRnZXRzRGlmZmVyZW5jZTogIDAsIGZsYWtpbmc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyB9O1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXMuZm9yRWFjaChhc3luYyAodGVzdCkgPT4gcmVwb3J0VGVzdCgncGFja2FnZScsIHRlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzID0gYXdhaXQgaW52b2tlVGVzdHNJbkNhdGVnb3J5KHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA6IFRlc3RSZXN1bHRFeHRlbmRlZFtdID0gcmVzLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcblxuICAgICAgICBpZiAoIXNraXBwZWQpXG4gICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5hZnRlciwgb3B0aW9ucy5jYXRlZ29yeSA/PyAnJyk7XG5cbiAgICAgICAgLy8gQ2xlYXIgYWZ0ZXIgY2F0ZWdvcnlcbiAgICAgICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgICAgICBkYXRhLnB1c2goeyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGNhdGVnb3J5OiBrZXksIG5hbWU6ICdhZnRlcicsIHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBtczogMCwgc2tpcHBlZDogZmFsc2UsIGxvZ3M6ICcnLG93bmVyOiBwYWNrYWdlXz8ucGFja2FnZU93bmVyLCBwYWNrYWdlOiBwYWNrYWdlXy5uYW1lLCB3aWRnZXRzRGlmZmVyZW5jZTogIDAsIGZsYWtpbmc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICBkYXRhLnB1c2goeyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGNhdGVnb3J5OiBrZXksIG5hbWU6ICdiZWZvcmUnLCBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgbG9nczogJycsb3duZXI6IHBhY2thZ2VfPy5wYWNrYWdlT3duZXIsIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsIHdpZGdldHNEaWZmZXJlbmNlOiAgMCwgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nfSk7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzZXRDb25zb2xlKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0IS5jYXRjaFVuaGFuZGxlZCAmJiAoIURHLlRlc3QuaXNJbkJlbmNobWFyaykpIHtcbiAgICAgIGF3YWl0IGRlbGF5KDEwMDApO1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgIGNvbnN0IHBhcmFtcyA6IGFueSA9IHtcbiAgICAgICAgbG9nczogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgIG5hbWU6ICdFeGNlcHRpb24nLFxuICAgICAgICByZXN1bHQ6IGVycm9yID8/ICcnLCBcbiAgICAgICAgc3VjY2VzczogIWVycm9yLCBcbiAgICAgICAgbXM6IDAsIFxuICAgICAgICBza2lwcGVkOiBmYWxzZSxcbiAgICAgICAgb3duZXI6IHBhY2thZ2VPd25lciA/PyAnJyxcbiAgICAgICAgJ3BhY2thZ2UnOiBwYWNrYWdlXy5uYW1lLFxuICAgICAgICB3aWRnZXRzRGlmZmVyZW5jZTogMFxuICAgICAgfTtcbiAgICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goey4uLnBhcmFtcywgJ2ZsYWtpbmcnOiBERy5UZXN0LmlzUmVwcm9kdWNpbmcgJiYgIWVycm9yfSk7XG4gICAgICAoPGFueT5wYXJhbXMpLnBhY2thZ2UgPSBwYWNrYWdlXy5uYW1lO1xuICAgICAgYXdhaXQgcmVwb3J0VGVzdCgncGFja2FnZScsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcG9ydFRlc3QodHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCAhPSBudWxsKVxuICAgIGF3YWl0ICg8YW55Pmdyb2suc2hlbGwpLnJlcG9ydFRlc3QodHlwZSwgcGFyYW1zKTtcbiAgZWxzZSB7XG4gICAgYXdhaXQgZmV0Y2goYCR7Z3Jvay5kYXBpLnJvb3R9L2xvZy90ZXN0cy8ke3R5cGV9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXJhbXMpXG4gICAgfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzdWx0KHg6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBgJHt4LnRvU3RyaW5nKCl9XFxuJHt4LnN0YWNrID8gKGF3YWl0IERHLkxvZ2dlci50cmFuc2xhdGVTdGFja1RyYWNlKHguc3RhY2spKSA6ICcnfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2dzOiBhbnlbXSxcbiAgdGVzdFRpbWVvdXQ/OiBudW1iZXIsIHBhY2thZ2VOYW1lPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbik6IFByb21pc2U8VGVzdFJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICBsb2dzLmxlbmd0aCA9IDA7XG4gIGxldCByOiBUZXN0UmVzdWx0O1xuICBsZXQgdHlwZTogc3RyaW5nID0gJ3BhY2thZ2UnO1xuICBjb25zdCBmaWx0ZXIgPSBwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICh0Lm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gcHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpO1xuICBsZXQgc2tpcCA9IHQub3B0aW9ucz8uc2tpcFJlYXNvbiB8fCBmaWx0ZXI7XG4gIGxldCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogdC5vcHRpb25zPy5za2lwUmVhc29uO1xuICBjb25zb2xlLmxvZyh0ZXN0Lm5hbWUsIHNraXApO1xuXG4gIGlmIChERy5UZXN0LmlzSW5CZW5jaG1hcmsgJiYgIXQub3B0aW9ucz8uYmVuY2htYXJrKSB7XG4gICAgc3RkTG9nKGBTS0lQUEVEOiAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBkb2VzbnQgYXZhaWxhYmxlIGluIGJlbmNobWFyayBtb2RlYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydCkudG9JU09TdHJpbmcoKTtcbiAgdHJ5IHtcbiAgICBpZiAoc2tpcClcbiAgICAgIHIgPSB7IG5hbWU6IHQubmFtZSwgb3duZXI6dC5vcHRpb25zPy5vd25lciA/PyAnJywgY2F0ZWdvcnk6IHQuY2F0ZWdvcnksIGxvZ3M6ICcnLCBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlLCBwYWNrYWdlOiBwYWNrYWdlTmFtZSA/PyAnJywgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nfTtcbiAgICBlbHNlIHtcbiAgICAgIGxldCB0aW1lb3V0XyA9IHRlc3RUaW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQ7XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKVxuICAgICAgICBjb25zb2xlLnByb2ZpbGUoYCR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfWApO1xuXG4gICAgICByID0geyBuYW1lOiB0Lm5hbWUsIG93bmVyOnQub3B0aW9ucz8ub3duZXIgPz8gJycsIGNhdGVnb3J5OiB0LmNhdGVnb3J5LCBsb2dzOiAnJywgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IChhd2FpdCB0aW1lb3V0KHQudGVzdCwgdGltZW91dF8pKS50b1N0cmluZygpID8/ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSAsIHBhY2thZ2U6IHBhY2thZ2VOYW1lID8/ICcnLCBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmd9O1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZykge1xuICAgICAgICBjb25zb2xlLnByb2ZpbGVFbmQoYCR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfWApO1xuICAgICAgICBncm9rLnNoZWxsLmluZm8oYFByb2ZpbGluZyBvZiAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX0gZmluaXNoZWQgXFxuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBvcGVuZWQgRGV2VG9vbHMgKEYxMikgLyBQZXJmb3JtYW5jZSBwYW5lbCBiZWZvcmUgdGVzdCBzdGFydHMuYCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICBzdGRFcnJvcih4KTtcbiAgICByID0geyBuYW1lOiB0Lm5hbWUsIG93bmVyOnQub3B0aW9ucz8ub3duZXIgPz8gJycsIGNhdGVnb3J5OiB0LmNhdGVnb3J5LCBsb2dzOiAnJywgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiBhd2FpdCBnZXRSZXN1bHQoeCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgcGFja2FnZTogcGFja2FnZU5hbWUgPz8gJycsIGZsYWtpbmc6IGZhbHNlfTtcbiAgfVxuICBpZiAodC5vcHRpb25zPy5pc0FnZ3JlZ2F0ZWQgJiYgci5yZXN1bHQuY29uc3RydWN0b3IgPT09IERHLkRhdGFGcmFtZSkge1xuICAgIGNvbnN0IGNvbCA9IHIucmVzdWx0LmNvbCgnc3VjY2VzcycpO1xuICAgIGlmIChjb2wpXG4gICAgICByLnN1Y2Nlc3MgPSBjb2wuc3RhdHMuc3VtID09PSBjb2wubGVuZ3RoO1xuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgY29uc3QgZGYgPSByLnJlc3VsdDtcbiAgICAgIGRmLmNvbHVtbnMucmVtb3ZlKCdzdGFjaycpO1xuICAgICAgZGYucm93cy5yZW1vdmVXaGVyZSgocikgPT4gci5nZXQoJ3N1Y2Nlc3MnKSk7XG4gICAgICByLnJlc3VsdCA9IGRmO1xuICAgIH1cbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvQ3N2KCk7XG4gIH1cbiAgci5sb2dzID0gbG9ncy5qb2luKCdcXG4nKTtcbiAgci5tcyA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgRmluaXNoZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZm9yICR7ci5tc30gbXNgKTtcbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgci5vd25lciA9IHQub3B0aW9ucz8ub3duZXIgPz8gJyc7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICdzdWNjZXNzJzogci5zdWNjZXNzLCAncmVzdWx0Jzogci5yZXN1bHQsICdtcyc6IHIubXMsICdkYXRlJzogci5kYXRlLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9ncywgJ293bmVyJzogci5vd25lcixcbiAgICAgICdmbGFraW5nJzogREcuVGVzdC5pc1JlcHJvZHVjaW5nICYmIHIuc3VjY2VzcyxcbiAgICAgICdwYWNrYWdlJzogci5wYWNrYWdlXG4gICAgfTtcbiAgICBpZiAoci5yZXN1bHQuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XG4gICAgICBjb25zdCByZXMgPSBPYmplY3Qua2V5cyhyLnJlc3VsdCkucmVkdWNlKChhY2MsIGspID0+ICh7IC4uLmFjYywgWydyZXN1bHQuJyArIGtdOiByLnJlc3VsdFtrXSB9KSwge30pO1xuICAgICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIC4uLnJlcyB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmVzdWx0IGluc3RhbmNlb2YgREcuRGF0YUZyYW1lKVxuICAgICAgcGFyYW1zLnJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5yZXN1bHQ/LnRvSnNvbigpKSB8fCAnJztcblxuICAgIGF3YWl0IHJlcG9ydFRlc3QodHlwZSwgcGFyYW1zKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGUoYXJyYXk6IGFueVtdKTogYW55W10ge1xuICBjb25zdCBuZXdBcnIgPSBhcnJheS5zbGljZSgpO1xuICBuZXdBcnIuc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgcmV0dXJuIG5ld0Fycjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICB9LCB3YWl0KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJZDogVGltZW91dCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChjaGVja0hhbmRsZXIoKSkge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtERy5EYXRhRnJhbWV9IGRmIERhdGFmcmFtZSB0byB1c2UuIFNob3VsZCBoYXZlIGF0IGxlYXN0IDMgcm93c1xuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5kZXRlY3RTZW1hbnRpY1R5cGVzIFNwZWNpZnkgd2hldGhlciB0byBkZXRlY3Qgc2VtYW50aWMgdHlwZXMgb3Igbm90XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLnJlYWRPbmx5IElmIHNldCB0byB0cnVlLCB0aGUgZGF0YWZyYW1lIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgdGVzdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5hcmJpdHJhcnlEZlRlc3QgSWYgc2V0IHRvIGZhbHNlLCB0ZXN0IG9uIGFyYml0cmFyeSBkYXRhZnJhbWVcbiAqIChvbmUgY2F0ZWdvcmljYWwgY29sdW1uKSB3aWxsIG5vdCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBMaXN0IG9mIG9wdGlvbnMgKG9wdGlvbmFsKVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gVGhlIHRlc3QgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGl0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFZpZXdlcih2OiBzdHJpbmcsIGRmOiBERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IERHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IG9wdGlvbnM/LnBhY2thZ2VOYW1lID8/ICcnO1xuICBpZiAob3B0aW9ucz8uZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuXG4gIHRyeSB7XG4gICAgLy8xLiBPcGVuLCBkbyBub3RoaW5nIGFuZCBjbG9zZVxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgIC8vaW4gY2FzZSB2aWV3ZXIgd2l0aCBhc3luYyByZW5kZXJpbmcgLSB3YWl0IGZvciByZW5kZXIgdG8gY29tcGxldGVcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIHJ1biBzZWxlY3Rpb24sIGZpbHRlciwgZXRjLiBhbmQgY2xvc2VcbiAgICBpZiAoIW9wdGlvbnM/LnJlYWRPbmx5KSB7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50KTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIGNoYW5nZSBvcHRpb25zLCBzYXZlIGxheW91dCBhbmQgY2xvc2VcbiAgICBsZXQgcHJvcHNBbmRMYXlvdXQ6IHsgbGF5b3V0OiBhbnksIHNhdmVkUHJvcHM6IGFueSB9IHwgbnVsbCA9IG51bGw7XG4gICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLFxuICAgICAgICBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpXG5cbiAgICAvLzMuIExvYWQgbGF5b3V0XG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgdW5kZWZpbmVkLCBwcm9wc0FuZExheW91dD8ubGF5b3V0LFxuICAgICAgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcixcbiAgICAgICAgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCwgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcblxuICAgIC8vNC4gT3BlbiB2aWV3ZXIgb24gYXJiaXRhcnkgZGF0YXNldFxuICAgIGlmIChvcHRpb25zPy5hcmJpdHJhcnlEZlRlc3QgIT09IGZhbHNlKSB7XG4gICAgICB0di5kYXRhRnJhbWUgPSBjYXRERjtcbiAgICAgIGF3YWl0IGRlbGF5KDUwKTtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzUuIENhbGwgcG9zdHBvbmVkIGZpbHRlcmluZ1xuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jKTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYywgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gY2xvc2VBbGwoKSBpcyBoYW5kbGluZyBieSBjb21tb24gdGVzdCB3b3JrZmxvd1xuICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gIH1cbn1cbiJdfQ==
783
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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QUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVc7b0JBQ3RCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM1RztZQUVELDZCQUE2QjtZQUM3QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JGLElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVc7Z0JBQ3RCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLE9BQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUU5RztnQkFBUztZQUNSLGlEQUFpRDtZQUNqRCx5QkFBeUI7WUFDekIseUJBQXlCO1NBQzFCOztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGVzdERhdGEgfSBmcm9tICcuL2RhdGFmcmFtZS11dGlscyc7XG5pbXBvcnQgVGltZW91dCA9IE5vZGVKUy5UaW1lb3V0O1xuaW1wb3J0IHsgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIGZpbHRlckFzeW5jLCBsb2FkTGF5b3V0LCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50LCB0ZXN0Vmlld2VySW50ZXJuYWwgfSBmcm9tICcuL3Rlc3Qtdmlld2VyLXV0aWxzJztcblxuY29uc3QgU1RBTkRBUlRfVElNRU9VVCA9IDMwMDAwO1xuY29uc3QgQkVOQ0hNQVJLX1RJTUVPVVQgPSAxMDgwMDAwMDtcblxuY29uc3Qgc3RkTG9nID0gY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZEluZm8gPSBjb25zb2xlLmluZm8uYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZFdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZEVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuXG5leHBvcnQgY29uc3QgdGVzdHM6IHtcbiAgW2tleTogc3RyaW5nXTogQ2F0ZWdvcnlcbn0gPSB7fTtcblxuY29uc3QgYXV0b1Rlc3RzQ2F0TmFtZSA9ICdBdXRvIFRlc3RzJztcbmNvbnN0IGRlbW9DYXROYW1lID0gJ0RlbW8nO1xuY29uc3QgZGV0ZWN0b3JzQ2F0TmFtZSA9ICdEZXRlY3RvcnMnO1xuY29uc3QgY29yZUNhdE5hbWUgPSAnQ29yZSc7XG5jb25zdCB3YXNSZWdpc3RlcmVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZztcblxuZXhwb3J0IG5hbWVzcGFjZSBhc3N1cmUge1xuICBleHBvcnQgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1dhcm5UaW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICB1bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0PzogbnVtYmVyO1xuICBza2lwUmVhc29uPzogc3RyaW5nO1xuICBpc0FnZ3JlZ2F0ZWQ/OiBib29sZWFuO1xuICBiZW5jaG1hcms/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UmVzdWx0IHsgXG4gIGRhdGU6IHN0cmluZzsgXG4gIGNhdGVnb3J5OiBzdHJpbmc7IFxuICBuYW1lOiBzdHJpbmc7IFxuICBzdWNjZXNzOiBib29sZWFuOyBcbiAgcmVzdWx0OiBhbnk7IFxuICBtczogbnVtYmVyOyBcbiAgc2tpcHBlZDogYm9vbGVhbjsgXG4gIGxvZ3M6IHN0cmluZzsgXG4gIG93bmVyOiBzdHJpbmc7IFxuICBwYWNrYWdlOiBzdHJpbmc7XG4gIGZsYWtpbmc6IGJvb2xlYW47XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UmVzdWx0RXh0ZW5kZWQgZXh0ZW5kcyBUZXN0UmVzdWx0eyBcbiAgd2lkZ2V0c0RpZmZlcmVuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeU9wdGlvbnMge1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSBTVEFOREFSVF9USU1FT1VUO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50ZXN0ID0gYXN5bmMgKCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKERHLlRlc3QuaXNJbkRlYnVnKVxuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgXG4gICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzPy50b1N0cmluZygpID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZSkgeyBcbiAgICAgICAgICAgIHJlc3VsdCA9ICdDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyc7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyBpbiB0aGUgJHt0aGlzLmNhdGVnb3J5fToke3RoaXMubmFtZX0gdGVzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IHtcbiAgdGVzdHM/OiBUZXN0W107XG4gIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBiZWZvcmVTdGF0dXM/OiBzdHJpbmc7XG4gIGFmdGVyU3RhdHVzPzogc3RyaW5nO1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdEV4ZWN1dGlvbk9wdGlvbnMge1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGVzdD86IHN0cmluZztcbiAgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dDtcbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudDxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IHZvaWQsIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnRBc3luYzxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IFByb21pc2U8dm9pZD4sIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIGhhbmRsZXIoYXJncykudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMhLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG5cbi8qIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55ID0gdHJ1ZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGVycm9yKVxuICAgIGVycm9yID0gYCR7ZXJyb3J9LCBgO1xuICBlbHNlIGVycm9yID0gJyc7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWw6IG51bWJlciwgZXhwZWN0ZWQ6IG51bWJlciwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTmFOICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTmFOKSB8fCAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgPz8gJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gIGlmICghYXJlRXF1YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VGFibGUoYWN0dWFsOiBERy5EYXRhRnJhbWUsIGV4cGVjdGVkOiBERy5EYXRhRnJhbWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkUm93Q291bnQgPSBleHBlY3RlZC5yb3dDb3VudDtcbiAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgPz8gJyd9LCByb3cgY291bnRgKTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUuaXNTYW1lKHZhbHVlKSwgdHJ1ZSwgZXJyb3IpO1xuICAgICAgZWxzZVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0c186ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBDYXRlZ29yeU9wdGlvbnMpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzXygpO1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSkge1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uY2xlYXIgPSBvcHRpb25zPy5jbGVhciA/PyB0cnVlO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQ7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZW5jaG1hcmtzID0gb3B0aW9ucz8uYmVuY2htYXJrcztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnN0cmVzc1Rlc3RzID0gb3B0aW9ucz8uc3RyZXNzVGVzdHM7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5vd25lciA9IG9wdGlvbnM/Lm93bmVyO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBERy5GdW5jKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRBdXRvVGVzdHMocGFja2FnZV86IERHLlBhY2thZ2UsIG1vZHVsZT86IGFueSkge1xuICBjb25zdCBwYWNrYWdlSWQgPSBwYWNrYWdlXy5pZDtcbiAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSkgcmV0dXJuO1xuICBjb25zdCBtb2R1bGVUZXN0cyA9IG1vZHVsZSA/IG1vZHVsZS50ZXN0cyA6IHRlc3RzO1xuICBpZiAocGFja2FnZV8ubmFtZSA9PT0gJ0RldlRvb2xzJyB8fCAoISFtb2R1bGUgJiYgbW9kdWxlLl9wYWNrYWdlLm5hbWUgPT09ICdEZXZUb29scycpKSB7XG4gICAgZm9yIChjb25zdCBmIG9mICg8YW55PndpbmRvdykuZGFydFRlc3RzKSB7XG4gICAgICBjb25zdCBhcnIgPSBmLm5hbWUuc3BsaXQoL1xccypcXHxcXHMqIS9nKTtcbiAgICAgIGxldCBuYW1lID0gYXJyLnBvcCgpID8/IGYubmFtZTtcbiAgICAgIGxldCBjYXQgPSBhcnIubGVuZ3RoID8gY29yZUNhdE5hbWUgKyAnOiAnICsgYXJyLmpvaW4oJzogJykgOiBjb3JlQ2F0TmFtZTtcbiAgICAgIGxldCBmdWxsTmFtZTogc3RyaW5nW10gPSBuYW1lLnNwbGl0KCcgfCAnKTtcbiAgICAgIG5hbWUgPSBmdWxsTmFtZVtmdWxsTmFtZS5sZW5ndGggLSAxXTtcbiAgICAgIGZ1bGxOYW1lLnVuc2hpZnQoY2F0KTtcbiAgICAgIGZ1bGxOYW1lLnBvcCgpO1xuICAgICAgY2F0ID0gZnVsbE5hbWUuam9pbignOiAnKTtcbiAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaChuZXcgVGVzdChjYXQsIG5hbWUsIGYudGVzdCwgeyBpc0FnZ3JlZ2F0ZWQ6IGZhbHNlLCB0aW1lb3V0OiBmLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCwgc2tpcFJlYXNvbjogZi5vcHRpb25zPy5za2lwUmVhc29uLCBvd25lcjogZi5vcHRpb25zPy5vd25lciwgYmVuY2htYXJrOiBmLm9wdGlvbnM/LmJlbmNobWFyayA/PyBmYWxzZSB9KSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZW1vID0gW107XG4gIGNvbnN0IG1vZHVsZURldGVjdG9ycyA9IFtdO1xuICBjb25zdCBwYWNrRnVuY3Rpb25zID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC9za2lwOlxccyooW14sXFxzXSspfHdhaXQ6XFxzKihcXGQrKXxjYXQ6XFxzKihbXixcXHNdKyl8dGltZW91dDpcXHMqKFxcZCspL2cpO1xuICBmb3IgKGNvbnN0IGYgb2YgcGFja0Z1bmN0aW9ucykge1xuICAgIGNvbnN0IHRlc3RzID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgY29uc3QgZGVtbyA9IGYub3B0aW9uc1snZGVtb1BhdGgnXTtcbiAgICBpZiAoKHRlc3RzICYmIEFycmF5LmlzQXJyYXkodGVzdHMpICYmIHRlc3RzLmxlbmd0aCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzID0gKHRlc3RzW2ldIGFzIHN0cmluZykubWF0Y2hBbGwocmVnKTtcbiAgICAgICAgY29uc3QgbWFwOiB7IHNraXA/OiBzdHJpbmcsIHdhaXQ/OiBudW1iZXIsIGNhdD86IHN0cmluZywgdGltZW91dD86IG51bWJlciwgYmVuY2htYXJrVGltZW91dD86IG51bWJlciB9ID0ge307XG4gICAgICAgIEFycmF5LmZyb20ocmVzKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgICBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3NraXAnKSkgbWFwWydza2lwJ10gPSBhcnJbMV07XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3dhaXQnKSkgbWFwWyd3YWl0J10gPSBwYXJzZUludChhcnJbMl0pO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCdjYXQnKSkgbWFwWydjYXQnXSA9IGFyclszXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgndGltZW91dCcpKSBtYXBbJ3RpbWVvdXQnXSA9IHBhcnNlSW50KGFycls0XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QobWFwLmNhdCA/PyBhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmV2YWwoYWRkTmFtZXNwYWNlKHRlc3RzW2ldLCBmKSk7XG4gICAgICAgICAgaWYgKG1hcC53YWl0KSBhd2FpdCBkZWxheShtYXAud2FpdCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Jvb2xlYW4nICYmICFyZXMpIHRocm93IGBGYWlsZWQ6ICR7dGVzdHNbaV19LCBleHBlY3RlZCB0cnVlLCBnb3QgJHtyZXN9YDtcbiAgICAgICAgfSwgeyBza2lwUmVhc29uOiBtYXAuc2tpcCwgdGltZW91dDogREcuVGVzdC5pc0luQmVuY2htYXJrID8gbWFwLmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiBtYXAudGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUIH0pO1xuICAgICAgICBpZiAobWFwLmNhdCkge1xuICAgICAgICAgIGNvbnN0IGNhdDogc3RyaW5nID0gbWFwLmNhdDtcbiAgICAgICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuXG4gICAgICAgICAgLy8gb25seSBiZWZvcmUvYWZ0ZXIgY2FuIGJlIGRlZmluZWQgaW4gdHMgZmlsZXMgdGVzdHMgdW5kZXIgdGhlIGNhdGVnb3J5XG4gICAgICAgICAgaWYgKCFtb2R1bGVUZXN0c1tjYXRdLnRlc3RzKVxuICAgICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cyA9IFtdO1xuICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgbW9kdWxlQXV0b1Rlc3RzLnB1c2godGVzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZW1vKSB7XG4gICAgICBjb25zdCB3YWl0ID0gZi5vcHRpb25zWydkZW1vV2FpdCddID8gcGFyc2VJbnQoZi5vcHRpb25zWydkZW1vV2FpdCddKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZW1vQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGVsYXkoMzAwKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICAgICAgICBhd2FpdCBmLmFwcGx5KCk7XG4gICAgICAgIGF3YWl0IGRlbGF5KHdhaXQgPyB3YWl0IDogMjAwMCk7XG4gICAgICAgIGNvbnN0IHVuaGFuZGxlZCA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgICBpZiAodW5oYW5kbGVkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmhhbmRsZWQpO1xuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ2RlbW9Ta2lwJ10gfSk7XG4gICAgICBtb2R1bGVEZW1vLnB1c2godGVzdCk7XG4gICAgfVxuICAgIGlmIChmLmhhc1RhZygnc2VtVHlwZURldGVjdG9yJykpIHtcbiAgICAgIGxldCBkZXRlY3RvcnNUZXN0RGF0YSA9IHRlc3REYXRhO1xuICAgICAgaWYgKGYub3B0aW9uc1sndGVzdERhdGEnXSkge1xuICAgICAgICBkZXRlY3RvcnNUZXN0RGF0YSA9IGF3YWl0IGdyb2suZGF0YS5maWxlcy5vcGVuVGFibGUoYFN5c3RlbTpBcHBEYXRhLyR7cGFja2FnZV8ubnFOYW1lfS8ke2Yub3B0aW9uc1sndGVzdERhdGEnXX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRldGVjdG9yc0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBjb25zb2xlLmxvZyhgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRldGVjdG9yc1Rlc3REYXRhLmNsb25lKCkuY29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGYuYXBwbHkoW2NvbF0pO1xuICAgICAgICAgIGFyci5wdXNoKHJlcyB8fCBjb2wuc2VtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzQXJyID0gYXJyLmZpbHRlcigoaSkgPT4gaSk7XG4gICAgICAgIGV4cGVjdChyZXNBcnIubGVuZ3RoLCAxKTtcblxuICAgICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YUNvbHVtbk5hbWUnXSlcbiAgICAgICAgICBleHBlY3QocmVzQXJyWzBdLCBmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKTtcblxuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ3NraXBUZXN0J10gfSk7XG4gICAgICBtb2R1bGVEZXRlY3RvcnMucHVzaCh0ZXN0KTtcbiAgICB9XG4gIH1cbiAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgaWYgKG1vZHVsZUF1dG9UZXN0cy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlQXV0b1Rlc3RzLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGVtby5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURlbW8sIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZXRlY3RvcnMubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1tkZXRlY3RvcnNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURldGVjdG9ycywgY2xlYXI6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIHJlZGVmaW5lQ29uc29sZSgpOiBhbnlbXSB7XG4gIGNvbnN0IGxvZ3M6IGFueVtdID0gW107XG4gIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkTG9nKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmluZm8gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRJbmZvKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLndhcm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRXYXJuKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkRXJyb3IoLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiBsb2dzO1xufVxuXG5mdW5jdGlvbiByZXNldENvbnNvbGUoKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nID0gc3RkTG9nO1xuICBjb25zb2xlLmluZm8gPSBzdGRJbmZvO1xuICBjb25zb2xlLndhcm4gPSBzdGRXYXJuO1xuICBjb25zb2xlLmVycm9yID0gc3RkRXJyb3I7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zPzogVGVzdEV4ZWN1dGlvbk9wdGlvbnMpIDogUHJvbWlzZTxUZXN0UmVzdWx0RXh0ZW5kZWRbXT57XG4gIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLScpXG4gIGNvbnN0IHBhY2thZ2VfID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKT8uZnVuYz8ucGFja2FnZSE7XG4gIGNvbnN0IHBhY2thZ2VPd25lciA9ICgocGFja2FnZV8/LnBhY2thZ2VPd25lciA/PyAnJykubWF0Y2gobmV3IFJlZ0V4cCgnW148XSo8KFtePl0qKT4nKSkgPz8gWycnLCAnJ10pWzFdO1xuICBhd2FpdCBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfKTtcbiAgY29uc3QgcmVzdWx0czpUZXN0UmVzdWx0RXh0ZW5kZWRbXSA9IFtdO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBjb25zb2xlLmxvZyhvcHRpb25zKTtcbiAgb3B0aW9ucyA/Pz0ge307XG4gIG9wdGlvbnMhLnRlc3RDb250ZXh0ID8/PSBuZXcgVGVzdENvbnRleHQoKTtcbiAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICBjb25zdCBsb2dzID0gcmVkZWZpbmVDb25zb2xlKCk7XG5cbiAgYXdhaXQgaW52b2tlVGVzdHModGVzdHMsIG9wdGlvbnMpO1xuXG4gIGZvciAobGV0IHIgb2YgcmVzdWx0cykge1xuICAgIHIucmVzdWx0ID0gci5yZXN1bHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gICAgaWYgKHIubG9ncyAhPSB1bmRlZmluZWQpXG4gICAgICByLmxvZ3MgPSByLmxvZ3MhLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1xcJycpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZUNhdGVnb3J5TWV0aG9kKG1ldGhvZDogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgdW5kZWZpbmVkLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgaW52b2thdGlvblJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgaWYgKG1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG1ldGhvZCgpO1xuICAgICAgICB9LCAxMDAwMDAsIGBiZWZvcmUgJHtjYXRlZ29yeX06IHRpbWVvdXQgZXJyb3JgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIGludm9rYXRpb25SZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHQoeCk7XG4gICAgfVxuICAgIHJldHVybiBpbnZva2F0aW9uUmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VUZXN0c0luQ2F0ZWdvcnkoY2F0ZWdvcnk6IENhdGVnb3J5LCBvcHRpb25zOiBUZXN0RXhlY3V0aW9uT3B0aW9ucyk6IFByb21pc2U8VGVzdFJlc3VsdEV4dGVuZGVkW10+IHtcbiAgICBsZXQgdCA9IGNhdGVnb3J5LnRlc3RzID8/IFtdO1xuICAgIGNvbnN0IHJlcyA6IFRlc3RSZXN1bHRFeHRlbmRlZFtdID0gW107XG4gICAgLy8gbGV0IG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICBjb25zdCB3aWRnZXRzQmVmb3JlID0gZ2V0V2lkZ2V0c0NvdW50U2FmZSgpO1xuXG4gICAgaWYgKGNhdGVnb3J5LmNsZWFyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICBpZiAodFtpXS5vcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghdFtpXS5vcHRpb25zKVxuICAgICAgICAgICAgICB0W2ldLm9wdGlvbnMgPSB7fVxuICAgICAgICAgICAgdFtpXS5vcHRpb25zIS5iZW5jaG1hcmsgPSBjYXRlZ29yeS5iZW5jaG1hcmtzID8/IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdGVzdCA9IHRbaV07XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3QpXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpICE9PSB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgKioqKioqKioke2lzR0JFbmFibGV9YCk7XG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICAvLyBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodGVzdCwgb3B0aW9ucz8udGVzdCwgbG9ncywgREcuVGVzdC5pc0luQmVuY2htYXJrID8gdFtpXS5vcHRpb25zPy5iZW5jaG1hcmtUaW1lb3V0ID8/IEJFTkNITUFSS19USU1FT1VUIDogdFtpXS5vcHRpb25zPy50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQsIHBhY2thZ2VfLm5hbWUsIG9wdGlvbnMudmVyYm9zZSk7XG5cbiAgICAgICAgLy8gaWYgKGlzR0JFbmFibGUpXG4gICAgICAgIC8vICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIGlmICh0ZXN0UnVuKVxuICAgICAgICAgIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgIHdpZGdldHNEaWZmZXJlbmNlOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuICAgICAgICAvLyByZXMucHVzaCh7IC4uLnRlc3RSdW4sIG1lbW9yeURlbHRhOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEZWx0YTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgICBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB0ZXN0ID0gdFtpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVzdClcbiAgICAgICAgICBpZiAob3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYCoqKioqKioqJHtpc0dCRW5hYmxlfWApO1xuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgLy8gbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KHRlc3QsIG9wdGlvbnM/LnRlc3QsIGxvZ3MsIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcblxuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0ZXN0UnVuKVxuICAgICAgICAgIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG4gICAgICAgIC8vIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgbWVtb3J5RGVsdGE6ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemUgLSBtZW1vcnlVc2FnZUJlZm9yZSwgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFdpZGdldHNDb3VudFNhZmUoKSB7XG4gICAgbGV0IGxlbmd0aCA9IC0xO1xuICAgIHRyeSB7XG4gICAgICBsZW5ndGggPSBERy5XaWRnZXQuZ2V0QWxsKCkubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS53YXJuKGUubWVzc2FnZSA/PyBlKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzKGNhdGVnb3JpZXNUb0ludm9rZTogeyBba2V5OiBzdHJpbmddOiBDYXRlZ29yeSB9LCBvcHRpb25zOiBUZXN0RXhlY3V0aW9uT3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjYXRlZ29yaWVzVG9JbnZva2UpKSB7XG4gICAgICAgIGlmICgoIW9wdGlvbnM/LmNhdGVnb3J5IHx8IG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKCEoa2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChgJHtvcHRpb25zPy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpLnRyaW0oKX0gOmApICYmICFvcHRpb25zLnRlc3QpICYmIGtleS50b0xvd2VyQ2FzZSgpLnRyaW0oKSAhPT0gb3B0aW9ucz8uY2F0ZWdvcnkudG9Mb3dlckNhc2UoKS50cmltKCkpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IHNraXBwZWQgPSB2YWx1ZS50ZXN0cz8uZXZlcnkoKHQ6IFRlc3QpID0+IHQub3B0aW9ucz8uc2tpcFJlYXNvbik7XG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5iZWZvcmUsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIGxldCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyZXNzVGVzdCkge1xuICAgICAgICAgIHQgPSB0LmZpbHRlcigoZSkgPT4gZS5vcHRpb25zPy5zdHJlc3NUZXN0KTtcbiAgICAgICAgICB0ID0gc2h1ZmZsZSh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgob3B0aW9ucy50YWdzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PlxuICAgICAgICAgICAgZS5vcHRpb25zPy50YWdzPy5zb21lKHRhZyA9PiAob3B0aW9ucz8udGFncyA/PyBbXSkuaW5jbHVkZXModGFnKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlczogVGVzdFJlc3VsdEV4dGVuZGVkW107XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpIHtcbiAgICAgICAgICByZXMgPSBBcnJheS5mcm9tKHQubWFwKCh0ZXN0RWxlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgY2F0ZWdvcnk6IGtleSwgbmFtZTogdGVzdEVsZW0ubmFtZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogJ2JlZm9yZSgpIGZhaWxlZCcsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgbG9nczogJycsb3duZXI6IHBhY2thZ2VfPy5wYWNrYWdlT3duZXIsIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsIHdpZGdldHNEaWZmZXJlbmNlOiAgMCwgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGFzeW5jICh0ZXN0KSA9PiByZXBvcnRUZXN0KCdwYWNrYWdlJywgdGVzdCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXMgPSBhd2FpdCBpbnZva2VUZXN0c0luQ2F0ZWdvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkYXRhIDogVGVzdFJlc3VsdEV4dGVuZGVkW10gPSByZXMuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuXG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmFmdGVyLCBvcHRpb25zLmNhdGVnb3J5ID8/ICcnKTtcblxuICAgICAgICAvLyBDbGVhciBhZnRlciBjYXRlZ29yeVxuICAgICAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgIGRhdGEucHVzaCh7IGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2FmdGVyJywgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgbG9nczogJycsb3duZXI6IHBhY2thZ2VfPy5wYWNrYWdlT3duZXIsIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsIHdpZGdldHNEaWZmZXJlbmNlOiAgMCwgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nIH0pO1xuICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgICAgIGRhdGEucHVzaCh7IGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2JlZm9yZScsIHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlLCBsb2dzOiAnJyxvd25lcjogcGFja2FnZV8/LnBhY2thZ2VPd25lciwgcGFja2FnZTogcGFja2FnZV8ubmFtZSwgd2lkZ2V0c0RpZmZlcmVuY2U6ICAwLCBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmd9KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXNldENvbnNvbGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQhLmNhdGNoVW5oYW5kbGVkICYmICghREcuVGVzdC5pc0luQmVuY2htYXJrKSkge1xuICAgICAgYXdhaXQgZGVsYXkoMTAwMCk7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgY29uc3QgcGFyYW1zIDogYW55ID0ge1xuICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICAgIHJlc3VsdDogZXJyb3IgPz8gJycsIFxuICAgICAgICBzdWNjZXNzOiAhZXJyb3IsIFxuICAgICAgICBtczogMCwgXG4gICAgICAgIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICBvd25lcjogcGFja2FnZU93bmVyID8/ICcnLFxuICAgICAgICAncGFja2FnZSc6IHBhY2thZ2VfLm5hbWUsXG4gICAgICAgIHdpZGdldHNEaWZmZXJlbmNlOiAwXG4gICAgICB9O1xuICAgICAgICBcbiAgICAgIHJlc3VsdHMucHVzaCh7Li4ucGFyYW1zLCAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiAhZXJyb3J9KTtcbiAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICBhd2FpdCByZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwb3J0VGVzdCh0eXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICBlbHNlIHtcbiAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuKTogUHJvbWlzZTxUZXN0UmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIGxvZ3MubGVuZ3RoID0gMDtcbiAgbGV0IHI6IFRlc3RSZXN1bHQ7XG4gIGxldCB0eXBlOiBzdHJpbmcgPSAncGFja2FnZSc7XG4gIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKHQubmFtZS50b0xvd2VyQ2FzZSgpICE9PSBwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSk7XG4gIGxldCBza2lwID0gdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IGZpbHRlcjtcbiAgbGV0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG4gIGNvbnNvbGUubG9nKHRlc3QubmFtZSwgc2tpcCk7XG5cbiAgaWYgKERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAhdC5vcHRpb25zPy5iZW5jaG1hcmspIHtcbiAgICBzdGRMb2coYFNLSVBQRUQ6ICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGRvZXNudCBhdmFpbGFibGUgaW4gYmVuY2htYXJrIG1vZGVgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KS50b0lTT1N0cmluZygpO1xuICB0cnkge1xuICAgIGlmIChza2lwKVxuICAgICAgciA9IHsgbmFtZTogdC5uYW1lLCBvd25lcjp0Lm9wdGlvbnM/Lm93bmVyID8/ICcnLCBjYXRlZ29yeTogdC5jYXRlZ29yeSwgbG9nczogJycsIGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uISwgbXM6IDAsIHNraXBwZWQ6IHRydWUsIHBhY2thZ2U6IHBhY2thZ2VOYW1lID8/ICcnLCBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmd9O1xuICAgIGVsc2Uge1xuICAgICAgbGV0IHRpbWVvdXRfID0gdGVzdFRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVDtcblxuICAgICAgaWYgKERHLlRlc3QuaXNQcm9maWxpbmcpXG4gICAgICAgIGNvbnNvbGUucHJvZmlsZShgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG5cbiAgICAgIHIgPSB7IG5hbWU6IHQubmFtZSwgb3duZXI6dC5vcHRpb25zPy5vd25lciA/PyAnJywgY2F0ZWdvcnk6IHQuY2F0ZWdvcnksIGxvZ3M6ICcnLCBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKGF3YWl0IHRpbWVvdXQodC50ZXN0LCB0aW1lb3V0XykpLnRvU3RyaW5nKCkgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlICwgcGFja2FnZTogcGFja2FnZU5hbWUgPz8gJycsIGZsYWtpbmc6IERHLlRlc3QuaXNSZXByb2R1Y2luZ307XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG4gICAgICAgIGdyb2suc2hlbGwuaW5mbyhgUHJvZmlsaW5nIG9mICR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfSBmaW5pc2hlZCBcXG4gUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBEZXZUb29scyAoRjEyKSAvIFBlcmZvcm1hbmNlIHBhbmVsIGJlZm9yZSB0ZXN0IHN0YXJ0cy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgIHN0ZEVycm9yKHgpO1xuICAgIHIgPSB7IG5hbWU6IHQubmFtZSwgb3duZXI6dC5vcHRpb25zPy5vd25lciA/PyAnJywgY2F0ZWdvcnk6IHQuY2F0ZWdvcnksIGxvZ3M6ICcnLCBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IGF3YWl0IGdldFJlc3VsdCh4KSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlLCBwYWNrYWdlOiBwYWNrYWdlTmFtZSA/PyAnJywgZmxha2luZzogZmFsc2V9O1xuICB9XG4gIGlmICh0Lm9wdGlvbnM/LmlzQWdncmVnYXRlZCAmJiByLnJlc3VsdC5jb25zdHJ1Y3RvciA9PT0gREcuRGF0YUZyYW1lKSB7XG4gICAgY29uc3QgY29sID0gci5yZXN1bHQuY29sKCdzdWNjZXNzJyk7XG4gICAgaWYgKGNvbClcbiAgICAgIHIuc3VjY2VzcyA9IGNvbC5zdGF0cy5zdW0gPT09IGNvbC5sZW5ndGg7XG4gICAgaWYgKCF2ZXJib3NlKSB7XG4gICAgICBjb25zdCBkZiA9IHIucmVzdWx0O1xuICAgICAgZGYuY29sdW1ucy5yZW1vdmUoJ3N0YWNrJyk7XG4gICAgICBkZi5yb3dzLnJlbW92ZVdoZXJlKChyKSA9PiByLmdldCgnc3VjY2VzcycpKTtcbiAgICAgIHIucmVzdWx0ID0gZGY7XG4gICAgfVxuICAgIHIucmVzdWx0ID0gci5yZXN1bHQudG9Dc3YoKTtcbiAgfVxuICByLmxvZ3MgPSBsb2dzLmpvaW4oJ1xcbicpO1xuICByLm1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICBpZiAoIXNraXApXG4gICAgc3RkTG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgci5uYW1lID0gdC5uYW1lO1xuICByLm93bmVyID0gdC5vcHRpb25zPy5vd25lciA/PyAnJztcbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICBsZXQgcGFyYW1zID0ge1xuICAgICAgJ3N1Y2Nlc3MnOiByLnN1Y2Nlc3MsICdyZXN1bHQnOiByLnJlc3VsdCwgJ21zJzogci5tcywgJ2RhdGUnOiByLmRhdGUsXG4gICAgICAnc2tpcHBlZCc6IHIuc2tpcHBlZCwgJ2NhdGVnb3J5JzogdC5jYXRlZ29yeSwgJ25hbWUnOiB0Lm5hbWUsICdsb2dzJzogci5sb2dzLCAnb3duZXInOiByLm93bmVyLFxuICAgICAgJ2ZsYWtpbmcnOiBERy5UZXN0LmlzUmVwcm9kdWNpbmcgJiYgci5zdWNjZXNzLFxuICAgICAgJ3BhY2thZ2UnOiByLnBhY2thZ2VcbiAgICB9O1xuICAgIGlmIChyLnJlc3VsdC5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcbiAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5rZXlzKHIucmVzdWx0KS5yZWR1Y2UoKGFjYywgaykgPT4gKHsgLi4uYWNjLCBbJ3Jlc3VsdC4nICsga106IHIucmVzdWx0W2tdIH0pLCB7fSk7XG4gICAgICBwYXJhbXMgPSB7IC4uLnBhcmFtcywgLi4ucmVzIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXN1bHQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpXG4gICAgICBwYXJhbXMucmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLnJlc3VsdD8udG9Kc29uKCkpIHx8ICcnO1xuXG4gICAgYXdhaXQgcmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheTogYW55W10pOiBhbnlbXSB7XG4gIGNvbnN0IG5ld0FyciA9IGFycmF5LnNsaWNlKCk7XG4gIG5ld0Fyci5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICByZXR1cm4gbmV3QXJyO1xufVxuXG4vKiBXYWl0cyBbbXNdIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpIHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyOiAoKSA9PiBib29sZWFuLFxuICBlcnJvcjogc3RyaW5nID0gJ1RpbWVvdXQgZXhjZWVkZWQnLCB3YWl0OiBudW1iZXIgPSA1MDAsIGludGVydmFsOiBudW1iZXIgPSA1MCk6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvcikpO1xuICAgIH0sIHdhaXQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbElkOiBUaW1lb3V0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrSGFuZGxlcigpKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSwgaW50ZXJ2YWwpO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyB0ZXN0IGV4ZWN1dGlvbiByZXN1bHQgb3IgYW4gZXJyb3IgaW4gY2FzZSBvZiB0aW1lb3V0XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGltZW91dChmdW5jOiAoKSA9PiBQcm9taXNlPGFueT4sIHRlc3RUaW1lb3V0OiBudW1iZXIsIHRpbWVvdXRSZWFzb246IHN0cmluZyA9ICdFWEVDVVRJT04gVElNRU9VVCcpOiBQcm9taXNlPGFueT4ge1xuICBsZXQgdGltZW91dDogYW55ID0gbnVsbDtcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxhbnk+KChfLCByZWplY3QpID0+IHtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHRpbWVvdXRSZWFzb24pO1xuICAgIH0sIHRlc3RUaW1lb3V0KTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShbZnVuYygpLCB0aW1lb3V0UHJvbWlzZV0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh0aW1lb3V0KVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZ1ByZXNlbnQoZGlhbG9nVGl0bGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkaWFsb2dzID0gREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkaWFsb2dzW2ldLnRpdGxlID09IGRpYWxvZ1RpdGxlKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogRXhwZWN0cyBhbiBhc3luY2hyb25vdXMge0BsaW5rIGFjdGlvbn0gdG8gdGhyb3cgYW4gZXhjZXB0aW9uLiBVc2Uge0BsaW5rIGNoZWNrfSB0byBwZXJmb3JtXG4gKiBkZWVwZXIgaW5zcGVjdGlvbiBvZiB0aGUgZXhjZXB0aW9uIGlmIG5lY2Vzc2FyeS5cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKCk6IFByb21pc2U8dm9pZD59IGFjdGlvblxuICogQHBhcmFtICB7ZnVuY3Rpb24oYW55KTogYm9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBlY3RFeGNlcHRpb25Bc3luYyhhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4sXG4gIGNoZWNrPzogKGV4Y2VwdGlvbjogYW55KSA9PiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjYXVnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbGV0IGNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhY3Rpb24oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNhdWdodCA9IHRydWU7XG4gICAgY2hlY2tlZCA9ICFjaGVjayB8fCBjaGVjayhlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoIWNhdWdodClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhjZXB0aW9uIGlzIGV4cGVjdGVkIGJ1dCBub3QgdGhyb3duJyk7XG4gICAgaWYgKCFjaGVja2VkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBleHBlY3RlZCBleGNlcHRpb24gaXMgdGhyb3duLCBidXQgaXQgZG9lcyBub3Qgc2F0aXNmeSB0aGUgY29uZGl0aW9uJyk7XG4gIH1cbn1cblxuY29uc3QgY2F0REYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW0RHLkNvbHVtbi5mcm9tU3RyaW5ncygnY29sJywgWyd2YWwxJywgJ3ZhbDInLCAndmFsMyddKV0pO1xuXG4vKipcbiAqIFVuaXZlcnNhbCB0ZXN0IGZvciB2aWV3ZXJzLiBJdCBzZWFyY2ggdmlld2VycyBpbiBET00gYnkgdGFnczogY2FudmFzLCBzdmcsIGltZywgaW5wdXQsIGgxLCBhXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHYgVmlld2VyIG5hbWVcbiAqIEBwYXJhbSAge0RHLkRhdGFGcmFtZX0gZGYgRGF0YWZyYW1lIHRvIHVzZS4gU2hvdWxkIGhhdmUgYXQgbGVhc3QgMyByb3dzXG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLmRldGVjdFNlbWFudGljVHlwZXMgU3BlY2lmeSB3aGV0aGVyIHRvIGRldGVjdCBzZW1hbnRpYyB0eXBlcyBvciBub3RcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMucmVhZE9ubHkgSWYgc2V0IHRvIHRydWUsIHRoZSBkYXRhZnJhbWUgd2lsbCBub3QgYmUgbW9kaWZpZWQgZHVyaW5nIHRoZSB0ZXN0XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLmFyYml0cmFyeURmVGVzdCBJZiBzZXQgdG8gZmFsc2UsIHRlc3Qgb24gYXJiaXRyYXJ5IGRhdGFmcmFtZVxuICogKG9uZSBjYXRlZ29yaWNhbCBjb2x1bW4pIHdpbGwgbm90IGJlIHBlcmZvcm1lZFxuICogQHBhcmFtICB7b2JqZWN0fSBvcHRpb25zIExpc3Qgb2Ygb3B0aW9ucyAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBUaGUgdGVzdCBpcyBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwgaWYgaXQgY29tcGxldGVzIHdpdGhvdXQgZXJyb3JzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Vmlld2VyKHY6IHN0cmluZywgZGY6IERHLkRhdGFGcmFtZSwgb3B0aW9ucz86IHtcbiAgZGV0ZWN0U2VtYW50aWNUeXBlcz86IGJvb2xlYW4sIHJlYWRPbmx5PzogYm9vbGVhbiwgYXJiaXRyYXJ5RGZUZXN0PzogYm9vbGVhbixcbiAgcGFja2FnZU5hbWU/OiBzdHJpbmcsIGF3YWl0Vmlld2VyPzogKHZpZXdlcjogREcuVmlld2VyKSA9PiBQcm9taXNlPHZvaWQ+XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gb3B0aW9ucz8ucGFja2FnZU5hbWUgPz8gJyc7XG4gIGlmIChvcHRpb25zPy5kZXRlY3RTZW1hbnRpY1R5cGVzKVxuICAgIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgY29uc3QgdHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG5cbiAgdHJ5IHtcbiAgICAvLzEuIE9wZW4sIGRvIG5vdGhpbmcgYW5kIGNsb3NlXG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCk7XG4gICAgLy9pbiBjYXNlIHZpZXdlciB3aXRoIGFzeW5jIHJlbmRlcmluZyAtIHdhaXQgZm9yIHJlbmRlciB0byBjb21wbGV0ZVxuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHVuZGVmaW5lZCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gICAgLy8yLiBPcGVuIHZpZXdlciwgcnVuIHNlbGVjdGlvbiwgZmlsdGVyLCBldGMuIGFuZCBjbG9zZVxuICAgIGlmICghb3B0aW9ucz8ucmVhZE9ubHkpIHtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50LCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy8yLiBPcGVuIHZpZXdlciwgY2hhbmdlIG9wdGlvbnMsIHNhdmUgbGF5b3V0IGFuZCBjbG9zZVxuICAgIGxldCBwcm9wc0FuZExheW91dDogeyBsYXlvdXQ6IGFueSwgc2F2ZWRQcm9wczogYW55IH0gfCBudWxsID0gbnVsbDtcbiAgICBwcm9wc0FuZExheW91dCA9IGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBwcm9wc0FuZExheW91dCA9IGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsXG4gICAgICAgIGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcilcblxuICAgIC8vMy4gTG9hZCBsYXlvdXRcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCB1bmRlZmluZWQsIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsXG4gICAgICB7IHNhdmVkUHJvcHM6IHByb3BzQW5kTGF5b3V0Py5zYXZlZFByb3BzIH0pO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyLFxuICAgICAgICBwcm9wc0FuZExheW91dD8ubGF5b3V0LCB7IHNhdmVkUHJvcHM6IHByb3BzQW5kTGF5b3V0Py5zYXZlZFByb3BzIH0pO1xuXG4gICAgLy80LiBPcGVuIHZpZXdlciBvbiBhcmJpdGFyeSBkYXRhc2V0XG4gICAgaWYgKG9wdGlvbnM/LmFyYml0cmFyeURmVGVzdCAhPT0gZmFsc2UpIHtcbiAgICAgIHR2LmRhdGFGcmFtZSA9IGNhdERGO1xuICAgICAgYXdhaXQgZGVsYXkoNTApO1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHVuZGVmaW5lZCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vNS4gQ2FsbCBwb3N0cG9uZWQgZmlsdGVyaW5nXG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBjbG9zZUFsbCgpIGlzIGhhbmRsaW5nIGJ5IGNvbW1vbiB0ZXN0IHdvcmtmbG93XG4gICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgfVxufVxuIl19