@seniorsistemas/angular-components 19.6.1 → 19.6.2

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.
@@ -398,13 +398,27 @@ export class SpotlightOverlayComponent {
398
398
  ? 'left'
399
399
  : 'right';
400
400
  }
401
- ref.setInput('position', `${dir}-center`);
402
- const tgtCX = rect.left + rect.width / 2;
403
- const tgtCY = rect.top + rect.height / 2;
404
- const offset = dir === 'top' || dir === 'bottom'
405
- ? tgtCX - pane.left - ARROW_HALF_SIZE
406
- : tgtCY - pane.top - ARROW_HALF_SIZE;
407
- ref.setInput('arrowOffsetPx', Math.max(ARROW_OFFSET_MIN, Math.min(ARROW_OFFSET_MAX, offset)));
401
+ const requestedAlignment = (this.currentStep()?.position ?? 'bottom-center').split('-')[1];
402
+ ref.setInput('position', `${dir}-${requestedAlignment}`);
403
+ const ARROW_MARGIN = 12;
404
+ let offset;
405
+ if (requestedAlignment === 'start') {
406
+ offset = ARROW_MARGIN;
407
+ }
408
+ else if (requestedAlignment === 'end') {
409
+ const isVerticalArrow = dir === 'left' || dir === 'right';
410
+ // SVG height in flex-col layout = 8px; SVG width in flex-row layout = 16px
411
+ offset = isVerticalArrow ? pane.height - ARROW_MARGIN - 8 : pane.width - ARROW_MARGIN - 16;
412
+ }
413
+ else {
414
+ const tgtX = rect.left + rect.width / 2;
415
+ const tgtY = rect.top + rect.height / 2;
416
+ const rawOffset = dir === 'top' || dir === 'bottom'
417
+ ? tgtX - pane.left - ARROW_HALF_SIZE
418
+ : tgtY - pane.top - ARROW_HALF_SIZE;
419
+ offset = Math.max(ARROW_OFFSET_MIN, Math.min(ARROW_OFFSET_MAX, rawOffset));
420
+ }
421
+ ref.setInput('arrowOffsetPx', offset);
408
422
  }
409
423
  destroyPopoverOverlay() {
410
424
  this.popoverSubs.forEach((s) => s.unsubscribe());
@@ -457,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
457
471
  type: Component,
458
472
  args: [{ selector: 's-spotlight-overlay', standalone: true, imports: [NgStyle], template: "@if (isActive() && currentStep(); as step) {\n @if (step.showBackdrop !== false) {\n <div\n [ngStyle]=\"topMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n\n @if (targetRect()) {\n <div\n [ngStyle]=\"leftMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"rightMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"bottomMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n\n @if (step.showBackdrop === false) {\n @if (step.dismissible === false) {\n <div [ngStyle]=\"transparentBlockerStyle()\"></div>\n } @else {\n <div\n [ngStyle]=\"transparentBlockerStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n}\n\n" }]
459
473
  }], ctorParameters: () => [] });
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Nwb3RsaWdodC9zcmMvbGliL3Nwb3RsaWdodC9zcG90bGlnaHQtb3ZlcmxheS9zcG90bGlnaHQtb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3BvdGxpZ2h0L3NyYy9saWIvc3BvdGxpZ2h0L3Nwb3RsaWdodC1vdmVybGF5L3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0gsU0FBUyxFQUVULFFBQVEsRUFDUixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixNQUFNLEVBR04sTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQXFCLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBSWpFLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztBQUNsQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQzFCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUUxQixTQUFTLG9CQUFvQixDQUFDLFFBQTJCO0lBQ3JELE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxNQUFNLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsU0FBdUMsQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBZ0QsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2pILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUM7SUFFaEQsSUFBSSxPQUEwQixDQUFDO0lBQy9CLElBQUksUUFBMkIsQ0FBQztJQUVoQyxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssS0FBSztZQUNOLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTTtRQUNWLEtBQUssT0FBTztZQUNSLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQy9GLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTTtRQUNWLEtBQUssTUFBTTtZQUNQLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEcsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEcsTUFBTTtRQUNWLFNBQVMsV0FBVztZQUNoQixPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoRyxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFHLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTztRQUNQ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LENBQUMsRUFBZTtRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQzt3R0F2ZFEseUJBQXlCOzRGQUF6Qix5QkFBeUIsK0VDOUV0QyxvOEJBbUNBLDRDRHlDYyxPQUFPOzs0RkFFUix5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0kscUJBQXFCLGNBRW5CLElBQUksV0FDUCxDQUFDLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBpbmplY3QsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9jdXNUcmFwLCBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNwb3RsaWdodENvbXBvbmVudCB9IGZyb20gJy4uL3Nwb3RsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3BvdGxpZ2h0VG91clNlcnZpY2UgfSBmcm9tICcuLi9zcG90bGlnaHQtdG91ci5zZXJ2aWNlJztcbmltcG9ydCB7IFNwb3RsaWdodFBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMvc3BvdGxpZ2h0LXBvc2l0aW9uJztcbmltcG9ydCB7IFNwb3RsaWdodFN0ZXAgfSBmcm9tICcuLi90eXBlcy9zcG90bGlnaHQtc3RlcCc7XG5cbmNvbnN0IFBPUE9WRVJfV0lEVEggPSAzNDI7XG5jb25zdCBTUE9UTElHSFRfUEFERElORyA9IDg7XG5jb25zdCBBUlJPV19IQUxGX1NJWkUgPSA4O1xuY29uc3QgQVJST1dfT0ZGU0VUX01JTiA9IDQ7XG5jb25zdCBBUlJPV19PRkZTRVRfTUFYID0gUE9QT1ZFUl9XSURUSCAtIDQgLSAxNjtcbmNvbnN0IE1BU0tfQkcgPSAncmdiYSgwLDAsMCwwLjUpJztcbmNvbnN0IE1BU0tfVFJBTlNJVElPTiA9ICdhbGwgMC4ycyBlYXNlJztcbmNvbnN0IE9WRVJMQVlfWiA9ICcxMDAwMCc7XG5jb25zdCBQT1BPVkVSX1ogPSAnMTAwMDEnO1xuXG5mdW5jdGlvbiB0b0Nvbm5lY3RlZFBvc2l0aW9ucyhwb3NpdGlvbjogU3BvdGxpZ2h0UG9zaXRpb24pOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcbiAgICBjb25zdCBbZGlyZWN0aW9uLCBhbGlnbm1lbnRdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwID0gU1BPVExJR0hUX1BBRERJTkcgKyAyO1xuICAgIGNvbnN0IGhBbGlnbiA9IGFsaWdubWVudCBhcyAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgICBjb25zdCB2QWxpZ25NYXA6IFJlY29yZDxzdHJpbmcsICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJz4gPSB7IHN0YXJ0OiAndG9wJywgY2VudGVyOiAnY2VudGVyJywgZW5kOiAnYm90dG9tJyB9O1xuICAgIGNvbnN0IHZBbGlnbiA9IHZBbGlnbk1hcFthbGlnbm1lbnRdID8/ICdjZW50ZXInO1xuXG4gICAgbGV0IHByaW1hcnk6IENvbm5lY3RlZFBvc2l0aW9uO1xuICAgIGxldCBvcHBvc2l0ZTogQ29ubmVjdGVkUG9zaXRpb247XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgcHJpbWFyeSA9IHsgb3JpZ2luWDogaEFsaWduLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6IGhBbGlnbiwgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAtcCB9O1xuICAgICAgICAgICAgb3Bwb3NpdGUgPSB7IG9yaWdpblg6IGhBbGlnbiwgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiBoQWxpZ24sIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogcCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHByaW1hcnkgPSB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiB2QWxpZ24sIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogdkFsaWduLCBvZmZzZXRYOiBwIH07XG4gICAgICAgICAgICBvcHBvc2l0ZSA9IHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogdkFsaWduLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiB2QWxpZ24sIG9mZnNldFg6IC1wIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICBwcmltYXJ5ID0geyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiB2QWxpZ24sIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6IHZBbGlnbiwgb2Zmc2V0WDogLXAgfTtcbiAgICAgICAgICAgIG9wcG9zaXRlID0geyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogdkFsaWduLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6IHZBbGlnbiwgb2Zmc2V0WDogcCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vICdib3R0b20nXG4gICAgICAgICAgICBwcmltYXJ5ID0geyBvcmlnaW5YOiBoQWxpZ24sIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogaEFsaWduLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IHAgfTtcbiAgICAgICAgICAgIG9wcG9zaXRlID0geyBvcmlnaW5YOiBoQWxpZ24sIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogaEFsaWduLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgb3Bwb3NpdGUsXG4gICAgICAgIHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogcCB9LFxuICAgICAgICB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiBwIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiAtcCB9LFxuICAgIF07XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zcG90bGlnaHQtb3ZlcmxheScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ1N0eWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3BvdGxpZ2h0T3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0KFNwb3RsaWdodFRvdXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZGtPdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzVHJhcEZhY3RvcnkgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgaXNBY3RpdmUgPSB0aGlzLnRvdXJTZXJ2aWNlLmlzQWN0aXZlO1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSBjdXJyZW50U3RlcCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudFN0ZXA7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlYWRvbmx5IGN1cnJlbnRJbmRleCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudEluZGV4O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSB0b3RhbFN0ZXBzID0gdGhpcy50b3VyU2VydmljZS50b3RhbFN0ZXBzO1xuXG4gICAgLyoqIEBpbnRlcm5hbCovXG4gICAgcmVhZG9ubHkgdGFyZ2V0UmVjdCA9IHNpZ25hbDxET01SZWN0IHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgdG9wTWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy50YXJnZXRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGJvdHRvbTogJzAnIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9wID0gTWF0aC5tYXgoMCwgcmVjdC50b3AgLSBTUE9UTElHSFRfUEFERElORyk7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGhlaWdodDogYCR7dG9wfXB4YCB9O1xuICAgIH0pO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlYWRvbmx5IGxlZnRNYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IFNQT1RMSUdIVF9QQURESU5HO1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLm1heCgwLCByZWN0LnRvcCAtIHApO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgcCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCgwLCByZWN0LmxlZnQgLSBwKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICAnei1pbmRleCc6IE9WRVJMQVlfWixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IE1BU0tfQkcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBNQVNLX1RSQU5TSVRJT04sXG4gICAgICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgICAgIHdpZHRoOiBgJHtsZWZ0fXB4YCxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSByaWdodE1hc2tTdHlsZSA9IGNvbXB1dGVkPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0UmVjdCgpO1xuXG4gICAgICAgIGlmICghcmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwID0gU1BPVExJR0hUX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHJlY3QudG9wIC0gcCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCwgcmVjdC5ib3R0b20gKyBwKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCwgcmVjdC5yaWdodCArIHApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICAgICAgbGVmdDogYCR7cmlnaHR9cHhgLFxuICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSBib3R0b21NYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IFNQT1RMSUdIVF9QQURESU5HO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgcCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgICAgJ3otaW5kZXgnOiBPVkVSTEFZX1osXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBNQVNLX0JHLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogTUFTS19UUkFOU0lUSU9OLFxuICAgICAgICAgICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0b3A6IGAke2JvdHRvbX1weGAsXG4gICAgICAgICAgICBsZWZ0OiAnMCcsXG4gICAgICAgICAgICByaWdodDogJzAnLFxuICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgdHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICB9KSk7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcG9wb3Zlck92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvcG92ZXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxTcG90bGlnaHRDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwb3BvdmVyU3ViczogQXJyYXk8eyB1bnN1YnNjcmliZSgpOiB2b2lkIH0+ID0gW107XG4gICAgcHJpdmF0ZSBmb2N1c1RyYXA6IEZvY3VzVHJhcCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuY3VycmVudFN0ZXApLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXNBY3RpdmUpLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMudG91clNlcnZpY2UucmVnaXN0cmF0aW9uVmVyc2lvbiksXG4gICAgICAgIF0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtzdGVwLCBhY3RpdmVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTtcblxuICAgICAgICAgICAgICAgIGlmICghc3RlcCB8fCAhYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMudG91clNlcnZpY2UuZ2V0RWxlbWVudChzdGVwLnN0ZXBJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGVsLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlRWxlbWVudCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJPdmVybGF5KHRhcmdldCwgc3RlcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRSZWN0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheShudWxsLCBzdGVwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbE9wdHMgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucztcblxuICAgICAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgc2Nyb2xsT3B0cylcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnLCB7IHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucylcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25EaXNtaXNzKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbk5leHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvblByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnByZXZpb3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbkRpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwKCk7XG5cbiAgICAgICAgaWYgKCFzdGVwIHx8IHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnN0b3Aoe1xuICAgICAgICAgICAgcmVhc29uOiB0aGlzLnRvdGFsU3RlcHMoKSA9PT0gMSA/ICdkaXNtaXNzZWQnIDogJ2ludGVycnVwdGVkJyxcbiAgICAgICAgICAgIGRvTm90U2hvd0FnYWluOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVyT3ZlcmxheSh0YXJnZXRFbDogSFRNTEVsZW1lbnQgfCBudWxsLCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGFyZ2V0RWxcbiAgICAgICAgICAgID8gdGhpcy5jZGtPdmVybGF5XG4gICAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGFyZ2V0RWwpXG4gICAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyh0b0Nvbm5lY3RlZFBvc2l0aW9ucyhzdGVwLnBvc2l0aW9uID8/ICdib3R0b20tY2VudGVyJykpXG4gICAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKVxuICAgICAgICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KVxuICAgICAgICAgICAgOiB0aGlzLmNka092ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmID0gdGhpcy5jZGtPdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0YXJnZXRFbFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICAgICAgICB3aWR0aDogUE9QT1ZFUl9XSURUSCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldFBvcG92ZXJaSW5kZXgoKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoUG9wb3ZlclBvcnRhbChzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneSk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJJbnB1dHMoc3RlcCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlU3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvY3VzVHJhcFJlZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UG9wb3ZlclpJbmRleCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLnpJbmRleCA9IFBPUE9WRVJfWjtcblxuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi5ob3N0RWxlbWVudDtcblxuICAgICAgICBpZiAoaG9zdCAhPT0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCkge1xuICAgICAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSBQT1BPVkVSX1o7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dGFjaFBvcG92ZXJQb3J0YWwoc3RlcDogU3BvdGxpZ2h0U3RlcCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChTcG90bGlnaHRDb21wb25lbnQsIG51bGwsIHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IHRoaXMucG9wb3Zlck92ZXJsYXlSZWYhLmF0dGFjaChwb3J0YWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJJbnB1dHMoc3RlcCk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudG90YWxTdGVwcygpID4gMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVRvdXJNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BvdmVyU3Vicy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmluc3RhbmNlLm5leHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb05vdFNob3dBZ2FpbiA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZj8uaW5zdGFuY2UuaXNEb05vdFNob3dBZ2FpbkNoZWNrZWQoKSA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoZG9Ob3RTaG93QWdhaW4pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UucHJldmlvdXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKSksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7XG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICAgICAgICAgICAgICAgIGRvTm90U2hvd0FnYWluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UudW5kZXJzdGFuZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvTm90U2hvd0FnYWluID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmPy5pbnN0YW5jZS5pc0RvTm90U2hvd0FnYWluQ2hlY2tlZCgpID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7IHJlYXNvbjogJ2NvbXBsZXRlZCcsIGRvTm90U2hvd0FnYWluIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXA6IFNwb3RsaWdodFN0ZXAgJiB7IHNob3dEb05vdFNob3dBZ2Fpbj86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWY7XG5cbiAgICAgICAgaWYgKCFyZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZi5zZXRJbnB1dCgndGl0bGUnLCBzdGVwLnRpdGxlKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdtZXNzYWdlJywgc3RlcC5tZXNzYWdlKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdwb3NpdGlvbicsIHN0ZXAucG9zaXRpb24gPz8gJ2JvdHRvbS1jZW50ZXInKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdjdXJyZW50U3RlcCcsIHRoaXMuY3VycmVudEluZGV4KCkgKyAxKTtcbiAgICAgICAgcmVmLnNldElucHV0KCd0b3RhbFN0ZXBzJywgdGhpcy50b3RhbFN0ZXBzKCkpO1xuICAgICAgICByZWYuc2V0SW5wdXQoJ2NvbnRlbnQnLCBzdGVwLmNvbnRlbnQgPz8gbnVsbCk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYWN0aW9ucycsIHN0ZXAuYWN0aW9ucyA/PyBbXSk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnc2hvd0RvTm90U2hvd0FnYWluJywgc3RlcC5zaG93RG9Ob3RTaG93QWdhaW4gPz8gdHJ1ZSk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NoZWR1bGVTeW5jKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zeW5jRGlyZWN0aW9uQW5kQXJyb3coKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFjdGl2YXRlVG91ck1vZGUoKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVFbCA9IHRoaXMucG9wb3Zlck92ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFuZUVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUocGFuZUVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIGEgc3RlcCBjaGFuZ2UsIG1vdmVzIGZvY3VzIGJhY2sgdG8gdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQgaW5zaWRlIHRoZVxuICAgICAqIHBvcG92ZXIgc28gdGhlIHVzZXIgZG9lcyBub3QgbG9zZSBrZXlib2FyZCBwb3NpdGlvbi5cbiAgICAgKiBOby1vcCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBmb2N1cyB0cmFwIChzaW1wbGUgc3BvdGxpZ2h0IG1vZGUpLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2NoZWR1bGVGb2N1c1RyYXBSZWZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSByZXR1cm47XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c1RyYXA/LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jRGlyZWN0aW9uQW5kQXJyb3coKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZjtcbiAgICAgICAgY29uc3QgcGFuZUVsID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlZiB8fCAhcGFuZUVsIHx8ICFyZWN0KSB7XG4gICAgICAgICAgICByZWY/LnNldElucHV0KCdhcnJvd09mZnNldFB4JywgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYW5lID0gcGFuZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0b2wgPSBTUE9UTElHSFRfUEFERElORyArIDQ7XG5cbiAgICAgICAgbGV0IGRpcjogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG5cbiAgICAgICAgaWYgKHBhbmUudG9wID49IHJlY3QuYm90dG9tIC0gdG9sKSB7XG4gICAgICAgICAgICBkaXIgPSAnYm90dG9tJztcbiAgICAgICAgfSBlbHNlIGlmIChwYW5lLmJvdHRvbSA8PSByZWN0LnRvcCArIHRvbCkge1xuICAgICAgICAgICAgZGlyID0gJ3RvcCc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZS5sZWZ0ID49IHJlY3QucmlnaHQgLSB0b2wpIHtcbiAgICAgICAgICAgIGRpciA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZS5yaWdodCA8PSByZWN0LmxlZnQgKyB0b2wpIHtcbiAgICAgICAgICAgIGRpciA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMocGFuZS50b3AgKyBwYW5lLmhlaWdodCAvIDIgLSAocmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDIpKTtcbiAgICAgICAgICAgIGNvbnN0IGR4ID0gTWF0aC5hYnMocGFuZS5sZWZ0ICsgcGFuZS53aWR0aCAvIDIgLSAocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIpKTtcbiAgICAgICAgICAgIGRpciA9XG4gICAgICAgICAgICAgICAgZHkgPj0gZHhcbiAgICAgICAgICAgICAgICAgICAgPyBwYW5lLnRvcCArIHBhbmUuaGVpZ2h0IC8gMiA8IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0b3AnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20nXG4gICAgICAgICAgICAgICAgICAgIDogcGFuZS5sZWZ0ICsgcGFuZS53aWR0aCAvIDIgPCByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMlxuICAgICAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAncmlnaHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVmLnNldElucHV0KCdwb3NpdGlvbicsIGAke2Rpcn0tY2VudGVyYCBhcyBTcG90bGlnaHRQb3NpdGlvbik7XG5cbiAgICAgICAgY29uc3QgdGd0Q1ggPSByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgdGd0Q1kgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgICAgICAgIGRpciA9PT0gJ3RvcCcgfHwgZGlyID09PSAnYm90dG9tJ1xuICAgICAgICAgICAgICAgID8gdGd0Q1ggLSBwYW5lLmxlZnQgLSBBUlJPV19IQUxGX1NJWkVcbiAgICAgICAgICAgICAgICA6IHRndENZIC0gcGFuZS50b3AgLSBBUlJPV19IQUxGX1NJWkU7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIE1hdGgubWF4KEFSUk9XX09GRlNFVF9NSU4sIE1hdGgubWluKEFSUk9XX09GRlNFVF9NQVgsIG9mZnNldCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyU3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnBvcG92ZXJTdWJzID0gW107XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUYXJnZXRSZWN0KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhcmdldFJlY3Quc2V0KGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hSZWN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuXG4gICAgICAgIGlmICghc3RlcCB8fCAhdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuXG4gICAgICAgIGlmIChlbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUYXJnZXRSZWN0KGVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZlRWxlbWVudChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudXBkYXRlVGFyZ2V0UmVjdChlbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIkBpZiAoaXNBY3RpdmUoKSAmJiBjdXJyZW50U3RlcCgpOyBhcyBzdGVwKSB7XG4gICAgQGlmIChzdGVwLnNob3dCYWNrZHJvcCAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nU3R5bGVdPVwidG9wTWFza1N0eWxlKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgIEBpZiAodGFyZ2V0UmVjdCgpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwibGVmdE1hc2tTdHlsZSgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EaXNtaXNzKClcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJpZ2h0TWFza1N0eWxlKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiYm90dG9tTWFza1N0eWxlKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHN0ZXAuc2hvd0JhY2tkcm9wID09PSBmYWxzZSkge1xuICAgICAgICBAaWYgKHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInRyYW5zcGFyZW50QmxvY2tlclN0eWxlKClcIj48L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwidHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Nwb3RsaWdodC9zcmMvbGliL3Nwb3RsaWdodC9zcG90bGlnaHQtb3ZlcmxheS9zcG90bGlnaHQtb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3BvdGxpZ2h0L3NyYy9saWIvc3BvdGxpZ2h0L3Nwb3RsaWdodC1vdmVybGF5L3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0gsU0FBUyxFQUVULFFBQVEsRUFDUixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixNQUFNLEVBR04sTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQXFCLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBSWpFLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztBQUNsQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQzFCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUUxQixTQUFTLG9CQUFvQixDQUFDLFFBQTJCO0lBQ3JELE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxNQUFNLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsU0FBdUMsQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBZ0QsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2pILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUM7SUFFaEQsSUFBSSxPQUEwQixDQUFDO0lBQy9CLElBQUksUUFBMkIsQ0FBQztJQUVoQyxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssS0FBSztZQUNOLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTTtRQUNWLEtBQUssT0FBTztZQUNSLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQy9GLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTTtRQUNWLEtBQUssTUFBTTtZQUNQLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEcsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEcsTUFBTTtRQUNWLFNBQVMsV0FBVztZQUNoQixPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoRyxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFHLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTztRQUNQ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QUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQzt3R0FyZVEseUJBQXlCOzRGQUF6Qix5QkFBeUIsK0VDOUV0QyxvOEJBbUNBLDRDRHlDYyxPQUFPOzs0RkFFUix5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0kscUJBQXFCLGNBRW5CLElBQUksV0FDUCxDQUFDLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBpbmplY3QsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9jdXNUcmFwLCBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNwb3RsaWdodENvbXBvbmVudCB9IGZyb20gJy4uL3Nwb3RsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3BvdGxpZ2h0VG91clNlcnZpY2UgfSBmcm9tICcuLi9zcG90bGlnaHQtdG91ci5zZXJ2aWNlJztcbmltcG9ydCB7IFNwb3RsaWdodFBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMvc3BvdGxpZ2h0LXBvc2l0aW9uJztcbmltcG9ydCB7IFNwb3RsaWdodFN0ZXAgfSBmcm9tICcuLi90eXBlcy9zcG90bGlnaHQtc3RlcCc7XG5cbmNvbnN0IFBPUE9WRVJfV0lEVEggPSAzNDI7XG5jb25zdCBTUE9UTElHSFRfUEFERElORyA9IDg7XG5jb25zdCBBUlJPV19IQUxGX1NJWkUgPSA4O1xuY29uc3QgQVJST1dfT0ZGU0VUX01JTiA9IDQ7XG5jb25zdCBBUlJPV19PRkZTRVRfTUFYID0gUE9QT1ZFUl9XSURUSCAtIDQgLSAxNjtcbmNvbnN0IE1BU0tfQkcgPSAncmdiYSgwLDAsMCwwLjUpJztcbmNvbnN0IE1BU0tfVFJBTlNJVElPTiA9ICdhbGwgMC4ycyBlYXNlJztcbmNvbnN0IE9WRVJMQVlfWiA9ICcxMDAwMCc7XG5jb25zdCBQT1BPVkVSX1ogPSAnMTAwMDEnO1xuXG5mdW5jdGlvbiB0b0Nvbm5lY3RlZFBvc2l0aW9ucyhwb3NpdGlvbjogU3BvdGxpZ2h0UG9zaXRpb24pOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcbiAgICBjb25zdCBbZGlyZWN0aW9uLCBhbGlnbm1lbnRdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwID0gU1BPVExJR0hUX1BBRERJTkcgKyAyO1xuICAgIGNvbnN0IGhBbGlnbiA9IGFsaWdubWVudCBhcyAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgICBjb25zdCB2QWxpZ25NYXA6IFJlY29yZDxzdHJpbmcsICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJz4gPSB7IHN0YXJ0OiAndG9wJywgY2VudGVyOiAnY2VudGVyJywgZW5kOiAnYm90dG9tJyB9O1xuICAgIGNvbnN0IHZBbGlnbiA9IHZBbGlnbk1hcFthbGlnbm1lbnRdID8/ICdjZW50ZXInO1xuXG4gICAgbGV0IHByaW1hcnk6IENvbm5lY3RlZFBvc2l0aW9uO1xuICAgIGxldCBvcHBvc2l0ZTogQ29ubmVjdGVkUG9zaXRpb247XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgcHJpbWFyeSA9IHsgb3JpZ2luWDogaEFsaWduLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6IGhBbGlnbiwgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAtcCB9O1xuICAgICAgICAgICAgb3Bwb3NpdGUgPSB7IG9yaWdpblg6IGhBbGlnbiwgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiBoQWxpZ24sIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogcCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHByaW1hcnkgPSB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiB2QWxpZ24sIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogdkFsaWduLCBvZmZzZXRYOiBwIH07XG4gICAgICAgICAgICBvcHBvc2l0ZSA9IHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogdkFsaWduLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiB2QWxpZ24sIG9mZnNldFg6IC1wIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICBwcmltYXJ5ID0geyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiB2QWxpZ24sIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6IHZBbGlnbiwgb2Zmc2V0WDogLXAgfTtcbiAgICAgICAgICAgIG9wcG9zaXRlID0geyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogdkFsaWduLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6IHZBbGlnbiwgb2Zmc2V0WDogcCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vICdib3R0b20nXG4gICAgICAgICAgICBwcmltYXJ5ID0geyBvcmlnaW5YOiBoQWxpZ24sIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogaEFsaWduLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IHAgfTtcbiAgICAgICAgICAgIG9wcG9zaXRlID0geyBvcmlnaW5YOiBoQWxpZ24sIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogaEFsaWduLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgb3Bwb3NpdGUsXG4gICAgICAgIHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogcCB9LFxuICAgICAgICB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiBwIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiAtcCB9LFxuICAgIF07XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zcG90bGlnaHQtb3ZlcmxheScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ1N0eWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3BvdGxpZ2h0T3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0KFNwb3RsaWdodFRvdXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZGtPdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzVHJhcEZhY3RvcnkgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgaXNBY3RpdmUgPSB0aGlzLnRvdXJTZXJ2aWNlLmlzQWN0aXZlO1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSBjdXJyZW50U3RlcCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudFN0ZXA7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlYWRvbmx5IGN1cnJlbnRJbmRleCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudEluZGV4O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSB0b3RhbFN0ZXBzID0gdGhpcy50b3VyU2VydmljZS50b3RhbFN0ZXBzO1xuXG4gICAgLyoqIEBpbnRlcm5hbCovXG4gICAgcmVhZG9ubHkgdGFyZ2V0UmVjdCA9IHNpZ25hbDxET01SZWN0IHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgdG9wTWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy50YXJnZXRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGJvdHRvbTogJzAnIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9wID0gTWF0aC5tYXgoMCwgcmVjdC50b3AgLSBTUE9UTElHSFRfUEFERElORyk7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGhlaWdodDogYCR7dG9wfXB4YCB9O1xuICAgIH0pO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlYWRvbmx5IGxlZnRNYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IFNQT1RMSUdIVF9QQURESU5HO1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLm1heCgwLCByZWN0LnRvcCAtIHApO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgcCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCgwLCByZWN0LmxlZnQgLSBwKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICAnei1pbmRleCc6IE9WRVJMQVlfWixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IE1BU0tfQkcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBNQVNLX1RSQU5TSVRJT04sXG4gICAgICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgICAgIHdpZHRoOiBgJHtsZWZ0fXB4YCxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSByaWdodE1hc2tTdHlsZSA9IGNvbXB1dGVkPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0UmVjdCgpO1xuXG4gICAgICAgIGlmICghcmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwID0gU1BPVExJR0hUX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHJlY3QudG9wIC0gcCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCwgcmVjdC5ib3R0b20gKyBwKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCwgcmVjdC5yaWdodCArIHApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICAgICAgbGVmdDogYCR7cmlnaHR9cHhgLFxuICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSBib3R0b21NYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IFNQT1RMSUdIVF9QQURESU5HO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgcCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgICAgJ3otaW5kZXgnOiBPVkVSTEFZX1osXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBNQVNLX0JHLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogTUFTS19UUkFOU0lUSU9OLFxuICAgICAgICAgICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0b3A6IGAke2JvdHRvbX1weGAsXG4gICAgICAgICAgICBsZWZ0OiAnMCcsXG4gICAgICAgICAgICByaWdodDogJzAnLFxuICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgdHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICB9KSk7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcG9wb3Zlck92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvcG92ZXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxTcG90bGlnaHRDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwb3BvdmVyU3ViczogQXJyYXk8eyB1bnN1YnNjcmliZSgpOiB2b2lkIH0+ID0gW107XG4gICAgcHJpdmF0ZSBmb2N1c1RyYXA6IEZvY3VzVHJhcCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuY3VycmVudFN0ZXApLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXNBY3RpdmUpLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMudG91clNlcnZpY2UucmVnaXN0cmF0aW9uVmVyc2lvbiksXG4gICAgICAgIF0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtzdGVwLCBhY3RpdmVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTtcblxuICAgICAgICAgICAgICAgIGlmICghc3RlcCB8fCAhYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMudG91clNlcnZpY2UuZ2V0RWxlbWVudChzdGVwLnN0ZXBJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGVsLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlRWxlbWVudCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJPdmVybGF5KHRhcmdldCwgc3RlcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRSZWN0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheShudWxsLCBzdGVwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbE9wdHMgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucztcblxuICAgICAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgc2Nyb2xsT3B0cylcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnLCB7IHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucylcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25EaXNtaXNzKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbk5leHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvblByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnByZXZpb3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbkRpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwKCk7XG5cbiAgICAgICAgaWYgKCFzdGVwIHx8IHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnN0b3Aoe1xuICAgICAgICAgICAgcmVhc29uOiB0aGlzLnRvdGFsU3RlcHMoKSA9PT0gMSA/ICdkaXNtaXNzZWQnIDogJ2ludGVycnVwdGVkJyxcbiAgICAgICAgICAgIGRvTm90U2hvd0FnYWluOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVyT3ZlcmxheSh0YXJnZXRFbDogSFRNTEVsZW1lbnQgfCBudWxsLCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGFyZ2V0RWxcbiAgICAgICAgICAgID8gdGhpcy5jZGtPdmVybGF5XG4gICAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGFyZ2V0RWwpXG4gICAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyh0b0Nvbm5lY3RlZFBvc2l0aW9ucyhzdGVwLnBvc2l0aW9uID8/ICdib3R0b20tY2VudGVyJykpXG4gICAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKVxuICAgICAgICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KVxuICAgICAgICAgICAgOiB0aGlzLmNka092ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmID0gdGhpcy5jZGtPdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0YXJnZXRFbFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICAgICAgICB3aWR0aDogUE9QT1ZFUl9XSURUSCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldFBvcG92ZXJaSW5kZXgoKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoUG9wb3ZlclBvcnRhbChzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneSk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJJbnB1dHMoc3RlcCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlU3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvY3VzVHJhcFJlZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UG9wb3ZlclpJbmRleCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLnpJbmRleCA9IFBPUE9WRVJfWjtcblxuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi5ob3N0RWxlbWVudDtcblxuICAgICAgICBpZiAoaG9zdCAhPT0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCkge1xuICAgICAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSBQT1BPVkVSX1o7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dGFjaFBvcG92ZXJQb3J0YWwoc3RlcDogU3BvdGxpZ2h0U3RlcCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChTcG90bGlnaHRDb21wb25lbnQsIG51bGwsIHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IHRoaXMucG9wb3Zlck92ZXJsYXlSZWYhLmF0dGFjaChwb3J0YWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJJbnB1dHMoc3RlcCk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudG90YWxTdGVwcygpID4gMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVRvdXJNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BvdmVyU3Vicy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmluc3RhbmNlLm5leHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb05vdFNob3dBZ2FpbiA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZj8uaW5zdGFuY2UuaXNEb05vdFNob3dBZ2FpbkNoZWNrZWQoKSA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoZG9Ob3RTaG93QWdhaW4pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UucHJldmlvdXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKSksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7XG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICAgICAgICAgICAgICAgIGRvTm90U2hvd0FnYWluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UudW5kZXJzdGFuZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvTm90U2hvd0FnYWluID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmPy5pbnN0YW5jZS5pc0RvTm90U2hvd0FnYWluQ2hlY2tlZCgpID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7IHJlYXNvbjogJ2NvbXBsZXRlZCcsIGRvTm90U2hvd0FnYWluIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXA6IFNwb3RsaWdodFN0ZXAgJiB7IHNob3dEb05vdFNob3dBZ2Fpbj86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWY7XG5cbiAgICAgICAgaWYgKCFyZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZi5zZXRJbnB1dCgndGl0bGUnLCBzdGVwLnRpdGxlKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdtZXNzYWdlJywgc3RlcC5tZXNzYWdlKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdwb3NpdGlvbicsIHN0ZXAucG9zaXRpb24gPz8gJ2JvdHRvbS1jZW50ZXInKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdjdXJyZW50U3RlcCcsIHRoaXMuY3VycmVudEluZGV4KCkgKyAxKTtcbiAgICAgICAgcmVmLnNldElucHV0KCd0b3RhbFN0ZXBzJywgdGhpcy50b3RhbFN0ZXBzKCkpO1xuICAgICAgICByZWYuc2V0SW5wdXQoJ2NvbnRlbnQnLCBzdGVwLmNvbnRlbnQgPz8gbnVsbCk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYWN0aW9ucycsIHN0ZXAuYWN0aW9ucyA/PyBbXSk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnc2hvd0RvTm90U2hvd0FnYWluJywgc3RlcC5zaG93RG9Ob3RTaG93QWdhaW4gPz8gdHJ1ZSk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NoZWR1bGVTeW5jKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zeW5jRGlyZWN0aW9uQW5kQXJyb3coKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFjdGl2YXRlVG91ck1vZGUoKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVFbCA9IHRoaXMucG9wb3Zlck92ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFuZUVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUocGFuZUVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIGEgc3RlcCBjaGFuZ2UsIG1vdmVzIGZvY3VzIGJhY2sgdG8gdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQgaW5zaWRlIHRoZVxuICAgICAqIHBvcG92ZXIgc28gdGhlIHVzZXIgZG9lcyBub3QgbG9zZSBrZXlib2FyZCBwb3NpdGlvbi5cbiAgICAgKiBOby1vcCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBmb2N1cyB0cmFwIChzaW1wbGUgc3BvdGxpZ2h0IG1vZGUpLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2NoZWR1bGVGb2N1c1RyYXBSZWZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSByZXR1cm47XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c1RyYXA/LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jRGlyZWN0aW9uQW5kQXJyb3coKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZjtcbiAgICAgICAgY29uc3QgcGFuZUVsID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlZiB8fCAhcGFuZUVsIHx8ICFyZWN0KSB7XG4gICAgICAgICAgICByZWY/LnNldElucHV0KCdhcnJvd09mZnNldFB4JywgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYW5lID0gcGFuZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0b2wgPSBTUE9UTElHSFRfUEFERElORyArIDQ7XG5cbiAgICAgICAgbGV0IGRpcjogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG5cbiAgICAgICAgaWYgKHBhbmUudG9wID49IHJlY3QuYm90dG9tIC0gdG9sKSB7XG4gICAgICAgICAgICBkaXIgPSAnYm90dG9tJztcbiAgICAgICAgfSBlbHNlIGlmIChwYW5lLmJvdHRvbSA8PSByZWN0LnRvcCArIHRvbCkge1xuICAgICAgICAgICAgZGlyID0gJ3RvcCc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZS5sZWZ0ID49IHJlY3QucmlnaHQgLSB0b2wpIHtcbiAgICAgICAgICAgIGRpciA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZS5yaWdodCA8PSByZWN0LmxlZnQgKyB0b2wpIHtcbiAgICAgICAgICAgIGRpciA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMocGFuZS50b3AgKyBwYW5lLmhlaWdodCAvIDIgLSAocmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDIpKTtcbiAgICAgICAgICAgIGNvbnN0IGR4ID0gTWF0aC5hYnMocGFuZS5sZWZ0ICsgcGFuZS53aWR0aCAvIDIgLSAocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIpKTtcbiAgICAgICAgICAgIGRpciA9XG4gICAgICAgICAgICAgICAgZHkgPj0gZHhcbiAgICAgICAgICAgICAgICAgICAgPyBwYW5lLnRvcCArIHBhbmUuaGVpZ2h0IC8gMiA8IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0b3AnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20nXG4gICAgICAgICAgICAgICAgICAgIDogcGFuZS5sZWZ0ICsgcGFuZS53aWR0aCAvIDIgPCByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMlxuICAgICAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAncmlnaHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdGVkQWxpZ25tZW50ID0gKHRoaXMuY3VycmVudFN0ZXAoKT8ucG9zaXRpb24gPz8gJ2JvdHRvbS1jZW50ZXInKS5zcGxpdCgnLScpWzFdO1xuICAgICAgICByZWYuc2V0SW5wdXQoJ3Bvc2l0aW9uJywgYCR7ZGlyfS0ke3JlcXVlc3RlZEFsaWdubWVudH1gIGFzIFNwb3RsaWdodFBvc2l0aW9uKTtcblxuICAgICAgICBjb25zdCBBUlJPV19NQVJHSU4gPSAxMjtcbiAgICAgICAgbGV0IG9mZnNldDogbnVtYmVyO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRBbGlnbm1lbnQgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IEFSUk9XX01BUkdJTjtcbiAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWRBbGlnbm1lbnQgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsQXJyb3cgPSBkaXIgPT09ICdsZWZ0JyB8fCBkaXIgPT09ICdyaWdodCc7XG4gICAgICAgICAgICAvLyBTVkcgaGVpZ2h0IGluIGZsZXgtY29sIGxheW91dCA9IDhweDsgU1ZHIHdpZHRoIGluIGZsZXgtcm93IGxheW91dCA9IDE2cHhcbiAgICAgICAgICAgIG9mZnNldCA9IGlzVmVydGljYWxBcnJvdyA/IHBhbmUuaGVpZ2h0IC0gQVJST1dfTUFSR0lOIC0gOCA6IHBhbmUud2lkdGggLSBBUlJPV19NQVJHSU4gLSAxNjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRndFggPSByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHRndFkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHJhd09mZnNldCA9XG4gICAgICAgICAgICAgICAgZGlyID09PSAndG9wJyB8fCBkaXIgPT09ICdib3R0b20nXG4gICAgICAgICAgICAgICAgICAgID8gdGd0WCAtIHBhbmUubGVmdCAtIEFSUk9XX0hBTEZfU0laRVxuICAgICAgICAgICAgICAgICAgICA6IHRndFkgLSBwYW5lLnRvcCAtIEFSUk9XX0hBTEZfU0laRTtcbiAgICAgICAgICAgIG9mZnNldCA9IE1hdGgubWF4KEFSUk9XX09GRlNFVF9NSU4sIE1hdGgubWluKEFSUk9XX09GRlNFVF9NQVgsIHJhd09mZnNldCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVmLnNldElucHV0KCdhcnJvd09mZnNldFB4Jywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyU3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnBvcG92ZXJTdWJzID0gW107XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUYXJnZXRSZWN0KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhcmdldFJlY3Quc2V0KGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hSZWN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuXG4gICAgICAgIGlmICghc3RlcCB8fCAhdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuXG4gICAgICAgIGlmIChlbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUYXJnZXRSZWN0KGVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZlRWxlbWVudChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudXBkYXRlVGFyZ2V0UmVjdChlbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIkBpZiAoaXNBY3RpdmUoKSAmJiBjdXJyZW50U3RlcCgpOyBhcyBzdGVwKSB7XG4gICAgQGlmIChzdGVwLnNob3dCYWNrZHJvcCAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nU3R5bGVdPVwidG9wTWFza1N0eWxlKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgIEBpZiAodGFyZ2V0UmVjdCgpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwibGVmdE1hc2tTdHlsZSgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EaXNtaXNzKClcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJpZ2h0TWFza1N0eWxlKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiYm90dG9tTWFza1N0eWxlKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHN0ZXAuc2hvd0JhY2tkcm9wID09PSBmYWxzZSkge1xuICAgICAgICBAaWYgKHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInRyYW5zcGFyZW50QmxvY2tlclN0eWxlKClcIj48L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwidHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-chips.mjs","sources":["../../projects/angular-components/chips/src/lib/chips/chip-item/chip-item.component.ts","../../projects/angular-components/chips/src/lib/chips/chip-item/chip-item.component.html","../../projects/angular-components/chips/src/lib/chips/chips/chips.component.ts","../../projects/angular-components/chips/src/lib/chips/chips/chips.component.html","../../projects/angular-components/chips/src/lib/chips/chips.module.ts","../../projects/angular-components/chips/src/seniorsistemas-angular-components-chips.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { CheckDisabled } from '@seniorsistemas/angular-components/shared';\n/**\n * @description Componente interno de item individual de chip, utilizado pelo {@link ChipsComponent}.\n * Responsável pela renderização do texto, tooltip e botão de remoção de cada chip.\n *\n * @category Inputs\n */\n@Component({\n selector: 's-chip-item',\n templateUrl: './chip-item.component.html',\n styleUrls: ['./chip-item.component.scss'],\n})\nexport class ChipItemComponent {\n /** @description Conteúdo a ser exibido no chip (string ou objeto). Campo obrigatório. */\n @Input({ required: true }) dataRender!: string | Object;\n /** @description Chave do objeto usada para exibição quando `dataRender` for um objeto. Campo obrigatório. */\n @Input({ required: true }) objectField!: string;\n /** @description Desabilita os eventos de clique do chip. Campo obrigatório. */\n @Input({ required: true }) disabled = false;\n /** @description Template personalizado para renderização interna do chip. */\n @Input() templateRef!: TemplateRef<any> | undefined;\n /** @description Índice do chip na lista, usado ao emitir o evento de remoção. Campo obrigatório. */\n @Input({ required: true }) itemIndex = -1;\n /** @description Habilita o tooltip para chips com texto truncado. Campo obrigatório. */\n @Input({ required: true }) showTooltip = true;\n /** @description Limite de caracteres exibidos antes de truncar o texto do chip. Campo obrigatório. */\n @Input({ required: true }) maxLengthRenderWithoutTooltip = 20;\n\n /** @description Emitido ao clicar no botão de remoção do chip. */\n @Output() clickRemove = new EventEmitter<{ itemIndex: number; event: Event }>();\n /** @description Emitido ao clicar sobre o chip (fora do botão de remoção). */\n @Output() chipClicked = new EventEmitter<{ event: Event; data: string | Object }>();\n\n @CheckDisabled()\n clickedRemove($event: Event) {\n this.clickRemove.emit({ itemIndex: this.itemIndex, event: $event });\n }\n @CheckDisabled()\n onChipClicked($event: Event) {\n this.chipClicked.emit({ event: $event, data: this.dataRender });\n }\n\n get _text() {\n const _text = this._rawText;\n return (\n _text.substring(\n 0,\n _text.length > this.maxLengthRenderWithoutTooltip ? this.maxLengthRenderWithoutTooltip : _text.length,\n ) + (_text.length > this.maxLengthRenderWithoutTooltip ? '...' : '')\n );\n }\n\n get _rawText() {\n return this.objectField ? (this.dataRender as any)[this.objectField] || '' : this.dataRender || '';\n }\n}\n\n","<ng-template #itemRender>\n <div\n class=\"chip-item\"\n [class.chip-item-disabled]=\"disabled\"\n (click)=\"onChipClicked($event)\" \n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n @if(templateRef) {\n <ng-container\n *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\">\n </ng-container>\n } @else {\n {{ _text }}\n }\n <i class=\"fas fa-times\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n@if(objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(!objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n}\n","import { AfterViewInit, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, QueryList, TemplateRef, ViewChild, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { KeyFilterPattern } from 'primeng/keyfilter';\n\nimport { ChipAddEvent, ChipClickEvent, ChipRemoveEvent } from '../models/chip-models';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { isNullOrUndefined, randomHash } from '@seniorsistemas/angular-components/utils';\nimport { CheckDisabled } from '@seniorsistemas/angular-components/shared';\n\n/**\n * @description Componente de entrada de tags/chips que permite adicionar e remover\n * itens de texto livremente ou a partir de uma lista. Suporta templates personalizados\n * para renderização de cada chip, filtro de teclas, limite de itens e duplicação configurável.\n * Implementa {@link ControlValueAccessor} para uso em formulários Angular.\n *\n * @example\n * ```html\n * <s-chips\n * formControlName=\"tags\"\n * placeholder=\"Adicionar tag...\"\n * [max]=\"10\"\n * [allowDuplicated]=\"false\"\n * (added)=\"onAdded($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-chips',\n templateUrl: './chips.component.html',\n styleUrls: ['./chips.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ChipsComponent),\n multi: true,\n },\n ],\n})\nexport class ChipsComponent implements AfterViewInit, ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n public newItem = '';\n public chipTemplate?: TemplateRef<any>;\n\n /** @description Desabilita a interação com o componente. @default false */\n @Input()\n public disabled = false;\n\n /** @description Chave do objeto usada para exibição quando os itens são objetos complexos. @default '' */\n @Input()\n public field = '';\n\n /** @description Lista de chips atualmente exibidos. @default [] */\n @Input()\n public value: any[] = [];\n\n /** @description Texto de placeholder exibido no campo de entrada quando vazio. */\n @Input()\n public placeholder: string | undefined;\n\n /** @description Número máximo de chips permitidos. @default Infinity */\n @Input()\n public max = Infinity;\n\n /** @description Comprimento máximo do texto de cada chip. @default Infinity */\n @Input()\n public maxLength = Infinity;\n\n /** @description Identificador do elemento `<input>` interno. Gerado automaticamente se não informado. */\n @Input()\n public inputId = `chips-${randomHash()}`;\n\n /** @description Permite a adição de chips com valor duplicado. @default true */\n @Input()\n public allowDuplicated = true;\n\n /** @description Quando `false`, a comparação de duplicatas é case-insensitive. @default false */\n @Input()\n public caseSensitiveDuplication = false;\n\n /** @description Adiciona o chip ao pressionar Tab. @default true */\n @Input()\n public addOnTab = true;\n\n /** @description Adiciona o chip ao perder o foco (blur). @default true */\n @Input()\n public addOnBlur = true;\n\n /** @description Caractere separador que, quando digitado, confirma a adição de um novo chip. @default '' */\n @Input()\n public separator = '';\n\n /** @description Coloca o foco automaticamente no campo de entrada ao renderizar o componente. @default false */\n @Input()\n public autofocus = false;\n\n /** @description Texto informativo exibido abaixo do campo de entrada. @default '' */\n @Input()\n public infoLabel = '';\n\n /** @description Expressão regular ou padrão predefinido (PrimeNG KeyFilterPattern) para filtrar teclas aceitas. */\n @Input()\n public keyFilter?: RegExp | KeyFilterPattern;\n\n /** @description Exibe tooltip ao passar o mouse sobre chips com texto truncado. @default true */\n @Input()\n public showTooltip = true;\n\n /** @description Número máximo de caracteres exibidos diretamente no chip sem aplicar truncamento. @default 20 */\n @Input()\n public maxLengthRenderWithoutTooltip = 20;\n\n /** @description Emitido quando um novo chip é adicionado com sucesso. */\n @Output()\n public added = new EventEmitter<ChipAddEvent>();\n\n /** @description Emitido quando um chip é removido pelo usuário. */\n @Output()\n public removed = new EventEmitter<ChipRemoveEvent>();\n\n /** @description Emitido quando o campo de entrada recebe foco. */\n @Output()\n public focused = new EventEmitter<FocusEvent>();\n\n /** @description Emitido quando o campo de entrada perde o foco. */\n @Output()\n public focusLost = new EventEmitter<FocusEvent>();\n\n /** @description Emitido quando o usuário clica em um chip existente. */\n @Output()\n public chipClicked = new EventEmitter<ChipClickEvent>();\n\n /** @description Emitido sempre que a lista de chips é alterada (adição ou remoção). */\n @Output()\n public valueChange = new EventEmitter<string[] | any[]>();\n\n @ContentChildren(TemplateDirective)\n private readonly templates: QueryList<TemplateDirective> | null = null;\n\n @ViewChild('input', { read: ElementRef })\n private readonly input: ElementRef<HTMLElement> | null = null;\n\n public isFocused = false;\n public onChange: (value: string[] | any[]) => void = () => {};\n public onTouched: (value: string[] | any[]) => void = () => {};\n\n private isTabEventActive = false;\n\n public ngAfterViewInit(): void {\n if (this.autofocus && this.input) {\n this.input.nativeElement.focus();\n }\n if (this.templates) {\n this.chipTemplate = this.templates.find((x) => x.type === 'chip-container')?.template;\n this.cdr.detectChanges();\n }\n }\n\n public writeValue(obj: string[] | any[]): void {\n if (isNullOrUndefined(obj)) {\n obj = [];\n }\n this.value = obj;\n }\n\n public registerOnChange(fn: (value: string[] | any[]) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n @HostListener('document:keydown', ['$event'])\n @CheckDisabled()\n public onKeydown($event: KeyboardEvent) {\n const isEnter = $event.key === 'Enter';\n const isSeparator = this.separator && $event.key === this.separator;\n const eventKeyIsTab = $event.key === 'Tab';\n if (eventKeyIsTab) {\n const tabTimeoutTime = 50;\n this.isTabEventActive = true;\n setTimeout(() => {\n this.isTabEventActive = false;\n }, tabTimeoutTime);\n }\n const isTab = this.addOnTab && eventKeyIsTab;\n if (isEnter || isSeparator || isTab) {\n $event.preventDefault();\n this.addItem();\n }\n }\n\n public onInputFocus($event: FocusEvent) {\n this.focused.emit($event);\n this.isFocused = true;\n }\n\n @CheckDisabled()\n public onInputLostFocus($event: FocusEvent) {\n this.isFocused = false;\n if (!this.addOnBlur || this.isTabEventActive) {\n return;\n }\n this.addItem();\n this.focusLost.emit($event);\n }\n\n public removeItem({ itemIndex, event }: { itemIndex: number; event: Event }) {\n const _removedItem = this.value[itemIndex];\n this.value.splice(itemIndex, 1);\n this.removed.emit({ value: _removedItem, originalEvent: event });\n }\n\n public onChipClicked({ event, data }: { event: Event; data: string | Object }) {\n this.chipClicked.emit({ value: data, originalEvent: event });\n }\n\n private addItem() {\n if (!this.hasValueToAdd()) {\n return;\n }\n if (this.isMaxReached()) {\n return;\n }\n if (!this.isValidItemLength()) {\n return;\n }\n const valueToAdd = this.getValueToAdd();\n if (!this.hasDuplicatedItem()) {\n this.storeValue(valueToAdd);\n }\n this.newItem = '';\n }\n\n private hasValueToAdd(): boolean {\n return !!this.newItem;\n }\n\n private isMaxReached(): boolean {\n return !!(this.max && this.value.length === this.max);\n }\n\n private isValidItemLength(): boolean {\n return this.maxLength ? this.newItem.length <= this.maxLength : true;\n }\n\n private getMappedValues(): string[] {\n return this.field ? this.value.map((x) => x[this.field]) : this.value;\n }\n\n private getValueToAdd(): any {\n return this.field ? { [this.field]: this.newItem } : this.newItem;\n }\n\n private hasDuplicatedItem(): boolean {\n if (this.allowDuplicated) {\n return false;\n }\n const mappedValues = this.getMappedValues();\n return !!mappedValues.find((x) => {\n if (this.caseSensitiveDuplication) {\n return x === this.newItem;\n } else {\n return x.toLowerCase() === this.newItem.toLowerCase();\n }\n });\n }\n\n private storeValue(value: any) {\n this.value = [...this.value, value];\n this.added.emit({ value });\n this.valueChange.emit(this.value);\n this.writeValue(this.value);\n this.onChange(this.value);\n this.onTouched(this.value);\n }\n}\n\n","<ul class=\"chips-container\" [class.chips-container--focused]=\"isFocused\">\n @for(item of value; track $index) {\n <li>\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"$index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"onChipClicked($event)\">\n </s-chip-item>\n </li>\n }\n\n @if(keyFilter) {\n <input\n #input\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }@else {\n <input\n #input\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }\n</ul>\n@if(infoLabel) {\n <span class=\"info-label\">\n {{ infoLabel }}\n </span>\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { ChipItemComponent } from './chip-item/chip-item.component';\nimport { ChipsComponent } from './chips/chips.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\n\n@NgModule({\n declarations: [ChipsComponent, ChipItemComponent],\n imports: [FormsModule, TooltipModule, KeyFilterModule, NgTemplateOutlet],\n exports: [ChipsComponent],\n})\nexport class ChipsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.ChipItemComponent"],"mappings":"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"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-chips.mjs","sources":["../../projects/angular-components/chips/src/lib/chips/chip-item/chip-item.component.ts","../../projects/angular-components/chips/src/lib/chips/chip-item/chip-item.component.html","../../projects/angular-components/chips/src/lib/chips/chips/chips.component.ts","../../projects/angular-components/chips/src/lib/chips/chips/chips.component.html","../../projects/angular-components/chips/src/lib/chips/chips.module.ts","../../projects/angular-components/chips/src/seniorsistemas-angular-components-chips.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { CheckDisabled } from '@seniorsistemas/angular-components/shared';\n/**\n * @description Componente interno de item individual de chip, utilizado pelo {@link ChipsComponent}.\n * Responsável pela renderização do texto, tooltip e botão de remoção de cada chip.\n *\n * @category Inputs\n */\n@Component({\n selector: 's-chip-item',\n templateUrl: './chip-item.component.html',\n styleUrls: ['./chip-item.component.scss'],\n})\nexport class ChipItemComponent {\n /** @description Conteúdo a ser exibido no chip (string ou objeto). Campo obrigatório. */\n @Input({ required: true }) dataRender!: string | Object;\n /** @description Chave do objeto usada para exibição quando `dataRender` for um objeto. Campo obrigatório. */\n @Input({ required: true }) objectField!: string;\n /** @description Desabilita os eventos de clique do chip. Campo obrigatório. */\n @Input({ required: true }) disabled = false;\n /** @description Template personalizado para renderização interna do chip. */\n @Input() templateRef!: TemplateRef<any> | undefined;\n /** @description Índice do chip na lista, usado ao emitir o evento de remoção. Campo obrigatório. */\n @Input({ required: true }) itemIndex = -1;\n /** @description Habilita o tooltip para chips com texto truncado. Campo obrigatório. */\n @Input({ required: true }) showTooltip = true;\n /** @description Limite de caracteres exibidos antes de truncar o texto do chip. Campo obrigatório. */\n @Input({ required: true }) maxLengthRenderWithoutTooltip = 20;\n\n /** @description Emitido ao clicar no botão de remoção do chip. */\n @Output() clickRemove = new EventEmitter<{ itemIndex: number; event: Event }>();\n /** @description Emitido ao clicar sobre o chip (fora do botão de remoção). */\n @Output() chipClicked = new EventEmitter<{ event: Event; data: string | Object }>();\n\n @CheckDisabled()\n clickedRemove($event: Event) {\n this.clickRemove.emit({ itemIndex: this.itemIndex, event: $event });\n }\n @CheckDisabled()\n onChipClicked($event: Event) {\n this.chipClicked.emit({ event: $event, data: this.dataRender });\n }\n\n get _text() {\n const _text = this._rawText;\n return (\n _text.substring(\n 0,\n _text.length > this.maxLengthRenderWithoutTooltip ? this.maxLengthRenderWithoutTooltip : _text.length,\n ) + (_text.length > this.maxLengthRenderWithoutTooltip ? '...' : '')\n );\n }\n\n get _rawText() {\n return this.objectField ? (this.dataRender as any)[this.objectField] || '' : this.dataRender || '';\n }\n}\n\n","<ng-template #itemRender>\n <div\n class=\"chip-item\"\n [class.chip-item-disabled]=\"disabled\"\n (click)=\"onChipClicked($event)\" \n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n @if(templateRef) {\n <ng-container\n *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\">\n </ng-container>\n } @else {\n {{ _text }}\n }\n <i class=\"fas fa-times\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n@if(objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(!objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { KeyFilterPattern } from 'primeng/keyfilter';\n\nimport { ChipAddEvent, ChipClickEvent, ChipRemoveEvent } from '../models/chip-models';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { isNullOrUndefined, randomHash } from '@seniorsistemas/angular-components/utils';\nimport { CheckDisabled } from '@seniorsistemas/angular-components/shared';\n\n/**\n * @description Componente de entrada de tags/chips que permite adicionar e remover\n * itens de texto livremente ou a partir de uma lista. Suporta templates personalizados\n * para renderização de cada chip, filtro de teclas, limite de itens e duplicação configurável.\n * Implementa {@link ControlValueAccessor} para uso em formulários Angular.\n *\n * @example\n * ```html\n * <s-chips\n * formControlName=\"tags\"\n * placeholder=\"Adicionar tag...\"\n * [max]=\"10\"\n * [allowDuplicated]=\"false\"\n * (added)=\"onAdded($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-chips',\n templateUrl: './chips.component.html',\n styleUrls: ['./chips.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ChipsComponent),\n multi: true,\n },\n ],\n})\nexport class ChipsComponent implements AfterViewInit, ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n public newItem = '';\n public chipTemplate?: TemplateRef<any>;\n\n /** @description Desabilita a interação com o componente. @default false */\n @Input()\n public disabled = false;\n\n /** @description Chave do objeto usada para exibição quando os itens são objetos complexos. @default '' */\n @Input()\n public field = '';\n\n /** @description Lista de chips atualmente exibidos. @default [] */\n @Input()\n public value: any[] = [];\n\n /** @description Texto de placeholder exibido no campo de entrada quando vazio. */\n @Input()\n public placeholder: string | undefined;\n\n /** @description Número máximo de chips permitidos. @default Infinity */\n @Input()\n public max = Infinity;\n\n /** @description Comprimento máximo do texto de cada chip. @default Infinity */\n @Input()\n public maxLength = Infinity;\n\n /** @description Identificador do elemento `<input>` interno. Gerado automaticamente se não informado. */\n @Input()\n public inputId = `chips-${randomHash()}`;\n\n /** @description Permite a adição de chips com valor duplicado. @default true */\n @Input()\n public allowDuplicated = true;\n\n /** @description Quando `false`, a comparação de duplicatas é case-insensitive. @default false */\n @Input()\n public caseSensitiveDuplication = false;\n\n /** @description Adiciona o chip ao pressionar Tab. @default true */\n @Input()\n public addOnTab = true;\n\n /** @description Adiciona o chip ao perder o foco (blur). @default true */\n @Input()\n public addOnBlur = true;\n\n /** @description Caractere separador que, quando digitado, confirma a adição de um novo chip. @default '' */\n @Input()\n public separator = '';\n\n /** @description Coloca o foco automaticamente no campo de entrada ao renderizar o componente. @default false */\n @Input()\n public autofocus = false;\n\n /** @description Texto informativo exibido abaixo do campo de entrada. @default '' */\n @Input()\n public infoLabel = '';\n\n /** @description Expressão regular ou padrão predefinido (PrimeNG KeyFilterPattern) para filtrar teclas aceitas. */\n @Input()\n public keyFilter?: RegExp | KeyFilterPattern;\n\n /** @description Exibe tooltip ao passar o mouse sobre chips com texto truncado. @default true */\n @Input()\n public showTooltip = true;\n\n /** @description Número máximo de caracteres exibidos diretamente no chip sem aplicar truncamento. @default 20 */\n @Input()\n public maxLengthRenderWithoutTooltip = 20;\n\n /** @description Emitido quando um novo chip é adicionado com sucesso. */\n @Output()\n public added = new EventEmitter<ChipAddEvent>();\n\n /** @description Emitido quando um chip é removido pelo usuário. */\n @Output()\n public removed = new EventEmitter<ChipRemoveEvent>();\n\n /** @description Emitido quando o campo de entrada recebe foco. */\n @Output()\n public focused = new EventEmitter<FocusEvent>();\n\n /** @description Emitido quando o campo de entrada perde o foco. */\n @Output()\n public focusLost = new EventEmitter<FocusEvent>();\n\n /** @description Emitido quando o usuário clica em um chip existente. */\n @Output()\n public chipClicked = new EventEmitter<ChipClickEvent>();\n\n /** @description Emitido sempre que a lista de chips é alterada (adição ou remoção). */\n @Output()\n public valueChange = new EventEmitter<string[] | any[]>();\n\n @ContentChildren(TemplateDirective)\n private readonly templates: QueryList<TemplateDirective> | null = null;\n\n @ViewChild('input', { read: ElementRef })\n private readonly input: ElementRef<HTMLElement> | null = null;\n\n public isFocused = false;\n public onChange: (value: string[] | any[]) => void = () => {};\n public onTouched: (value: string[] | any[]) => void = () => {};\n\n private isTabEventActive = false;\n\n public ngAfterViewInit(): void {\n if (this.autofocus && this.input) {\n this.input.nativeElement.focus();\n }\n if (this.templates) {\n this.chipTemplate = this.templates.find((x) => x.type === 'chip-container')?.template;\n this.cdr.detectChanges();\n }\n }\n\n public writeValue(obj: string[] | any[]): void {\n if (isNullOrUndefined(obj)) {\n obj = [];\n }\n this.value = obj;\n }\n\n public registerOnChange(fn: (value: string[] | any[]) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n @HostListener('document:keydown', ['$event'])\n @CheckDisabled()\n public onKeydown($event: KeyboardEvent) {\n const isEnter = $event.key === 'Enter';\n const isSeparator = this.separator && $event.key === this.separator;\n const eventKeyIsTab = $event.key === 'Tab';\n if (eventKeyIsTab) {\n const tabTimeoutTime = 50;\n this.isTabEventActive = true;\n setTimeout(() => {\n this.isTabEventActive = false;\n }, tabTimeoutTime);\n }\n const isTab = this.addOnTab && eventKeyIsTab;\n if (isEnter || isSeparator || isTab) {\n $event.preventDefault();\n this.addItem();\n }\n }\n\n public onInputFocus($event: FocusEvent) {\n this.focused.emit($event);\n this.isFocused = true;\n }\n\n @CheckDisabled()\n public onInputLostFocus($event: FocusEvent) {\n this.isFocused = false;\n if (!this.addOnBlur || this.isTabEventActive) {\n return;\n }\n this.addItem();\n this.focusLost.emit($event);\n }\n\n public removeItem({ itemIndex, event }: { itemIndex: number; event: Event }) {\n const _removedItem = this.value[itemIndex];\n this.value.splice(itemIndex, 1);\n this.removed.emit({ value: _removedItem, originalEvent: event });\n }\n\n public onChipClicked({ event, data }: { event: Event; data: string | Object }) {\n this.chipClicked.emit({ value: data, originalEvent: event });\n }\n\n private addItem() {\n if (!this.hasValueToAdd()) {\n return;\n }\n if (this.isMaxReached()) {\n return;\n }\n if (!this.isValidItemLength()) {\n return;\n }\n const valueToAdd = this.getValueToAdd();\n if (!this.hasDuplicatedItem()) {\n this.storeValue(valueToAdd);\n }\n this.newItem = '';\n }\n\n private hasValueToAdd(): boolean {\n return !!this.newItem;\n }\n\n private isMaxReached(): boolean {\n return !!(this.max && this.value.length === this.max);\n }\n\n private isValidItemLength(): boolean {\n return this.maxLength ? this.newItem.length <= this.maxLength : true;\n }\n\n private getMappedValues(): string[] {\n return this.field ? this.value.map((x) => x[this.field]) : this.value;\n }\n\n private getValueToAdd(): any {\n return this.field ? { [this.field]: this.newItem } : this.newItem;\n }\n\n private hasDuplicatedItem(): boolean {\n if (this.allowDuplicated) {\n return false;\n }\n const mappedValues = this.getMappedValues();\n return !!mappedValues.find((x) => {\n if (this.caseSensitiveDuplication) {\n return x === this.newItem;\n } else {\n return x.toLowerCase() === this.newItem.toLowerCase();\n }\n });\n }\n\n private storeValue(value: any) {\n this.value = [...this.value, value];\n this.added.emit({ value });\n this.valueChange.emit(this.value);\n this.writeValue(this.value);\n this.onChange(this.value);\n this.onTouched(this.value);\n }\n}\n\n","<ul class=\"chips-container\" [class.chips-container--focused]=\"isFocused\">\n @for(item of value; track $index) {\n <li>\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"$index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"onChipClicked($event)\">\n </s-chip-item>\n </li>\n }\n\n @if(keyFilter) {\n <input\n #input\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }@else {\n <input\n #input\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }\n</ul>\n@if(infoLabel) {\n <span class=\"info-label\">\n {{ infoLabel }}\n </span>\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { ChipItemComponent } from './chip-item/chip-item.component';\nimport { ChipsComponent } from './chips/chips.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\n\n@NgModule({\n declarations: [ChipsComponent, ChipItemComponent],\n imports: [FormsModule, TooltipModule, KeyFilterModule, NgTemplateOutlet],\n exports: [ChipsComponent],\n})\nexport class ChipsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.ChipItemComponent"],"mappings":"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"}
@@ -1296,11 +1296,11 @@ class BooleanFieldComponent {
1296
1296
  this.formControl().reset();
1297
1297
  }
1298
1298
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BooleanFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1299
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BooleanFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n<ng-template\n #radioButtonRender\n let-value=\"value\"\n let-label=\"label\"\n let-inputIdAppend=\"inputIdAppend\"\n>\n @let inputId = (_field.id || _field.name) + inputIdAppend;\n <s-radiobutton\n [name]=\"_field.name\"\n [value]=\"value\"\n [formControl]=\"formControl()\"\n [inputId]=\"inputId\"\n [label]=\"label\"\n (focusedInput)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (inputFocusLost)=\"_field.onBlur ? _field.onBlur($event) : null\"\n />\n</ng-template>\n\n<s-field-label [field]=\"_field\"></s-field-label>\n\n@if (_field.verticalAlignment) {\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n </div>\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n </div>\n @if (!_field.showClear && !!_field.required && !_field.required()) {\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n </div>\n }\n <div>\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n </div>\n} @else {\n <div class=\"ui-g horizontal-radio-buttons-container\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n style=\"margin-left: 40px\"\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n}\n\n", styles: [".horizontal-radio-buttons-container{gap:20px 40px;.radio-button-item{margin:0}}\n"], dependencies: [{ kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }, { kind: "component", type: RadioButtonComponent, selector: "s-radiobutton", inputs: ["buttonDisabled", "label", "name", "value", "inputId"], outputs: ["buttonDisabledChange", "valueChange", "focusedInput", "inputFocusLost"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }] });
1299
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BooleanFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n<ng-template\n #radioButtonRender\n let-value=\"value\"\n let-label=\"label\"\n let-inputIdAppend=\"inputIdAppend\"\n>\n @if (label) {\n @let inputId = (_field.id || _field.name) + inputIdAppend;\n <s-radiobutton\n [name]=\"_field.name\"\n [value]=\"value\"\n [formControl]=\"formControl()\"\n [inputId]=\"inputId\"\n [label]=\"label\"\n (focusedInput)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (inputFocusLost)=\"_field.onBlur ? _field.onBlur($event) : null\"\n />\n }\n</ng-template>\n\n<s-field-label [field]=\"_field\"></s-field-label>\n\n@if (_field.verticalAlignment) {\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n </div>\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n </div>\n @if (!_field.showClear && !!_field.required && !_field.required()) {\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n </div>\n }\n <div>\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n </div>\n} @else {\n <div class=\"ui-g horizontal-radio-buttons-container\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n}\n\n", styles: [".horizontal-radio-buttons-container{gap:20px 40px;align-items:center;.radio-button-item{margin:0}}\n"], dependencies: [{ kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }, { kind: "component", type: RadioButtonComponent, selector: "s-radiobutton", inputs: ["buttonDisabled", "label", "name", "value", "inputId"], outputs: ["buttonDisabledChange", "valueChange", "focusedInput", "inputFocusLost"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }] });
1300
1300
  }
1301
1301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BooleanFieldComponent, decorators: [{
1302
1302
  type: Component,
1303
- args: [{ standalone: true, imports: [FieldLabelComponent, RadioButtonComponent, ReactiveFormsModule, NgTemplateOutlet, ButtonComponent], template: "@let _field = field();\n<ng-template\n #radioButtonRender\n let-value=\"value\"\n let-label=\"label\"\n let-inputIdAppend=\"inputIdAppend\"\n>\n @let inputId = (_field.id || _field.name) + inputIdAppend;\n <s-radiobutton\n [name]=\"_field.name\"\n [value]=\"value\"\n [formControl]=\"formControl()\"\n [inputId]=\"inputId\"\n [label]=\"label\"\n (focusedInput)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (inputFocusLost)=\"_field.onBlur ? _field.onBlur($event) : null\"\n />\n</ng-template>\n\n<s-field-label [field]=\"_field\"></s-field-label>\n\n@if (_field.verticalAlignment) {\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n </div>\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n </div>\n @if (!_field.showClear && !!_field.required && !_field.required()) {\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n </div>\n }\n <div>\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n </div>\n} @else {\n <div class=\"ui-g horizontal-radio-buttons-container\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n style=\"margin-left: 40px\"\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n}\n\n", styles: [".horizontal-radio-buttons-container{gap:20px 40px;.radio-button-item{margin:0}}\n"] }]
1303
+ args: [{ standalone: true, imports: [FieldLabelComponent, RadioButtonComponent, ReactiveFormsModule, NgTemplateOutlet, ButtonComponent], template: "@let _field = field();\n<ng-template\n #radioButtonRender\n let-value=\"value\"\n let-label=\"label\"\n let-inputIdAppend=\"inputIdAppend\"\n>\n @if (label) {\n @let inputId = (_field.id || _field.name) + inputIdAppend;\n <s-radiobutton\n [name]=\"_field.name\"\n [value]=\"value\"\n [formControl]=\"formControl()\"\n [inputId]=\"inputId\"\n [label]=\"label\"\n (focusedInput)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (inputFocusLost)=\"_field.onBlur ? _field.onBlur($event) : null\"\n />\n }\n</ng-template>\n\n<s-field-label [field]=\"_field\"></s-field-label>\n\n@if (_field.verticalAlignment) {\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n </div>\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n </div>\n @if (!_field.showClear && !!_field.required && !_field.required()) {\n <div class=\"ui-g-12\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n </div>\n }\n <div>\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n </div>\n} @else {\n <div class=\"ui-g horizontal-radio-buttons-container\">\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: true, label: _field.optionsLabel.true, inputIdAppend: '-1' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: false, label: _field.optionsLabel.false, inputIdAppend: '-2' }\n \"\n />\n\n <ng-template\n *ngTemplateOutlet=\"\n radioButtonRender;\n context: { value: null, label: _field.optionsLabel.empty, inputIdAppend: '-3' }\n \"\n />\n\n @if (_field.showClear && !_field.required?.() && !formControl().disabled) {\n <s-button\n [label]=\"_field.optionsLabel.clear || 'Clear selection'\"\n (clicked)=\"onClear()\"\n priority=\"link\"\n >\n </s-button>\n }\n </div>\n}\n\n", styles: [".horizontal-radio-buttons-container{gap:20px 40px;align-items:center;.radio-button-item{margin:0}}\n"] }]
1304
1304
  }] });
1305
1305
 
1306
1306
  class BooleanSwitchFieldComponent {
@@ -1412,11 +1412,11 @@ class ChipsFieldComponent {
1412
1412
  this.inputRef = this.elementRef.nativeElement.querySelector('input');
1413
1413
  }
1414
1414
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChipsFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1415
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChipsFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n@if (inputRef) {\n <s-field-label\n [field]=\"_field\"\n [fieldContainerRef]=\"inputRef\"\n ></s-field-label>\n}\n\n<div class=\"chips-field-wrapper\">\n <div style=\"width: 100%\">\n @if (_field.keyFilter) {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (onAdd)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (onRemove)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (onChipClick)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (onFocus)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (onBlur)=\"_field.onBlur ? _field.onBlur($event) : null\"\n [keyFilter]=\"_field.keyFilter\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n } @else {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (onAdd)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (onRemove)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (onChipClick)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (onFocus)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (onBlur)=\"_field.onBlur ? _field.onBlur($event) : null\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n }\n </div>\n\n @if (_field.showCopyButton && formControl().value?.length > 0 && copyButtonVisible) {\n <button\n class=\"copy-content-button\"\n (click)=\"onCopyFieldContent()\"\n >\n {{ 'platform.angular_components.copy_field_content' | translate }}\n </button>\n }\n\n @if (feedbackMessageVisible) {\n <span class=\"feedback-message\">\n {{ 'platform.angular_components.copied_to_clipboard' | translate }}\n </span>\n }\n</div>\n\n", styles: [".chips-field-wrapper{align-items:flex-start;display:flex;flex-direction:column}.chips-field-wrapper .chip-content{display:block;overflow:hidden;padding-right:1rem;text-overflow:ellipsis}.chips-field-wrapper .copy-content-button{background-color:transparent;border:none;color:#2a6496;cursor:pointer;margin-top:8px}.chips-field-wrapper .feedback-message{color:#0c9348;display:block;margin-top:8px;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }, { kind: "ngmodule", type: ChipsModule }, { kind: "component", type: i1$6.ChipsComponent, selector: "s-chips", inputs: ["disabled", "field", "value", "placeholder", "max", "maxLength", "inputId", "allowDuplicated", "caseSensitiveDuplication", "addOnTab", "addOnBlur", "separator", "autofocus", "infoLabel", "keyFilter", "showTooltip", "maxLengthRenderWithoutTooltip"], outputs: ["added", "removed", "focused", "focusLost", "chipClicked", "valueChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
1415
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChipsFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n@if (inputRef) {\n <s-field-label\n [field]=\"_field\"\n [fieldContainerRef]=\"inputRef\"\n ></s-field-label>\n}\n\n<div class=\"chips-field-wrapper\">\n <div style=\"width: 100%\">\n @if (_field.keyFilter) {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (added)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (removed)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (chipClicked)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (focused)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (focusLost)=\"_field.onBlur ? _field.onBlur($event) : null\"\n [keyFilter]=\"_field.keyFilter\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n } @else {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (onAdd)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (onRemove)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (onChipClick)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (onFocus)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (onBlur)=\"_field.onBlur ? _field.onBlur($event) : null\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n }\n </div>\n\n @if (_field.showCopyButton && formControl().value?.length > 0 && copyButtonVisible) {\n <button\n class=\"copy-content-button\"\n (click)=\"onCopyFieldContent()\"\n >\n {{ 'platform.angular_components.copy_field_content' | translate }}\n </button>\n }\n\n @if (feedbackMessageVisible) {\n <span class=\"feedback-message\">\n {{ 'platform.angular_components.copied_to_clipboard' | translate }}\n </span>\n }\n</div>\n\n", styles: [".chips-field-wrapper{align-items:flex-start;display:flex;flex-direction:column}.chips-field-wrapper .chip-content{display:block;overflow:hidden;padding-right:1rem;text-overflow:ellipsis}.chips-field-wrapper .copy-content-button{background-color:transparent;border:none;color:#2a6496;cursor:pointer;margin-top:8px}.chips-field-wrapper .feedback-message{color:#0c9348;display:block;margin-top:8px;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }, { kind: "ngmodule", type: ChipsModule }, { kind: "component", type: i1$6.ChipsComponent, selector: "s-chips", inputs: ["disabled", "field", "value", "placeholder", "max", "maxLength", "inputId", "allowDuplicated", "caseSensitiveDuplication", "addOnTab", "addOnBlur", "separator", "autofocus", "infoLabel", "keyFilter", "showTooltip", "maxLengthRenderWithoutTooltip"], outputs: ["added", "removed", "focused", "focusLost", "chipClicked", "valueChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
1416
1416
  }
1417
1417
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChipsFieldComponent, decorators: [{
1418
1418
  type: Component,
1419
- args: [{ standalone: true, imports: [FieldLabelComponent, ChipsModule, ReactiveFormsModule, TranslateModule, TooltipDirective], template: "@let _field = field();\n@if (inputRef) {\n <s-field-label\n [field]=\"_field\"\n [fieldContainerRef]=\"inputRef\"\n ></s-field-label>\n}\n\n<div class=\"chips-field-wrapper\">\n <div style=\"width: 100%\">\n @if (_field.keyFilter) {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (onAdd)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (onRemove)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (onChipClick)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (onFocus)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (onBlur)=\"_field.onBlur ? _field.onBlur($event) : null\"\n [keyFilter]=\"_field.keyFilter\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n } @else {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (onAdd)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (onRemove)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (onChipClick)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (onFocus)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (onBlur)=\"_field.onBlur ? _field.onBlur($event) : null\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n }\n </div>\n\n @if (_field.showCopyButton && formControl().value?.length > 0 && copyButtonVisible) {\n <button\n class=\"copy-content-button\"\n (click)=\"onCopyFieldContent()\"\n >\n {{ 'platform.angular_components.copy_field_content' | translate }}\n </button>\n }\n\n @if (feedbackMessageVisible) {\n <span class=\"feedback-message\">\n {{ 'platform.angular_components.copied_to_clipboard' | translate }}\n </span>\n }\n</div>\n\n", styles: [".chips-field-wrapper{align-items:flex-start;display:flex;flex-direction:column}.chips-field-wrapper .chip-content{display:block;overflow:hidden;padding-right:1rem;text-overflow:ellipsis}.chips-field-wrapper .copy-content-button{background-color:transparent;border:none;color:#2a6496;cursor:pointer;margin-top:8px}.chips-field-wrapper .feedback-message{color:#0c9348;display:block;margin-top:8px;-webkit-user-select:none;user-select:none}\n"] }]
1419
+ args: [{ standalone: true, imports: [FieldLabelComponent, ChipsModule, ReactiveFormsModule, TranslateModule, TooltipDirective], template: "@let _field = field();\n@if (inputRef) {\n <s-field-label\n [field]=\"_field\"\n [fieldContainerRef]=\"inputRef\"\n ></s-field-label>\n}\n\n<div class=\"chips-field-wrapper\">\n <div style=\"width: 100%\">\n @if (_field.keyFilter) {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (added)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (removed)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (chipClicked)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (focused)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (focusLost)=\"_field.onBlur ? _field.onBlur($event) : null\"\n [keyFilter]=\"_field.keyFilter\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n } @else {\n <s-chips\n [inputId]=\"_field.id || _field.name\"\n [formControl]=\"formControl()\"\n [placeholder]=\"_field.placeholder\"\n [allowDuplicated]=\"false\"\n [addOnTab]=\"true\"\n [addOnBlur]=\"true\"\n (onAdd)=\"_field.onAdd ? _field.onAdd($event) : null\"\n (onRemove)=\"_field.onRemove ? _field.onRemove($event) : null\"\n (onChipClick)=\"_field.onChipClick ? _field.onChipClick($event) : null\"\n (onFocus)=\"_field.onFocus ? _field.onFocus($event) : null\"\n (onBlur)=\"_field.onBlur ? _field.onBlur($event) : null\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <span\n class=\"chip-content\"\n [sTooltip]=\"item\"\n >\n {{ item }}\n </span>\n </ng-template>\n </s-chips>\n }\n </div>\n\n @if (_field.showCopyButton && formControl().value?.length > 0 && copyButtonVisible) {\n <button\n class=\"copy-content-button\"\n (click)=\"onCopyFieldContent()\"\n >\n {{ 'platform.angular_components.copy_field_content' | translate }}\n </button>\n }\n\n @if (feedbackMessageVisible) {\n <span class=\"feedback-message\">\n {{ 'platform.angular_components.copied_to_clipboard' | translate }}\n </span>\n }\n</div>\n\n", styles: [".chips-field-wrapper{align-items:flex-start;display:flex;flex-direction:column}.chips-field-wrapper .chip-content{display:block;overflow:hidden;padding-right:1rem;text-overflow:ellipsis}.chips-field-wrapper .copy-content-button{background-color:transparent;border:none;color:#2a6496;cursor:pointer;margin-top:8px}.chips-field-wrapper .feedback-message{color:#0c9348;display:block;margin-top:8px;-webkit-user-select:none;user-select:none}\n"] }]
1420
1420
  }] });
1421
1421
 
1422
1422
  class ContentGeneratorFieldComponent {