barsa-novin-ray-core 1.0.409 → 1.0.411

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.
@@ -77,6 +77,7 @@ export class NumberBaseComponent extends FieldBaseComponent {
77
77
  let newVal;
78
78
  if (typeof text === 'number') {
79
79
  if (text === this.value) {
80
+ this._syncInputElementValue(this.value, e);
80
81
  return;
81
82
  }
82
83
  text = text.toString();
@@ -145,6 +146,14 @@ export class NumberBaseComponent extends FieldBaseComponent {
145
146
  this.formmatedValue.emit(this.inputElement?.value);
146
147
  this.valueChange.emit(this.value);
147
148
  }
149
+ _syncInputElementValue(value, e) {
150
+ const elValue = this._numeralPipe.getValue(e.target.value);
151
+ if (value === +elValue) {
152
+ return;
153
+ }
154
+ const formated = this._getFormated(value);
155
+ e.target.value = formated;
156
+ }
148
157
  }
149
158
  NumberBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: NumberBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
150
159
  NumberBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: NumberBaseComponent, selector: "bnrc-number-base", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -156,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
156
165
  changeDetection: ChangeDetectionStrategy.OnPush
157
166
  }]
158
167
  }] });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2Fic3RyYWN0LWNsYXNzZXMvbnVtYmVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTXZDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFJdkQsSUFBSSxnQkFBZ0I7UUFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUNELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxPQUFPO1lBQ1IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxDQUFDO2dCQUN0RixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFD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a0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGQtYmFzZSc7XG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4vYmFyc2EtYXBpJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYm5yYy1udW1iZXItYmFzZScsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlckJhc2VDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgaGFzTWFzazogYm9vbGVhbjtcbiAgICB0aWNrUmVmOiBhbnk7XG4gICAgcHJvdGVjdGVkIGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZ2V0IGRlY2ltYWxQcmVjaXNpb24oKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbFByZWNpc2lvbiA9IE51bWJlcih0aGlzLlNldHRpbmcuRGVjaW1hbFByZWNpc2lvbik7XG4gICAgICAgIGlmIChpc05hTihkZWNpbWFsUHJlY2lzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY2ltYWxQcmVjaXNpb247XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ZWQgPSB0aGlzLl9nZXRGb3JtYXRlZCh0aGlzLnZhbHVlKS50b1N0cmluZygpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXRlZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc01hc2sgPVxuICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LCAnU2V0dGluZy5TaG93VGhvdXNhbmRTZXBlcmF0b3InLCBmYWxzZSkgfHxcbiAgICAgICAgICAgIEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dCwgJ1NldHRpbmcuRGVjaW1hbFByZWNpc2lvbicsIDApID4gMDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICBvbktleURvd24oZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NoYXJhY3RlciA9IHRoaXMuX2lzQ2hhcmFjdGVyKGUpO1xuICAgICAgICBpZiAoIWlzQ2hhcmFjdGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IG5ldyBSZWdFeHAoJ15bMC05LC5dKiQnKS50ZXN0KGUuY3VycmVudFRhcmdldC52YWx1ZSArIGUua2V5KTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkIHx8IGUua2V5ID09PSAnLicpIHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJy4nICYmIHRoaXMuaW5wdXRFbGVtZW50ICYmIHRoaXMuZGVjaW1hbFByZWNpc2lvbiA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JQb3NpdGlvbihjdXJzb3JQb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblZhbHVlQ2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dDogc3RyaW5nID0gZS5jdXJyZW50VGFyZ2V0Py52YWx1ZSB8fCAnJztcbiAgICAgICAgdGhpcy5yZUZvcm1hdFZhbHVlKHRleHQsIGUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMucmVGb3JtYXRWYWx1ZSh0aGlzLnZhbHVlLCB7IHRhcmdldDogdGhpcy5pbnB1dEVsZW1lbnQgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY2xlYXJJbnRlcnZhbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGlja1JlZikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpY2tSZWYpO1xuICAgICAgICAgICAgdGhpcy50aWNrUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lzQ2hhcmFjdGVyKGV2dCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGV2dC53aGljaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldnQud2hpY2ggPT09ICdudW1iZXInICYmIGV2dC53aGljaCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAhZXZ0LmN0cmxLZXkgJiYgIWV2dC5tZXRhS2V5ICYmICFldnQuYWx0S2V5ICYmIGV2dC53aGljaCAhPT0gOCAmJiBldnQua2V5Lmxlbmd0aCA9PT0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9nZXRGb3JtYXRlZCh2YWwpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtZXJhbFBpcGUudHJhbnNmb3JtKHZhbCwgdGhpcy5kZWNpbWFsUHJlY2lzaW9uLCB0aGlzLlNldHRpbmcuU2hvd1Rob3VzYW5kU2VwZXJhdG9yKS50b1N0cmluZygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldEN1cnNvclBvc2l0aW9uKGN1cnNvclBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGN1cnNvclBvc2l0aW9uID4gdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoICYmIHRoaXMuZGVjaW1hbFByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgcmVGb3JtYXRWYWx1ZSh0ZXh0OiBzdHJpbmcgfCBudW1iZXIsIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBsZXQgbmV3VmFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0ID09PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgIGxldCBpbmRleG9mRG90ID0gdGV4dC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXRFbGVtZW50Py5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFBlcnNpY2lvbiA9IHRoaXMuZGVjaW1hbFByZWNpc2lvbjtcbiAgICAgICAgICAgIGlmIChkZWNpbWFsUGVyc2ljaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRleHQubGVuZ3RoIC0gKGluZGV4b2ZEb3QgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAodCA+IGRlY2ltYWxQZXJzaWNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHQgLSBkZWNpbWFsUGVyc2ljaW9uO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gZGlmZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnN1YnN0cmluZygwLCBzZWxlY3Rpb25TdGFydCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uU3RhcnQgKyAxICsgdGV4dC5sZW5ndGggLSBkaWZmKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGZvcm1hdGVkOiBzdHJpbmcgPSB0aGlzLl9nZXRGb3JtYXRlZCh0ZXh0KS50b1N0cmluZygpO1xuICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5fbnVtZXJhbFBpcGUuZ2V0VmFsdWUoZm9ybWF0ZWQpO1xuXG4gICAgICAgICAgICBsZXQgaW5kZXhPZkRvdEZvcm1hdGVkID0gZm9ybWF0ZWQuaW5kZXhPZignLicpO1xuXG4gICAgICAgICAgICBpZiAoZGVjaW1hbFBlcnNpY2lvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGluZGV4b2ZEb3QgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbmRleE9mRG90Rm9ybWF0ZWQgPSBmb3JtYXRlZC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNNYXNrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dEVsZW1lbnQ/LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgIGxldCBkaWZmID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhvZkRvdCA8IDAgJiYgZGVjaW1hbFBlcnNpY2lvbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ZWQgPSB0aGlzLl9nZXRGb3JtYXRlZCh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5fbnVtZXJhbFBpcGUuZ2V0VmFsdWUoZm9ybWF0ZWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vyc29yUG9zaXRpb24gIT0gbnVsbCAmJiBjdXJzb3JQb3NpdGlvbiA8PSBpbmRleG9mRG90KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZmYgPSBpbmRleE9mRG90Rm9ybWF0ZWQgLSBpbmRleG9mRG90O1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbiArPSBkaWZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQgJiYgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgIT09IGZvcm1hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC52YWx1ZSAhPT0gZm9ybWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBmb3JtYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q3Vyc29yUG9zaXRpb24oY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwgJiYgK25ld1ZhbCA9PT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB0eXBlb2YgbmV3VmFsID09ICd1bmRlZmluZWQnID8gJycgOiBuZXdWYWw7XG4gICAgICAgIHRoaXMuZm9ybW1hdGVkVmFsdWUuZW1pdCh0aGlzLmlucHV0RWxlbWVudD8udmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxufVxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2Fic3RyYWN0LWNsYXNzZXMvbnVtYmVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTXZDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFJdkQsSUFBSSxnQkFBZ0I7UUFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUNELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxPQUFPO1lBQ1IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxDQUFDO2dCQUN0RixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFD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QUFrQjtRQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7O2dIQTdKUSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrRUFIbEIsRUFBRTsyRkFHSCxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmllbGRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZC1iYXNlJztcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi9iYXJzYS1hcGknO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdibnJjLW51bWJlci1iYXNlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTnVtYmVyQmFzZUNvbXBvbmVudCBleHRlbmRzIEZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBoYXNNYXNrOiBib29sZWFuO1xuICAgIHRpY2tSZWY6IGFueTtcbiAgICBwcm90ZWN0ZWQgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBnZXQgZGVjaW1hbFByZWNpc2lvbigpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkZWNpbWFsUHJlY2lzaW9uID0gTnVtYmVyKHRoaXMuU2V0dGluZy5EZWNpbWFsUHJlY2lzaW9uKTtcbiAgICAgICAgaWYgKGlzTmFOKGRlY2ltYWxQcmVjaXNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjaW1hbFByZWNpc2lvbjtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXRlZCA9IHRoaXMuX2dldEZvcm1hdGVkKHRoaXMudmFsdWUpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IGZvcm1hdGVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzTWFzayA9XG4gICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQsICdTZXR0aW5nLlNob3dUaG91c2FuZFNlcGVyYXRvcicsIGZhbHNlKSB8fFxuICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LCAnU2V0dGluZy5EZWNpbWFsUHJlY2lzaW9uJywgMCkgPiAwO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIG9uS2V5RG93bihlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzQ2hhcmFjdGVyID0gdGhpcy5faXNDaGFyYWN0ZXIoZSk7XG4gICAgICAgIGlmICghaXNDaGFyYWN0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1ZhbGlkID0gbmV3IFJlZ0V4cCgnXlswLTksLl0qJCcpLnRlc3QoZS5jdXJyZW50VGFyZ2V0LnZhbHVlICsgZS5rZXkpO1xuICAgICAgICBpZiAoIWlzVmFsaWQgfHwgZS5rZXkgPT09ICcuJykge1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnLicgJiYgdGhpcy5pbnB1dEVsZW1lbnQgJiYgdGhpcy5kZWNpbWFsUHJlY2lzaW9uID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEN1cnNvclBvc2l0aW9uKGN1cnNvclBvc2l0aW9uICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uVmFsdWVDaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0OiBzdHJpbmcgPSBlLmN1cnJlbnRUYXJnZXQ/LnZhbHVlIHx8ICcnO1xuICAgICAgICB0aGlzLnJlRm9ybWF0VmFsdWUodGV4dCwgZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0VmFsdWUodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX3NldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZUZvcm1hdFZhbHVlKHRoaXMudmFsdWUsIHsgdGFyZ2V0OiB0aGlzLmlucHV0RWxlbWVudCB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9jbGVhckludGVydmFsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50aWNrUmVmKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGlja1JlZik7XG4gICAgICAgICAgICB0aGlzLnRpY2tSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaXNDaGFyYWN0ZXIoZXZ0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgZXZ0LndoaWNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2dC53aGljaCA9PT0gJ251bWJlcicgJiYgZXZ0LndoaWNoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuICFldnQuY3RybEtleSAmJiAhZXZ0Lm1ldGFLZXkgJiYgIWV2dC5hbHRLZXkgJiYgZXZ0LndoaWNoICE9PSA4ICYmIGV2dC5rZXkubGVuZ3RoID09PSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2dldEZvcm1hdGVkKHZhbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1lcmFsUGlwZS50cmFuc2Zvcm0odmFsLCB0aGlzLmRlY2ltYWxQcmVjaXNpb24sIHRoaXMuU2V0dGluZy5TaG93VGhvdXNhbmRTZXBlcmF0b3IpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0Q3Vyc29yUG9zaXRpb24oY3Vyc29yUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoY3Vyc29yUG9zaXRpb24gPiB0aGlzLmlucHV0RWxlbWVudC52YWx1ZS5sZW5ndGggJiYgdGhpcy5kZWNpbWFsUHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0RWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSByZUZvcm1hdFZhbHVlKHRleHQ6IHN0cmluZyB8IG51bWJlciwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdWYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKHRleHQgPT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jSW5wdXRFbGVtZW50VmFsdWUodGhpcy52YWx1ZSwgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCA9IHRleHQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgIGxldCBpbmRleG9mRG90ID0gdGV4dC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXRFbGVtZW50Py5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFBlcnNpY2lvbiA9IHRoaXMuZGVjaW1hbFByZWNpc2lvbjtcbiAgICAgICAgICAgIGlmIChkZWNpbWFsUGVyc2ljaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRleHQubGVuZ3RoIC0gKGluZGV4b2ZEb3QgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAodCA+IGRlY2ltYWxQZXJzaWNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHQgLSBkZWNpbWFsUGVyc2ljaW9uO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gZGlmZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnN1YnN0cmluZygwLCBzZWxlY3Rpb25TdGFydCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uU3RhcnQgKyAxICsgdGV4dC5sZW5ndGggLSBkaWZmKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGZvcm1hdGVkOiBzdHJpbmcgPSB0aGlzLl9nZXRGb3JtYXRlZCh0ZXh0KS50b1N0cmluZygpO1xuICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5fbnVtZXJhbFBpcGUuZ2V0VmFsdWUoZm9ybWF0ZWQpO1xuXG4gICAgICAgICAgICBsZXQgaW5kZXhPZkRvdEZvcm1hdGVkID0gZm9ybWF0ZWQuaW5kZXhPZignLicpO1xuXG4gICAgICAgICAgICBpZiAoZGVjaW1hbFBlcnNpY2lvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGluZGV4b2ZEb3QgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbmRleE9mRG90Rm9ybWF0ZWQgPSBmb3JtYXRlZC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNNYXNrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dEVsZW1lbnQ/LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgIGxldCBkaWZmID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhvZkRvdCA8IDAgJiYgZGVjaW1hbFBlcnNpY2lvbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ZWQgPSB0aGlzLl9nZXRGb3JtYXRlZCh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5fbnVtZXJhbFBpcGUuZ2V0VmFsdWUoZm9ybWF0ZWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vyc29yUG9zaXRpb24gIT0gbnVsbCAmJiBjdXJzb3JQb3NpdGlvbiA8PSBpbmRleG9mRG90KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZmYgPSBpbmRleE9mRG90Rm9ybWF0ZWQgLSBpbmRleG9mRG90O1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbiArPSBkaWZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQgJiYgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgIT09IGZvcm1hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC52YWx1ZSAhPT0gZm9ybWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBmb3JtYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q3Vyc29yUG9zaXRpb24oY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwgJiYgK25ld1ZhbCA9PT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB0eXBlb2YgbmV3VmFsID09ICd1bmRlZmluZWQnID8gJycgOiBuZXdWYWw7XG4gICAgICAgIHRoaXMuZm9ybW1hdGVkVmFsdWUuZW1pdCh0aGlzLmlucHV0RWxlbWVudD8udmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc3luY0lucHV0RWxlbWVudFZhbHVlKHZhbHVlOiBudW1iZXIsIGU6IHsgdGFyZ2V0OiBhbnkgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbFZhbHVlID0gdGhpcy5fbnVtZXJhbFBpcGUuZ2V0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUgPT09ICtlbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0ZWQgPSB0aGlzLl9nZXRGb3JtYXRlZCh2YWx1ZSk7XG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gZm9ybWF0ZWQ7XG4gICAgfVxufVxuIl19
@@ -733,4 +733,4 @@ export function ChangeLayoutInfoCustomUi(layoutInfo, componentUi) {
733
733
  debugger;
734
734
  layoutInfo.FieldUi.Setting.CustomUi = componentUi;
735
735
  }
736
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1Qiw2RUFBVyxDQUFBO0lBQ1gscUZBQWUsQ0FBQTtJQUNmLG1GQUFjLENBQUE7SUFDZCxtRkFBYyxDQUFBO0FBQ2xCLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxTQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBNEIsRUFDNUIsMEJBQW1DLEVBQ25DLElBQTBCLEVBRTFCLFVBQWlDLEVBQ2pDLE9BQTJCO0lBRTNCLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RyxLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsT0FBTyxrQ0FBa0MsQ0FDckMsU0FBUyxFQUNULE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDVixDQUFDO1FBQ04sS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO1lBQ3BDLE1BQU0sZ0JBQWdC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LElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBZTtJQUM3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLENBQUMsSUFBSSxFQUFF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QUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuRDtBQUNMLENBQUM7QUFVRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLHVHQUF1RyxDQUFDO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx3Q0FBd0MsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUV2QyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsVUFBeUIsRUFBRSxXQUFzQjtJQUN0RixRQUFRLENBQUM7SUFDVCxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgX2lzTnVtYmVyVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcbmltcG9ydCB7XG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxuICAgIENvbFNldHRpbmcsXG4gICAgRWpyYXlPbGdvLFxuICAgIEZvcm1TZXR0aW5nLFxuICAgIEdlbmVyYWxDb250cm9sSW5mb01vZGVsLFxuICAgIEdyaWRTZXR0aW5nLFxuICAgIExheW91dFNldHRpbmcsXG4gICAgTWVudUl0ZW0sXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFNvcnRTZXR0aW5nXG59IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0ZUhpanJpU2VydmljZSwgRGF0ZU1pbGFkaVNlcnZpY2UsIERhdGVTZXJ2aWNlLCBEYXRlU2hhbXNpU2VydmljZSB9IGZyb20gJy4vZGF0ZS1zZXJ2aWNlcyc7XG5pbXBvcnQgKiBhcyBEZXZpY2UgZnJvbSAnLi9kZXZpY2UnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbG9nLnNlcnZpY2UnO1xuXG5leHBvcnQgZW51bSBUYWJsZUhlYWRlcldpZHRoTW9kZSB7XG4gICAgRml0VG9Db2x1bW4sXG4gICAgRml0VG9Sb3dDb250ZW50LFxuICAgIEZpdFRvQ29udGFpbmVyLFxuICAgIEZyZWVDb2x1bW5TaXplXG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlV2lkdGhPZkxpc3RDb2x1bW4oXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICBjYW5WaWV3OiBib29sZWFuLFxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXG4gICAgbW9kZTogVGFibGVIZWFkZXJXaWR0aE1vZGUsXG5cbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdXG4pOiB7IGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTsgY29udGV4dE1lbnVXaWR0aDogbnVtYmVyIH0ge1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29sdW1uOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoKGNvbnRhaW5lciwgY29sdW1ucywgbW9EYXRhTGlzdCwgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csIGNvbnRleHRNZW51SXRlbXMpO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoRml0VG9Db250YWluZXIoXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIGNhblZpZXcsXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICApO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxuICAgICAgICAgICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XG4gICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gKHsgLi4uY29sdW1uLCAkV2lkdGgyOiBjb2x1bW4uJFdpZHRoIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IG5ld0NvbHVtbnMsIGNvbnRleHRNZW51V2lkdGg6IGNvbnRleHRNZW51V2lkdGggfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBjYW5WaWV3LFxuICAgICAgICAgICAgICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LFxuICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGgoXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuLFxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW11cbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgY29sQ2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY29sdW1uLkFsaWFzKSArIDE2ICsgMTA7XG4gICAgICAgIGNvbHVtbi4kV2lkdGgyID0gYCR7TWF0aC5jZWlsKGNvbENhcHRpb25XaWR0aCl9cHhgO1xuICAgICAgICAvLyBpZiAobW9kZSA9PT0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db2x1bW4pIHtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChtYXhXaWR0aCA8IGNvbENhcHRpb25XaWR0aCkge1xuICAgICAgICAvLyAgICAgY29sdW1uLiRXaWR0aDIgPSBgJHtNYXRoLmNlaWwoY29sQ2FwdGlvbldpZHRoKX1weGA7XG4gICAgICAgIC8vIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gX2NhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93KTtcbiAgICByZXR1cm4geyBjb2x1bW5zOiBbLi4uY29sdW1uc10sIGNvbnRleHRNZW51V2lkdGggfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pIHtcbiAgICBjb25zdCB3aWR0aCA9IGNhbGN1bGF0ZU1vRGF0YUxpc3RDb250ZW50V2lkdGhCeUNvbHVtbk5hbWUobW9EYXRhTGlzdCwgY29sdW1uKTtcbiAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbCh3aWR0aCl9cHhgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uXG4pOiBudW1iZXIge1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgbW9EYXRhTGlzdC5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoY29sdW1uLk5hbWUsIGMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGNhcHRpb25XaWR0aCA9IG1lYXN1cmVUZXh0KGNhcHRpb24pICsgMTY7XG4gICAgICAgIGlmIChtYXhXaWR0aCA8IGNhcHRpb25XaWR0aCkge1xuICAgICAgICAgICAgbWF4V2lkdGggPSBjYXB0aW9uV2lkdGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKG1heFdpZHRoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgY2FuVmlldzogYm9vbGVhbixcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXVxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICBsZXQgYWxsQ29sV2lkdGggPSAwO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICBjb2wuV2lkdGggPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IG1lYXN1cmVUZXh0KGNvbC5BbGlhcykgKyAxNjtcbiAgICAgICAgYWxsQ29sV2lkdGggKz0gY29sLldpZHRoO1xuICAgIH0pO1xuICAgIGNvbnN0IGNhblZpZXdCdXR0b25XaWR0aCA9IGNhblZpZXcgPyA0MCA6IDA7XG4gICAgY29uc3Qgc2VsZWN0aW9uV2lkdGggPSAzMDtcblxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyA9IGNvbnRhaW5lcldpZHRoIC0gc2VsZWN0aW9uV2lkdGggLSBjYW5WaWV3QnV0dG9uV2lkdGggLSBjb250ZXh0TWVudVdpZHRoIC0gMTI7XG4gICAgLy8gYWxsQ29sV2lkdGggKz0gY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zIC0gYWxsQ29sV2lkdGg7Ly8g2YXYrdin2LPYqNmHINii2K7YsduM2YYg2LPYqtmI2YYu2obZiNmGIHdpZHRoINmF2LTYrti124wg2YbYr9in2LHYr1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5jZWlsKChjb250YWluZXJXaWR0aEFsbENvbHVtbnMgKiBjb2wuV2lkdGgpIC8gYWxsQ29sV2lkdGgpO1xuICAgICAgICBjb2wuV2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgY29sLiRXaWR0aDIgPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX2NhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgY29udGV4dE1lbnVXaWR0aCA9IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMSA/IDQwIDogMDtcbiAgICBjb25zdCBidG5QYWRkaW5nID0gMTQgKyAyICsgMTA7IC8vIHBhZGRpbmcgKyBib3JkZXIgKyBpZiB0ZXh0IGlzIG92ZXJmbG93ZWQgdGhlbiBhZGQgNSBwaXhlbC5zbyB3ZSBhbHdheXMgNSBweCB0byBpdC5cbiAgICBjb25zdCB0ZFBhZGRpbmcgPSAxNSArIDE7IC8vIHBhZGRpbmcgKyBib3JkZXJcbiAgICBjb25zdCBidXR0b25JY29uV2lkdGggPSAxNiArIDY7IC8vIHNpemUgKyBtYXJnaW5cbiAgICBpZiAoZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cgfHwgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29udGV4dE1lbnVXaWR0aCA9IDA7XG4gICAgICAgIGNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBtZWFzdXJlVGV4dChjLnRleHQpICsgYnRuUGFkZGluZyArIHRkUGFkZGluZztcbiAgICAgICAgICAgIGNvbnRleHRNZW51V2lkdGggKz0gYy5pY29uID8gYnV0dG9uSWNvbldpZHRoIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0TWVudVdpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBDb2x1bW5zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IE5hbWU6IHN0cmluZzsgQ2FwdGlvbjogc3RyaW5nIH1bXSxcbiAgICBjYXB0aW9uPzogYm9vbGVhblxuKTogYW55IHtcbiAgICBsZXQgZmllbGROYW1lID0gQ29sdW1ucyA/IENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBuYW1lIHx8IGMuQWxpYXMgPT09IG5hbWUpPy5OYW1lIDogbmFtZTtcbiAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICBmaWVsZE5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBsZXQgdmFsID0gZmllbGROYW1lID8gbW9bZmllbGROYW1lXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY2FwdGlvblZhbCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSBjYXB0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZBbHJlYWR5TG9hZGVkKHBhcmVudE1vZHVsZTogYW55LCBtb2R1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSW1wb3J0ICR7bW9kdWxlTmFtZX0gaW4gdGhlIEFwcE1vZHVsZSBvbmx5LmApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBtZWFzdXJlVGV4dERvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWFzdXJlVGV4dCcpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xuICAgIGlmICghbWVhc3VyZVRleHREb20pIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCBjdHggPSBtZWFzdXJlVGV4dERvbS5nZXRDb250ZXh0KCcyZCcpIGFzIGFueTtcbiAgICBmb250U2l6ZSA9IGZvbnRTaXplID8gZm9udFNpemUgOiAnMC44ODVyZW0nO1xuICAgIGN0eC5mb250ID0gYG5vcm1hbCAke2ZvbnRTaXplfSBJUkFOWWVrYW5EaWdpdHNgO1xuICAgIHJldHVybiBjdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VucmF0ZUlubGluZU1vSWQoKSB7XG4gICAgcmV0dXJuIChCYXJzYUFwaS5pZEdlbmVyYXRvci0tKS50b1N0cmluZygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVudW1WYWx1ZVRvU3RyaW5nU2l6ZSh2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICAgIHJldHVybiAncyc7XG4gICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgICAgcmV0dXJuICdtJztcbiAgICAgICAgY2FzZSAnMyc6XG4gICAgICAgICAgICByZXR1cm4gJ2wnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucz8pOiB2b2lkIHtcbiAgICBpZiAoYnV0dG9uLkNvbW1hbmQgJiYgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcikge1xuICAgICAgICBidXR0b24uQ29tbWFuZC5IYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChidXR0b24uaGFuZGxlcikge1xuICAgICAgICBidXR0b24uaGFuZGxlci5iaW5kKGJ1dHRvbi5zY29wZSkoYnV0dG9uLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pcXVlSWQocGFydHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyaW5nQXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHM7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBjb25zdCBTNCA9ICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApIHwgMCkudG9TdHJpbmcoMTYpO1xuICAgICAgICBjb25zdCBTNF86IHN0cmluZyA9IFM0Lmxlbmd0aCA+IDAgPyBTNC5zdWJzdHJpbmcoMSkgOiAnJztcbiAgICAgICAgc3RyaW5nQXJyLnB1c2goUzRfKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ0Fyci5qb2luKCctJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlU2VydmljZShsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLCBjdWx0dXJlPyk6IERhdGVTZXJ2aWNlIHtcbiAgICBjb25zdCBkZWZhdWx0Q3VsdHVyZSA9IGN1bHR1cmUgPz8gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdWx0dXJlO1xuICAgIHN3aXRjaCAoZGVmYXVsdEN1bHR1cmUpIHtcbiAgICAgICAgY2FzZSAnZmEtSVInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlU2hhbXNpU2VydmljZShsb2dTZXJ2aWNlKTtcbiAgICAgICAgY2FzZSAnYXItQUUnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlSGlqcmlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlTWlsYWRpU2VydmljZShsb2dTZXJ2aWNlKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGaXJlZm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VQYXRoKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBtb0lkOiBzdHJpbmcgfCBudWxsLFxuICAgIGZpbGVJZDogc3RyaW5nLFxuICAgIGZpZWxkRGVmSWQ/OiBzdHJpbmcsXG4gICAgc2l6ZT86IG51bWJlcixcbiAgICBzaXplSD86IG51bWJlclxuKTogc3RyaW5nIHtcbiAgICBtb0lkID0gbW9JZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQobW9JZCk7XG4gICAgZmlsZUlkID0gZmlsZUlkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChmaWxlSWQpO1xuICAgIGZpZWxkRGVmSWQgPSBmaWVsZERlZklkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChmaWVsZERlZklkKTtcbiAgICBzaXplID0gc2l6ZSA9PSBudWxsID8gMTI4IDogc2l6ZTtcbiAgICBzaXplSCA9IHNpemVIID09IG51bGwgPyBzaXplIDogc2l6ZUg7XG4gICAgY29uc3QgdXJsID0gYC9JSC5hc2h4P3R5PSR7dHlwZX0mbW9JZD0ke21vSWR9JmlkPSR7ZmlsZUlkfSZmZElkPSR7ZmllbGREZWZJZH0mc2k9JHtzaXplfSZzaUg9JHtzaXplSH1gO1xuICAgIHJldHVybiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjayk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYge30udG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIERldmljZVdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gMCA/IHdpbmRvdy5pbm5lcldpZHRoIDogc2NyZWVuLndpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGZpZWxkVmFsdWUpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gZmllbGRWYWx1ZS5WYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUNhcHRpb246IHN0cmluZyA9IGZpZWxkVmFsdWUuVmFsdWUkQ2FwdGlvbjtcbiAgICBsZXQgdmFsdWVPYmplY3RDYXB0aW9uID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZU9iamVjdENhcHRpb24gPSBmaWVsZFZhbHVlLlZhbHVlLiRDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVPYmplY3RDYXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZU9iamVjdENhcHRpb247XG4gICAgfVxuICAgIGlmICh2YWx1ZUNhcHRpb24gJiYgIXZhbHVlQ2FwdGlvbi5zdGFydHNXaXRoKCd0bXAnKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVDYXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEluVmlld3BvcnQyKGVsOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdG9wID0gZWwub2Zmc2V0VG9wO1xuICAgIGxldCBsZWZ0ID0gZWwub2Zmc2V0TGVmdDtcbiAgICBjb25zdCB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsLm9mZnNldEhlaWdodDtcblxuICAgIHdoaWxlIChlbC5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIHRvcCArPSBlbC5vZmZzZXRUb3A7XG4gICAgICAgIGxlZnQgKz0gZWwub2Zmc2V0TGVmdDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICB0b3AgPCB3aW5kb3cucGFnZVlPZmZzZXQgKyB3aW5kb3cuaW5uZXJIZWlnaHQgJiZcbiAgICAgICAgbGVmdCA8IHdpbmRvdy5wYWdlWE9mZnNldCArIHdpbmRvdy5pbm5lcldpZHRoICYmXG4gICAgICAgIHRvcCArIGhlaWdodCA+IHdpbmRvdy5wYWdlWU9mZnNldCAmJlxuICAgICAgICBsZWZ0ICsgd2lkdGggPiB3aW5kb3cucGFnZVhPZmZzZXRcbiAgICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByZXZlbnREZWZhdWxFdmVudChlKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBsZXQgcGFyZW50RG9tID0gZWxEb20ucGFyZW50RWxlbWVudDtcbiAgICBsZXQgcGFyZW50SGVpZ2h0ID0gcGFyZW50RG9tPy5jbGllbnRIZWlnaHQgPz8gMDtcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcbiAgICAgICAgcGFyZW50RG9tID0gcGFyZW50RG9tLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRIZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnREZWZpbmVkKFxuICAgIGNvbnRyb2xVaTogeyBvcmlnaW5hbFh0eXBlOiBzdHJpbmcgfSxcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XG4pOiB7XG4gICAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbn0ge1xuICAgIGxldCBtb2R1bGVOYW1lID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EZWZhdWx0VWlNb2R1bGU7XG4gICAgbGV0IG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcbiAgICBsZXQgc2VsZWN0b3I6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShjb21wb25lbnROYW1lKTtcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cmluZygxLCBzZWxlY3Rvci5sZW5ndGgpO1xuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xuICAgIGlmIChjdXN0b21VaVNldHRpbmcgJiYgY3VzdG9tVWlTZXR0aW5nLk1vZHVsZSkge1xuICAgICAgICBtb2R1bGVOYW1lID0gY3VzdG9tVWlTZXR0aW5nLk1vZHVsZTtcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xuICAgICAgICBjb21wb25lbnROYW1lID0gY3VzdG9tVWlTZXR0aW5nLk5hbWU7XG4gICAgICAgIHNlbGVjdG9yID0gY3VzdG9tVWlTZXR0aW5nLlNlbGVjdG9yO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gbW9kdWxlS2ViYWJOYW1lLnNsaWNlKDEsIG1vZHVsZUtlYmFiTmFtZS5sZW5ndGgpO1xuICAgIHJldHVybiB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1Bob25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBEZXZpY2UuaXNQaG9uZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzRGVza3RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNUYWJsZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ21vYmknKSA+IDAgfHwgZ2V0RGV2aWNlSXNQaG9uZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFNpemVNb2RlKGVsOiBIVE1MRWxlbWVudCwgZGV2aWNlU2l6ZTogJ3MnIHwgJ20nIHwgJ2wnIHwgJ3hsJyA9ICdsJyk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRldmljZVNpemU7XG4gICAgfVxuICAgIGlmIChkZXZpY2VTaXplID09PSAncycgfHwgY29udGFpbmVyV2lkdGggPCA2MDApIHtcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdzJztcbiAgICB9IGVsc2UgaWYgKGRldmljZVNpemUgPT09ICdtJyB8fCAoY29udGFpbmVyV2lkdGggPiA2MDAgJiYgY29udGFpbmVyV2lkdGggPCAxMjAwKSkge1xuICAgICAgICBkZXZpY2VTaXplID0gJ20nO1xuICAgIH1cbiAgICByZXR1cm4gZGV2aWNlU2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKFxuICAgIGJ5dGVzLFxuICAgIGRlY2ltYWxzID0gMixcbiAgICBzaXplOiAnQnl0ZXMnIHwgJ0tCJyB8ICdNQicgfCAnR0InIHwgJ1RCJyB8ICdQQicgfCAnRUInIHwgJ1pCJyB8ICdZQidcbik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnMCBCeXRlcyc7XG4gICAgfVxuXG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3QgZG0gPSBkZWNpbWFscyA8IDAgPyAwIDogZGVjaW1hbHM7XG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG4gICAgY29uc3QgaSA9IHNpemVzLmZpbmRJbmRleCgoYykgPT4gYyA9PT0gc2l6ZSk7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArICcgJyArIHNpemVzW2ldO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkRXh0ZW5zaW9uKHZhbGlkRXh0ZW5zaW9ucyk6IHN0cmluZyB7XG4gICAgbGV0IF92YWxpZEV4dGVuc2lvbnMgPSAnJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZEV4dGVuc2lvbnMpKSB7XG4gICAgICAgIF92YWxpZEV4dGVuc2lvbnMgPSB2YWxpZEV4dGVuc2lvbnMubWFwKChjKSA9PiAnLicgKyBjLkV4dGVuc2lvbikuam9pbignLCcpO1xuICAgIH1cbiAgICByZXR1cm4gX3ZhbGlkRXh0ZW5zaW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkZpbGVJY29uRGljdDEyOFt0eXBlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ltYWdlKHR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBbJ2ltZycsICdwbmcnLCAnanBlZycsICdqcGcnLCAnZ2lmJywgJ2JtcCcsICd0aWZmJywgJ2ltYWdlJ10uaW5kZXhPZih0eXBlKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2V0QWxsQ29sdW1uc1NvcnRlZChjb250ZXh0KTogQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkNvbHVtbnMnLCBbXSkuZmlsdGVyKFxuICAgICAgICAoYykgPT4gYy5OYW1lICE9PSAnSWQnICYmIGMuTmFtZSAhPT0gJyRTdHlsZUluZGV4JyAmJiAhYy5IaWRkZW5cbiAgICApO1xuXG4gICAgY29uc3QgY29sTGlzdDogQ29sU2V0dGluZ1tdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcuQ29sU2V0dGluZ0xpc3QnLFxuICAgICAgICBbXVxuICAgICk7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPigpO1xuICAgIGNvbExpc3QuZm9yRWFjaCgoY29sUykgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5PZkNvbExpc3QgPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gY29sUy5OYW1lKTtcbiAgICAgICAgaWYgKGNvbHVtbk9mQ29sTGlzdCkge1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgLi4uY29sdW1uT2ZDb2xMaXN0LCBIaWRkZW46IGNvbFMuSXNIaWRkZW4sIFdpZHRoOiBjb2xTLldpZHRoIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbFNldHRpbmcgPSBjb2xMaXN0LmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gY29sdW1uLk5hbWUpO1xuICAgICAgICBpZiAoIWNvbFNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGluZGV4LCAwLCB7IC4uLmNvbHVtbiwgSGlkZGVuOiBjb2xMaXN0Lmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEdldFZpc2libGVWYWx1ZShvYmplY3QsIGZpZWxkKTogc3RyaW5nIHtcbiAgICBsZXQgb3V0cHV0VmFsdWU7XG4gICAgaWYgKG9iamVjdFtmaWVsZF0/LiRDYXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGRdLiRDYXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFZhbHVlID0gb2JqZWN0W2ZpZWxkICsgJyRDYXB0aW9uJ10gIT09IHVuZGVmaW5lZCA/IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddIDogb2JqZWN0W2ZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dFZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gICAgJEdyb3VwOiBhbnk7XG4gICAgJExldmVsOiBudW1iZXI7XG4gICAgJENvdW50OiBudW1iZXI7XG4gICAgJEV4cGFuZGVkOiBib29sZWFuO1xuICAgICRQYXJlbnQ6IGFueTtcbiAgICAkQ2hpbGRyZW46IGFueVtdO1xuICAgICRWaXNpYmlsaXR5OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR3JvdXBCeShjb2xsZWN0aW9uOiBhbnlbXSwgc29ydFNldHRpbmdzOiBTb3J0U2V0dGluZ1tdKTogeyBncm91cGVkOiBHcm91cDsgZ3JvdXBzOiBhbnlbXSB9IHtcbiAgICBjb25zdCBncm91cGVkOiBhbnkgPSB7fTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IHNvcnRTZXR0aW5ncy5tYXAoKGMpID0+IGMuTmFtZSk7XG4gICAgY29uc3QgZ2V0VGl0bGUgPSAobW8sIGZpZWxkTmFtZSk6IHN0cmluZyA9PiBHZXRWaXNpYmxlVmFsdWUobW8sIGZpZWxkTmFtZSk7XG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGdyb3Vwc1xuICAgICAgICAgICAgLnJlZHVjZSgobywgZywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVGl0bGUgPSBnZXRUaXRsZShhLCBnKTtcbiAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdID0gb1tncm91cFRpdGxlXSB8fCAoaSArIDEgPT09IGdyb3Vwcy5sZW5ndGggPyBbXSA6IHt9KTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2dyb3VwVGl0bGVdKSkge1xuICAgICAgICAgICAgICAgICAgICBhLiRMZXZlbCA9IGdyb3Vwcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGdldFRpdGxlKGEsIGdyb3Vwc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBncm91cGVkW3RpdGxlXTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IChwYXJlbnQuJENvdW50ID8/IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBncm91cHMubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGdldFRpdGxlKGEsIGdyb3Vwc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbdGl0bGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IG9bZ3JvdXBUaXRsZV0ubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEyID0gRmluZEdyb3VwKGdyb3VwVGl0bGUsIGEpO1xuICAgICAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdLiRFeHBhbmRlZCA9IGEyPy4kRXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJFZpc2liaWxpdHkgPSBhMj8uJFZpc2liaWxpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvW2dyb3VwVGl0bGVdO1xuICAgICAgICAgICAgfSwgZ3JvdXBlZClcbiAgICAgICAgICAgIC5wdXNoKGEpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGdyb3VwZWQsIGdyb3VwcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmluZEdyb3VwKGdyb3VwVGl0bGU6IHN0cmluZywgYTogYW55KTogYW55IHtcbiAgICBpZiAoYS4kR3JvdXAgPT09IGdyb3VwVGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICAgIGlmIChhLiRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIEZpbmRHcm91cChncm91cFRpdGxlLCBhLiRQYXJlbnQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoaXRlbTogTGF5b3V0U2V0dGluZywgbGF5b3V0Q29udHJvbHM6IExheW91dFNldHRpbmdbXSk6IHZvaWQge1xuICAgIGlmIChpdGVtLnh0eXBlID09PSAnTHkuTGF5b3V0Q29udHJvbCcpIHtcbiAgICAgICAgbGF5b3V0Q29udHJvbHMucHVzaChpdGVtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0uaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uaXRlbXMuZm9yRWFjaCgoYykgPT4gRmlsbEFsbExheW91dENvbnRyb2xzKGMsIGxheW91dENvbnRyb2xzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRmluZFRvb2xiYXJJdGVtKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZywgcHJvcDogc3RyaW5nID0gJ3RleHQnKTogTWVudUl0ZW0gfCBudWxsIHtcbiAgICBpZiAoIXRvb2xiYXJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaW5kSW5BcnJheSA9ICh0b29sYmFySXRlbXM6IE1lbnVJdGVtW10sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGl0ZW06IE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHRvb2xiYXJJdGVtcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGMgPT09ICdvYmplY3QnICYmICFpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNbcHJvcF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBjO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLm1lbnU/Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbmRJbkFycmF5KGMubWVudS5pdGVtcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH07XG4gICAgcmV0dXJuIGZpbmRJbkFycmF5KHRvb2xiYXJJdGVtcywgdmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0OiBMYXlvdXRTZXR0aW5nLCBsYXlvdXRUaXRsZTogc3RyaW5nKTogTGF5b3V0U2V0dGluZyB8IG51bGwge1xuICAgIGlmICghbGF5b3V0VGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChsYXlvdXQ5NC5DYXB0aW9uID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5UaXRsZSA9PT0gbGF5b3V0VGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGxheW91dDk0O1xuICAgIH1cbiAgICBsZXQgdGVtcExheW91dDk0OiBMYXlvdXRTZXR0aW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGxheW91dDk0Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXQ5NC5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0ZW1wTGF5b3V0OTQpIHtcbiAgICAgICAgICAgICAgICB0ZW1wTGF5b3V0OTQgPSBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NC5pdGVtc1tpXSwgbGF5b3V0VGl0bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTGF5b3V0OTQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JpZFNldHRpbmdzKGNvbnRleHQpOiBHcmlkU2V0dGluZyB7XG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nJywgbnVsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgQ29sU2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Db2xTZXR0aW5nTGlzdCA/PyBudWxsLFxuICAgICAgICBTb3J0U2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Tb3J0U2V0dGluZ0xpc3QgPz8gW10sXG4gICAgICAgIEF1dG9TaXplQ29sdW1uczogZ3JpZFNldHRpbmc/LkF1dG9TaXplQ29sdW1ucyA/PyBmYWxzZVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIHJldHVybiB7XG4gICAgICAgIElkOiAnMCcsXG4gICAgICAgICRDYXB0aW9uOiAnJyxcbiAgICAgICAgJFR5cGVEZWZJZDogdHlwZURlZklkLFxuICAgICAgICAkU3RhdGU6ICdOZXcnLFxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcbiAgICAgICAgJEZpZWxkRGljdDoge31cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dDk0T2JqZWN0SW5mbygpOiBMYXlvdXRTZXR0aW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBUeXBlOiAnUm9vdCcsXG4gICAgICAgIENvbnRyb2xJZDogJ9ix24zYtNmHJyxcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250YWluZXInLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxuICAgICAgICAgICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Sm9pbicsXG4gICAgICAgICAgICAgICAgSXNWZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XG4gICAgY29uc3QgbW8gPSBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZCk7XG5cbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XG4gICAgICAgIFZpZXc6IHtcbiAgICAgICAgICAgIExheW91dDk0OiBnZXRMYXlvdXQ5NE9iamVjdEluZm8sXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXG4gICAgICAgICAgICBUeXBlRGVmSWQ6IHR5cGVEZWZJZFxuICAgICAgICB9LFxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICBNbzogbW9cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGZvcm1QYW5lbFNldHRpbmdzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1QYW5lbE1ldGFDb25kaXRpb25zKFxuICAgIHR5cGVEZWZJZDogc3RyaW5nLFxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbik6IGFueSB7XG4gICAgY29uc3QgZm9ybVNldHRpbmdzID0gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZCk7XG4gICAgZm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2xzSW5mbykpO1xuXG4gICAgZm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaCguLi5jb250cm9sc0luZm8ubWFwKChjKSA9PiBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUpKSk7XG4gICAgZm9ybVNldHRpbmdzLkRhdGEuTW9bY29udHJvbE5hbWVdID0gdmFsdWU7XG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xuICAgICAgICBTZXR0aW5nOiBmb3JtU2V0dGluZ3MsXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TW9HcmlkRWRpdG9yKGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogUGFydGlhbDxGb3JtU2V0dGluZz4ge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmlkRWRpdG9yRm9ybVBhbmVsKFxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgdHlwZWRlZjogc3RyaW5nLFxuICAgIHJlbGF0aW9uOiBhbnksXG4gICAgcmV3cml0ZUxheW91dDogYm9vbGVhbiA9IHRydWVcbik6IGFueSB7XG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XG4gICAgbmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8gPSB7IC4uLm1vLCAkVHlwZURlZklkOiB0eXBlZGVmIH07XG4gICAgaWYgKHJld3JpdGVMYXlvdXQpIHtcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQgPSBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTtcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaChcbiAgICAgICAgICAgIC4uLm5ld0Zvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvLm1hcCgoYykgPT5cbiAgICAgICAgICAgICAgICBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUsIGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsIGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmb3JtUmVxdWVzdFBhcmFtcyA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUmVxdWVzdFBhcmFtcyh7XG4gICAgICAgIE1vSWQ6IG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLklkLFxuICAgICAgICBUeXBlRGVmSWQ6IHR5cGVkZWYsXG4gICAgICAgIFJlbGF0aW9uOiByZWxhdGlvblxuICAgICAgICAvLyBNb0NvbnRleHQ6IHtcbiAgICAgICAgLy8gICAgIFJlcG9ydElkOiAnJyxcbiAgICAgICAgLy8gICAgIFZpZXdJZDogJycsXG4gICAgICAgIC8vICAgICBWaWV3TmFtZTogJycsXG4gICAgICAgIC8vICAgICBDb25kRm9ybWF0aW5nOiAnJyxcbiAgICAgICAgLy8gICAgIEluY2x1ZGVJblJlcG9ydDogJydcbiAgICAgICAgLy8gfVxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcbiAgICAgICAgU2V0dGluZzogbmV3Rm9ybVNldHRpbmdzLFxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb24sXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIEZvcm1SZXF1ZXN0UGFyYW1zOiBmb3JtUmVxdWVzdFBhcmFtc1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtUGFuZWxDdHJscjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dENvbnRyb2woXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcbiAgICBjb250cm9sQ2FwdGlvbjogc3RyaW5nID0gJycsXG4gICAgaGlkZTogYm9vbGVhbiA9IHRydWVcbik6IFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4dHlwZTogJ0x5LkxheW91dENvbnRyb2wnLFxuICAgICAgICBUeXBlOiAnTGF5b3V0Q29udHJvbEl0ZW0nLFxuICAgICAgICBDb250cm9sSWQ6IGNvbnRyb2xOYW1lLFxuICAgICAgICBJc1ZlcnRpY2FsOiBmYWxzZSxcbiAgICAgICAgVGV4dExvY2F0aW9uOiAnUmlnaHQnLFxuICAgICAgICBUZXh0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgIFZpc2libGU6ICFoaWRlLFxuICAgICAgICBoaWRlLFxuICAgICAgICBVc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2w6IGZhbHNlLFxuICAgICAgICBDYXB0aW9uOiBjb250cm9sQ2FwdGlvbixcbiAgICAgICAgQWNjZXNzaWJsZU5hbWU6ICcnLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBNaW5TaXplOiB7IHdpZHRoOiA4OSwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIENvbnRyb2xCb3VuZHM6IHsgd2lkdGg6IDM4OCwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBDb250cm9sTWluU2l6ZTogeyB3aWR0aDogNDUsIGhlaWdodDogMjAgfSxcbiAgICAgICAgQ29udHJvbE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjAgfSxcbiAgICAgICAgUGFkZGluZzogWzIsIDIsIDIsIDJdLFxuICAgICAgICBMYWJlbFNpemU6IHsgd2lkdGg6IDM1LCBoZWlnaHQ6IDEzIH0sXG4gICAgICAgIG9yaWdpbmFsWHR5cGU6ICcnXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xMaXN0KFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIGNvbnRyb2xEYk5hbWVzOiBzdHJpbmdbXSxcbiAgICBpc1NlYXJjaFBhbmVsOiBib29sZWFuLFxuICAgIGlzR3JpZEVkaXRvcjogYm9vbGVhblxuKTogUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcbiAgICAgICAgICAgICdGb3JtOTQuR2V0Q29udHJvbEluZm9zJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250cm9sSW5mb1BhcmFtZXRlcjoge1xuICAgICAgICAgICAgICAgICAgICBGaWVsZERiTmFtZXM6IGNvbnRyb2xEYk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICBNbzogbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKG1vKSxcbiAgICAgICAgICAgICAgICAgICAgSXNTZWFyY2hQYW5lbDogaXNTZWFyY2hQYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgSXNHcmlkRWRpdG9yOiBpc0dyaWRFZGl0b3JcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG0pID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgTnpTYWZlQW55ID0gYW55O1xuZXhwb3J0IHR5cGUgTnVtYmVySW5wdXQgPSBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuZXhwb3J0IGludGVyZmFjZSBOZ1N0eWxlSW50ZXJmYWNlIHtcbiAgICBba2xhc3M6IHN0cmluZ106IE56U2FmZUFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleGFibGVPYmplY3Qge1xuICAgIFtrZXk6IHN0cmluZ106IE56U2FmZUFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQT86IEluZGV4YWJsZU9iamVjdCwgb2JqQj86IEluZGV4YWJsZU9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8ICFvYmpCKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChvYmpCKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0FbaWR4XTtcbiAgICAgICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlcjtcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQ7XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2tWYWx1ZTogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gICAgcmV0dXJuIF9pc051bWJlclZhbHVlKHZhbHVlKSA/IE51bWJlcih2YWx1ZSkgOiBmYWxsYmFja1ZhbHVlO1xufVxuZnVuY3Rpb24gcHJvcERlY29yYXRvckZhY3Rvcnk8VCwgRD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiAodjogVCkgPT4gRFxuKTogKHRhcmdldDogTnpTYWZlQW55LCBwcm9wTmFtZTogc3RyaW5nKSA9PiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwcm9wRGVjb3JhdG9yKFxuICAgICAgICB0YXJnZXQ6IE56U2FmZUFueSxcbiAgICAgICAgcHJvcE5hbWU6IHN0cmluZyxcbiAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8TnpTYWZlQW55PlxuICAgICk6IE56U2FmZUFueSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVQcm9wTmFtZSA9IGAkJF9fem9ycm9Qcm9wRGVjb3JhdG9yX18ke3Byb3BOYW1lfWA7XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSkpIHtcbiAgICAgICAgICAgIC8vIHdhcm4oYFRoZSBwcm9wIFwiJHtwcml2YXRlUHJvcE5hbWV9XCIgaXMgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBiZSBvdmVycmlkZWQgYnkgJHtuYW1lfSBkZWNvcmF0b3IuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5nZXRcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0LmJpbmQodGhpcykoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbcHJpdmF0ZVByb3BOYW1lXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yLnNldC5iaW5kKHRoaXMpKGZhbGxiYWNrKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcHJpdmF0ZVByb3BOYW1lXSA9IGZhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcERlY29yYXRvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBJbnB1dE51bWJlcihmYWxsYmFja1ZhbHVlPzogTnpTYWZlQW55KTogTnpTYWZlQW55IHtcbiAgICByZXR1cm4gcHJvcERlY29yYXRvckZhY3RvcnkoJ0lucHV0TnVtYmVyJywgKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHRvTnVtYmVyKHZhbHVlLCBmYWxsYmFja1ZhbHVlKSk7XG59XG5leHBvcnQgZW51bSBBZmZpeFJlc3BvbmRFdmVudHMge1xuICAgIHJlc2l6ZSA9ICdyZXNpemUnLFxuICAgIHNjcm9sbCA9ICdzY3JvbGwnLFxuICAgIHRvdWNoc3RhcnQgPSAndG91Y2hzdGFydCcsXG4gICAgdG91Y2htb3ZlID0gJ3RvdWNobW92ZScsXG4gICAgdG91Y2hlbmQgPSAndG91Y2hlbmQnLFxuICAgIHBhZ2VzaG93ID0gJ3BhZ2VzaG93JyxcbiAgICBsb2FkID0gJ0xPQUQnXG59XG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVJlY3Qge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBoZWlnaHQ/OiBudW1iZXI7XG4gICAgYm90dG9tPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYXJnZXRXaW5kb3codGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogdGFyZ2V0IGlzIFdpbmRvdyB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCA9PT0gd2luZG93O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0UmVjdCh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiBTaW1wbGVSZWN0IHtcbiAgICByZXR1cm4gIWlzVGFyZ2V0V2luZG93KHRhcmdldClcbiAgICAgICAgPyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWUobmFtZTogc3RyaW5nLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgY2FwdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmIChtby5HZXRGVmFsdWVCeUNhcHRpb24pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG1vLkdldEZWYWx1ZShuYW1lKTtcbiAgICAgICAgaWYgKGNhcHRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vLkdldEZDYXB0aW9uKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvbiA9PT0gJ3VuZGVmaW5lZCcgJiYgbW8uSW5oZXJpdGFuY2VJbmZvICYmICEobW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdKSkge1xuICAgICAgICAgICAgY29uc3QgeyBQYXJlbnRGaWVsZE5hbWUgfSA9IG1vLkluaGVyaXRhbmNlSW5mbztcbiAgICAgICAgICAgIGNvbnN0IG1vUGFyZW50ID0gbW8uR2V0RlZhbHVlKFBhcmVudEZpZWxkTmFtZSk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RlZhbHVlKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhcHRpb24pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBtb1BhcmVudC5HZXRGQ2FwdGlvbihuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBmaWVsZE5hbWUgPSBtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0gPyBtby4kRmllbGREaWN0W25hbWVdIDogbmFtZTtcbiAgICBsZXQgdmFsID0gbW9bZmllbGROYW1lXTtcbiAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZVByZWZpeGVzID0gWydtb3onLCAnbXMnLCAnd2Via2l0J107XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcbiAgICBsZXQgbGFzdFRpbWUgPSAwO1xuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogYW55IHtcbiAgICAgICAgY29uc3QgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XG4gICAgICAgIH0sIHRpbWVUb0NhbGwpO1xuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZUR5bmFtaWNDb21tYW5kKGNvbW1hbmQ6IHsgSWQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IHsgY29tbWFuZCwgRHluYW1pY1NldHRpbmc6IG1vLCBNbzogbW8gfTtcbiAgICBCYXJzYUFwaS5Db21tb24uQ3VzdG9tQ29kZU1hbmFnZXIuUnVuRHluYW1pY0NvbW1hbmQoY29tbWFuZC5JZCwgZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZVdvcmtmbG93Q2hvaWNlRGVmKHNjb3BlLCBwYXJhbSwgc3VjY2VzczogKHJlc3VsdCkgPT4gdm9pZCwgZmFpbGVkOiAoZXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxuICAgICAgICAnV29ya2Zsb3c5NC5DaG9pY2VTZWxlY3QnLFxuICAgICAgICBwYXJhbSxcbiAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgICB9LCAvLyBzdWNjZXNzXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZmFpbGVkKGVycm9yKTtcbiAgICAgICAgfSwgLy8gIGVycm9yXG4gICAgICAgICgpID0+IHt9LCAvLyBkb1JldHVyblxuICAgICAgICBzY29wZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gMDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxuICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKChrZXkpID0+IGAke2tleX1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdylbMF07XG5cbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGlkOiBudW1iZXIpOiBOelNhZmVBbnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgICAgICByZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PiBgJHtrZXl9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdyB8fCBgJHtrZXl9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3dcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIHByZWZpeFxuICAgICAgICA/IChcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYF1cbiAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgLmNhbGwodGhpcywgaWQpXG4gICAgICAgIDogY2xlYXJUaW1lb3V0KGlkKTtcbn1cblxuZXhwb3J0IHR5cGUgRWFzeWluZ0ZuID0gKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xuICAgIGlmICh0dCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogdHQgKiB0dCAqIHR0ICsgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiAoKHR0IC09IDIpICogdHQgKiB0dCArIDIpICsgYjtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnpTY3JvbGxUb09wdGlvbnMge1xuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgLyoqIFNjcm9sbCBjb250YWluZXIsIGRlZmF1bHQgYXMgd2luZG93ICovXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xuICAgIC8qKiBTY3JvbGwgZW5kIGNhbGxiYWNrICovXG4gICAgY2FsbGJhY2s/KCk6IHZvaWQ7XG59XG5leHBvcnQgY29uc3QgV29yZE1pbWVUeXBlID1cbiAgICAnLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xuZXhwb3J0IGNvbnN0IEltYWdlTWltZVR5cGUgPSAnLmpwZWcsLmpwZywuZ2lmLC5wbmcsLmJtcCwudGlmLGltYWdlLyonO1xuZXhwb3J0IGNvbnN0IFBkZk1pbWVUeXBlID0gJy5wZGYnO1xuZXhwb3J0IGNvbnN0IEFsbEZpbGVzTWltZVR5cGUgPSAnLnR4dCwucHB0LC5wZGYsLionO1xuZXhwb3J0IGNvbnN0IFZpZGVvTWltZVR5cGUgPSAndmlkZW8vKic7XG5leHBvcnQgY29uc3QgQXVkaW9NaW1lVHlwZSA9ICdhdWRpby8qJztcblxuZXhwb3J0IGZ1bmN0aW9uIENoYW5nZUxheW91dEluZm9DdXN0b21VaShsYXlvdXRJbmZvOiBMYXlvdXRTZXR0aW5nLCBjb21wb25lbnRVaTogRWpyYXlPbGdvKTogdm9pZCB7XG4gICAgZGVidWdnZXI7XG4gICAgbGF5b3V0SW5mby5GaWVsZFVpLlNldHRpbmcuQ3VzdG9tVWkgPSBjb21wb25lbnRVaTtcbn1cbiJdfQ==
736
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1Qiw2RUFBVyxDQUFBO0lBQ1gscUZBQWUsQ0FBQTtJQUNmLG1GQUFjLENBQUE7SUFDZCxtRkFBYyxDQUFBO0FBQ2xCLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxTQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBNEIsRUFDNUIsMEJBQW1DLEVBQ25DLElBQTBCLEVBRTFCLFVBQWlDLEVBQ2pDLE9BQTJCO0lBRTNCLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RyxLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsT0FBTyxrQ0FBa0MsQ0FDckMsU0FBUyxFQUNULE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDVixDQUFDO1FBQ04sS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO1lBQ3BDLE1BQU0sZ0JBQWdC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LElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBZTtJQUM3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLENBQUMsSUFBSSxFQUFF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QUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuRDtBQUNMLENBQUM7QUFVRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLHVHQUF1RyxDQUFDO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx3Q0FBd0MsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUV2QyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsVUFBeUIsRUFBRSxXQUFzQjtJQUN0RixRQUFRLENBQUM7SUFDVCxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XHJcbmltcG9ydCB7XHJcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXHJcbiAgICBDb2xTZXR0aW5nLFxyXG4gICAgRWpyYXlPbGdvLFxyXG4gICAgRm9ybVNldHRpbmcsXHJcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcclxuICAgIEdyaWRTZXR0aW5nLFxyXG4gICAgTGF5b3V0U2V0dGluZyxcclxuICAgIE1lbnVJdGVtLFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBTb3J0U2V0dGluZ1xyXG59IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEYXRlSGlqcmlTZXJ2aWNlLCBEYXRlTWlsYWRpU2VydmljZSwgRGF0ZVNlcnZpY2UsIERhdGVTaGFtc2lTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXNlcnZpY2VzJztcclxuaW1wb3J0ICogYXMgRGV2aWNlIGZyb20gJy4vZGV2aWNlJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbG9nLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gVGFibGVIZWFkZXJXaWR0aE1vZGUge1xyXG4gICAgRml0VG9Db2x1bW4sXHJcbiAgICBGaXRUb1Jvd0NvbnRlbnQsXHJcbiAgICBGaXRUb0NvbnRhaW5lcixcclxuICAgIEZyZWVDb2x1bW5TaXplXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVdpZHRoT2ZMaXN0Q29sdW1uKFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIGNhblZpZXc6IGJvb2xlYW4sXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXHJcbiAgICBtb2RlOiBUYWJsZUhlYWRlcldpZHRoTW9kZSxcclxuXHJcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db2x1bW46XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aChjb250YWluZXIsIGNvbHVtbnMsIG1vRGF0YUxpc3QsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LCBjb250ZXh0TWVudUl0ZW1zKTtcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIGNhblZpZXcsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyxcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMsXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZTpcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAoeyAuLi5jb2x1bW4sICRXaWR0aDI6IGNvbHVtbi4kV2lkdGggfSkpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBuZXdDb2x1bW5zLCBjb250ZXh0TWVudVdpZHRoOiBjb250ZXh0TWVudVdpZHRoIH07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoRml0VG9Db250YWluZXIoXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBjYW5WaWV3LFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1zLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aChcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXHJcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcclxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sQ2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY29sdW1uLkFsaWFzKSArIDE2ICsgMTA7XHJcbiAgICAgICAgY29sdW1uLiRXaWR0aDIgPSBgJHtNYXRoLmNlaWwoY29sQ2FwdGlvbldpZHRoKX1weGA7XHJcbiAgICAgICAgLy8gaWYgKG1vZGUgPT09IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29sdW1uKSB7XHJcbiAgICAgICAgLy8gfSBlbHNlIGlmIChtYXhXaWR0aCA8IGNvbENhcHRpb25XaWR0aCkge1xyXG4gICAgICAgIC8vICAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbChjb2xDYXB0aW9uV2lkdGgpfXB4YDtcclxuICAgICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xyXG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbikge1xyXG4gICAgY29uc3Qgd2lkdGggPSBjYWxjdWxhdGVNb0RhdGFMaXN0Q29udGVudFdpZHRoQnlDb2x1bW5OYW1lKG1vRGF0YUxpc3QsIGNvbHVtbik7XHJcbiAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbCh3aWR0aCl9cHhgO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShcclxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcclxuICAgIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtblxyXG4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heFdpZHRoID0gMDtcclxuICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoYywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjYXB0aW9uID0gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoY29sdW1uLk5hbWUsIGMsIHVuZGVmaW5lZCwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgY2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY2FwdGlvbikgKyAxNjtcclxuICAgICAgICBpZiAobWF4V2lkdGggPCBjYXB0aW9uV2lkdGgpIHtcclxuICAgICAgICAgICAgbWF4V2lkdGggPSBjYXB0aW9uV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKG1heFdpZHRoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBjYW5WaWV3OiBib29sZWFuLFxyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxyXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdXHJcbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcclxuICAgIGxldCBhbGxDb2xXaWR0aCA9IDA7XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb2wuV2lkdGggPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IG1lYXN1cmVUZXh0KGNvbC5BbGlhcykgKyAxNjtcclxuICAgICAgICBhbGxDb2xXaWR0aCArPSBjb2wuV2lkdGg7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNhblZpZXdCdXR0b25XaWR0aCA9IGNhblZpZXcgPyA0MCA6IDA7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25XaWR0aCA9IDMwO1xyXG5cclxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zID0gY29udGFpbmVyV2lkdGggLSBzZWxlY3Rpb25XaWR0aCAtIGNhblZpZXdCdXR0b25XaWR0aCAtIGNvbnRleHRNZW51V2lkdGggLSAxMjtcclxuICAgIC8vIGFsbENvbFdpZHRoICs9IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAtIGFsbENvbFdpZHRoOy8vINmF2K3Yp9iz2KjZhyDYotiu2LHbjNmGINiz2KrZiNmGLtqG2YjZhiB3aWR0aCDZhdi02K7YtduMINmG2K/Yp9ix2K9cclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLmNlaWwoKGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAqIGNvbC5XaWR0aCkgLyBhbGxDb2xXaWR0aCk7XHJcbiAgICAgICAgY29sLldpZHRoID0gbmV3V2lkdGg7XHJcbiAgICAgICAgY29sLiRXaWR0aDIgPSBgJHtuZXdXaWR0aH1weGA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGNvbHVtbnM6IFsuLi5jb2x1bW5zXSwgY29udGV4dE1lbnVXaWR0aCB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXSwgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGNvbnRleHRNZW51V2lkdGggPSBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDEgPyA0MCA6IDA7XHJcbiAgICBjb25zdCBidG5QYWRkaW5nID0gMTQgKyAyICsgMTA7IC8vIHBhZGRpbmcgKyBib3JkZXIgKyBpZiB0ZXh0IGlzIG92ZXJmbG93ZWQgdGhlbiBhZGQgNSBwaXhlbC5zbyB3ZSBhbHdheXMgNSBweCB0byBpdC5cclxuICAgIGNvbnN0IHRkUGFkZGluZyA9IDE1ICsgMTsgLy8gcGFkZGluZyArIGJvcmRlclxyXG4gICAgY29uc3QgYnV0dG9uSWNvbldpZHRoID0gMTYgKyA2OyAvLyBzaXplICsgbWFyZ2luXHJcbiAgICBpZiAoZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cgfHwgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBjb250ZXh0TWVudVdpZHRoID0gMDtcclxuICAgICAgICBjb250ZXh0TWVudUl0ZW1zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBtZWFzdXJlVGV4dChjLnRleHQpICsgYnRuUGFkZGluZyArIHRkUGFkZGluZztcclxuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBjLmljb24gPyBidXR0b25JY29uV2lkdGggOiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRleHRNZW51V2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBDb2x1bW5zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IE5hbWU6IHN0cmluZzsgQ2FwdGlvbjogc3RyaW5nIH1bXSxcclxuICAgIGNhcHRpb24/OiBib29sZWFuXHJcbik6IGFueSB7XHJcbiAgICBsZXQgZmllbGROYW1lID0gQ29sdW1ucyA/IENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBuYW1lIHx8IGMuQWxpYXMgPT09IG5hbWUpPy5OYW1lIDogbmFtZTtcclxuICAgIGlmICghZmllbGROYW1lKSB7XHJcbiAgICAgICAgZmllbGROYW1lID0gbmFtZTtcclxuICAgIH1cclxuICAgIGxldCB2YWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZSArICckQ2FwdGlvbiddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmQWxyZWFkeUxvYWRlZChwYXJlbnRNb2R1bGU6IGFueSwgbW9kdWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBJbXBvcnQgJHttb2R1bGVOYW1lfSBpbiB0aGUgQXBwTW9kdWxlIG9ubHkuYCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZywgZm9udFNpemU/OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWVhc3VyZVRleHREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVhc3VyZVRleHQnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIGlmICghbWVhc3VyZVRleHREb20pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdHggPSBtZWFzdXJlVGV4dERvbS5nZXRDb250ZXh0KCcyZCcpIGFzIGFueTtcclxuICAgIGZvbnRTaXplID0gZm9udFNpemUgPyBmb250U2l6ZSA6ICcwLjg4NXJlbSc7XHJcbiAgICBjdHguZm9udCA9IGBub3JtYWwgJHtmb250U2l6ZX0gSVJBTllla2FuRGlnaXRzYDtcclxuICAgIHJldHVybiBjdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbnJhdGVJbmxpbmVNb0lkKCkge1xyXG4gICAgcmV0dXJuIChCYXJzYUFwaS5pZEdlbmVyYXRvci0tKS50b1N0cmluZygpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbnVtVmFsdWVUb1N0cmluZ1NpemUodmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3MnO1xyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICByZXR1cm4gJ20nO1xyXG4gICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2wnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVVbHZDb21tYW5kSGFuZGxlcihidXR0b24sIG9wdGlvbnM/KTogdm9pZCB7XHJcbiAgICBpZiAoYnV0dG9uLkNvbW1hbmQgJiYgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcikge1xyXG4gICAgICAgIGJ1dHRvbi5Db21tYW5kLkhhbmRsZXIoYnV0dG9uLCBvcHRpb25zKTtcclxuICAgIH0gZWxzZSBpZiAoYnV0dG9uLmhhbmRsZXIpIHtcclxuICAgICAgICBidXR0b24uaGFuZGxlci5iaW5kKGJ1dHRvbi5zY29wZSkoYnV0dG9uLCBvcHRpb25zKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pcXVlSWQocGFydHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdHJpbmdBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzOyBpKyspIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxyXG4gICAgICAgIGNvbnN0IFM0ID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgY29uc3QgUzRfOiBzdHJpbmcgPSBTNC5sZW5ndGggPiAwID8gUzQuc3Vic3RyaW5nKDEpIDogJyc7XHJcbiAgICAgICAgc3RyaW5nQXJyLnB1c2goUzRfKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdBcnIuam9pbignLScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVNlcnZpY2UobG9nU2VydmljZTogTG9nU2VydmljZSwgY3VsdHVyZT8pOiBEYXRlU2VydmljZSB7XHJcbiAgICBjb25zdCBkZWZhdWx0Q3VsdHVyZSA9IGN1bHR1cmUgPz8gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdWx0dXJlO1xyXG4gICAgc3dpdGNoIChkZWZhdWx0Q3VsdHVyZSkge1xyXG4gICAgICAgIGNhc2UgJ2ZhLUlSJzpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlU2hhbXNpU2VydmljZShsb2dTZXJ2aWNlKTtcclxuICAgICAgICBjYXNlICdhci1BRSc6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZUhpanJpU2VydmljZShsb2dTZXJ2aWNlKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVNaWxhZGlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVBhdGgoXHJcbiAgICB0eXBlOiBzdHJpbmcsXHJcbiAgICBtb0lkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgZmlsZUlkOiBzdHJpbmcsXHJcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86IG51bWJlcixcclxuICAgIHNpemVIPzogbnVtYmVyXHJcbik6IHN0cmluZyB7XHJcbiAgICBtb0lkID0gbW9JZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQobW9JZCk7XHJcbiAgICBmaWxlSWQgPSBmaWxlSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVJZCk7XHJcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XHJcbiAgICBzaXplID0gc2l6ZSA9PSBudWxsID8gMTI4IDogc2l6ZTtcclxuICAgIHNpemVIID0gc2l6ZUggPT0gbnVsbCA/IHNpemUgOiBzaXplSDtcclxuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcclxuICAgIHJldHVybiB1cmw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjayk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiB7fS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERldmljZVdpZHRoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiAwID8gd2luZG93LmlubmVyV2lkdGggOiBzY3JlZW4ud2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGZpZWxkVmFsdWUpOiBhbnkge1xyXG4gICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWUgPSBmaWVsZFZhbHVlLlZhbHVlO1xyXG4gICAgY29uc3QgdmFsdWVDYXB0aW9uOiBzdHJpbmcgPSBmaWVsZFZhbHVlLlZhbHVlJENhcHRpb247XHJcbiAgICBsZXQgdmFsdWVPYmplY3RDYXB0aW9uID0gbnVsbDtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdmFsdWVPYmplY3RDYXB0aW9uID0gZmllbGRWYWx1ZS5WYWx1ZS4kQ2FwdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU9iamVjdENhcHRpb24pIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlQ2FwdGlvbiAmJiAhdmFsdWVDYXB0aW9uLnN0YXJ0c1dpdGgoJ3RtcCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlQ2FwdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEluVmlld3BvcnQyKGVsOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCB0b3AgPSBlbC5vZmZzZXRUb3A7XHJcbiAgICBsZXQgbGVmdCA9IGVsLm9mZnNldExlZnQ7XHJcbiAgICBjb25zdCB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gZWwub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgIHdoaWxlIChlbC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgICAgICB0b3AgKz0gZWwub2Zmc2V0VG9wO1xyXG4gICAgICAgIGxlZnQgKz0gZWwub2Zmc2V0TGVmdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHRvcCA8IHdpbmRvdy5wYWdlWU9mZnNldCArIHdpbmRvdy5pbm5lckhlaWdodCAmJlxyXG4gICAgICAgIGxlZnQgPCB3aW5kb3cucGFnZVhPZmZzZXQgKyB3aW5kb3cuaW5uZXJXaWR0aCAmJlxyXG4gICAgICAgIHRvcCArIGhlaWdodCA+IHdpbmRvdy5wYWdlWU9mZnNldCAmJlxyXG4gICAgICAgIGxlZnQgKyB3aWR0aCA+IHdpbmRvdy5wYWdlWE9mZnNldFxyXG4gICAgKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gUHJldmVudERlZmF1bEV2ZW50KGUpOiB2b2lkIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgIGxldCBwYXJlbnREb20gPSBlbERvbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgbGV0IHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XHJcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcclxuICAgICAgICBwYXJlbnREb20gPSBwYXJlbnREb20ucGFyZW50RWxlbWVudDtcclxuICAgICAgICBwYXJlbnRIZWlnaHQgPSBwYXJlbnREb20/LmNsaWVudEhlaWdodCA/PyAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcmVudEhlaWdodDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXBvbmVudERlZmluZWQoXHJcbiAgICBjb250cm9sVWk6IHsgb3JpZ2luYWxYdHlwZTogc3RyaW5nIH0sXHJcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XHJcbik6IHtcclxuICAgIG1vZHVsZU5hbWU6IHN0cmluZztcclxuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZztcclxuICAgIHNlbGVjdG9yOiBzdHJpbmc7XHJcbn0ge1xyXG4gICAgbGV0IG1vZHVsZU5hbWUgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRlZmF1bHRVaU1vZHVsZTtcclxuICAgIGxldCBtb2R1bGVLZWJhYk5hbWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XHJcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcclxuICAgIGxldCBzZWxlY3Rvcjogc3RyaW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKGNvbXBvbmVudE5hbWUpO1xyXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSwgc2VsZWN0b3IubGVuZ3RoKTtcclxuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xyXG4gICAgaWYgKGN1c3RvbVVpU2V0dGluZyAmJiBjdXN0b21VaVNldHRpbmcuTW9kdWxlKSB7XHJcbiAgICAgICAgbW9kdWxlTmFtZSA9IGN1c3RvbVVpU2V0dGluZy5Nb2R1bGU7XHJcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbXBvbmVudE5hbWUgPSBjdXN0b21VaVNldHRpbmcuTmFtZTtcclxuICAgICAgICBzZWxlY3RvciA9IGN1c3RvbVVpU2V0dGluZy5TZWxlY3RvcjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1vZHVsZVBhdGggPSBtb2R1bGVLZWJhYk5hbWUuc2xpY2UoMSwgbW9kdWxlS2ViYWJOYW1lLmxlbmd0aCk7XHJcbiAgICByZXR1cm4geyBtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNQaG9uZSgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzVGFibGV0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ21vYmknKSA+IDAgfHwgZ2V0RGV2aWNlSXNQaG9uZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFNpemVNb2RlKGVsOiBIVE1MRWxlbWVudCwgZGV2aWNlU2l6ZTogJ3MnIHwgJ20nIHwgJ2wnIHwgJ3hsJyA9ICdsJyk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGRldmljZVNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAoZGV2aWNlU2l6ZSA9PT0gJ3MnIHx8IGNvbnRhaW5lcldpZHRoIDwgNjAwKSB7XHJcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdzJztcclxuICAgIH0gZWxzZSBpZiAoZGV2aWNlU2l6ZSA9PT0gJ20nIHx8IChjb250YWluZXJXaWR0aCA+IDYwMCAmJiBjb250YWluZXJXaWR0aCA8IDEyMDApKSB7XHJcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdtJztcclxuICAgIH1cclxuICAgIHJldHVybiBkZXZpY2VTaXplO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoXHJcbiAgICBieXRlcyxcclxuICAgIGRlY2ltYWxzID0gMixcclxuICAgIHNpemU6ICdCeXRlcycgfCAnS0InIHwgJ01CJyB8ICdHQicgfCAnVEInIHwgJ1BCJyB8ICdFQicgfCAnWkInIHwgJ1lCJ1xyXG4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuICcwIEJ5dGVzJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrID0gMTAyNDtcclxuICAgIGNvbnN0IGRtID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xyXG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XHJcbiAgICBjb25zdCBpID0gc2l6ZXMuZmluZEluZGV4KChjKSA9PiBjID09PSBzaXplKTtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFeHRlbnNpb24odmFsaWRFeHRlbnNpb25zKTogc3RyaW5nIHtcclxuICAgIGxldCBfdmFsaWRFeHRlbnNpb25zID0gJyc7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZEV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgX3ZhbGlkRXh0ZW5zaW9ucyA9IHZhbGlkRXh0ZW5zaW9ucy5tYXAoKGMpID0+ICcuJyArIGMuRXh0ZW5zaW9uKS5qb2luKCcsJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX3ZhbGlkRXh0ZW5zaW9ucztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkZpbGVJY29uRGljdDEyOFt0eXBlXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbWFnZSh0eXBlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIFsnaW1nJywgJ3BuZycsICdqcGVnJywgJ2pwZycsICdnaWYnLCAnYm1wJywgJ3RpZmYnLCAnaW1hZ2UnXS5pbmRleE9mKHR5cGUpID4gLTE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGxDb2x1bW5zU29ydGVkKGNvbnRleHQpOiBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPiB7XHJcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5Db2x1bW5zJywgW10pLmZpbHRlcihcclxuICAgICAgICAoYykgPT4gYy5OYW1lICE9PSAnSWQnICYmIGMuTmFtZSAhPT0gJyRTdHlsZUluZGV4JyAmJiAhYy5IaWRkZW5cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY29sTGlzdDogQ29sU2V0dGluZ1tdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nLkNvbFNldHRpbmdMaXN0JyxcclxuICAgICAgICBbXVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBuZXcgQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4oKTtcclxuICAgIGNvbExpc3QuZm9yRWFjaCgoY29sUykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbk9mQ29sTGlzdCA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2xTLk5hbWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5PZkNvbExpc3QpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgLi4uY29sdW1uT2ZDb2xMaXN0LCBIaWRkZW46IGNvbFMuSXNIaWRkZW4sIFdpZHRoOiBjb2xTLldpZHRoIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sU2V0dGluZyA9IGNvbExpc3QuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2x1bW4uTmFtZSk7XHJcbiAgICAgICAgaWYgKCFjb2xTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGluZGV4LCAwLCB7IC4uLmNvbHVtbiwgSGlkZGVuOiBjb2xMaXN0Lmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEdldFZpc2libGVWYWx1ZShvYmplY3QsIGZpZWxkKTogc3RyaW5nIHtcclxuICAgIGxldCBvdXRwdXRWYWx1ZTtcclxuICAgIGlmIChvYmplY3RbZmllbGRdPy4kQ2FwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGRdLiRDYXB0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddICE9PSB1bmRlZmluZWQgPyBvYmplY3RbZmllbGQgKyAnJENhcHRpb24nXSA6IG9iamVjdFtmaWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWU7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XHJcbiAgICAkR3JvdXA6IGFueTtcclxuICAgICRMZXZlbDogbnVtYmVyO1xyXG4gICAgJENvdW50OiBudW1iZXI7XHJcbiAgICAkRXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgICAkUGFyZW50OiBhbnk7XHJcbiAgICAkQ2hpbGRyZW46IGFueVtdO1xyXG4gICAgJFZpc2liaWxpdHk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHcm91cEJ5KGNvbGxlY3Rpb246IGFueVtdLCBzb3J0U2V0dGluZ3M6IFNvcnRTZXR0aW5nW10pOiB7IGdyb3VwZWQ6IEdyb3VwOyBncm91cHM6IGFueVtdIH0ge1xyXG4gICAgY29uc3QgZ3JvdXBlZDogYW55ID0ge307XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzID0gc29ydFNldHRpbmdzLm1hcCgoYykgPT4gYy5OYW1lKTtcclxuICAgIGNvbnN0IGdldFRpdGxlID0gKG1vLCBmaWVsZE5hbWUpOiBzdHJpbmcgPT4gR2V0VmlzaWJsZVZhbHVlKG1vLCBmaWVsZE5hbWUpO1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChhKSA9PiB7XHJcbiAgICAgICAgZ3JvdXBzXHJcbiAgICAgICAgICAgIC5yZWR1Y2UoKG8sIGcsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVGl0bGUgPSBnZXRUaXRsZShhLCBnKTtcclxuICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0gPSBvW2dyb3VwVGl0bGVdIHx8IChpICsgMSA9PT0gZ3JvdXBzLmxlbmd0aCA/IFtdIDoge30pO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1tncm91cFRpdGxlXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhLiRMZXZlbCA9IGdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZ3JvdXBlZFt0aXRsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IChwYXJlbnQuJENvdW50ID8/IDApICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGdyb3Vwcy5sZW5ndGggLSAxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbdGl0bGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gb1tncm91cFRpdGxlXS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYTIgPSBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kRXhwYW5kZWQgPSBhMj8uJEV4cGFuZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJFZpc2liaWxpdHkgPSBhMj8uJFZpc2liaWxpdHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb1tncm91cFRpdGxlXTtcclxuICAgICAgICAgICAgfSwgZ3JvdXBlZClcclxuICAgICAgICAgICAgLnB1c2goYSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGdyb3VwZWQsIGdyb3VwcyB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRmluZEdyb3VwKGdyb3VwVGl0bGU6IHN0cmluZywgYTogYW55KTogYW55IHtcclxuICAgIGlmIChhLiRHcm91cCA9PT0gZ3JvdXBUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgaWYgKGEuJFBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYS4kUGFyZW50KTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRmlsbEFsbExheW91dENvbnRyb2xzKGl0ZW06IExheW91dFNldHRpbmcsIGxheW91dENvbnRyb2xzOiBMYXlvdXRTZXR0aW5nW10pOiB2b2lkIHtcclxuICAgIGlmIChpdGVtLnh0eXBlID09PSAnTHkuTGF5b3V0Q29udHJvbCcpIHtcclxuICAgICAgICBsYXlvdXRDb250cm9scy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjKSA9PiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoYywgbGF5b3V0Q29udHJvbHMpKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRmluZFRvb2xiYXJJdGVtKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZywgcHJvcDogc3RyaW5nID0gJ3RleHQnKTogTWVudUl0ZW0gfCBudWxsIHtcclxuICAgIGlmICghdG9vbGJhckl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbmRJbkFycmF5ID0gKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBpdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHRvb2xiYXJJdGVtcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjW3Byb3BdID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYy5tZW51Py5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbmRJbkFycmF5KGMubWVudS5pdGVtcywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbmRJbkFycmF5KHRvb2xiYXJJdGVtcywgdmFsdWUpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NDogTGF5b3V0U2V0dGluZywgbGF5b3V0VGl0bGU6IHN0cmluZyk6IExheW91dFNldHRpbmcgfCBudWxsIHtcclxuICAgIGlmICghbGF5b3V0VGl0bGUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChsYXlvdXQ5NC5DYXB0aW9uID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5UaXRsZSA9PT0gbGF5b3V0VGl0bGUpIHtcclxuICAgICAgICByZXR1cm4gbGF5b3V0OTQ7XHJcbiAgICB9XHJcbiAgICBsZXQgdGVtcExheW91dDk0OiBMYXlvdXRTZXR0aW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpZiAobGF5b3V0OTQuaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0OTQuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0ZW1wTGF5b3V0OTQpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBMYXlvdXQ5NCA9IEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0Lml0ZW1zW2ldLCBsYXlvdXRUaXRsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcExheW91dDk0O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkU2V0dGluZ3MoY29udGV4dCk6IEdyaWRTZXR0aW5nIHtcclxuICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZycsIG51bGwpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBDb2xTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LkNvbFNldHRpbmdMaXN0ID8/IG51bGwsXHJcbiAgICAgICAgU29ydFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0ID8/IFtdLFxyXG4gICAgICAgIEF1dG9TaXplQ29sdW1uczogZ3JpZFNldHRpbmc/LkF1dG9TaXplQ29sdW1ucyA/PyBmYWxzZVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBJZDogJzAnLFxyXG4gICAgICAgICRDYXB0aW9uOiAnJyxcclxuICAgICAgICAkVHlwZURlZklkOiB0eXBlRGVmSWQsXHJcbiAgICAgICAgJFN0YXRlOiAnTmV3JyxcclxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcclxuICAgICAgICAkRmllbGREaWN0OiB7fVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk6IExheW91dFNldHRpbmcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBUeXBlOiAnUm9vdCcsXHJcbiAgICAgICAgQ29udHJvbElkOiAn2LHbjNi02YcnLFxyXG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udGFpbmVyJyxcclxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxyXG4gICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxyXG4gICAgICAgICAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRKb2luJyxcclxuICAgICAgICAgICAgICAgIElzVmVydGljYWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XHJcbiAgICBjb25zdCBtbyA9IEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkKTtcclxuXHJcbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XHJcbiAgICAgICAgVmlldzoge1xyXG4gICAgICAgICAgICBMYXlvdXQ5NDogZ2V0TGF5b3V0OTRPYmplY3RJbmZvLFxyXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXHJcbiAgICAgICAgICAgIFR5cGVEZWZJZDogdHlwZURlZklkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxyXG4gICAgICAgIERhdGE6IHtcclxuICAgICAgICAgICAgTW86IG1vXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBmb3JtUGFuZWxTZXR0aW5ncztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVBhbmVsTWV0YUNvbmRpdGlvbnMoXHJcbiAgICB0eXBlRGVmSWQ6IHN0cmluZyxcclxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogYW55XHJcbik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtU2V0dGluZ3MgPSBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkKTtcclxuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250cm9sc0luZm8pKTtcclxuXHJcbiAgICBmb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKC4uLmNvbnRyb2xzSW5mby5tYXAoKGMpID0+IGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSkpKTtcclxuICAgIGZvcm1TZXR0aW5ncy5EYXRhLk1vW2NvbnRyb2xOYW1lXSA9IHZhbHVlO1xyXG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xyXG4gICAgICAgIFNldHRpbmc6IGZvcm1TZXR0aW5ncyxcclxuICAgICAgICBGZWF0dXJlczoge1xyXG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdNb0dyaWRFZGl0b3IoZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZywgdHlwZWRlZklkOiBzdHJpbmcpOiBQYXJ0aWFsPEZvcm1TZXR0aW5nPiB7XHJcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcclxuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JpZEVkaXRvckZvcm1QYW5lbChcclxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIHR5cGVkZWY6IHN0cmluZyxcclxuICAgIHJlbGF0aW9uOiBhbnksXHJcbiAgICByZXdyaXRlTGF5b3V0OiBib29sZWFuID0gdHJ1ZVxyXG4pOiBhbnkge1xyXG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XHJcbiAgICBuZXdGb3JtU2V0dGluZ3MuRGF0YS5NbyA9IHsgLi4ubW8sICRUeXBlRGVmSWQ6IHR5cGVkZWYgfTtcclxuICAgIGlmIChyZXdyaXRlTGF5b3V0KSB7XHJcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQgPSBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTtcclxuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKFxyXG4gICAgICAgICAgICAuLi5uZXdGb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mby5tYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUsIGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsIGZhbHNlKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1SZXF1ZXN0UGFyYW1zID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1SZXF1ZXN0UGFyYW1zKHtcclxuICAgICAgICBNb0lkOiBuZXdGb3JtU2V0dGluZ3MuRGF0YS5Nby5JZCxcclxuICAgICAgICBUeXBlRGVmSWQ6IHR5cGVkZWYsXHJcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uXHJcbiAgICAgICAgLy8gTW9Db250ZXh0OiB7XHJcbiAgICAgICAgLy8gICAgIFJlcG9ydElkOiAnJyxcclxuICAgICAgICAvLyAgICAgVmlld0lkOiAnJyxcclxuICAgICAgICAvLyAgICAgVmlld05hbWU6ICcnLFxyXG4gICAgICAgIC8vICAgICBDb25kRm9ybWF0aW5nOiAnJyxcclxuICAgICAgICAvLyAgICAgSW5jbHVkZUluUmVwb3J0OiAnJ1xyXG4gICAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xyXG4gICAgICAgIFNldHRpbmc6IG5ld0Zvcm1TZXR0aW5ncyxcclxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb24sXHJcbiAgICAgICAgRmVhdHVyZXM6IHtcclxuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcclxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIEZvcm1SZXF1ZXN0UGFyYW1zOiBmb3JtUmVxdWVzdFBhcmFtc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXRDb250cm9sKFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRyb2xDYXB0aW9uOiBzdHJpbmcgPSAnJyxcclxuICAgIGhpZGU6IGJvb2xlYW4gPSB0cnVlXHJcbik6IFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250cm9sJyxcclxuICAgICAgICBUeXBlOiAnTGF5b3V0Q29udHJvbEl0ZW0nLFxyXG4gICAgICAgIENvbnRyb2xJZDogY29udHJvbE5hbWUsXHJcbiAgICAgICAgSXNWZXJ0aWNhbDogZmFsc2UsXHJcbiAgICAgICAgVGV4dExvY2F0aW9uOiAnUmlnaHQnLFxyXG4gICAgICAgIFRleHRWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBWaXNpYmxlOiAhaGlkZSxcclxuICAgICAgICBoaWRlLFxyXG4gICAgICAgIFVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbDogZmFsc2UsXHJcbiAgICAgICAgQ2FwdGlvbjogY29udHJvbENhcHRpb24sXHJcbiAgICAgICAgQWNjZXNzaWJsZU5hbWU6ICcnLFxyXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgTWluU2l6ZTogeyB3aWR0aDogODksIGhlaWdodDogMjQgfSxcclxuICAgICAgICBNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgQ29udHJvbEJvdW5kczogeyB3aWR0aDogMzg4LCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgQ29udHJvbE1pblNpemU6IHsgd2lkdGg6IDQ1LCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgQ29udHJvbE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjAgfSxcclxuICAgICAgICBQYWRkaW5nOiBbMiwgMiwgMiwgMl0sXHJcbiAgICAgICAgTGFiZWxTaXplOiB7IHdpZHRoOiAzNSwgaGVpZ2h0OiAxMyB9LFxyXG4gICAgICAgIG9yaWdpbmFsWHR5cGU6ICcnXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbExpc3QoXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIGNvbnRyb2xEYk5hbWVzOiBzdHJpbmdbXSxcclxuICAgIGlzU2VhcmNoUGFuZWw6IGJvb2xlYW4sXHJcbiAgICBpc0dyaWRFZGl0b3I6IGJvb2xlYW5cclxuKTogUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXHJcbiAgICAgICAgICAgICdGb3JtOTQuR2V0Q29udHJvbEluZm9zJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbEluZm9QYXJhbWV0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBGaWVsZERiTmFtZXM6IGNvbnRyb2xEYk5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIE1vOiBuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIobW8pLFxyXG4gICAgICAgICAgICAgICAgICAgIElzU2VhcmNoUGFuZWw6IGlzU2VhcmNoUGFuZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgSXNHcmlkRWRpdG9yOiBpc0dyaWRFZGl0b3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKG0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBOelNhZmVBbnkgPSBhbnk7XHJcbmV4cG9ydCB0eXBlIE51bWJlcklucHV0ID0gbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuZXhwb3J0IGludGVyZmFjZSBOZ1N0eWxlSW50ZXJmYWNlIHtcclxuICAgIFtrbGFzczogc3RyaW5nXTogTnpTYWZlQW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZU9iamVjdCB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBOelNhZmVBbnk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBPzogSW5kZXhhYmxlT2JqZWN0LCBvYmpCPzogSW5kZXhhYmxlT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqQSA9PT0gb2JqQikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8ICFvYmpCKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XHJcbiAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xyXG5cclxuICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBrZXlzQS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0FbaWR4XTtcclxuICAgICAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iakFba2V5XSAhPT0gb2JqQltrZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXI7XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQ7XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFja1ZhbHVlOiBudW1iZXIgPSAwKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBfaXNOdW1iZXJWYWx1ZSh2YWx1ZSkgPyBOdW1iZXIodmFsdWUpIDogZmFsbGJhY2tWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBwcm9wRGVjb3JhdG9yRmFjdG9yeTxULCBEPihcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGZhbGxiYWNrOiAodjogVCkgPT4gRFxyXG4pOiAodGFyZ2V0OiBOelNhZmVBbnksIHByb3BOYW1lOiBzdHJpbmcpID0+IHZvaWQge1xyXG4gICAgZnVuY3Rpb24gcHJvcERlY29yYXRvcihcclxuICAgICAgICB0YXJnZXQ6IE56U2FmZUFueSxcclxuICAgICAgICBwcm9wTmFtZTogc3RyaW5nLFxyXG4gICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPE56U2FmZUFueT5cclxuICAgICk6IE56U2FmZUFueSB7XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZVByb3BOYW1lID0gYCQkX196b3Jyb1Byb3BEZWNvcmF0b3JfXyR7cHJvcE5hbWV9YDtcclxuXHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSkpIHtcclxuICAgICAgICAgICAgLy8gd2FybihgVGhlIHByb3AgXCIke3ByaXZhdGVQcm9wTmFtZX1cIiBpcyBhbHJlYWR5IGV4aXN0LCBpdCB3aWxsIGJlIG92ZXJyaWRlZCBieSAke25hbWV9IGRlY29yYXRvci5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSwge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdldCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0LmJpbmQodGhpcykoKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1twcml2YXRlUHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQuYmluZCh0aGlzKShmYWxsYmFjayh2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpc1twcml2YXRlUHJvcE5hbWVdID0gZmFsbGJhY2sodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcERlY29yYXRvcjtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gSW5wdXROdW1iZXIoZmFsbGJhY2tWYWx1ZT86IE56U2FmZUFueSk6IE56U2FmZUFueSB7XHJcbiAgICByZXR1cm4gcHJvcERlY29yYXRvckZhY3RvcnkoJ0lucHV0TnVtYmVyJywgKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHRvTnVtYmVyKHZhbHVlLCBmYWxsYmFja1ZhbHVlKSk7XHJcbn1cclxuZXhwb3J0IGVudW0gQWZmaXhSZXNwb25kRXZlbnRzIHtcclxuICAgIHJlc2l6ZSA9ICdyZXNpemUnLFxyXG4gICAgc2Nyb2xsID0gJ3Njcm9sbCcsXHJcbiAgICB0b3VjaHN0YXJ0ID0gJ3RvdWNoc3RhcnQnLFxyXG4gICAgdG91Y2htb3ZlID0gJ3RvdWNobW92ZScsXHJcbiAgICB0b3VjaGVuZCA9ICd0b3VjaGVuZCcsXHJcbiAgICBwYWdlc2hvdyA9ICdwYWdlc2hvdycsXHJcbiAgICBsb2FkID0gJ0xPQUQnXHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVSZWN0IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgICBib3R0b20/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldFdpbmRvdyh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiB0YXJnZXQgaXMgV2luZG93IHtcclxuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0YXJnZXQgPT09IHdpbmRvdztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFJlY3QodGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogU2ltcGxlUmVjdCB7XHJcbiAgICByZXR1cm4gIWlzVGFyZ2V0V2luZG93KHRhcmdldClcclxuICAgICAgICA/IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICAgIGJvdHRvbTogMFxyXG4gICAgICAgICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWUobmFtZTogc3RyaW5nLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgY2FwdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKG1vLkdldEZWYWx1ZUJ5Q2FwdGlvbikge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBtby5HZXRGVmFsdWUobmFtZSk7XHJcbiAgICAgICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbW8uR2V0RkNhcHRpb24obmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvbiA9PT0gJ3VuZGVmaW5lZCcgJiYgbW8uSW5oZXJpdGFuY2VJbmZvICYmICEobW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdKSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IFBhcmVudEZpZWxkTmFtZSB9ID0gbW8uSW5oZXJpdGFuY2VJbmZvO1xyXG4gICAgICAgICAgICBjb25zdCBtb1BhcmVudCA9IG1vLkdldEZWYWx1ZShQYXJlbnRGaWVsZE5hbWUpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RlZhbHVlKG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RkNhcHRpb24obmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1vLiRGaWVsZERpY3QgJiYgbW8uJEZpZWxkRGljdFtuYW1lXSA/IG1vLiRGaWVsZERpY3RbbmFtZV0gOiBuYW1lO1xyXG4gICAgbGV0IHZhbCA9IG1vW2ZpZWxkTmFtZV07XHJcbiAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lXT8uJENhcHRpb247XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xyXG5leHBvcnQgY29uc3QgYXZhaWxhYmxlUHJlZml4ZXMgPSBbJ21veicsICdtcycsICd3ZWJraXQnXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcclxuICAgIGxldCBsYXN0VGltZSA9IDA7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrOiBGcmFtZVJlcXVlc3RDYWxsYmFjayk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xyXG4gICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgfSwgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZUR5bmFtaWNDb21tYW5kKGNvbW1hbmQ6IHsgSWQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zdCBlID0geyBjb21tYW5kLCBEeW5hbWljU2V0dGluZzogbW8sIE1vOiBtbyB9O1xyXG4gICAgQmFyc2FBcGkuQ29tbW9uLkN1c3RvbUNvZGVNYW5hZ2VyLlJ1bkR5bmFtaWNDb21tYW5kKGNvbW1hbmQuSWQsIGUpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlV29ya2Zsb3dDaG9pY2VEZWYoc2NvcGUsIHBhcmFtLCBzdWNjZXNzOiAocmVzdWx0KSA9PiB2b2lkLCBmYWlsZWQ6IChlcnJvcikgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcclxuICAgICAgICAnV29ya2Zsb3c5NC5DaG9pY2VTZWxlY3QnLFxyXG4gICAgICAgIHBhcmFtLFxyXG4gICAgICAgIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpO1xyXG4gICAgICAgIH0sIC8vIHN1Y2Nlc3NcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgZmFpbGVkKGVycm9yKTtcclxuICAgICAgICB9LCAvLyAgZXJyb3JcclxuICAgICAgICAoKSA9PiB7fSwgLy8gZG9SZXR1cm5cclxuICAgICAgICBzY29wZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gKCkgPT4gMDtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxyXG4gICAgICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoKGtleSkgPT4gYCR7a2V5fVJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93KVswXTtcclxuXHJcbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZShpZDogbnVtYmVyKTogTnpTYWZlQW55IHtcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxyXG4gICAgICAgIChrZXkpID0+IGAke2tleX1DYW5jZWxBbmltYXRpb25GcmFtZWAgaW4gd2luZG93IHx8IGAke2tleX1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvd1xyXG4gICAgKVswXTtcclxuXHJcbiAgICByZXR1cm4gcHJlZml4XHJcbiAgICAgICAgPyAoXHJcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XHJcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAuY2FsbCh0aGlzLCBpZClcclxuICAgICAgICA6IGNsZWFyVGltZW91dChpZCk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEVhc3lpbmdGbiA9ICh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY2MgPSBjIC0gYjtcclxuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xyXG4gICAgaWYgKHR0IDwgMSkge1xyXG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqIHR0ICogdHQgKiB0dCArIGI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE56U2Nyb2xsVG9PcHRpb25zIHtcclxuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgIC8qKiBTY3JvbGwgY29udGFpbmVyLCBkZWZhdWx0IGFzIHdpbmRvdyAqL1xyXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xyXG4gICAgLyoqIFNjcm9sbCBlbmQgY2FsbGJhY2sgKi9cclxuICAgIGNhbGxiYWNrPygpOiB2b2lkO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXb3JkTWltZVR5cGUgPVxyXG4gICAgJy5kb2MsLmRvY3gsYXBwbGljYXRpb24vbXN3b3JkLGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JztcclxuZXhwb3J0IGNvbnN0IEltYWdlTWltZVR5cGUgPSAnLmpwZWcsLmpwZywuZ2lmLC5wbmcsLmJtcCwudGlmLGltYWdlLyonO1xyXG5leHBvcnQgY29uc3QgUGRmTWltZVR5cGUgPSAnLnBkZic7XHJcbmV4cG9ydCBjb25zdCBBbGxGaWxlc01pbWVUeXBlID0gJy50eHQsLnBwdCwucGRmLC4qJztcclxuZXhwb3J0IGNvbnN0IFZpZGVvTWltZVR5cGUgPSAndmlkZW8vKic7XHJcbmV4cG9ydCBjb25zdCBBdWRpb01pbWVUeXBlID0gJ2F1ZGlvLyonO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENoYW5nZUxheW91dEluZm9DdXN0b21VaShsYXlvdXRJbmZvOiBMYXlvdXRTZXR0aW5nLCBjb21wb25lbnRVaTogRWpyYXlPbGdvKTogdm9pZCB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxheW91dEluZm8uRmllbGRVaS5TZXR0aW5nLkN1c3RvbVVpID0gY29tcG9uZW50VWk7XHJcbn1cclxuIl19