ngx-dynamic-entity-builder 1.0.0 → 1.2.0

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.
@@ -11,4 +11,4 @@ export function deepClone(value) {
11
11
  return structuredClone(value);
12
12
  return JSON.parse(JSON.stringify(value));
13
13
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2Nsb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLEtBQVE7SUFDbkMsSUFBSSxPQUFPLGVBQWUsS0FBSyxVQUFVO1FBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQU0sQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIERlZXAgY2xvbmUgd2l0aCBhIEpTT04gZmFsbGJhY2suXHJcbiAqXHJcbiAqIGBzdHJ1Y3R1cmVkQ2xvbmVgIGlzIG5vdCB1bml2ZXJzYWxseSBhdmFpbGFibGUgKG9sZGVyIGJyb3dzZXJzLCBhbmQganNkb20gYmVmb3JlIHYyMiksXHJcbiAqIHNvIGl0IG11c3QgbmV2ZXIgYmUgY2FsbGVkIHVuZ3VhcmRlZCDigJQgYW4gdW5ndWFyZGVkIGNhbGwgdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3IgYW5kIHRoZVxyXG4gKiBjYWxsZXIgc2lsZW50bHkgZG9lcyBub3RoaW5nLiBDb25maWcgYW5kIHJ1bGUgb2JqZWN0cyBhcmUgSlNPTi1zYWZlLCBzbyB0aGUgZmFsbGJhY2sgaXNcclxuICogbG9zc2xlc3MgaGVyZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ2xvbmU8VD4odmFsdWU6IFQpOiBUIHtcclxuICBpZiAodHlwZW9mIHN0cnVjdHVyZWRDbG9uZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSk7XHJcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSBhcyBUO1xyXG59XHJcbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2Nsb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLEtBQVE7SUFDbkMsSUFBSSxPQUFPLGVBQWUsS0FBSyxVQUFVO1FBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQU0sQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWVwIGNsb25lIHdpdGggYSBKU09OIGZhbGxiYWNrLlxuICpcbiAqIGBzdHJ1Y3R1cmVkQ2xvbmVgIGlzIG5vdCB1bml2ZXJzYWxseSBhdmFpbGFibGUgKG9sZGVyIGJyb3dzZXJzLCBhbmQganNkb20gYmVmb3JlIHYyMiksXG4gKiBzbyBpdCBtdXN0IG5ldmVyIGJlIGNhbGxlZCB1bmd1YXJkZWQg4oCUIGFuIHVuZ3VhcmRlZCBjYWxsIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIGFuZCB0aGVcbiAqIGNhbGxlciBzaWxlbnRseSBkb2VzIG5vdGhpbmcuIENvbmZpZyBhbmQgcnVsZSBvYmplY3RzIGFyZSBKU09OLXNhZmUsIHNvIHRoZSBmYWxsYmFjayBpc1xuICogbG9zc2xlc3MgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDbG9uZTxUPih2YWx1ZTogVCk6IFQge1xuICBpZiAodHlwZW9mIHN0cnVjdHVyZWRDbG9uZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSk7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgYXMgVDtcbn1cbiJdfQ==
@@ -35,8 +35,14 @@ export class EntityBuilderTreeNodeComponent {
35
35
  data-testid="builder-field-row"
36
36
  [class.deb-field-row--active]="store.selectedFieldId() === field.id"
37
37
  (click)="store.selectField(field.id)"
38
+ (keydown.enter)="store.selectField(field.id)"
39
+ (keydown.space)="store.selectField(field.id); $event.preventDefault()"
40
+ role="button"
41
+ tabindex="0"
42
+ [attr.aria-pressed]="store.selectedFieldId() === field.id"
43
+ [attr.aria-label]="'Select field ' + fieldLabel(field)"
38
44
  >
39
- <mat-icon class="deb-drag-handle" cdkDragHandle title="Drag to reorder">drag_indicator</mat-icon>
45
+ <mat-icon class="deb-drag-handle" cdkDragHandle aria-hidden="true" title="Drag to reorder (or use the move buttons)">drag_indicator</mat-icon>
40
46
  <mat-icon class="deb-field-type" [matTooltip]="fieldTypeLabel(field.type)">{{ fieldTypeIcon(field.type) }}</mat-icon>
41
47
  <div class="deb-field-meta">
42
48
  <div class="deb-row" style="gap:6px">
@@ -55,16 +61,19 @@ export class EntityBuilderTreeNodeComponent {
55
61
 
56
62
  <button mat-icon-button type="button" [disabled]="index === 0"
57
63
  [attr.data-testid]="'row-up-' + field.id"
64
+ [attr.aria-label]="'Move ' + fieldLabel(field) + ' up'"
58
65
  (click)="store.moveField(field.id, -1); $event.stopPropagation()" matTooltip="Move up">
59
66
  <mat-icon>arrow_upward</mat-icon>
60
67
  </button>
61
68
  <button mat-icon-button type="button" [disabled]="index === totalCount - 1"
62
69
  [attr.data-testid]="'row-down-' + field.id"
70
+ [attr.aria-label]="'Move ' + fieldLabel(field) + ' down'"
63
71
  (click)="store.moveField(field.id, 1); $event.stopPropagation()" matTooltip="Move down">
64
72
  <mat-icon>arrow_downward</mat-icon>
65
73
  </button>
66
74
  <button mat-icon-button type="button"
67
75
  [attr.data-testid]="'row-duplicate-' + field.id"
76
+ [attr.aria-label]="'Duplicate ' + fieldLabel(field)"
68
77
  (click)="store.duplicateField(field.id); $event.stopPropagation()" matTooltip="Duplicate">
69
78
  <mat-icon>content_copy</mat-icon>
70
79
  </button>
@@ -107,8 +116,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
107
116
  data-testid="builder-field-row"
108
117
  [class.deb-field-row--active]="store.selectedFieldId() === field.id"
109
118
  (click)="store.selectField(field.id)"
119
+ (keydown.enter)="store.selectField(field.id)"
120
+ (keydown.space)="store.selectField(field.id); $event.preventDefault()"
121
+ role="button"
122
+ tabindex="0"
123
+ [attr.aria-pressed]="store.selectedFieldId() === field.id"
124
+ [attr.aria-label]="'Select field ' + fieldLabel(field)"
110
125
  >
111
- <mat-icon class="deb-drag-handle" cdkDragHandle title="Drag to reorder">drag_indicator</mat-icon>
126
+ <mat-icon class="deb-drag-handle" cdkDragHandle aria-hidden="true" title="Drag to reorder (or use the move buttons)">drag_indicator</mat-icon>
112
127
  <mat-icon class="deb-field-type" [matTooltip]="fieldTypeLabel(field.type)">{{ fieldTypeIcon(field.type) }}</mat-icon>
113
128
  <div class="deb-field-meta">
114
129
  <div class="deb-row" style="gap:6px">
@@ -127,16 +142,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
127
142
 
128
143
  <button mat-icon-button type="button" [disabled]="index === 0"
129
144
  [attr.data-testid]="'row-up-' + field.id"
145
+ [attr.aria-label]="'Move ' + fieldLabel(field) + ' up'"
130
146
  (click)="store.moveField(field.id, -1); $event.stopPropagation()" matTooltip="Move up">
131
147
  <mat-icon>arrow_upward</mat-icon>
132
148
  </button>
133
149
  <button mat-icon-button type="button" [disabled]="index === totalCount - 1"
134
150
  [attr.data-testid]="'row-down-' + field.id"
151
+ [attr.aria-label]="'Move ' + fieldLabel(field) + ' down'"
135
152
  (click)="store.moveField(field.id, 1); $event.stopPropagation()" matTooltip="Move down">
136
153
  <mat-icon>arrow_downward</mat-icon>
137
154
  </button>
138
155
  <button mat-icon-button type="button"
139
156
  [attr.data-testid]="'row-duplicate-' + field.id"
157
+ [attr.aria-label]="'Duplicate ' + fieldLabel(field)"
140
158
  (click)="store.duplicateField(field.id); $event.stopPropagation()" matTooltip="Duplicate">
141
159
  <mat-icon>content_copy</mat-icon>
142
160
  </button>
@@ -170,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
170
188
  type: Input,
171
189
  args: [{ required: true }]
172
190
  }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWJ1aWxkZXItdHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbnRpdHktYnVpbGRlci10cmVlLW5vZGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBZSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBMEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQXdFcEQsTUFBTSxPQUFPLDhCQUE4QjtJQUN0QixLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXJCLEtBQUssQ0FBcUI7SUFDMUIsS0FBSyxDQUFVO0lBQ2YsVUFBVSxDQUFVO0lBRXJDLGNBQWMsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRVMsYUFBYSxDQUFDLElBQVk7UUFDbEMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksY0FBYyxDQUFDO0lBQ3hELENBQUM7SUFFUyxVQUFVLENBQUMsS0FBa0M7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQzt3R0FsQlUsOEJBQThCOzRGQUE5Qiw4QkFBOEIsOEpBNUQvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBEVCw0REFFVSw4QkFBOEIsa0hBbEV2QyxZQUFZLDhCQUNaLGNBQWMsK2tCQUNkLGVBQWUsMklBQ2YsYUFBYSxtTEFDYixnQkFBZ0I7OzRGQThEUCw4QkFBOEI7a0JBdEUxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ2pCO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBEVDtpQkFDRjs4QkFJNEIsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSwgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyByZXNvbHZlTGFiZWwsIHR5cGUgTmVzdGVkRmllbGRDb25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBCdWlsZGVyU3RvcmUgfSBmcm9tICcuLi9idWlsZGVyLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0RmllbGRUeXBlTWV0YSB9IGZyb20gJy4uL2ZpZWxkLWNhdGFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZW50aXR5LWJ1aWxkZXItdHJlZS1ub2RlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNka0RyYWdcbiAgICAgIGNsYXNzPVwiZGViLWZpZWxkLXJvd1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImJ1aWxkZXItZmllbGQtcm93XCJcbiAgICAgIFtjbGFzcy5kZWItZmllbGQtcm93LS1hY3RpdmVdPVwic3RvcmUuc2VsZWN0ZWRGaWVsZElkKCkgPT09IGZpZWxkLmlkXCJcbiAgICAgIChjbGljayk9XCJzdG9yZS5zZWxlY3RGaWVsZChmaWVsZC5pZClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRlYi1kcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGUgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJkZWItZmllbGQtdHlwZVwiIFttYXRUb29sdGlwXT1cImZpZWxkVHlwZUxhYmVsKGZpZWxkLnR5cGUpXCI+e3sgZmllbGRUeXBlSWNvbihmaWVsZC50eXBlKSB9fTwvbWF0LWljb24+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGViLWZpZWxkLW1ldGFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlYi1yb3dcIiBzdHlsZT1cImdhcDo2cHhcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlYi1maWVsZC1sYWJlbFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidyb3ctbGFiZWwtJyArIGZpZWxkLmlkXCI+e3sgZmllbGRMYWJlbChmaWVsZCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWItdHlwZS1iYWRnZVwiPnt7IGZpZWxkLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgQGlmIChmaWVsZC5pc1JlZmVyZW5jZWQpIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDsgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweDsgY29sb3I6ICMxOTc2ZDI7XCIgbWF0VG9vbHRpcD1cIlJlZmVyZW5jZWQgZmllbGQgKGxpbmtlZCB0byB7eyBmaWVsZC5yZWZlcmVuY2VkRW50aXR5S2V5IH19KVwiPmxpbms8L21hdC1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZpZWxkLmhhc0RyaWZ0KSB7XG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGNvbG9yOiAjZDMyZjJmO1wiIGRhdGEtdGVzdGlkPVwiZHJpZnQtd2FybmluZy1pY29uXCIgbWF0VG9vbHRpcD1cIkRyaWZ0IGRldGVjdGVkOiBzb3VyY2UgZmllbGQgaGFzIGV2b2x2ZWRcIj5zeW5jX3Byb2JsZW08L21hdC1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGViLWZpZWxkLWlkXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3Jvdy1pZC0nICsgZmllbGQuaWRcIj57eyBmaWVsZC5pZCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZCkgeyA8c3BhbiBjbGFzcz1cImRlYi1yZXFcIiB0aXRsZT1cIlJlcXVpcmVkXCI+Kjwvc3Bhbj4gfVxuXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImluZGV4ID09PSAwXCJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3Jvdy11cC0nICsgZmllbGQuaWRcIlxuICAgICAgICAoY2xpY2spPVwic3RvcmUubW92ZUZpZWxkKGZpZWxkLmlkLCAtMSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIG1hdFRvb2x0aXA9XCJNb3ZlIHVwXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImluZGV4ID09PSB0b3RhbENvdW50IC0gMVwiXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidyb3ctZG93bi0nICsgZmllbGQuaWRcIlxuICAgICAgICAoY2xpY2spPVwic3RvcmUubW92ZUZpZWxkKGZpZWxkLmlkLCAxKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgbWF0VG9vbHRpcD1cIk1vdmUgZG93blwiPlxuICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3Jvdy1kdXBsaWNhdGUtJyArIGZpZWxkLmlkXCJcbiAgICAgICAgKGNsaWNrKT1cInN0b3JlLmR1cGxpY2F0ZUZpZWxkKGZpZWxkLmlkKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgbWF0VG9vbHRpcD1cIkR1cGxpY2F0ZVwiPlxuICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwid2FyblwiXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidyb3ctZGVsZXRlLScgKyBmaWVsZC5pZFwiXG4gICAgICAgIChjbGljayk9XCJzdG9yZS5yZW1vdmVGaWVsZChmaWVsZC5pZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIG1hdFRvb2x0aXA9XCJEZWxldGVcIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoZmllbGQuY2hpbGRyZW4gJiYgZmllbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgPGRpdiBjbGFzcz1cImRlYi10cmVlLWNoaWxkcmVuXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDIwcHg7IGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSgwLDAsMCwwLjA4KTsgbWFyZ2luLWxlZnQ6IDEycHg7IG1hcmdpbi10b3A6IDRweDtcIj5cbiAgICAgICAgQGZvciAoY2hpbGQgb2YgZmllbGQuY2hpbGRyZW47IHRyYWNrIGNoaWxkLmlkOyBsZXQgY2kgPSAkaW5kZXgsIGNDb3VudCA9ICRjb3VudCkge1xuICAgICAgICAgIDxuZ3gtZW50aXR5LWJ1aWxkZXItdHJlZS1ub2RlXG4gICAgICAgICAgICBbZmllbGRdPVwiY2hpbGRcIlxuICAgICAgICAgICAgW2luZGV4XT1cImNpXCJcbiAgICAgICAgICAgIFt0b3RhbENvdW50XT1cImNDb3VudFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBFbnRpdHlCdWlsZGVyVHJlZU5vZGVDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoQnVpbGRlclN0b3JlKTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBpbmRleCE6IG51bWJlcjtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdG90YWxDb3VudCE6IG51bWJlcjtcblxuICBwcm90ZWN0ZWQgZmllbGRUeXBlTGFiZWwodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RmllbGRUeXBlTWV0YSh0eXBlKT8ubGFiZWwgPz8gdHlwZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWVsZFR5cGVJY29uKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZpZWxkVHlwZU1ldGEodHlwZSk/Lmljb24gPz8gJ2hlbHBfb3V0bGluZSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRMYWJlbChmaWVsZDogeyBpZDogc3RyaW5nOyBsYWJlbD86IGFueSB9KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5zdG9yZS5hY3RpdmVMYW5ndWFnZSgpO1xuICAgIHJldHVybiByZXNvbHZlTGFiZWwoZmllbGQubGFiZWwsIGxhbmcpIHx8IGZpZWxkLmlkO1xuICB9XG59XG4iXX0=
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWJ1aWxkZXItdHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbnRpdHktYnVpbGRlci10cmVlLW5vZGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBMEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQWlGcEQsTUFBTSxPQUFPLDhCQUE4QjtJQUN0QixLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXJCLEtBQUssQ0FBcUI7SUFDMUIsS0FBSyxDQUFVO0lBQ2YsVUFBVSxDQUFVO0lBRXJDLGNBQWMsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRVMsYUFBYSxDQUFDLElBQVk7UUFDbEMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksY0FBYyxDQUFDO0lBQ3hELENBQUM7SUFFUyxVQUFVLENBQUMsS0FBa0M7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQzt3R0FsQlUsOEJBQThCOzRGQUE5Qiw4QkFBOEIsOEpBckUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FVCw0REFFVSw4QkFBOEIsa0hBM0V2QyxZQUFZLDhCQUNaLGNBQWMsK2tCQUNkLGVBQWUsMklBQ2YsYUFBYSxtTEFDYixnQkFBZ0I7OzRGQXVFUCw4QkFBOEI7a0JBL0UxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ2pCO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FVDtpQkFDRjs4QkFJNEIsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IHJlc29sdmVMYWJlbCwgdHlwZSBOZXN0ZWRGaWVsZENvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IEJ1aWxkZXJTdG9yZSB9IGZyb20gJy4uL2J1aWxkZXItc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRGaWVsZFR5cGVNZXRhIH0gZnJvbSAnLi4vZmllbGQtY2F0YWxvZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1lbnRpdHktYnVpbGRlci10cmVlLW5vZGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2RrRHJhZ1xuICAgICAgY2xhc3M9XCJkZWItZmllbGQtcm93XCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiYnVpbGRlci1maWVsZC1yb3dcIlxuICAgICAgW2NsYXNzLmRlYi1maWVsZC1yb3ctLWFjdGl2ZV09XCJzdG9yZS5zZWxlY3RlZEZpZWxkSWQoKSA9PT0gZmllbGQuaWRcIlxuICAgICAgKGNsaWNrKT1cInN0b3JlLnNlbGVjdEZpZWxkKGZpZWxkLmlkKVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJzdG9yZS5zZWxlY3RGaWVsZChmaWVsZC5pZClcIlxuICAgICAgKGtleWRvd24uc3BhY2UpPVwic3RvcmUuc2VsZWN0RmllbGQoZmllbGQuaWQpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwic3RvcmUuc2VsZWN0ZWRGaWVsZElkKCkgPT09IGZpZWxkLmlkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGVjdCBmaWVsZCAnICsgZmllbGRMYWJlbChmaWVsZClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRlYi1kcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGUgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXIgKG9yIHVzZSB0aGUgbW92ZSBidXR0b25zKVwiPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRlYi1maWVsZC10eXBlXCIgW21hdFRvb2x0aXBdPVwiZmllbGRUeXBlTGFiZWwoZmllbGQudHlwZSlcIj57eyBmaWVsZFR5cGVJY29uKGZpZWxkLnR5cGUpIH19PC9tYXQtaWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZWItZmllbGQtbWV0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXJvd1wiIHN0eWxlPVwiZ2FwOjZweFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGViLWZpZWxkLWxhYmVsXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3Jvdy1sYWJlbC0nICsgZmllbGQuaWRcIj57eyBmaWVsZExhYmVsKGZpZWxkKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlYi10eXBlLWJhZGdlXCI+e3sgZmllbGQudHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICBAaWYgKGZpZWxkLmlzUmVmZXJlbmNlZCkge1xuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBjb2xvcjogIzE5NzZkMjtcIiBtYXRUb29sdGlwPVwiUmVmZXJlbmNlZCBmaWVsZCAobGlua2VkIHRvIHt7IGZpZWxkLnJlZmVyZW5jZWRFbnRpdHlLZXkgfX0pXCI+bGluazwvbWF0LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZmllbGQuaGFzRHJpZnQpIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDsgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweDsgY29sb3I6ICNkMzJmMmY7XCIgZGF0YS10ZXN0aWQ9XCJkcmlmdC13YXJuaW5nLWljb25cIiBtYXRUb29sdGlwPVwiRHJpZnQgZGV0ZWN0ZWQ6IHNvdXJjZSBmaWVsZCBoYXMgZXZvbHZlZFwiPnN5bmNfcHJvYmxlbTwvbWF0LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWItZmllbGQtaWRcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCIncm93LWlkLScgKyBmaWVsZC5pZFwiPnt7IGZpZWxkLmlkIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkKSB7IDxzcGFuIGNsYXNzPVwiZGViLXJlcVwiIHRpdGxlPVwiUmVxdWlyZWRcIj4qPC9zcGFuPiB9XG5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiaW5kZXggPT09IDBcIlxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCIncm93LXVwLScgKyBmaWVsZC5pZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vdmUgJyArIGZpZWxkTGFiZWwoZmllbGQpICsgJyB1cCdcIlxuICAgICAgICAoY2xpY2spPVwic3RvcmUubW92ZUZpZWxkKGZpZWxkLmlkLCAtMSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIG1hdFRvb2x0aXA9XCJNb3ZlIHVwXCI+XG4gICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImluZGV4ID09PSB0b3RhbENvdW50IC0gMVwiXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidyb3ctZG93bi0nICsgZmllbGQuaWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3ZlICcgKyBmaWVsZExhYmVsKGZpZWxkKSArICcgZG93bidcIlxuICAgICAgICAoY2xpY2spPVwic3RvcmUubW92ZUZpZWxkKGZpZWxkLmlkLCAxKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgbWF0VG9vbHRpcD1cIk1vdmUgZG93blwiPlxuICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3Jvdy1kdXBsaWNhdGUtJyArIGZpZWxkLmlkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRHVwbGljYXRlICcgKyBmaWVsZExhYmVsKGZpZWxkKVwiXG4gICAgICAgIChjbGljayk9XCJzdG9yZS5kdXBsaWNhdGVGaWVsZChmaWVsZC5pZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIG1hdFRvb2x0aXA9XCJEdXBsaWNhdGVcIj5cbiAgICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBjb2xvcj1cIndhcm5cIlxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCIncm93LWRlbGV0ZS0nICsgZmllbGQuaWRcIlxuICAgICAgICAoY2xpY2spPVwic3RvcmUucmVtb3ZlRmllbGQoZmllbGQuaWQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBtYXRUb29sdGlwPVwiRGVsZXRlXCI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGZpZWxkLmNoaWxkcmVuICYmIGZpZWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkZWItdHJlZS1jaGlsZHJlblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAyMHB4OyBib3JkZXItbGVmdDogMnB4IHNvbGlkIHJnYmEoMCwwLDAsMC4wOCk7IG1hcmdpbi1sZWZ0OiAxMnB4OyBtYXJnaW4tdG9wOiA0cHg7XCI+XG4gICAgICAgIEBmb3IgKGNoaWxkIG9mIGZpZWxkLmNoaWxkcmVuOyB0cmFjayBjaGlsZC5pZDsgbGV0IGNpID0gJGluZGV4LCBjQ291bnQgPSAkY291bnQpIHtcbiAgICAgICAgICA8bmd4LWVudGl0eS1idWlsZGVyLXRyZWUtbm9kZVxuICAgICAgICAgICAgW2ZpZWxkXT1cImNoaWxkXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJjaVwiXG4gICAgICAgICAgICBbdG90YWxDb3VudF09XCJjQ291bnRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5QnVpbGRlclRyZWVOb2RlQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KEJ1aWxkZXJTdG9yZSk7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZmllbGQhOiBOZXN0ZWRGaWVsZENvbmZpZztcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaW5kZXghOiBudW1iZXI7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRvdGFsQ291bnQhOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGZpZWxkVHlwZUxhYmVsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZpZWxkVHlwZU1ldGEodHlwZSk/LmxhYmVsID8/IHR5cGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRUeXBlSWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRGaWVsZFR5cGVNZXRhKHR5cGUpPy5pY29uID8/ICdoZWxwX291dGxpbmUnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpZWxkTGFiZWwoZmllbGQ6IHsgaWQ6IHN0cmluZzsgbGFiZWw/OiBhbnkgfSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMuc3RvcmUuYWN0aXZlTGFuZ3VhZ2UoKTtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKGZpZWxkLmxhYmVsLCBsYW5nKSB8fCBmaWVsZC5pZDtcbiAgfVxufVxuIl19