@seniorsistemas/components-ai 2.0.3 → 2.0.4-master-6fb85de7

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.
@@ -1,6 +1,6 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { ReactiveFormsModule } from '@angular/forms';
3
+ import { ReactiveFormsModule, Validators } from '@angular/forms';
4
4
  import { PanelModule } from 'primeng/panel';
5
5
  import { DialogModule } from 'primeng/dialog';
6
6
  import { DrawerModule } from 'primeng/drawer';
@@ -148,7 +148,10 @@ export class DynamicFormComponent {
148
148
  const formControls = {};
149
149
  this.allFields.forEach(field => {
150
150
  const defaultValue = this.getDefaultValue(field);
151
- const validators = field.validators || [];
151
+ const validators = [...(field.validators || [])];
152
+ if (field.required) {
153
+ validators.push(Validators.required);
154
+ }
152
155
  formControls[field.field] = this.fb.control({ value: defaultValue, disabled: field.disabled || false }, validators);
153
156
  });
154
157
  this.form = this.fb.group(formControls);
@@ -161,7 +164,9 @@ export class DynamicFormComponent {
161
164
  case 'number':
162
165
  case 'currency':
163
166
  case 'date':
164
- case 'time': return null;
167
+ case 'datetime':
168
+ case 'time':
169
+ case 'lookup': return null;
165
170
  case 'checkbox': return false;
166
171
  case 'multiselect': return [];
167
172
  case 'dropdown':
@@ -228,6 +233,15 @@ export class DynamicFormComponent {
228
233
  }
229
234
  resetForm() {
230
235
  if (this.form) {
236
+ // First set all controls to a sentinel value to ensure valueChanges fires
237
+ // even when the default value is the same as the current value (e.g. '' -> '')
238
+ // This is critical for lookup fields that maintain internal display state.
239
+ this.allFields.forEach(f => {
240
+ const control = this.form.get(f.field);
241
+ if (control) {
242
+ control.setValue(null, { emitEvent: true });
243
+ }
244
+ });
231
245
  const values = {};
232
246
  this.allFields.forEach(f => values[f.field] = this.getDefaultValue(f));
233
247
  this.form.reset(values);
@@ -261,6 +275,11 @@ export class DynamicFormComponent {
261
275
  else if (!v)
262
276
  out[field.field] = null;
263
277
  }
278
+ else if (field.type === 'datetime') {
279
+ if (v instanceof Date) { /* keep as Date */ }
280
+ else if (!v || v === '')
281
+ out[field.field] = null;
282
+ }
264
283
  else if (['text', 'textarea', 'number', 'currency', 'enum', 'dropdown'].includes(field.type)) {
265
284
  if (v === '' || v === undefined)
266
285
  out[field.field] = null;
@@ -592,4 +611,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
592
611
  }], fieldSave: [{
593
612
  type: Output
594
613
  }] } });
595
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFG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RSxFQUFFLEVBQUUsQ0FBQztRQUMxRSxNQUFNLElBQUksR0FBeUIsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVU7WUFDakUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLENBQUM7UUFFaEMsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzdCLG1DQUFtQztRQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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QUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL3BhbmVsJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7XG4gIER5bmFtaWNGb3JtRmllbGRDb25maWcsXG4gIER5bmFtaWNGb3JtRmllbGRTaXplLFxuICBEeW5hbWljRm9ybVNlY3Rpb24sXG4gIER5bmFtaWNGb3JtRGlhbG9nQ29uZmlnLFxuICBEeW5hbWljRm9ybURyYXdlckNvbmZpZ1xufSBmcm9tICcuL21vZGVscy9keW5hbWljLWZvcm0ubW9kZWxzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFza1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtZGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkRGF0ZXRpbWVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRhdGV0aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGREcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtbG9va3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtdGV4dGFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZFRpbWVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLXRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLW11bHRpc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtaW1hZ2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBQYW5lbE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHJhd2VyTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIER5bmFtaWNGaWVsZFRleHRDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTnVtYmVyQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERhdGVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkRGF0ZXRpbWVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTG9va3VwQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZFRleHRhcmVhQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZFRpbWVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkQ2hlY2tib3hDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkSW1hZ2VDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzZWN0aW9uczogRHluYW1pY0Zvcm1TZWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgZW50aXR5RGF0YTogYW55ID0gbnVsbDtcbiAgQElucHV0KCkgbW9kZTogJ2Zvcm0nIHwgJ2lubGluZS1lZGl0JyA9ICdmb3JtJztcblxuICAvLyBEaXNwbGF5IE1vZGUg4oCUIG9wdGlvbmFsLiBJZiBub3Qgc2V0LCByZW5kZXJzIGlubGluZSB3aXRob3V0IGJ1dHRvbnMuXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlPzogJ2RpYWxvZycgfCAnZHJhd2VyJztcbiAgQElucHV0KCkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaWFsb2dDb25maWc6IER5bmFtaWNGb3JtRGlhbG9nQ29uZmlnID0ge307XG4gIEBJbnB1dCgpIGRyYXdlckNvbmZpZzogRHluYW1pY0Zvcm1EcmF3ZXJDb25maWcgPSB7fTtcblxuICAvLyBCdXR0b24gQ29uZmlndXJhdGlvblxuICBASW5wdXQoKSBzaG93U3VibWl0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWl0QnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b25JY29uOiBzdHJpbmcgPSAncGkgcGktY2hlY2snO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25JY29uOiBzdHJpbmcgPSAncGkgcGktdGltZXMnO1xuXG4gIEBPdXRwdXQoKSBmb3JtUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Hcm91cD4oKTtcbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGZpZWxkU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55IH0+KCk7XG5cbiAgZm9ybSE6IEZvcm1Hcm91cDtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIElubGluZSBlZGl0IHN0YXRlXG4gIGVkaXRpbmdGaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNhdmluZ0ZpZWxkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gLS0tIENvbXB1dGVkIHByb3BlcnRpZXMgLS0tXG5cbiAgZ2V0IGFsbEZpZWxkcygpOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnW10ge1xuICAgIHJldHVybiB0aGlzLnNlY3Rpb25zLmZsYXRNYXAoc2VjdGlvbiA9PiBzZWN0aW9uLmZpZWxkcyk7XG4gIH1cblxuICBnZXQgaXNJbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnaW5saW5lLWVkaXQnO1xuICB9XG5cbiAgZ2V0IGlzRGlhbG9nTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2RpYWxvZyc7XG4gIH1cblxuICBnZXQgaXNEcmF3ZXJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNb2RlID09PSAnZHJhd2VyJztcbiAgfVxuXG4gIGdldCBpc0lubGluZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlNb2RlO1xuICB9XG5cbiAgLy8gRGlhbG9nIGNvbmZpZyB3aXRoIGRlZmF1bHRzXG4gIGdldCBkaWFsb2dIZWFkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyIHx8IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuZm9ybScpO1xuICB9XG4gIGdldCBkaWFsb2dXaWR0aCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcud2lkdGggfHwgJzYwMHB4JzsgfVxuICBnZXQgZGlhbG9nRHJhZ2dhYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuZHJhZ2dhYmxlID8/IGZhbHNlOyB9XG4gIGdldCBkaWFsb2dSZXNpemFibGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5yZXNpemFibGUgPz8gZmFsc2U7IH1cbiAgZ2V0IGRpYWxvZ01heGltaXphYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcubWF4aW1pemFibGUgPz8gZmFsc2U7IH1cbiAgZ2V0IGRpYWxvZ0Nsb3NlT25Fc2NhcGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5jbG9zZU9uRXNjYXBlID8/IHRydWU7IH1cbiAgZ2V0IGRpYWxvZ0Rpc21pc3NhYmxlTWFzaygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmRpc21pc3NhYmxlTWFzayA/PyBmYWxzZTsgfVxuXG4gIC8vIERyYXdlciBjb25maWcgd2l0aCBkZWZhdWx0c1xuICBnZXQgZHJhd2VySGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLmhlYWRlciB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmZvcm0nKTtcbiAgfVxuICBnZXQgZHJhd2VyUG9zaXRpb24oKTogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgeyByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcucG9zaXRpb24gfHwgJ3JpZ2h0JzsgfVxuICBnZXQgZHJhd2VyU2hvd0Nsb3NlSWNvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLnNob3dDbG9zZUljb24gPz8gdHJ1ZTsgfVxuICBnZXQgZHJhd2VyQ2xvc2VPbkVzY2FwZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLmNsb3NlT25Fc2NhcGUgPz8gdHJ1ZTsgfVxuICBnZXQgZHJhd2VyRGlzbWlzc2FibGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5kaXNtaXNzYWJsZSA/PyB0cnVlOyB9XG5cbiAgZ2V0IGRyYXdlclN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5kcmF3ZXJQb3NpdGlvbjtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHBvc2l0aW9uID09PSAncmlnaHQnO1xuICAgIGlmICh0aGlzLmRyYXdlckNvbmZpZy5jdXN0b21XaWR0aCkge1xuICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbCA/IHsgd2lkdGg6IHRoaXMuZHJhd2VyQ29uZmlnLmN1c3RvbVdpZHRoIH0gOiB7IGhlaWdodDogdGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGggfTtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuZHJhd2VyQ29uZmlnLnNpemUgfHwgJ21lZGl1bSc7XG4gICAgY29uc3Qgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHNtYWxsOiBpc0hvcml6b250YWwgPyAnMjUlJyA6ICcyNXZoJyxcbiAgICAgIG1lZGl1bTogaXNIb3Jpem9udGFsID8gJzQwJScgOiAnNDB2aCcsXG4gICAgICBsYXJnZTogaXNIb3Jpem9udGFsID8gJzYwJScgOiAnNjB2aCcsXG4gICAgICB4bGFyZ2U6IGlzSG9yaXpvbnRhbCA/ICc4MCUnIDogJzgwdmgnLFxuICAgICAgZnVsbDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogJzEwMHZoJ1xuICAgIH07XG4gICAgcmV0dXJuIGlzSG9yaXpvbnRhbCA/IHsgd2lkdGg6IHNpemVNYXBbc2l6ZV0gfSA6IHsgaGVpZ2h0OiBzaXplTWFwW3NpemVdIH07XG4gIH1cblxuICBnZXQgc3VibWl0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXRCdXR0b25MYWJlbCB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLnNhdmUnKTtcbiAgfVxuICBnZXQgY2FuY2VsTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWxCdXR0b25MYWJlbCB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmNhbmNlbCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG1hc2tTZXJ2aWNlOiBNYXNrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8vIC0tLSBMaWZlY3ljbGUgLS0tXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIGlmICh0aGlzLmVudGl0eURhdGEpIHtcbiAgICAgIHRoaXMubG9hZEVudGl0eURhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5zZXR1cENvbmRpdGlvbmFsRmllbGRzV2F0Y2hlcigpO1xuICAgIHRoaXMuZm9ybVJlYWR5LmVtaXQodGhpcy5mb3JtKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZW50aXR5RGF0YSddICYmIHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID8gdGhpcy5sb2FkRW50aXR5RGF0YSgpIDogdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3Zpc2libGUnXSAmJiBjaGFuZ2VzWyd2aXNpYmxlJ10uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmVudGl0eURhdGEgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgIHRoaXMubG9hZEVudGl0eURhdGEoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW50aXR5RGF0YSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gRm9ybSBpbml0IC0tLVxuXG4gIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Db250cm9sczogYW55ID0ge307XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gZmllbGQudmFsaWRhdG9ycyB8fCBbXTtcbiAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5maWVsZF0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkIHx8IGZhbHNlIH0sXG4gICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWUoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBhbnkge1xuICAgIGlmIChmaWVsZC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6IGNhc2UgJ2N1cnJlbmN5JzogY2FzZSAnZGF0ZSc6IGNhc2UgJ3RpbWUnOiByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzogcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnbXVsdGlzZWxlY3QnOiByZXR1cm4gW107XG4gICAgICBjYXNlICdkcm9wZG93bic6IGNhc2UgJ2VudW0nOiByZXR1cm4gJyc7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUluaXRpYWxEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLmRpc2FibGVkV2hlbikge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZC5maWVsZCk7XG4gICAgICAgIGlmIChjb250cm9sICYmIHRoaXMuaXNGaWVsZERpc2FibGVkKGZpZWxkKSkge1xuICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0gRGF0YSBsb2FkaW5nIC0tLVxuXG4gIGxvYWRFbnRpdHlEYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudGl0eURhdGEgJiYgdGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLnByb2Nlc3NFbnRpdHlEYXRhKHRoaXMuZW50aXR5RGF0YSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0VudGl0eURhdGEoZW50aXR5OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGRhdGEgPSB7IC4uLmVudGl0eSB9O1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRlJyAmJiBkYXRhW2ZpZWxkLmZpZWxkXSkge1xuICAgICAgICBjb25zdCB2ID0gZGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IHYuc3Vic3RyaW5nKDAsIDEwKS5zcGxpdCgnLScpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgrcGFydHNbMF0sICtwYXJ0c1sxXSAtIDEsICtwYXJ0c1syXSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKGQuZ2V0VGltZSgpKSkgZGF0YVtmaWVsZC5maWVsZF0gPSBkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0aW1lJyAmJiBkYXRhW2ZpZWxkLmZpZWxkXSkge1xuICAgICAgICBjb25zdCB2ID0gZGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IHYuc3BsaXQoJzonKTtcbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZC5zZXRIb3VycyhwYXJzZUludChwYXJ0c1swXSwgMTApLCBwYXJzZUludChwYXJ0c1sxXSwgMTApLCAwLCAwKTtcbiAgICAgICAgICAgIGRhdGFbZmllbGQuZmllbGRdID0gZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbG9va3VwJyAmJiBkYXRhW2ZpZWxkLmZpZWxkXSkge1xuICAgICAgICBjb25zdCB2ID0gZGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdi5pZCkge1xuICAgICAgICAgIGNvbnN0IGhhc0Rpc3BsYXkgPSBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICA/IGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMuc29tZShmID0+IHRoaXMuZ2V0TmVzdGVkVmFsdWUodiwgZikpXG4gICAgICAgICAgICA6IHZbZmllbGQubG9va3VwRGlzcGxheUZpZWxkIHx8ICduYW1lJ107XG4gICAgICAgICAgaWYgKCFoYXNEaXNwbGF5KSBkYXRhW2ZpZWxkLmZpZWxkXSA9IHYuaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGN1ciwga2V5KSA9PiBjdXI/LltrZXldLCBvYmopO1xuICB9XG5cbiAgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIGNvbnN0IHZhbHVlczogYW55ID0ge307XG4gICAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGYgPT4gdmFsdWVzW2YuZmllbGRdID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZikpO1xuICAgICAgdGhpcy5mb3JtLnJlc2V0KHZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFZhbHVlIHByb2Nlc3Npbmcgb24gc3VibWl0IC0tLVxuXG4gIHByaXZhdGUgcHJvY2Vzc0Zvcm1WYWx1ZShmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3Qgb3V0ID0geyAuLi5mb3JtVmFsdWUgfTtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhPy5pZCkgb3V0LmlkID0gdGhpcy5lbnRpdHlEYXRhLmlkO1xuXG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBjb25zdCB2ID0gb3V0W2ZpZWxkLmZpZWxkXTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbG9va3VwJykge1xuICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHsgLyoga2VlcCAqLyB9XG4gICAgICAgIGVsc2UgaWYgKHYgJiYgdiAhPT0gJycpIG91dFtmaWVsZC5maWVsZF0gPSB7IGlkOiB2IH07XG4gICAgICAgIGVsc2Ugb3V0W2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBvdXRbZmllbGQuZmllbGRdID0gYCR7di5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyh2LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyh2LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKCF2KSBvdXRbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIG91dFtmaWVsZC5maWVsZF0gPSBgJHtTdHJpbmcodi5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpfToke1N0cmluZyh2LmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKX06MDBgO1xuICAgICAgICB9IGVsc2UgaWYgKCF2KSBvdXRbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoWyd0ZXh0JywgJ3RleHRhcmVhJywgJ251bWJlcicsICdjdXJyZW5jeScsICdlbnVtJywgJ2Ryb3Bkb3duJ10uaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgaWYgKHYgPT09ICcnIHx8IHYgPT09IHVuZGVmaW5lZCkgb3V0W2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8vIC0tLSBMYXlvdXQgLS0tXG5cbiAgZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmF1bHRTaXplOiBEeW5hbWljRm9ybUZpZWxkU2l6ZSA9IHsgeGw6IDYsIGxnOiA2LCBtZDogNiwgc206IDEyIH07XG4gICAgY29uc3Qgc2l6ZTogRHluYW1pY0Zvcm1GaWVsZFNpemUgPSB0eXBlb2YgZmllbGQuc2l6ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBmaWVsZC5zaXplKHRoaXMuZm9ybT8udmFsdWUgfHwge30pXG4gICAgICA6IChmaWVsZC5zaXplIHx8IGRlZmF1bHRTaXplKTtcblxuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgLy8gQmFzZSBjbGFzcyBmcm9tIHhsIG9yIGZhbGxiYWNrIDZcbiAgICBjbGFzc2VzLnB1c2goYGNvbC0ke3NpemUueGwgPz8gc2l6ZS5sZyA/PyBzaXplLm1kID8/IHNpemUuc20gPz8gNn1gKTtcbiAgICBpZiAoc2l6ZS54cyAhPT0gdW5kZWZpbmVkKSBjbGFzc2VzLnB1c2goYGNvbC14cy0ke3NpemUueHN9YCk7XG4gICAgaWYgKHNpemUuc20gIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wtc20tJHtzaXplLnNtfWApO1xuICAgIGlmIChzaXplLm1kICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLW1kLSR7c2l6ZS5tZH1gKTtcbiAgICBpZiAoc2l6ZS5sZyAhPT0gdW5kZWZpbmVkKSBjbGFzc2VzLnB1c2goYGNvbC1sZy0ke3NpemUubGd9YCk7XG4gICAgaWYgKHNpemUueGwgIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wteGwtJHtzaXplLnhsfWApO1xuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vIC0tLSBDb25kaXRpb25hbCB2aXNpYmlsaXR5L2Rpc2FibGVkIC0tLVxuXG4gIGlzRmllbGRWaXNpYmxlKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWVsZC52aXNpYmxlV2hlbikgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZpZWxkLnZpc2libGVXaGVuKHRoaXMuZm9ybT8udmFsdWUgfHwge30pO1xuICB9XG5cbiAgaXNGaWVsZERpc2FibGVkKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmRpc2FibGVkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWZpZWxkLmRpc2FibGVkV2hlbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBmaWVsZC5kaXNhYmxlZFdoZW4odGhpcy5mb3JtPy52YWx1ZSB8fCB7fSk7XG4gIH1cblxuICBzZXR1cENvbmRpdGlvbmFsRmllbGRzV2F0Y2hlcigpOiB2b2lkIHtcbiAgICAvLyBTaW5jZSB2aXNpYmxlV2hlbi9kaXNhYmxlZFdoZW4gYXJlIG5vdyBmdW5jdGlvbnMgdGhhdCBjYW4gZGVwZW5kIG9uIGFueSBmaWVsZCxcbiAgICAvLyB3ZSB3YXRjaCBhbGwgZmllbGRzIGZvciBjaGFuZ2VzIGFuZCByZS1ldmFsdWF0ZVxuICAgIGNvbnN0IGhhc0NvbmRpdGlvbmFsID0gdGhpcy5hbGxGaWVsZHMuc29tZShmID0+IGYudmlzaWJsZVdoZW4gfHwgZi5kaXNhYmxlZFdoZW4pO1xuICAgIGlmICghaGFzQ29uZGl0aW9uYWwpIHJldHVybjtcblxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJIaWRkZW5GaWVsZHMoKTtcbiAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRGaWVsZHMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURpc2FibGVkRmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLmRpc2FibGVkV2hlbikge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZC5maWVsZCk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkRGlzYWJsZSA9IHRoaXMuaXNGaWVsZERpc2FibGVkKGZpZWxkKTtcbiAgICAgICAgICBpZiAoc2hvdWxkRGlzYWJsZSAmJiBjb250cm9sLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGREaXNhYmxlICYmIGNvbnRyb2wuZGlzYWJsZWQgJiYgIWZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGVhckhpZGRlbkZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC52aXNpYmxlV2hlbiAmJiAhdGhpcy5pc0ZpZWxkVmlzaWJsZShmaWVsZCkpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnZhbHVlICE9PSB0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCkpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGZpZWxkKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0gUHVibGljIG1ldGhvZHMgLS0tXG5cbiAgZ2V0Rm9ybSgpOiBGb3JtR3JvdXAgeyByZXR1cm4gdGhpcy5mb3JtOyB9XG5cbiAgb3BlbihlbnRpdHk/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZW50aXR5KSB7XG4gICAgICB0aGlzLmVudGl0eURhdGEgPSBlbnRpdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50aXR5RGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWwoKTogdm9pZCB7IHRoaXMuY2xvc2UoKTsgfVxuXG4gIGhhbmRsZVN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZm9ybScgJiYgdGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5mb3JtU3VibWl0LmVtaXQodGhpcy5wcm9jZXNzRm9ybVZhbHVlKHRoaXMuZm9ybS52YWx1ZSkpO1xuICB9XG5cbiAgb25Gb3JtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJykgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIEluIGlubGluZS1lZGl0IG1vZGUsIEVudGVyIHNhdmVzIHRoZSBjdXJyZW50IGZpZWxkIGJ1dCBuZXZlciB0cmlnZ2VycyBmb3JtIHN1Ym1pdFxuICAgICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0TW9kZSkge1xuICAgICAgICBpZiAodGhpcy5lZGl0aW5nRmllbGQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVJbmxpbmVGaWVsZCh0aGlzLmVkaXRpbmdGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNlY3Rpb24gaGVscGVycyAtLS1cblxuICBnZXRTZWN0aW9uU3R5bGUoc2VjdGlvbjogRHluYW1pY0Zvcm1TZWN0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoIXNlY3Rpb24udGl0bGUpIHJldHVybiAnbm9uZSc7XG4gICAgcmV0dXJuIHNlY3Rpb24uc3R5bGUgfHwgJ25vbmUnO1xuICB9XG5cbiAgLy8gLS0tIElubGluZSBFZGl0IC0tLVxuXG4gIHN0YXJ0RWRpdEZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzSW5saW5lRWRpdE1vZGUpIHJldHVybjtcbiAgICB0aGlzLmVkaXRpbmdGaWVsZCA9IGZpZWxkTmFtZTtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudGl0eURhdGFbZmllbGROYW1lXTtcbiAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQ/LnR5cGUgPT09ICdkYXRlJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMTApLnNwbGl0KCctJyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKCtwYXJ0c1swXSwgK3BhcnRzWzFdIC0gMSwgK3BhcnRzWzJdKTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoIWlzTmFOKGQuZ2V0VGltZSgpKSA/IGQgOiB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBBdXRvLWZvY3VzIHRoZSBpbnB1dCBhZnRlciBBbmd1bGFyIHJlbmRlcnMgdGhlIGVkaXQgZmllbGRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmlubGluZS1lZGl0LWZpZWxkIGlucHV0W2lkPVwiJHtmaWVsZE5hbWV9XCJdLCAuaW5saW5lLWVkaXQtZmllbGQgdGV4dGFyZWFbaWQ9XCIke2ZpZWxkTmFtZX1cIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGVsPy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNGaWVsZEVkaXRpbmcoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZWRpdGluZ0ZpZWxkID09PSBmaWVsZE5hbWU7IH1cblxuICBzYXZlSW5saW5lRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNJbmxpbmVFZGl0TW9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkTmFtZSk7XG4gICAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wuaW52YWxpZCkgeyBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7IHJldHVybjsgfVxuXG4gICAgdGhpcy5zYXZpbmdGaWVsZCA9IHRydWU7XG4gICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWxsRmllbGRzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBmaWVsZE5hbWUpO1xuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICB2YWx1ZSA9IHsgaWQ6IHZhbHVlIH07XG4gICAgfVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2RhdGUnICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdmFsdWUgPSBgJHt2YWx1ZS5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyh2YWx1ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX0tJHtTdHJpbmcodmFsdWUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgfVxuICAgIHRoaXMuZmllbGRTYXZlLmVtaXQoeyBmaWVsZDogZmllbGROYW1lLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIGNhbmNlbElubGluZUVkaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0TW9kZSAmJiB0aGlzLmVkaXRpbmdGaWVsZCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5lZGl0aW5nRmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbnRpdHlEYXRhW3RoaXMuZWRpdGluZ0ZpZWxkXSk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ0ZpZWxkID0gbnVsbDtcbiAgICAgIHRoaXMuc2F2aW5nRmllbGQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZUlubGluZUVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nRmllbGQgPSBudWxsO1xuICAgIHRoaXMuc2F2aW5nRmllbGQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIC0tLSBEaXNwbGF5IHZhbHVlIGZvciBpbmxpbmUtZWRpdCBtb2RlIC0tLVxuXG4gIGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZW50aXR5RGF0YSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hbGxGaWVsZHMuZmluZChmID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudGl0eURhdGFbZmllbGROYW1lXTtcbiAgICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gMCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoZmllbGQubG9va3VwRGlzcGxheUZpZWxkcykge1xuICAgICAgICByZXR1cm4gZmllbGQubG9va3VwRGlzcGxheUZpZWxkcy5tYXAoZiA9PiB0aGlzLmdldE5lc3RlZFZhbHVlKHZhbHVlLCBmKSkuZmlsdGVyKHYgPT4gdikuam9pbignIC0gJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVbZmllbGQubG9va3VwRGlzcGxheUZpZWxkIHx8ICduYW1lJ10gfHwgJyc7XG4gICAgfVxuXG4gICAgaWYgKChmaWVsZD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBmaWVsZD8udHlwZSA9PT0gJ2VudW0nKSAmJiBmaWVsZCkge1xuICAgICAgY29uc3Qgb3B0cyA9IGZpZWxkLm9wdGlvbnMgfHwgZmllbGQuZW51bU9wdGlvbnMgfHwgW107XG4gICAgICBjb25zdCBvcHRWYWwgPSBmaWVsZC5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuICAgICAgY29uc3Qgb3B0TGJsID0gZmllbGQub3B0aW9uTGFiZWwgfHwgJ2xhYmVsJztcbiAgICAgIGNvbnN0IG1hdGNoID0gb3B0cy5maW5kKChvOiBhbnkpID0+ICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgPyBvW29wdFZhbF0gOiBvKSA9PT0gdmFsdWUpO1xuICAgICAgaWYgKG1hdGNoKSByZXR1cm4gdHlwZW9mIG1hdGNoID09PSAnb2JqZWN0JyA/IG1hdGNoW29wdExibF0gOiBtYXRjaDtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdjdXJyZW5jeScgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbW9uZXlDb25maWcgPSB0aGlzLm1hc2tTZXJ2aWNlLmdldE1vbmV5Q29uZmlnKCk7XG4gICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KGZpZWxkLmxvY2FsZSB8fCBtb25leUNvbmZpZy5sb2NhbGUsIHtcbiAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIGN1cnJlbmN5OiBmaWVsZC5jdXJyZW5jeSB8fCBtb25leUNvbmZpZy5jdXJyZW5jeVxuICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xuICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGZpZWxkLm1pbkZyYWN0aW9uRGlnaXRzIHx8IDAsXG4gICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZmllbGQubWF4RnJhY3Rpb25EaWdpdHMgfHwgMlxuICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdkYXRlJyAmJiB2YWx1ZSkgcmV0dXJuIHRoaXMubG9jYWxlU2VydmljZS5mb3JtYXREYXRlKHZhbHVlKTtcblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RpbWUnICYmIHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gYCR7U3RyaW5nKHZhbHVlLmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKHZhbHVlLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS5zdWJzdHJpbmcoMCwgNSkgOiBTdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgcmV0dXJuIHZhbHVlID8gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5ib29sZWFuX3RydWUnKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuYm9vbGVhbl9mYWxzZScpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ211bHRpc2VsZWN0JyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3Qgb3B0cyA9IGZpZWxkLm9wdGlvbnMgfHwgZmllbGQuZW51bU9wdGlvbnMgfHwgW107XG4gICAgICBjb25zdCBvcHRWYWwgPSBmaWVsZC5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuICAgICAgY29uc3Qgb3B0TGJsID0gZmllbGQub3B0aW9uTGFiZWwgfHwgJ2xhYmVsJztcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiB7XG4gICAgICAgIGNvbnN0IG8gPSBvcHRzLmZpbmQoKG9wdDogYW55KSA9PiAodHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHRbb3B0VmFsXSA6IG9wdCkgPT09IHYpO1xuICAgICAgICByZXR1cm4gbyA/ICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgPyBvW29wdExibF0gOiBvKSA6IHY7XG4gICAgICB9KS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RleHQnICYmIGZpZWxkLm1hc2sgPT09ICdkb2N1bWVudCcgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHR5cGVQZXJzb24gPSB0aGlzLmVudGl0eURhdGFbZmllbGQubWFza0RlcGVuZHNPbiB8fCAndHlwZVBlcnNvbiddIHx8ICdKVVJJRElDQUxfUEVSU09OJztcbiAgICAgIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5RG9jdW1lbnRNYXNrKFN0cmluZyh2YWx1ZSksIHR5cGVQZXJzb24pO1xuICAgIH1cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnY3BmJyAmJiB2YWx1ZSkgcmV0dXJuIHRoaXMubWFza1NlcnZpY2UuYXBwbHlDcGZNYXNrKFN0cmluZyh2YWx1ZSkpO1xuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RleHQnICYmIGZpZWxkLm1hc2sgPT09ICdjbnBqJyAmJiB2YWx1ZSkgcmV0dXJuIHRoaXMubWFza1NlcnZpY2UuYXBwbHlDbnBqTWFzayhTdHJpbmcodmFsdWUpKTtcblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG4iLCI8IS0tIElubGluZSBNb2RlIChubyBkaXNwbGF5TW9kZSBzZXQpIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSW5saW5lTW9kZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIERpYWxvZyBNb2RlIC0tPlxuPHAtZGlhbG9nXG4gICpuZ0lmPVwiaXNEaWFsb2dNb2RlXCJcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgW2hlYWRlcl09XCJkaWFsb2dIZWFkZXIgfCB0cmFuc2xhdGVcIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIFtzdHlsZV09XCJ7IHdpZHRoOiBkaWFsb2dXaWR0aCB9XCJcbiAgW2RyYWdnYWJsZV09XCJkaWFsb2dEcmFnZ2FibGVcIlxuICBbcmVzaXphYmxlXT1cImRpYWxvZ1Jlc2l6YWJsZVwiXG4gIFttYXhpbWl6YWJsZV09XCJkaWFsb2dNYXhpbWl6YWJsZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cImRpYWxvZ0Nsb3NlT25Fc2NhcGVcIlxuICBbZGlzbWlzc2FibGVNYXNrXT1cImRpYWxvZ0Rpc21pc3NhYmxlTWFza1wiXG4gIChvbkhpZGUpPVwiY2xvc2UoKVwiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b24gfHwgc2hvd0NhbmNlbEJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctZm9vdGVyXCI+XG4gICAgICA8cC1idXR0b24gKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uXCIgW2xhYmVsXT1cImNhbmNlbExhYmVsIHwgdHJhbnNsYXRlXCIgW2ljb25dPVwiY2FuY2VsQnV0dG9uSWNvblwiIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgKG9uQ2xpY2spPVwiaGFuZGxlQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b24gKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uXCIgW2xhYmVsXT1cInN1Ym1pdExhYmVsIHwgdHJhbnNsYXRlXCIgW2ljb25dPVwic3VibWl0QnV0dG9uSWNvblwiIChvbkNsaWNrKT1cImhhbmRsZVN1Ym1pdCgpXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cblxuPCEtLSBEcmF3ZXIgTW9kZSAtLT5cbjxwLWRyYXdlclxuICAqbmdJZj1cImlzRHJhd2VyTW9kZVwiXG4gIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gIFtoZWFkZXJdPVwiZHJhd2VySGVhZGVyIHwgdHJhbnNsYXRlXCJcbiAgW3Bvc2l0aW9uXT1cImRyYXdlclBvc2l0aW9uXCJcbiAgW3N0eWxlXT1cImRyYXdlclN0eWxlXCJcbiAgW3Nob3dDbG9zZUljb25dPVwiZHJhd2VyU2hvd0Nsb3NlSWNvblwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cImRyYXdlckNsb3NlT25Fc2NhcGVcIlxuICBbbW9kYWxdPVwiZHJhd2VyRGlzbWlzc2FibGVcIlxuICAob25IaWRlKT1cImNsb3NlKClcIj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCIgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uIHx8IHNob3dDYW5jZWxCdXR0b25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiIFtsYWJlbF09XCJjYW5jZWxMYWJlbCB8IHRyYW5zbGF0ZVwiIFtpY29uXT1cImNhbmNlbEJ1dHRvbkljb25cIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIChvbkNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvblwiIFtsYWJlbF09XCJzdWJtaXRMYWJlbCB8IHRyYW5zbGF0ZVwiIFtpY29uXT1cInN1Ym1pdEJ1dHRvbkljb25cIiAob25DbGljayk9XCJoYW5kbGVTdWJtaXQoKVwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kcmF3ZXI+XG5cbjwhLS0gRm9ybSBDb250ZW50IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNmb3JtQ29udGVudD5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJkeW5hbWljLWZvcm1cIiAoa2V5ZG93bik9XCJvbkZvcm1LZXlkb3duKCRldmVudClcIiAoc3VibWl0KT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zXCI+XG4gICAgICA8IS0tIE5vIHRpdGxlID0gYmFyZSBmaWVsZHMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlY3Rpb24udGl0bGVcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lRWRpdEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEJvcmRlcmVkIHNlY3Rpb24gLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VjdGlvbi50aXRsZSAmJiBnZXRTZWN0aW9uU3R5bGUoc2VjdGlvbikgPT09ICdib3JkZXJlZCdcIiBjbGFzcz1cImJvcmRlcmVkLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgICAgPGkgKm5nSWY9XCJzZWN0aW9uLmljb25cIiBbY2xhc3NdPVwic2VjdGlvbi5pY29uICsgJyBzZWN0aW9uLWljb24nXCI+PC9pPlxuICAgICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lRWRpdEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBhbmVsIHNlY3Rpb24gLS0+XG4gICAgICA8cC1wYW5lbFxuICAgICAgICAqbmdJZj1cInNlY3Rpb24udGl0bGUgJiYgZ2V0U2VjdGlvblN0eWxlKHNlY3Rpb24pID09PSAncGFuZWwnXCJcbiAgICAgICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjb2xsYXBzZWRdPVwic2VjdGlvbi5jb2xsYXBzZWQgfHwgZmFsc2VcIlxuICAgICAgICBzdHlsZUNsYXNzPVwic2VjdGlvbi1wYW5lbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICA8aSAqbmdJZj1cInNlY3Rpb24uaWNvblwiIFtjbGFzc109XCJzZWN0aW9uLmljb24gKyAnIHNlY3Rpb24taWNvbidcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj57eyBzZWN0aW9uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9wLXBhbmVsPlxuXG4gICAgICA8IS0tIEhlYWRpbmctb25seSBzZWN0aW9uICh0aXRsZSBwcmVzZW50LCBzdHlsZT0nbm9uZScgb3Igb21pdHRlZCkgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VjdGlvbi50aXRsZSAmJiBnZXRTZWN0aW9uU3R5bGUoc2VjdGlvbikgPT09ICdub25lJ1wiIGNsYXNzPVwiaGVhZGluZy1zZWN0aW9uXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24taGVhZGluZ1wiPlxuICAgICAgICAgIDxpICpuZ0lmPVwic2VjdGlvbi5pY29uXCIgW2NsYXNzXT1cInNlY3Rpb24uaWNvbiArICcgc2VjdGlvbi1pY29uJ1wiPjwvaT5cbiAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gQ3VzdG9tIGNvbnRlbnQgcHJvamVjdGlvbiAtLT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgbGV0LWZpZWxkPVwiZmllbGRcIj5cbiAgPHNpYS1keW5hbWljLWZpZWxkLXRleHQgKm5nSWY9XCJmaWVsZC50eXBlID09PSAndGV4dCdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC10ZXh0PlxuICA8c2lhLWR5bmFtaWMtZmllbGQtdGV4dGFyZWEgKm5nSWY9XCJmaWVsZC50eXBlID09PSAndGV4dGFyZWEnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtdGV4dGFyZWE+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1udW1iZXIgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnbnVtYmVyJyB8fCBmaWVsZC50eXBlID09PSAnY3VycmVuY3knXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtbnVtYmVyPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtZGF0ZSAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdkYXRlJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWRhdGU+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1kYXRldGltZSAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdkYXRldGltZSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1kYXRldGltZT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWRyb3Bkb3duICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBmaWVsZC50eXBlID09PSAnZW51bSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1kcm9wZG93bj5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWxvb2t1cCAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdsb29rdXAnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtbG9va3VwPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtdGltZSAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICd0aW1lJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLXRpbWU+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1jaGVja2JveCAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdjaGVja2JveCdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1jaGVja2JveD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLW11bHRpc2VsZWN0ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ211bHRpc2VsZWN0J1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLW11bHRpc2VsZWN0PlxuICA8c2lhLWR5bmFtaWMtZmllbGQtaW1hZ2UgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnaW1hZ2UnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtaW1hZ2U+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIElubGluZSBFZGl0IEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZSBsZXQtZmllbGQ9XCJmaWVsZFwiPlxuICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPnt7IGZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWRpc3BsYXlcIiAqbmdJZj1cIiFpc0ZpZWxkRWRpdGluZyhmaWVsZC5maWVsZClcIiAoY2xpY2spPVwic3RhcnRFZGl0RmllbGQoZmllbGQuZmllbGQpXCIgW2NsYXNzLmRpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJkaXNwbGF5LXZhbHVlXCIgW2F0dHIuZGF0YS1wbGFjZWhvbGRlcl09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCAoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLm5vdF9pbmZvcm1lZCcgfCB0cmFuc2xhdGUpXCI+e3sgZ2V0RmllbGREaXNwbGF5VmFsdWUoZmllbGQuZmllbGQpIH19PC9zcGFuPlxuICAgIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsIGVkaXQtaWNvblwiICpuZ0lmPVwiIWZpZWxkLmRpc2FibGVkXCI+PC9pPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWVkaXRcIiAqbmdJZj1cImlzRmllbGRFZGl0aW5nKGZpZWxkLmZpZWxkKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImVkaXQtYWN0aW9uc1wiPlxuICAgICAgPHAtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktY2hlY2tcIiBbcm91bmRlZF09XCJ0cnVlXCIgW3RleHRdPVwidHJ1ZVwiIHNldmVyaXR5PVwic3VjY2Vzc1wiIChvbkNsaWNrKT1cInNhdmVJbmxpbmVGaWVsZChmaWVsZC5maWVsZClcIiBbbG9hZGluZ109XCJzYXZpbmdGaWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtLmdldChmaWVsZC5maWVsZCk/LmludmFsaWRcIiBzaXplPVwic21hbGxcIj48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdGltZXNcIiBbcm91bmRlZF09XCJ0cnVlXCIgW3RleHRdPVwidHJ1ZVwiIHNldmVyaXR5PVwiZGFuZ2VyXCIgKG9uQ2xpY2spPVwiY2FuY2VsSW5saW5lRWRpdCgpXCIgW2Rpc2FibGVkXT1cInNhdmluZ0ZpZWxkXCIgc2l6ZT1cInNtYWxsXCI+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
614
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBVzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQ0FBMkMs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LFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL3BhbmVsJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7XG4gIER5bmFtaWNGb3JtRmllbGRDb25maWcsXG4gIER5bmFtaWNGb3JtRmllbGRTaXplLFxuICBEeW5hbWljRm9ybVNlY3Rpb24sXG4gIER5bmFtaWNGb3JtRGlhbG9nQ29uZmlnLFxuICBEeW5hbWljRm9ybURyYXdlckNvbmZpZ1xufSBmcm9tICcuL21vZGVscy9keW5hbWljLWZvcm0ubW9kZWxzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFza1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtZGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkRGF0ZXRpbWVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRhdGV0aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGREcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtbG9va3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtdGV4dGFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZFRpbWVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLXRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLW11bHRpc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtaW1hZ2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBQYW5lbE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHJhd2VyTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIER5bmFtaWNGaWVsZFRleHRDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTnVtYmVyQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERhdGVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkRGF0ZXRpbWVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTG9va3VwQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZFRleHRhcmVhQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZFRpbWVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkQ2hlY2tib3hDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkSW1hZ2VDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzZWN0aW9uczogRHluYW1pY0Zvcm1TZWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgZW50aXR5RGF0YTogYW55ID0gbnVsbDtcbiAgQElucHV0KCkgbW9kZTogJ2Zvcm0nIHwgJ2lubGluZS1lZGl0JyA9ICdmb3JtJztcblxuICAvLyBEaXNwbGF5IE1vZGUg4oCUIG9wdGlvbmFsLiBJZiBub3Qgc2V0LCByZW5kZXJzIGlubGluZSB3aXRob3V0IGJ1dHRvbnMuXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlPzogJ2RpYWxvZycgfCAnZHJhd2VyJztcbiAgQElucHV0KCkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaWFsb2dDb25maWc6IER5bmFtaWNGb3JtRGlhbG9nQ29uZmlnID0ge307XG4gIEBJbnB1dCgpIGRyYXdlckNvbmZpZzogRHluYW1pY0Zvcm1EcmF3ZXJDb25maWcgPSB7fTtcblxuICAvLyBCdXR0b24gQ29uZmlndXJhdGlvblxuICBASW5wdXQoKSBzaG93U3VibWl0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWl0QnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b25JY29uOiBzdHJpbmcgPSAncGkgcGktY2hlY2snO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25JY29uOiBzdHJpbmcgPSAncGkgcGktdGltZXMnO1xuXG4gIEBPdXRwdXQoKSBmb3JtUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Hcm91cD4oKTtcbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGZpZWxkU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55IH0+KCk7XG5cbiAgZm9ybSE6IEZvcm1Hcm91cDtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIElubGluZSBlZGl0IHN0YXRlXG4gIGVkaXRpbmdGaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNhdmluZ0ZpZWxkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gLS0tIENvbXB1dGVkIHByb3BlcnRpZXMgLS0tXG5cbiAgZ2V0IGFsbEZpZWxkcygpOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnW10ge1xuICAgIHJldHVybiB0aGlzLnNlY3Rpb25zLmZsYXRNYXAoc2VjdGlvbiA9PiBzZWN0aW9uLmZpZWxkcyk7XG4gIH1cblxuICBnZXQgaXNJbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnaW5saW5lLWVkaXQnO1xuICB9XG5cbiAgZ2V0IGlzRGlhbG9nTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2RpYWxvZyc7XG4gIH1cblxuICBnZXQgaXNEcmF3ZXJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNb2RlID09PSAnZHJhd2VyJztcbiAgfVxuXG4gIGdldCBpc0lubGluZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlNb2RlO1xuICB9XG5cbiAgLy8gRGlhbG9nIGNvbmZpZyB3aXRoIGRlZmF1bHRzXG4gIGdldCBkaWFsb2dIZWFkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyIHx8IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuZm9ybScpO1xuICB9XG4gIGdldCBkaWFsb2dXaWR0aCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcud2lkdGggfHwgJzYwMHB4JzsgfVxuICBnZXQgZGlhbG9nRHJhZ2dhYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuZHJhZ2dhYmxlID8/IGZhbHNlOyB9XG4gIGdldCBkaWFsb2dSZXNpemFibGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5yZXNpemFibGUgPz8gZmFsc2U7IH1cbiAgZ2V0IGRpYWxvZ01heGltaXphYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcubWF4aW1pemFibGUgPz8gZmFsc2U7IH1cbiAgZ2V0IGRpYWxvZ0Nsb3NlT25Fc2NhcGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5jbG9zZU9uRXNjYXBlID8/IHRydWU7IH1cbiAgZ2V0IGRpYWxvZ0Rpc21pc3NhYmxlTWFzaygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmRpc21pc3NhYmxlTWFzayA/PyBmYWxzZTsgfVxuXG4gIC8vIERyYXdlciBjb25maWcgd2l0aCBkZWZhdWx0c1xuICBnZXQgZHJhd2VySGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLmhlYWRlciB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmZvcm0nKTtcbiAgfVxuICBnZXQgZHJhd2VyUG9zaXRpb24oKTogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgeyByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcucG9zaXRpb24gfHwgJ3JpZ2h0JzsgfVxuICBnZXQgZHJhd2VyU2hvd0Nsb3NlSWNvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLnNob3dDbG9zZUljb24gPz8gdHJ1ZTsgfVxuICBnZXQgZHJhd2VyQ2xvc2VPbkVzY2FwZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLmNsb3NlT25Fc2NhcGUgPz8gdHJ1ZTsgfVxuICBnZXQgZHJhd2VyRGlzbWlzc2FibGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5kaXNtaXNzYWJsZSA/PyB0cnVlOyB9XG5cbiAgZ2V0IGRyYXdlclN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5kcmF3ZXJQb3NpdGlvbjtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHBvc2l0aW9uID09PSAncmlnaHQnO1xuICAgIGlmICh0aGlzLmRyYXdlckNvbmZpZy5jdXN0b21XaWR0aCkge1xuICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbCA/IHsgd2lkdGg6IHRoaXMuZHJhd2VyQ29uZmlnLmN1c3RvbVdpZHRoIH0gOiB7IGhlaWdodDogdGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGggfTtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuZHJhd2VyQ29uZmlnLnNpemUgfHwgJ21lZGl1bSc7XG4gICAgY29uc3Qgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHNtYWxsOiBpc0hvcml6b250YWwgPyAnMjUlJyA6ICcyNXZoJyxcbiAgICAgIG1lZGl1bTogaXNIb3Jpem9udGFsID8gJzQwJScgOiAnNDB2aCcsXG4gICAgICBsYXJnZTogaXNIb3Jpem9udGFsID8gJzYwJScgOiAnNjB2aCcsXG4gICAgICB4bGFyZ2U6IGlzSG9yaXpvbnRhbCA/ICc4MCUnIDogJzgwdmgnLFxuICAgICAgZnVsbDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogJzEwMHZoJ1xuICAgIH07XG4gICAgcmV0dXJuIGlzSG9yaXpvbnRhbCA/IHsgd2lkdGg6IHNpemVNYXBbc2l6ZV0gfSA6IHsgaGVpZ2h0OiBzaXplTWFwW3NpemVdIH07XG4gIH1cblxuICBnZXQgc3VibWl0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXRCdXR0b25MYWJlbCB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLnNhdmUnKTtcbiAgfVxuICBnZXQgY2FuY2VsTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWxCdXR0b25MYWJlbCB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmNhbmNlbCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG1hc2tTZXJ2aWNlOiBNYXNrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8vIC0tLSBMaWZlY3ljbGUgLS0tXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIGlmICh0aGlzLmVudGl0eURhdGEpIHtcbiAgICAgIHRoaXMubG9hZEVudGl0eURhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5zZXR1cENvbmRpdGlvbmFsRmllbGRzV2F0Y2hlcigpO1xuICAgIHRoaXMuZm9ybVJlYWR5LmVtaXQodGhpcy5mb3JtKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZW50aXR5RGF0YSddICYmIHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID8gdGhpcy5sb2FkRW50aXR5RGF0YSgpIDogdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3Zpc2libGUnXSAmJiBjaGFuZ2VzWyd2aXNpYmxlJ10uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmVudGl0eURhdGEgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgIHRoaXMubG9hZEVudGl0eURhdGEoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW50aXR5RGF0YSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gRm9ybSBpbml0IC0tLVxuXG4gIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Db250cm9sczogYW55ID0ge307XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gWy4uLihmaWVsZC52YWxpZGF0b3JzIHx8IFtdKV07XG4gICAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLmZpZWxkXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgeyB2YWx1ZTogZGVmYXVsdFZhbHVlLCBkaXNhYmxlZDogZmllbGQuZGlzYWJsZWQgfHwgZmFsc2UgfSxcbiAgICAgICAgdmFsaWRhdG9yc1xuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKGZvcm1Db250cm9scyk7XG4gICAgdGhpcy5hcHBseUluaXRpYWxEaXNhYmxlZFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRWYWx1ZShmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IGFueSB7XG4gICAgaWYgKGZpZWxkLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzogY2FzZSAnY3VycmVuY3knOiBjYXNlICdkYXRlJzogY2FzZSAnZGF0ZXRpbWUnOiBjYXNlICd0aW1lJzogY2FzZSAnbG9va3VwJzogcmV0dXJuIG51bGw7XG4gICAgICBjYXNlICdjaGVja2JveCc6IHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ211bHRpc2VsZWN0JzogcmV0dXJuIFtdO1xuICAgICAgY2FzZSAnZHJvcGRvd24nOiBjYXNlICdlbnVtJzogcmV0dXJuICcnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsRGlzYWJsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC5kaXNhYmxlZFdoZW4pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCAmJiB0aGlzLmlzRmllbGREaXNhYmxlZChmaWVsZCkpIHtcbiAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIERhdGEgbG9hZGluZyAtLS1cblxuICBsb2FkRW50aXR5RGF0YSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhICYmIHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5wcm9jZXNzRW50aXR5RGF0YSh0aGlzLmVudGl0eURhdGEpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NFbnRpdHlEYXRhKGVudGl0eTogYW55KTogYW55IHtcbiAgICBjb25zdCBkYXRhID0geyAuLi5lbnRpdHkgfTtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZGF0ZScgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB2LnN1YnN0cmluZygwLCAxMCkuc3BsaXQoJy0nKTtcbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoK3BhcnRzWzBdLCArcGFydHNbMV0gLSAxLCArcGFydHNbMl0pO1xuICAgICAgICAgICAgaWYgKCFpc05hTihkLmdldFRpbWUoKSkpIGRhdGFbZmllbGQuZmllbGRdID0gZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAndGltZScgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB2LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGQuc2V0SG91cnMocGFyc2VJbnQocGFydHNbMF0sIDEwKSwgcGFyc2VJbnQocGFydHNbMV0sIDEwKSwgMCwgMCk7XG4gICAgICAgICAgICBkYXRhW2ZpZWxkLmZpZWxkXSA9IGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xvb2t1cCcgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYuaWQpIHtcbiAgICAgICAgICBjb25zdCBoYXNEaXNwbGF5ID0gZmllbGQubG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgPyBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzLnNvbWUoZiA9PiB0aGlzLmdldE5lc3RlZFZhbHVlKHYsIGYpKVxuICAgICAgICAgICAgOiB2W2ZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZCB8fCAnbmFtZSddO1xuICAgICAgICAgIGlmICghaGFzRGlzcGxheSkgZGF0YVtmaWVsZC5maWVsZF0gPSB2LmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXIsIGtleSkgPT4gY3VyPy5ba2V5XSwgb2JqKTtcbiAgfVxuXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAvLyBGaXJzdCBzZXQgYWxsIGNvbnRyb2xzIHRvIGEgc2VudGluZWwgdmFsdWUgdG8gZW5zdXJlIHZhbHVlQ2hhbmdlcyBmaXJlc1xuICAgICAgLy8gZXZlbiB3aGVuIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHZhbHVlIChlLmcuICcnIC0+ICcnKVxuICAgICAgLy8gVGhpcyBpcyBjcml0aWNhbCBmb3IgbG9va3VwIGZpZWxkcyB0aGF0IG1haW50YWluIGludGVybmFsIGRpc3BsYXkgc3RhdGUuXG4gICAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdmFsdWVzOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZiA9PiB2YWx1ZXNbZi5maWVsZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShmKSk7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQodmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVmFsdWUgcHJvY2Vzc2luZyBvbiBzdWJtaXQgLS0tXG5cbiAgcHJpdmF0ZSBwcm9jZXNzRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KTogYW55IHtcbiAgICBjb25zdCBvdXQgPSB7IC4uLmZvcm1WYWx1ZSB9O1xuICAgIGlmICh0aGlzLmVudGl0eURhdGE/LmlkKSBvdXQuaWQgPSB0aGlzLmVudGl0eURhdGEuaWQ7XG5cbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IHYgPSBvdXRbZmllbGQuZmllbGRdO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsb29rdXAnKSB7XG4gICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JykgeyAvKiBrZWVwICovIH1cbiAgICAgICAgZWxzZSBpZiAodiAmJiB2ICE9PSAnJykgb3V0W2ZpZWxkLmZpZWxkXSA9IHsgaWQ6IHYgfTtcbiAgICAgICAgZWxzZSBvdXRbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIG91dFtmaWVsZC5maWVsZF0gPSBgJHt2LmdldEZ1bGxZZWFyKCl9LSR7U3RyaW5nKHYuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyl9LSR7U3RyaW5nKHYuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoIXYpIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndGltZScpIHtcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgb3V0W2ZpZWxkLmZpZWxkXSA9IGAke1N0cmluZyh2LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKHYuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfTowMGA7XG4gICAgICAgIH0gZWxzZSBpZiAoIXYpIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkgeyAvKiBrZWVwIGFzIERhdGUgKi8gfVxuICAgICAgICBlbHNlIGlmICghdiB8fCB2ID09PSAnJykgb3V0W2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKFsndGV4dCcsICd0ZXh0YXJlYScsICdudW1iZXInLCAnY3VycmVuY3knLCAnZW51bScsICdkcm9wZG93biddLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgIGlmICh2ID09PSAnJyB8fCB2ID09PSB1bmRlZmluZWQpIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvLyAtLS0gTGF5b3V0IC0tLVxuXG4gIGdldEZpZWxkR3JpZENsYXNzKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZhdWx0U2l6ZTogRHluYW1pY0Zvcm1GaWVsZFNpemUgPSB7IHhsOiA2LCBsZzogNiwgbWQ6IDYsIHNtOiAxMiB9O1xuICAgIGNvbnN0IHNpemU6IER5bmFtaWNGb3JtRmllbGRTaXplID0gdHlwZW9mIGZpZWxkLnNpemUgPT09ICdmdW5jdGlvbidcbiAgICAgID8gZmllbGQuc2l6ZSh0aGlzLmZvcm0/LnZhbHVlIHx8IHt9KVxuICAgICAgOiAoZmllbGQuc2l6ZSB8fCBkZWZhdWx0U2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIEJhc2UgY2xhc3MgZnJvbSB4bCBvciBmYWxsYmFjayA2XG4gICAgY2xhc3Nlcy5wdXNoKGBjb2wtJHtzaXplLnhsID8/IHNpemUubGcgPz8gc2l6ZS5tZCA/PyBzaXplLnNtID8/IDZ9YCk7XG4gICAgaWYgKHNpemUueHMgIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wteHMtJHtzaXplLnhzfWApO1xuICAgIGlmIChzaXplLnNtICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLXNtLSR7c2l6ZS5zbX1gKTtcbiAgICBpZiAoc2l6ZS5tZCAhPT0gdW5kZWZpbmVkKSBjbGFzc2VzLnB1c2goYGNvbC1tZC0ke3NpemUubWR9YCk7XG4gICAgaWYgKHNpemUubGcgIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wtbGctJHtzaXplLmxnfWApO1xuICAgIGlmIChzaXplLnhsICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLXhsLSR7c2l6ZS54bH1gKTtcbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cblxuICAvLyAtLS0gQ29uZGl0aW9uYWwgdmlzaWJpbGl0eS9kaXNhYmxlZCAtLS1cblxuICBpc0ZpZWxkVmlzaWJsZShmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZmllbGQudmlzaWJsZVdoZW4pIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmaWVsZC52aXNpYmxlV2hlbih0aGlzLmZvcm0/LnZhbHVlIHx8IHt9KTtcbiAgfVxuXG4gIGlzRmllbGREaXNhYmxlZChmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWVsZC5kaXNhYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFmaWVsZC5kaXNhYmxlZFdoZW4pIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZmllbGQuZGlzYWJsZWRXaGVuKHRoaXMuZm9ybT8udmFsdWUgfHwge30pO1xuICB9XG5cbiAgc2V0dXBDb25kaXRpb25hbEZpZWxkc1dhdGNoZXIoKTogdm9pZCB7XG4gICAgLy8gU2luY2UgdmlzaWJsZVdoZW4vZGlzYWJsZWRXaGVuIGFyZSBub3cgZnVuY3Rpb25zIHRoYXQgY2FuIGRlcGVuZCBvbiBhbnkgZmllbGQsXG4gICAgLy8gd2Ugd2F0Y2ggYWxsIGZpZWxkcyBmb3IgY2hhbmdlcyBhbmQgcmUtZXZhbHVhdGVcbiAgICBjb25zdCBoYXNDb25kaXRpb25hbCA9IHRoaXMuYWxsRmllbGRzLnNvbWUoZiA9PiBmLnZpc2libGVXaGVuIHx8IGYuZGlzYWJsZWRXaGVuKTtcbiAgICBpZiAoIWhhc0NvbmRpdGlvbmFsKSByZXR1cm47XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFySGlkZGVuRmllbGRzKCk7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkRmllbGRzKCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEaXNhYmxlZEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC5kaXNhYmxlZFdoZW4pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZERpc2FibGUgPSB0aGlzLmlzRmllbGREaXNhYmxlZChmaWVsZCk7XG4gICAgICAgICAgaWYgKHNob3VsZERpc2FibGUgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkRGlzYWJsZSAmJiBjb250cm9sLmRpc2FibGVkICYmICFmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJIaWRkZW5GaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQudmlzaWJsZVdoZW4gJiYgIXRoaXMuaXNGaWVsZFZpc2libGUoZmllbGQpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIFB1YmxpYyBtZXRob2RzIC0tLVxuXG4gIGdldEZvcm0oKTogRm9ybUdyb3VwIHsgcmV0dXJuIHRoaXMuZm9ybTsgfVxuXG4gIG9wZW4oZW50aXR5PzogYW55KTogdm9pZCB7XG4gICAgaWYgKGVudGl0eSkge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID0gZW50aXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudGl0eURhdGEgPSBudWxsO1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCk6IHZvaWQgeyB0aGlzLmNsb3NlKCk7IH1cblxuICBoYW5kbGVTdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2Zvcm0nICYmIHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHRoaXMucHJvY2Vzc0Zvcm1WYWx1ZSh0aGlzLmZvcm0udmFsdWUpKTtcbiAgfVxuXG4gIG9uRm9ybUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBJbiBpbmxpbmUtZWRpdCBtb2RlLCBFbnRlciBzYXZlcyB0aGUgY3VycmVudCBmaWVsZCBidXQgbmV2ZXIgdHJpZ2dlcnMgZm9ybSBzdWJtaXRcbiAgICAgIGlmICh0aGlzLmlzSW5saW5lRWRpdE1vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZ0ZpZWxkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlSW5saW5lRmllbGQodGhpcy5lZGl0aW5nRmllbGQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBTZWN0aW9uIGhlbHBlcnMgLS0tXG5cbiAgZ2V0U2VjdGlvblN0eWxlKHNlY3Rpb246IER5bmFtaWNGb3JtU2VjdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKCFzZWN0aW9uLnRpdGxlKSByZXR1cm4gJ25vbmUnO1xuICAgIHJldHVybiBzZWN0aW9uLnN0eWxlIHx8ICdub25lJztcbiAgfVxuXG4gIC8vIC0tLSBJbmxpbmUgRWRpdCAtLS1cblxuICBzdGFydEVkaXRGaWVsZChmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0lubGluZUVkaXRNb2RlKSByZXR1cm47XG4gICAgdGhpcy5lZGl0aW5nRmllbGQgPSBmaWVsZE5hbWU7XG4gICAgaWYgKHRoaXMuZW50aXR5RGF0YSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGROYW1lKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hbGxGaWVsZHMuZmluZChmID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbnRpdHlEYXRhW2ZpZWxkTmFtZV07XG4gICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2xvb2t1cCcgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkPy50eXBlID09PSAnZGF0ZScgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3Vic3RyaW5nKDAsIDEwKS5zcGxpdCgnLScpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgrcGFydHNbMF0sICtwYXJ0c1sxXSAtIDEsICtwYXJ0c1syXSk7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKCFpc05hTihkLmdldFRpbWUoKSkgPyBkIDogdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXV0by1mb2N1cyB0aGUgaW5wdXQgYWZ0ZXIgQW5ndWxhciByZW5kZXJzIHRoZSBlZGl0IGZpZWxkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5pbmxpbmUtZWRpdC1maWVsZCBpbnB1dFtpZD1cIiR7ZmllbGROYW1lfVwiXSwgLmlubGluZS1lZGl0LWZpZWxkIHRleHRhcmVhW2lkPVwiJHtmaWVsZE5hbWV9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBlbD8uZm9jdXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzRmllbGRFZGl0aW5nKGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmVkaXRpbmdGaWVsZCA9PT0gZmllbGROYW1lOyB9XG5cbiAgc2F2ZUlubGluZUZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzSW5saW5lRWRpdE1vZGUpIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZE5hbWUpO1xuICAgIGlmICghY29udHJvbCB8fCBjb250cm9sLmludmFsaWQpIHsgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpOyByZXR1cm47IH1cblxuICAgIHRoaXMuc2F2aW5nRmllbGQgPSB0cnVlO1xuICAgIGxldCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2xvb2t1cCcgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSB7IGlkOiB2YWx1ZSB9O1xuICAgIH1cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdkYXRlJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbHVlID0gYCR7dmFsdWUuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcodmFsdWUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyl9LSR7U3RyaW5nKHZhbHVlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIH1cbiAgICB0aGlzLmZpZWxkU2F2ZS5lbWl0KHsgZmllbGQ6IGZpZWxkTmFtZSwgdmFsdWUgfSk7XG4gIH1cblxuICBjYW5jZWxJbmxpbmVFZGl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW5saW5lRWRpdE1vZGUgJiYgdGhpcy5lZGl0aW5nRmllbGQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZWRpdGluZ0ZpZWxkKTtcbiAgICAgIGlmIChjb250cm9sICYmIHRoaXMuZW50aXR5RGF0YSkge1xuICAgICAgICBjb250cm9sLnNldFZhbHVlKHRoaXMuZW50aXR5RGF0YVt0aGlzLmVkaXRpbmdGaWVsZF0pO1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRpbmdGaWVsZCA9IG51bGw7XG4gICAgICB0aGlzLnNhdmluZ0ZpZWxkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVJbmxpbmVFZGl0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdGluZ0ZpZWxkID0gbnVsbDtcbiAgICB0aGlzLnNhdmluZ0ZpZWxkID0gZmFsc2U7XG4gIH1cblxuICAvLyAtLS0gRGlzcGxheSB2YWx1ZSBmb3IgaW5saW5lLWVkaXQgbW9kZSAtLS1cblxuICBnZXRGaWVsZERpc3BsYXlWYWx1ZShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmVudGl0eURhdGEpIHJldHVybiAnJztcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWxsRmllbGRzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBmaWVsZE5hbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbnRpdHlEYXRhW2ZpZWxkTmFtZV07XG4gICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09IDApIHJldHVybiAnJztcblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2xvb2t1cCcgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMubWFwKGYgPT4gdGhpcy5nZXROZXN0ZWRWYWx1ZSh2YWx1ZSwgZikpLmZpbHRlcih2ID0+IHYpLmpvaW4oJyAtICcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlW2ZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZCB8fCAnbmFtZSddIHx8ICcnO1xuICAgIH1cblxuICAgIGlmICgoZmllbGQ/LnR5cGUgPT09ICdkcm9wZG93bicgfHwgZmllbGQ/LnR5cGUgPT09ICdlbnVtJykgJiYgZmllbGQpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBmaWVsZC5vcHRpb25zIHx8IGZpZWxkLmVudW1PcHRpb25zIHx8IFtdO1xuICAgICAgY29uc3Qgb3B0VmFsID0gZmllbGQub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcbiAgICAgIGNvbnN0IG9wdExibCA9IGZpZWxkLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG4gICAgICBjb25zdCBtYXRjaCA9IG9wdHMuZmluZCgobzogYW55KSA9PiAodHlwZW9mIG8gPT09ICdvYmplY3QnID8gb1tvcHRWYWxdIDogbykgPT09IHZhbHVlKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHR5cGVvZiBtYXRjaCA9PT0gJ29iamVjdCcgPyBtYXRjaFtvcHRMYmxdIDogbWF0Y2g7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnY3VycmVuY3knICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG1vbmV5Q29uZmlnID0gdGhpcy5tYXNrU2VydmljZS5nZXRNb25leUNvbmZpZygpO1xuICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdChmaWVsZC5sb2NhbGUgfHwgbW9uZXlDb25maWcubG9jYWxlLCB7XG4gICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICBjdXJyZW5jeTogZmllbGQuY3VycmVuY3kgfHwgbW9uZXlDb25maWcuY3VycmVuY3lcbiAgICAgIH0pLmZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcbiAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBmaWVsZC5taW5GcmFjdGlvbkRpZ2l0cyB8fCAwLFxuICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGZpZWxkLm1heEZyYWN0aW9uRGlnaXRzIHx8IDJcbiAgICAgIH0pLmZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnZGF0ZScgJiYgdmFsdWUpIHJldHVybiB0aGlzLmxvY2FsZVNlcnZpY2UuZm9ybWF0RGF0ZSh2YWx1ZSk7XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0aW1lJyAmJiB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGAke1N0cmluZyh2YWx1ZS5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpfToke1N0cmluZyh2YWx1ZS5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUuc3Vic3RyaW5nKDAsIDUpIDogU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuYm9vbGVhbl90cnVlJylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmJvb2xlYW5fZmFsc2UnKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdtdWx0aXNlbGVjdCcgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBmaWVsZC5vcHRpb25zIHx8IGZpZWxkLmVudW1PcHRpb25zIHx8IFtdO1xuICAgICAgY29uc3Qgb3B0VmFsID0gZmllbGQub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcbiAgICAgIGNvbnN0IG9wdExibCA9IGZpZWxkLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4ge1xuICAgICAgICBjb25zdCBvID0gb3B0cy5maW5kKChvcHQ6IGFueSkgPT4gKHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gb3B0W29wdFZhbF0gOiBvcHQpID09PSB2KTtcbiAgICAgICAgcmV0dXJuIG8gPyAodHlwZW9mIG8gPT09ICdvYmplY3QnID8gb1tvcHRMYmxdIDogbykgOiB2O1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnZG9jdW1lbnQnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCB0eXBlUGVyc29uID0gdGhpcy5lbnRpdHlEYXRhW2ZpZWxkLm1hc2tEZXBlbmRzT24gfHwgJ3R5cGVQZXJzb24nXSB8fCAnSlVSSURJQ0FMX1BFUlNPTic7XG4gICAgICByZXR1cm4gdGhpcy5tYXNrU2VydmljZS5hcHBseURvY3VtZW50TWFzayhTdHJpbmcodmFsdWUpLCB0eXBlUGVyc29uKTtcbiAgICB9XG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAndGV4dCcgJiYgZmllbGQubWFzayA9PT0gJ2NwZicgJiYgdmFsdWUpIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5Q3BmTWFzayhTdHJpbmcodmFsdWUpKTtcbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnY25waicgJiYgdmFsdWUpIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5Q25wak1hc2soU3RyaW5nKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuIiwiPCEtLSBJbmxpbmUgTW9kZSAobm8gZGlzcGxheU1vZGUgc2V0KSAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0lubGluZU1vZGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPCEtLSBEaWFsb2cgTW9kZSAtLT5cbjxwLWRpYWxvZ1xuICAqbmdJZj1cImlzRGlhbG9nTW9kZVwiXG4gIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gIFtoZWFkZXJdPVwiZGlhbG9nSGVhZGVyIHwgdHJhbnNsYXRlXCJcbiAgW21vZGFsXT1cInRydWVcIlxuICBbc3R5bGVdPVwieyB3aWR0aDogZGlhbG9nV2lkdGggfVwiXG4gIFtkcmFnZ2FibGVdPVwiZGlhbG9nRHJhZ2dhYmxlXCJcbiAgW3Jlc2l6YWJsZV09XCJkaWFsb2dSZXNpemFibGVcIlxuICBbbWF4aW1pemFibGVdPVwiZGlhbG9nTWF4aW1pemFibGVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJkaWFsb2dDbG9zZU9uRXNjYXBlXCJcbiAgW2Rpc21pc3NhYmxlTWFza109XCJkaWFsb2dEaXNtaXNzYWJsZU1hc2tcIlxuICAob25IaWRlKT1cImNsb3NlKClcIj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCIgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uIHx8IHNob3dDYW5jZWxCdXR0b25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiIFtsYWJlbF09XCJjYW5jZWxMYWJlbCB8IHRyYW5zbGF0ZVwiIFtpY29uXT1cImNhbmNlbEJ1dHRvbkljb25cIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIChvbkNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvblwiIFtsYWJlbF09XCJzdWJtaXRMYWJlbCB8IHRyYW5zbGF0ZVwiIFtpY29uXT1cInN1Ym1pdEJ1dHRvbkljb25cIiAob25DbGljayk9XCJoYW5kbGVTdWJtaXQoKVwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG5cbjwhLS0gRHJhd2VyIE1vZGUgLS0+XG48cC1kcmF3ZXJcbiAgKm5nSWY9XCJpc0RyYXdlck1vZGVcIlxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBbaGVhZGVyXT1cImRyYXdlckhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gIFtwb3NpdGlvbl09XCJkcmF3ZXJQb3NpdGlvblwiXG4gIFtzdHlsZV09XCJkcmF3ZXJTdHlsZVwiXG4gIFtzaG93Q2xvc2VJY29uXT1cImRyYXdlclNob3dDbG9zZUljb25cIlxuICBbY2xvc2VPbkVzY2FwZV09XCJkcmF3ZXJDbG9zZU9uRXNjYXBlXCJcbiAgW21vZGFsXT1cImRyYXdlckRpc21pc3NhYmxlXCJcbiAgKG9uSGlkZSk9XCJjbG9zZSgpXCI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvbiB8fCBzaG93Q2FuY2VsQnV0dG9uXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1mb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dDYW5jZWxCdXR0b25cIiBbbGFiZWxdPVwiY2FuY2VsTGFiZWwgfCB0cmFuc2xhdGVcIiBbaWNvbl09XCJjYW5jZWxCdXR0b25JY29uXCIgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAob25DbGljayk9XCJoYW5kbGVDYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b25cIiBbbGFiZWxdPVwic3VibWl0TGFiZWwgfCB0cmFuc2xhdGVcIiBbaWNvbl09XCJzdWJtaXRCdXR0b25JY29uXCIgKG9uQ2xpY2spPVwiaGFuZGxlU3VibWl0KClcIiBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZHJhd2VyPlxuXG48IS0tIEZvcm0gQ29udGVudCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZm9ybUNvbnRlbnQ+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZHluYW1pYy1mb3JtXCIgKGtleWRvd24pPVwib25Gb3JtS2V5ZG93bigkZXZlbnQpXCIgKHN1Ym1pdCk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9uc1wiPlxuICAgICAgPCEtLSBObyB0aXRsZSA9IGJhcmUgZmllbGRzIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWN0aW9uLnRpdGxlXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBCb3JkZXJlZCBzZWN0aW9uIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInNlY3Rpb24udGl0bGUgJiYgZ2V0U2VjdGlvblN0eWxlKHNlY3Rpb24pID09PSAnYm9yZGVyZWQnXCIgY2xhc3M9XCJib3JkZXJlZC1zZWN0aW9uXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24taGVhZGluZ1wiPlxuICAgICAgICAgIDxpICpuZ0lmPVwic2VjdGlvbi5pY29uXCIgW2NsYXNzXT1cInNlY3Rpb24uaWNvbiArICcgc2VjdGlvbi1pY29uJ1wiPjwvaT5cbiAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQYW5lbCBzZWN0aW9uIC0tPlxuICAgICAgPHAtcGFuZWxcbiAgICAgICAgKm5nSWY9XCJzZWN0aW9uLnRpdGxlICYmIGdldFNlY3Rpb25TdHlsZShzZWN0aW9uKSA9PT0gJ3BhbmVsJ1wiXG4gICAgICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxuICAgICAgICBbY29sbGFwc2VkXT1cInNlY3Rpb24uY29sbGFwc2VkIHx8IGZhbHNlXCJcbiAgICAgICAgc3R5bGVDbGFzcz1cInNlY3Rpb24tcGFuZWxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWN0aW9uLmljb25cIiBbY2xhc3NdPVwic2VjdGlvbi5pY29uICsgJyBzZWN0aW9uLWljb24nXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+e3sgc2VjdGlvbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lRWRpdEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvcC1wYW5lbD5cblxuICAgICAgPCEtLSBIZWFkaW5nLW9ubHkgc2VjdGlvbiAodGl0bGUgcHJlc2VudCwgc3R5bGU9J25vbmUnIG9yIG9taXR0ZWQpIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInNlY3Rpb24udGl0bGUgJiYgZ2V0U2VjdGlvblN0eWxlKHNlY3Rpb24pID09PSAnbm9uZSdcIiBjbGFzcz1cImhlYWRpbmctc2VjdGlvblwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aSAqbmdJZj1cInNlY3Rpb24uaWNvblwiIFtjbGFzc109XCJzZWN0aW9uLmljb24gKyAnIHNlY3Rpb24taWNvbidcIj48L2k+XG4gICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEN1c3RvbSBjb250ZW50IHByb2plY3Rpb24gLS0+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlIGxldC1maWVsZD1cImZpZWxkXCI+XG4gIDxzaWEtZHluYW1pYy1maWVsZC10ZXh0ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3RleHQnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtdGV4dD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLXRleHRhcmVhICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3RleHRhcmVhJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLXRleHRhcmVhPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtbnVtYmVyICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ251bWJlcicgfHwgZmllbGQudHlwZSA9PT0gJ2N1cnJlbmN5J1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLW51bWJlcj5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWRhdGUgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZGF0ZSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1kYXRlPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtZGF0ZXRpbWUgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZGF0ZXRpbWUnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtZGF0ZXRpbWU+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1kcm9wZG93biAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdkcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ2VudW0nXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtZHJvcGRvd24+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1sb29rdXAgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnbG9va3VwJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWxvb2t1cD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLXRpbWUgKm5nSWY9XCJmaWVsZC50eXBlID09PSAndGltZSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC10aW1lPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtY2hlY2tib3ggKm5nSWY9XCJmaWVsZC50eXBlID09PSAnY2hlY2tib3gnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtY2hlY2tib3g+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1tdWx0aXNlbGVjdCAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdtdWx0aXNlbGVjdCdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1tdWx0aXNlbGVjdD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWltYWdlICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2ltYWdlJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWltYWdlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBJbmxpbmUgRWRpdCBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjaW5saW5lRWRpdEZpZWxkVGVtcGxhdGUgbGV0LWZpZWxkPVwiZmllbGRcIj5cbiAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj57eyBmaWVsZC5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1kaXNwbGF5XCIgKm5nSWY9XCIhaXNGaWVsZEVkaXRpbmcoZmllbGQuZmllbGQpXCIgKGNsaWNrKT1cInN0YXJ0RWRpdEZpZWxkKGZpZWxkLmZpZWxkKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS12YWx1ZVwiIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXIgfHwgKCdkZXNpZ24uY29tcG9uZW50c19haS5ub3RfaW5mb3JtZWQnIHwgdHJhbnNsYXRlKVwiPnt7IGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkLmZpZWxkKSB9fTwvc3Bhbj5cbiAgICA8aSBjbGFzcz1cInBpIHBpLXBlbmNpbCBlZGl0LWljb25cIiAqbmdJZj1cIiFmaWVsZC5kaXNhYmxlZFwiPjwvaT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1lZGl0XCIgKm5nSWY9XCJpc0ZpZWxkRWRpdGluZyhmaWVsZC5maWVsZClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LWFjdGlvbnNcIj5cbiAgICAgIDxwLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWNoZWNrXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIFt0ZXh0XT1cInRydWVcIiBzZXZlcml0eT1cInN1Y2Nlc3NcIiAob25DbGljayk9XCJzYXZlSW5saW5lRmllbGQoZmllbGQuZmllbGQpXCIgW2xvYWRpbmddPVwic2F2aW5nRmllbGRcIiBbZGlzYWJsZWRdPVwiZm9ybS5nZXQoZmllbGQuZmllbGQpPy5pbnZhbGlkXCIgc2l6ZT1cInNtYWxsXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIFt0ZXh0XT1cInRydWVcIiBzZXZlcml0eT1cImRhbmdlclwiIChvbkNsaWNrKT1cImNhbmNlbElubGluZUVkaXQoKVwiIFtkaXNhYmxlZF09XCJzYXZpbmdGaWVsZFwiIHNpemU9XCJzbWFsbFwiPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==