@danske/sapphire-angular 3.7.1 → 3.8.1

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.
Files changed (26) hide show
  1. package/esm2020/lib/button/src/button-group.component.mjs +2 -2
  2. package/esm2020/lib/button/src/button.component.mjs +29 -11
  3. package/esm2020/lib/button/src/button.module.mjs +14 -4
  4. package/esm2020/lib/button/src/toggle-button.component.mjs +4 -3
  5. package/esm2020/lib/checkbox/src/checkbox-group.component.mjs +2 -2
  6. package/esm2020/lib/common/focused.directive.mjs +8 -8
  7. package/esm2020/lib/list/src/list.component.mjs +2 -2
  8. package/esm2020/lib/listbox/src/listbox.component.mjs +2 -2
  9. package/esm2020/lib/menu/src/menu.component.mjs +2 -2
  10. package/esm2020/lib/modal/src/panel/panel.component.mjs +2 -2
  11. package/esm2020/lib/radio/src/radio-group.component.mjs +2 -2
  12. package/esm2020/lib/table/src/table.component.mjs +2 -2
  13. package/esm2020/lib/text-field/src/text-field.component.mjs +2 -2
  14. package/esm2020/lib/theme/src/themes.mjs +4 -4
  15. package/esm2020/lib/tooltip/src/tooltip.module.mjs +12 -4
  16. package/esm2020/lib/tooltip/src/truncated-with-tooltip.directive.mjs +90 -9
  17. package/fesm2015/danske-sapphire-angular.mjs +5585 -5467
  18. package/fesm2015/danske-sapphire-angular.mjs.map +1 -1
  19. package/fesm2020/danske-sapphire-angular.mjs +5399 -5285
  20. package/fesm2020/danske-sapphire-angular.mjs.map +1 -1
  21. package/lib/button/src/button.component.d.ts +10 -5
  22. package/lib/button/src/button.module.d.ts +3 -1
  23. package/lib/common/focused.directive.d.ts +2 -2
  24. package/lib/tooltip/src/tooltip.module.d.ts +1 -1
  25. package/lib/tooltip/src/truncated-with-tooltip.directive.d.ts +58 -4
  26. package/package.json +3 -3
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
3
3
  import { OverlayModule } from '@angular/cdk/overlay';
4
4
  import { TooltipComponent } from './tooltip.component';
5
5
  import { TooltipDirective } from './tooltip.directive';
6
- import { TruncatedWithTooltipDirective } from './truncated-with-tooltip.directive';
6
+ import { TruncatedWithTooltipDirective, TruncatedWithTooltipContentElementDirective, } from './truncated-with-tooltip.directive';
7
7
  import * as i0 from "@angular/core";
8
8
  export class SapphireTooltipModule {
9
9
  }
@@ -11,7 +11,10 @@ SapphireTooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", ve
11
11
  SapphireTooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.0", ngImport: i0, type: SapphireTooltipModule, declarations: [TooltipComponent], imports: [CommonModule,
12
12
  OverlayModule,
13
13
  TooltipDirective,
14
- TruncatedWithTooltipDirective], exports: [TooltipDirective, TruncatedWithTooltipDirective] });
14
+ TruncatedWithTooltipDirective,
15
+ TruncatedWithTooltipContentElementDirective], exports: [TooltipDirective,
16
+ TruncatedWithTooltipDirective,
17
+ TruncatedWithTooltipContentElementDirective] });
15
18
  SapphireTooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireTooltipModule, imports: [CommonModule,
16
19
  OverlayModule] });
17
20
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireTooltipModule, decorators: [{
@@ -23,8 +26,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
23
26
  OverlayModule,
24
27
  TooltipDirective,
25
28
  TruncatedWithTooltipDirective,
29
+ TruncatedWithTooltipContentElementDirective,
30
+ ],
31
+ exports: [
32
+ TooltipDirective,
33
+ TruncatedWithTooltipDirective,
34
+ TruncatedWithTooltipContentElementDirective,
26
35
  ],
27
- exports: [TooltipDirective, TruncatedWithTooltipDirective],
28
36
  }]
29
37
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2x0aXAvc3JjL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFZbkYsTUFBTSxPQUFPLHFCQUFxQjs7a0hBQXJCLHFCQUFxQjttSEFBckIscUJBQXFCLGlCQVRqQixnQkFBZ0IsYUFFN0IsWUFBWTtRQUNaLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsNkJBQTZCLGFBRXJCLGdCQUFnQixFQUFFLDZCQUE2QjttSEFFOUMscUJBQXFCLFlBUDlCLFlBQVk7UUFDWixhQUFhOzJGQU1KLHFCQUFxQjtrQkFWakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLDZCQUE2QjtxQkFDOUI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsNkJBQTZCLENBQUM7aUJBQzNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4vdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuL3RydW5jYXRlZC13aXRoLXRvb2x0aXAuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbVG9vbHRpcENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgT3ZlcmxheU1vZHVsZSxcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxuICAgIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBleHBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBTYXBwaGlyZVRvb2x0aXBNb2R1bGUge31cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2x0aXAvc3JjL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDJDQUEyQyxHQUM1QyxNQUFNLG9DQUFvQyxDQUFDOztBQWlCNUMsTUFBTSxPQUFPLHFCQUFxQjs7a0hBQXJCLHFCQUFxQjttSEFBckIscUJBQXFCLGlCQWRqQixnQkFBZ0IsYUFFN0IsWUFBWTtRQUNaLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsNkJBQTZCO1FBQzdCLDJDQUEyQyxhQUczQyxnQkFBZ0I7UUFDaEIsNkJBQTZCO1FBQzdCLDJDQUEyQzttSEFHbEMscUJBQXFCLFlBWjlCLFlBQVk7UUFDWixhQUFhOzJGQVdKLHFCQUFxQjtrQkFmakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLDZCQUE2Qjt3QkFDN0IsMkNBQTJDO3FCQUM1QztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQiw2QkFBNkI7d0JBQzdCLDJDQUEyQztxQkFDNUM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZSxcbiAgVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50RWxlbWVudERpcmVjdGl2ZSxcbn0gZnJvbSAnLi90cnVuY2F0ZWQtd2l0aC10b29sdGlwLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1Rvb2x0aXBDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcENvbnRlbnRFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcENvbnRlbnRFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTYXBwaGlyZVRvb2x0aXBNb2R1bGUge31cbiJdfQ==
@@ -1,9 +1,66 @@
1
1
  import { __decorate } from "tslib";
2
- import { Directive, Input, } from '@angular/core';
2
+ import { Directive, Input, Optional, SkipSelf, } from '@angular/core';
3
3
  import { TooltipDirective } from './tooltip.directive';
4
4
  import { CoerceBoolean } from '../../common/coerce-boolean.decorator';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "./tooltip.directive";
6
+ /**
7
+ * Marks an element as the content element to be checked for overflow
8
+ * when using spTruncatedWithTooltip directive.
9
+ * Automatically registers itself with the parent TruncatedWithTooltipDirective.
10
+ */
11
+ export class TruncatedWithTooltipContentElementDirective {
12
+ constructor(elementRef, parentDirective) {
13
+ this.elementRef = elementRef;
14
+ this.parentDirective = parentDirective;
15
+ }
16
+ ngOnInit() {
17
+ if (this.parentDirective) {
18
+ this.parentDirective.registerContentElement(this);
19
+ }
20
+ }
21
+ ngOnDestroy() {
22
+ if (this.parentDirective) {
23
+ this.parentDirective.unregisterContentElement();
24
+ }
25
+ }
26
+ }
27
+ TruncatedWithTooltipContentElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipContentElementDirective, deps: [{ token: i0.ElementRef }, { token: TruncatedWithTooltipDirective, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
28
+ TruncatedWithTooltipContentElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipContentElementDirective, isStandalone: true, selector: "[spTruncatedWithTooltipContent]", ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipContentElementDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ selector: '[spTruncatedWithTooltipContent]',
33
+ standalone: true,
34
+ }]
35
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: TruncatedWithTooltipDirective, decorators: [{
36
+ type: Optional
37
+ }, {
38
+ type: SkipSelf
39
+ }] }]; } });
40
+ /**
41
+ * Internal wrapper directive that extends TooltipDirective for use with truncated text functionality.
42
+ *
43
+ * This directive is designed to be used exclusively as a hostDirective within the
44
+ * TruncatedWithTooltipDirective, enabling components to support automatic truncation tooltips
45
+ * without conflicting with user-provided tooltip directives.
46
+ *
47
+ * Angular's hostDirectives feature allows a directive to be composed with other directives,
48
+ * but if we used TooltipDirective directly in components that expose spTruncatedWithTooltip,
49
+ * it would prevent users from also applying their own spTooltip directive to the same component.
50
+ * By creating this internal wrapper, we maintain directive composition flexibility while
51
+ * avoiding selector conflicts.
52
+ */
53
+ export class TruncatedWithTooltipDirectiveInternal extends TooltipDirective {
54
+ }
55
+ TruncatedWithTooltipDirectiveInternal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirectiveInternal, deps: null, target: i0.ɵɵFactoryTarget.Directive });
56
+ TruncatedWithTooltipDirectiveInternal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipDirectiveInternal, isStandalone: true, usesInheritance: true, ngImport: i0 });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirectiveInternal, decorators: [{
58
+ type: Directive,
59
+ args: [{
60
+ standalone: true,
61
+ // No selector as we'll only use it in hostDirectives of ButtonComponent
62
+ }]
63
+ }] });
7
64
  /**
8
65
  * Shows a tooltip with the text content of the host element, if the content is
9
66
  * overflowing. It also applies inline styles to hide the overflow and show the
@@ -11,8 +68,30 @@ import * as i1 from "./tooltip.directive";
11
68
  *
12
69
  * @example <something spTruncatedWithTooltip>Overflow will always be truncated</something>
13
70
  * @example <something spTruncatedWithTooltip="someCondition">Overflow will be truncated only if someCondition is truthy</something>
71
+ * @example
72
+ * By using spTruncatedWithTooltipContent, you can detect overflow on a child element
73
+ * while keeping the tooltip attached to the host element:
74
+ * <div spTruncatedWithTooltip>
75
+ * <span spTruncatedWithTooltipContent>This text will be checked for overflow</span>
76
+ * </div>
14
77
  */
15
78
  export class TruncatedWithTooltipDirective {
79
+ /**
80
+ * Registers a content element directive.
81
+ * Called automatically by TruncatedWithTooltipContentElementDirective.
82
+ * @internal
83
+ */
84
+ registerContentElement(directive) {
85
+ this.contentElementDirective = directive;
86
+ }
87
+ /**
88
+ * Unregisters the content element directive.
89
+ * Called automatically by TruncatedWithTooltipContentElementDirective.
90
+ * @internal
91
+ */
92
+ unregisterContentElement() {
93
+ this.contentElementDirective = undefined;
94
+ }
16
95
  constructor(tooltipDirective, elementRef) {
17
96
  this.tooltipDirective = tooltipDirective;
18
97
  this.elementRef = elementRef;
@@ -22,18 +101,20 @@ export class TruncatedWithTooltipDirective {
22
101
  this.enabled = true;
23
102
  }
24
103
  ngAfterContentChecked() {
25
- const contentElement = this.elementRef.nativeElement;
104
+ const contentElement = this.contentElementDirective?.elementRef.nativeElement ??
105
+ this.elementRef.nativeElement;
26
106
  this.tooltipDirective.tooltipText =
27
107
  this.enabled && this.hasOverflow() ? contentElement.innerText : null;
28
108
  }
29
109
  hasOverflow() {
30
- const contentElement = this.elementRef.nativeElement;
110
+ const contentElement = this.contentElementDirective?.elementRef.nativeElement ??
111
+ this.elementRef.nativeElement;
31
112
  return (contentElement.scrollWidth > contentElement.clientWidth ||
32
113
  contentElement.scrollHeight > contentElement.clientHeight);
33
114
  }
34
115
  }
35
- TruncatedWithTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirective, deps: [{ token: i1.TooltipDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
36
- TruncatedWithTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipDirective, isStandalone: true, selector: "[spTruncatedWithTooltip]", inputs: { enabled: ["spTruncatedWithTooltip", "enabled"] }, host: { properties: { "style.overflow": "enabled && \"hidden\"", "style.text-overflow": "enabled && \"ellipsis\"", "style.white-space": "enabled && \"nowrap\"" } }, hostDirectives: [{ directive: i1.TooltipDirective }], ngImport: i0 });
116
+ TruncatedWithTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirective, deps: [{ token: TruncatedWithTooltipDirectiveInternal }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
117
+ TruncatedWithTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipDirective, isStandalone: true, selector: "[spTruncatedWithTooltip]", inputs: { enabled: ["spTruncatedWithTooltip", "enabled"] }, host: { properties: { "style.overflow": "enabled && \"hidden\"", "style.text-overflow": "enabled && \"ellipsis\"", "style.white-space": "enabled && \"nowrap\"" } }, hostDirectives: [{ directive: TruncatedWithTooltipDirectiveInternal }], ngImport: i0 });
37
118
  __decorate([
38
119
  CoerceBoolean
39
120
  ], TruncatedWithTooltipDirective.prototype, "enabled", void 0);
@@ -42,15 +123,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
42
123
  args: [{
43
124
  selector: '[spTruncatedWithTooltip]',
44
125
  standalone: true,
45
- hostDirectives: [TooltipDirective],
126
+ hostDirectives: [TruncatedWithTooltipDirectiveInternal],
46
127
  host: {
47
128
  '[style.overflow]': 'enabled && "hidden"',
48
129
  '[style.text-overflow]': 'enabled && "ellipsis"',
49
130
  '[style.white-space]': 'enabled && "nowrap"',
50
131
  },
51
132
  }]
52
- }], ctorParameters: function () { return [{ type: i1.TooltipDirective }, { type: i0.ElementRef }]; }, propDecorators: { enabled: [{
133
+ }], ctorParameters: function () { return [{ type: TruncatedWithTooltipDirectiveInternal }, { type: i0.ElementRef }]; }, propDecorators: { enabled: [{
53
134
  type: Input,
54
135
  args: ['spTruncatedWithTooltip']
55
136
  }] } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGVkLXdpdGgtdG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2x0aXAvc3JjL3RydW5jYXRlZC13aXRoLXRvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQUV0RTs7Ozs7OztHQU9HO0FBV0gsTUFBTSxPQUFPLDZCQUE2QjtJQVF4QyxZQUNVLGdCQUFrQyxFQUNsQyxVQUFzQjtRQUR0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFUaEM7O1dBRUc7UUFHSCxZQUFPLEdBQWlCLElBQUksQ0FBQztJQUsxQixDQUFDO0lBRUoscUJBQXFCO1FBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO1lBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDckQsT0FBTyxDQUNMLGNBQWMsQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLFdBQVc7WUFDdkQsY0FBYyxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUMxRCxDQUFDO0lBQ0osQ0FBQzs7MEhBekJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCO0FBS3hDO0lBREMsYUFBYTs4REFFZTsyRkFObEIsNkJBQTZCO2tCQVZ6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDbEMsSUFBSSxFQUFFO3dCQUNKLGtCQUFrQixFQUFFLHFCQUFxQjt3QkFDekMsdUJBQXVCLEVBQUUsdUJBQXVCO3dCQUNoRCxxQkFBcUIsRUFBRSxxQkFBcUI7cUJBQzdDO2lCQUNGO2dJQU9DLE9BQU87c0JBRE4sS0FBSzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb2VyY2VCb29sZWFuIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvZXJjZS1ib29sZWFuLmRlY29yYXRvcic7XG5cbi8qKlxuICogU2hvd3MgYSB0b29sdGlwIHdpdGggdGhlIHRleHQgY29udGVudCBvZiB0aGUgaG9zdCBlbGVtZW50LCBpZiB0aGUgY29udGVudCBpc1xuICogb3ZlcmZsb3dpbmcuIEl0IGFsc28gYXBwbGllcyBpbmxpbmUgc3R5bGVzIHRvIGhpZGUgdGhlIG92ZXJmbG93IGFuZCBzaG93IHRoZVxuICogZWxsaXBzaXMuXG4gKlxuICogQGV4YW1wbGUgPHNvbWV0aGluZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwPk92ZXJmbG93IHdpbGwgYWx3YXlzIGJlIHRydW5jYXRlZDwvc29tZXRoaW5nPlxuICogQGV4YW1wbGUgPHNvbWV0aGluZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwPVwic29tZUNvbmRpdGlvblwiPk92ZXJmbG93IHdpbGwgYmUgdHJ1bmNhdGVkIG9ubHkgaWYgc29tZUNvbmRpdGlvbiBpcyB0cnV0aHk8L3NvbWV0aGluZz5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NwVHJ1bmNhdGVkV2l0aFRvb2x0aXBdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtUb29sdGlwRGlyZWN0aXZlXSxcbiAgaG9zdDoge1xuICAgICdbc3R5bGUub3ZlcmZsb3ddJzogJ2VuYWJsZWQgJiYgXCJoaWRkZW5cIicsXG4gICAgJ1tzdHlsZS50ZXh0LW92ZXJmbG93XSc6ICdlbmFibGVkICYmIFwiZWxsaXBzaXNcIicsXG4gICAgJ1tzdHlsZS53aGl0ZS1zcGFjZV0nOiAnZW5hYmxlZCAmJiBcIm5vd3JhcFwiJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRpcmVjdGl2ZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgQENvZXJjZUJvb2xlYW5cbiAgQElucHV0KCdzcFRydW5jYXRlZFdpdGhUb29sdGlwJylcbiAgZW5hYmxlZDogQm9vbGVhbklucHV0ID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvb2x0aXBEaXJlY3RpdmU6IFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnRvb2x0aXBEaXJlY3RpdmUudG9vbHRpcFRleHQgPVxuICAgICAgdGhpcy5lbmFibGVkICYmIHRoaXMuaGFzT3ZlcmZsb3coKSA/IGNvbnRlbnRFbGVtZW50LmlubmVyVGV4dCA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGhhc092ZXJmbG93KCkge1xuICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbnRlbnRFbGVtZW50LnNjcm9sbFdpZHRoID4gY29udGVudEVsZW1lbnQuY2xpZW50V2lkdGggfHxcbiAgICAgIGNvbnRlbnRFbGVtZW50LnNjcm9sbEhlaWdodCA+IGNvbnRlbnRFbGVtZW50LmNsaWVudEhlaWdodFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGVkLXdpdGgtdG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2x0aXAvc3JjL3RydW5jYXRlZC13aXRoLXRvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFHTCxRQUFRLEVBQ1IsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFFdEU7Ozs7R0FJRztBQUtILE1BQU0sT0FBTywyQ0FBMkM7SUFHdEQsWUFDUyxVQUFtQyxFQUdsQyxlQUErQztRQUhoRCxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUdsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0M7SUFDdEQsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqRDtJQUNILENBQUM7O3dJQXBCVSwyQ0FBMkM7NEhBQTNDLDJDQUEyQzsyRkFBM0MsMkNBQTJDO2tCQUp2RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQ0FBaUM7b0JBQzNDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBTUksUUFBUTs7MEJBQ1IsUUFBUTs7QUFpQmI7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLHFDQUFzQyxTQUFRLGdCQUFnQjs7a0lBQTlELHFDQUFxQztzSEFBckMscUNBQXFDOzJGQUFyQyxxQ0FBcUM7a0JBSmpELFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLHdFQUF3RTtpQkFDekU7O0FBR0Q7Ozs7Ozs7Ozs7Ozs7R0FhRztBQVdILE1BQU0sT0FBTyw2QkFBNkI7SUFleEM7Ozs7T0FJRztJQUNILHNCQUFzQixDQUNwQixTQUFzRDtRQUV0RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQ1UsZ0JBQXVELEVBQ3ZELFVBQXNCO1FBRHRCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUM7UUFDdkQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXBDaEM7O1dBRUc7UUFHSCxZQUFPLEdBQWlCLElBQUksQ0FBQztJQWdDMUIsQ0FBQztJQUVKLHFCQUFxQjtRQUNuQixNQUFNLGNBQWMsR0FDbEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxhQUFhO1lBQ3RELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO1lBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxjQUFjLEdBQ2xCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENBQUMsYUFBYTtZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNoQyxPQUFPLENBQ0wsY0FBYyxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsV0FBVztZQUN2RCxjQUFjLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQzFELENBQUM7SUFDSixDQUFDOzswSEF4RFUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsMlRBMUI3QixxQ0FBcUM7QUErQmhEO0lBREMsYUFBYTs4REFFZTsyRkFObEIsNkJBQTZCO2tCQVZ6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztvQkFDdkQsSUFBSSxFQUFFO3dCQUNKLGtCQUFrQixFQUFFLHFCQUFxQjt3QkFDekMsdUJBQXVCLEVBQUUsdUJBQXVCO3dCQUNoRCxxQkFBcUIsRUFBRSxxQkFBcUI7cUJBQzdDO2lCQUNGO2tKQU9DLE9BQU87c0JBRE4sS0FBSzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb2VyY2VCb29sZWFuIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvZXJjZS1ib29sZWFuLmRlY29yYXRvcic7XG5cbi8qKlxuICogTWFya3MgYW4gZWxlbWVudCBhcyB0aGUgY29udGVudCBlbGVtZW50IHRvIGJlIGNoZWNrZWQgZm9yIG92ZXJmbG93XG4gKiB3aGVuIHVzaW5nIHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXAgZGlyZWN0aXZlLlxuICogQXV0b21hdGljYWxseSByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIHBhcmVudCBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NwVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBAU2tpcFNlbGYoKVxuICAgIHByaXZhdGUgcGFyZW50RGlyZWN0aXZlPzogVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmVudERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5wYXJlbnREaXJlY3RpdmUucmVnaXN0ZXJDb250ZW50RWxlbWVudCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYXJlbnREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMucGFyZW50RGlyZWN0aXZlLnVucmVnaXN0ZXJDb250ZW50RWxlbWVudCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIHdyYXBwZXIgZGlyZWN0aXZlIHRoYXQgZXh0ZW5kcyBUb29sdGlwRGlyZWN0aXZlIGZvciB1c2Ugd2l0aCB0cnVuY2F0ZWQgdGV4dCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgZXhjbHVzaXZlbHkgYXMgYSBob3N0RGlyZWN0aXZlIHdpdGhpbiB0aGVcbiAqIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlLCBlbmFibGluZyBjb21wb25lbnRzIHRvIHN1cHBvcnQgYXV0b21hdGljIHRydW5jYXRpb24gdG9vbHRpcHNcbiAqIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIHRvb2x0aXAgZGlyZWN0aXZlcy5cbiAqXG4gKiBBbmd1bGFyJ3MgaG9zdERpcmVjdGl2ZXMgZmVhdHVyZSBhbGxvd3MgYSBkaXJlY3RpdmUgdG8gYmUgY29tcG9zZWQgd2l0aCBvdGhlciBkaXJlY3RpdmVzLFxuICogYnV0IGlmIHdlIHVzZWQgVG9vbHRpcERpcmVjdGl2ZSBkaXJlY3RseSBpbiBjb21wb25lbnRzIHRoYXQgZXhwb3NlIHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXAsXG4gKiBpdCB3b3VsZCBwcmV2ZW50IHVzZXJzIGZyb20gYWxzbyBhcHBseWluZyB0aGVpciBvd24gc3BUb29sdGlwIGRpcmVjdGl2ZSB0byB0aGUgc2FtZSBjb21wb25lbnQuXG4gKiBCeSBjcmVhdGluZyB0aGlzIGludGVybmFsIHdyYXBwZXIsIHdlIG1haW50YWluIGRpcmVjdGl2ZSBjb21wb3NpdGlvbiBmbGV4aWJpbGl0eSB3aGlsZVxuICogYXZvaWRpbmcgc2VsZWN0b3IgY29uZmxpY3RzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gTm8gc2VsZWN0b3IgYXMgd2UnbGwgb25seSB1c2UgaXQgaW4gaG9zdERpcmVjdGl2ZXMgb2YgQnV0dG9uQ29tcG9uZW50XG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlSW50ZXJuYWwgZXh0ZW5kcyBUb29sdGlwRGlyZWN0aXZlIHt9XG5cbi8qKlxuICogU2hvd3MgYSB0b29sdGlwIHdpdGggdGhlIHRleHQgY29udGVudCBvZiB0aGUgaG9zdCBlbGVtZW50LCBpZiB0aGUgY29udGVudCBpc1xuICogb3ZlcmZsb3dpbmcuIEl0IGFsc28gYXBwbGllcyBpbmxpbmUgc3R5bGVzIHRvIGhpZGUgdGhlIG92ZXJmbG93IGFuZCBzaG93IHRoZVxuICogZWxsaXBzaXMuXG4gKlxuICogQGV4YW1wbGUgPHNvbWV0aGluZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwPk92ZXJmbG93IHdpbGwgYWx3YXlzIGJlIHRydW5jYXRlZDwvc29tZXRoaW5nPlxuICogQGV4YW1wbGUgPHNvbWV0aGluZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwPVwic29tZUNvbmRpdGlvblwiPk92ZXJmbG93IHdpbGwgYmUgdHJ1bmNhdGVkIG9ubHkgaWYgc29tZUNvbmRpdGlvbiBpcyB0cnV0aHk8L3NvbWV0aGluZz5cbiAqIEBleGFtcGxlXG4gKiBCeSB1c2luZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudCwgeW91IGNhbiBkZXRlY3Qgb3ZlcmZsb3cgb24gYSBjaGlsZCBlbGVtZW50XG4gKiB3aGlsZSBrZWVwaW5nIHRoZSB0b29sdGlwIGF0dGFjaGVkIHRvIHRoZSBob3N0IGVsZW1lbnQ6XG4gKiA8ZGl2IHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXA+XG4gKiAgIDxzcGFuIHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50PlRoaXMgdGV4dCB3aWxsIGJlIGNoZWNrZWQgZm9yIG92ZXJmbG93PC9zcGFuPlxuICogPC9kaXY+XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzcFRydW5jYXRlZFdpdGhUb29sdGlwXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3REaXJlY3RpdmVzOiBbVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVJbnRlcm5hbF0sXG4gIGhvc3Q6IHtcbiAgICAnW3N0eWxlLm92ZXJmbG93XSc6ICdlbmFibGVkICYmIFwiaGlkZGVuXCInLFxuICAgICdbc3R5bGUudGV4dC1vdmVyZmxvd10nOiAnZW5hYmxlZCAmJiBcImVsbGlwc2lzXCInLFxuICAgICdbc3R5bGUud2hpdGUtc3BhY2VdJzogJ2VuYWJsZWQgJiYgXCJub3dyYXBcIicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaXMgZW5hYmxlZC5cbiAgICovXG4gIEBDb2VyY2VCb29sZWFuXG4gIEBJbnB1dCgnc3BUcnVuY2F0ZWRXaXRoVG9vbHRpcCcpXG4gIGVuYWJsZWQ6IEJvb2xlYW5JbnB1dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNvbnRlbnQgZWxlbWVudCBtYXJrZWQgd2l0aCBzcFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudCBkaXJlY3RpdmUuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGhvc3QgZWxlbWVudCB3aWxsIGJlIHVzZWQuXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBzZXQgd2hlbiBhIGNoaWxkIGVsZW1lbnQgaGFzIHRoZSBkaXJlY3RpdmUuXG4gICAqL1xuICBjb250ZW50RWxlbWVudERpcmVjdGl2ZT86IFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNvbnRlbnQgZWxlbWVudCBkaXJlY3RpdmUuXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVnaXN0ZXJDb250ZW50RWxlbWVudChcbiAgICBkaXJlY3RpdmU6IFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmVcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50RWxlbWVudERpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyB0aGUgY29udGVudCBlbGVtZW50IGRpcmVjdGl2ZS5cbiAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50RWxlbWVudERpcmVjdGl2ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bnJlZ2lzdGVyQ29udGVudEVsZW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50RWxlbWVudERpcmVjdGl2ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbHRpcERpcmVjdGl2ZTogVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVJbnRlcm5hbCxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50RWxlbWVudCA9XG4gICAgICB0aGlzLmNvbnRlbnRFbGVtZW50RGlyZWN0aXZlPy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgPz9cbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMudG9vbHRpcERpcmVjdGl2ZS50b29sdGlwVGV4dCA9XG4gICAgICB0aGlzLmVuYWJsZWQgJiYgdGhpcy5oYXNPdmVyZmxvdygpID8gY29udGVudEVsZW1lbnQuaW5uZXJUZXh0IDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzT3ZlcmZsb3coKSB7XG4gICAgY29uc3QgY29udGVudEVsZW1lbnQgPVxuICAgICAgdGhpcy5jb250ZW50RWxlbWVudERpcmVjdGl2ZT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID8/XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKFxuICAgICAgY29udGVudEVsZW1lbnQuc2Nyb2xsV2lkdGggPiBjb250ZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fFxuICAgICAgY29udGVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gY29udGVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgKTtcbiAgfVxufVxuIl19