@myrmidon/cadmus-part-codicology-decorations 2.0.13 → 2.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { Validators, } from '@angular/forms';
3
3
  import { take } from 'rxjs';
4
+ import { FlagsPickerAdapter } from '@myrmidon/cadmus-ui-flags-picker';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/forms";
6
7
  import * as i2 from "@myrmidon/ng-mat-tools";
@@ -18,6 +19,12 @@ import * as i13 from "../cod-decoration-element/cod-decoration-element.component
18
19
  import * as i14 from "../cod-decoration-artist/cod-decoration-artist.component";
19
20
  import * as i15 from "@myrmidon/ng-tools";
20
21
  import * as i16 from "@myrmidon/cadmus-cod-location";
22
+ function entryToFlag(entry) {
23
+ return {
24
+ id: entry.id,
25
+ label: entry.value,
26
+ };
27
+ }
21
28
  /**
22
29
  * Manuscript's decoration editor.
23
30
  * This component requires the cod-decoration-element-types thesaurus.
@@ -59,8 +66,9 @@ export class CodDecorationComponent {
59
66
  this.editedArtistIndex = -1;
60
67
  this.decorationChange = new EventEmitter();
61
68
  this.editorClose = new EventEmitter();
62
- this.initialFlags = [];
63
- this.availFlags = [];
69
+ // flags
70
+ this._flagAdapter = new FlagsPickerAdapter();
71
+ this.decFlags$ = this._flagAdapter.selectFlags('decoration');
64
72
  // form
65
73
  this.eid = formBuilder.control(null, Validators.maxLength(100));
66
74
  this.name = formBuilder.control(null, [
@@ -99,15 +107,11 @@ export class CodDecorationComponent {
99
107
  return this._decFlagEntries;
100
108
  }
101
109
  set decFlagEntries(value) {
102
- this._decFlagEntries = value;
103
- this.availFlags = value?.length
104
- ? value.map((e) => {
105
- return {
106
- id: e.id,
107
- label: e.value,
108
- };
109
- })
110
- : [];
110
+ if (this._decFlagEntries === value) {
111
+ return;
112
+ }
113
+ this._decFlagEntries = value || [];
114
+ this._flagAdapter.setSlotFlags('decoration', this._decFlagEntries.map(entryToFlag));
111
115
  }
112
116
  ngOnInit() {
113
117
  if (this._decoration) {
@@ -116,13 +120,12 @@ export class CodDecorationComponent {
116
120
  }
117
121
  updateForm(decoration) {
118
122
  if (!decoration) {
119
- this.initialFlags = [];
120
123
  this.form.reset();
121
124
  return;
122
125
  }
123
126
  this.chronotopes.setValue(decoration.chronotopes || []);
124
127
  this.references.setValue(decoration.references || []);
125
- this.initialFlags = decoration.flags || [];
128
+ this._flagAdapter.setSlotChecks('decoration', decoration.flags || []);
126
129
  this.eid.setValue(decoration.eid || null);
127
130
  this.name.setValue(decoration.name);
128
131
  this.note.setValue(decoration.note || null);
@@ -141,8 +144,9 @@ export class CodDecorationComponent {
141
144
  this.references.updateValueAndValidity();
142
145
  this.references.markAsDirty();
143
146
  }
144
- onSelectedIdsChange(ids) {
145
- this.flags.setValue(ids);
147
+ onFlagsChange(flags) {
148
+ this._flagAdapter.setSlotFlags('flags', flags, true);
149
+ this.flags.setValue(flags);
146
150
  this.flags.updateValueAndValidity();
147
151
  this.flags.markAsDirty();
148
152
  }
@@ -150,7 +154,7 @@ export class CodDecorationComponent {
150
154
  return {
151
155
  eid: this.eid.value?.trim(),
152
156
  name: this.name.value?.trim() || '',
153
- flags: this.flags.value?.length ? this.flags.value : undefined,
157
+ flags: this._flagAdapter.getOptionalCheckedFlagIds('flags'),
154
158
  chronotopes: this.chronotopes.value?.length
155
159
  ? this.chronotopes.value
156
160
  : undefined,
@@ -325,10 +329,10 @@ export class CodDecorationComponent {
325
329
  }
326
330
  }
327
331
  CodDecorationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: CodDecorationComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
328
- CodDecorationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: CodDecorationComponent, selector: "cadmus-cod-decoration", inputs: { decoration: "decoration", decElemFlagEntries: "decElemFlagEntries", decFlagEntries: "decFlagEntries", decElemTypeEntries: "decElemTypeEntries", decTypeHiddenEntries: "decTypeHiddenEntries", decElemColorEntries: "decElemColorEntries", decElemGildingEntries: "decElemGildingEntries", decElemTechEntries: "decElemTechEntries", decElemPosEntries: "decElemPosEntries", decElemToolEntries: "decElemToolEntries", decElemTypolEntries: "decElemTypolEntries", imgTypeEntries: "imgTypeEntries", artTypeEntries: "artTypeEntries", artStyleEntries: "artStyleEntries", ctTagEntries: "ctTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries", idTagEntries: "idTagEntries", idScopeEntries: "idScopeEntries" }, outputs: { decorationChange: "decorationChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <!-- id -->\r\n <mat-form-field>\r\n <mat-label>ID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.required && (eid.dirty || eid.touched)\"\r\n >EID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.maxLength && (eid.dirty || eid.touched)\"\r\n >EID too long</mat-error\r\n >\r\n </mat-form-field>\r\n &nbsp;\r\n <!-- name -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput [formControl]=\"name\" />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.maxLength && (name.dirty || name.touched)\"\r\n >name too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- flags -->\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availFlags\"\r\n [selectedIds]=\"initialFlags\"\r\n (selectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- note -->\r\n <br />\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"3\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #24a524\"\r\n >hourglass_empty</mat-icon\r\n >\r\n chronotopes</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [chronotopes]=\"chronotopes.value\"\r\n (chronotopesChange)=\"onChronotopesChange($event)\"\r\n ></cadmus-asserted-chronotope-set>\r\n </mat-expansion-panel>\r\n\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #bb3d6c\"\r\n >library_books</mat-icon\r\n >\r\n references</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [tagEntries]=\"refTagEntries\"\r\n [typeEntries]=\"refTypeEntries\"\r\n [references]=\"references.value\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n ></cadmus-refs-doc-references>\r\n </mat-expansion-panel>\r\n\r\n <!-- artists -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #ddcd41\">palette</mat-icon>\r\n artists</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addArtist()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> artist\r\n </button>\r\n </div>\r\n <table *ngIf=\"artists?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>name</th>\r\n <th>EID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let artist of artists?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this artist\"\r\n (click)=\"editArtist(artist, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveArtistUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveArtistDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this artist\"\r\n (click)=\"removeArtist(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ artist.type | flatLookup : artTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ artist.name }}</td>\r\n <td>{{ artist.eid }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <mat-expansion-panel [expanded]=\"editedArtist\" [disabled]=\"!editedArtist\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>artist {{ editedArtist?.name }}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-cod-decoration-artist\r\n [ctTagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [artTypeEntries]=\"artTypeEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [artStyleEntries]=\"artStyleEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [artist]=\"editedArtist\"\r\n (artistChange)=\"onArtistSave($event)\"\r\n (editorClose)=\"editArtist(null)\"\r\n ></cadmus-cod-decoration-artist>\r\n </mat-expansion-panel>\r\n </mat-expansion-panel>\r\n\r\n <!-- elements -->\r\n <h3>elements</h3>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addElement()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> element\r\n </button>\r\n </div>\r\n <table *ngIf=\"elements?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>key</th>\r\n <th>parent</th>\r\n <th>type</th>\r\n <th>subject</th>\r\n <th>extent</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let element of elements?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this element\"\r\n (click)=\"editElement(element, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveElementUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveElementDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this element\"\r\n (click)=\"removeElement(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ element.key }}</td>\r\n <td>{{ element.parentKey }}</td>\r\n <td>\r\n {{ element.type | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ element.subject }}</td>\r\n <td>{{ element.ranges | codLocationRange }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- ELEMENT -->\r\n <mat-expansion-panel [disabled]=\"!editedElement\" [expanded]=\"editedElement\">\r\n <cadmus-cod-decoration-element\r\n [imgTypeEntries]=\"imgTypeEntries\"\r\n [decElemPosEntries]=\"decElemPosEntries\"\r\n [decElemFlagEntries]=\"decElemFlagEntries\"\r\n [decElemTechEntries]=\"decElemTechEntries\"\r\n [decElemToolEntries]=\"decElemToolEntries\"\r\n [decElemTypeEntries]=\"decElemTypeEntries\"\r\n [decElemColorEntries]=\"decElemColorEntries\"\r\n [decElemTypolEntries]=\"decElemTypolEntries\"\r\n [decTypeHiddenEntries]=\"decTypeHiddenEntries\"\r\n [decElemGildingEntries]=\"decElemGildingEntries\"\r\n [element]=\"editedElement\"\r\n [parentKeys]=\"parentKeys\"\r\n (elementChange)=\"onElementSave($event)\"\r\n (editorClose)=\"editElement(null)\"\r\n ></cadmus-cod-decoration-element>\r\n </mat-expansion-panel>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard decoration changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-flat-button\r\n matTooltip=\"Accept decoration changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> decoration\r\n </button>\r\n </div>\r\n</form>\r\n", styles: ["th{text-align:left;font-weight:400;color:silver}.long-text{width:90%;max-width:800px}h3{margin-top:12px;background-color:#5db2fd;border-radius:6px;padding:0 6px;color:#fff}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i10.AssertedChronotopeSetComponent, selector: "cadmus-asserted-chronotope-set", inputs: ["chronotopes", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["chronotopesChange"] }, { kind: "component", type: i11.DocReferencesComponent, selector: "cadmus-refs-doc-references", inputs: ["references", "typeEntries", "tagEntries"], outputs: ["referencesChange"] }, { kind: "component", type: i12.FlagsPickerComponent, selector: "cadmus-ui-flags-picker", inputs: ["selectedIds", "flags", "numbering", "toolbar", "allowUserFlags"], outputs: ["selectedIdsChange", "flagsChange"] }, { kind: "component", type: i13.CodDecorationElementComponent, selector: "cadmus-cod-decoration-element", inputs: ["element", "parentKeys", "decElemTypeEntries", "decTypeHiddenEntries", "decElemFlagEntries", "decElemColorEntries", "decElemGildingEntries", "decElemTechEntries", "decElemPosEntries", "decElemToolEntries", "decElemTypolEntries", "imgTypeEntries"], outputs: ["elementChange", "editorClose"] }, { kind: "component", type: i14.CodDecorationArtistComponent, selector: "cadmus-cod-decoration-artist", inputs: ["artist", "artTypeEntries", "artStyleEntries", "ctTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "idTagEntries", "idScopeEntries"], outputs: ["artistChange", "editorClose"] }, { kind: "pipe", type: i15.FlatLookupPipe, name: "flatLookup" }, { kind: "pipe", type: i16.CodLocationRangePipe, name: "codLocationRange" }] });
332
+ CodDecorationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: CodDecorationComponent, selector: "cadmus-cod-decoration", inputs: { decoration: "decoration", decElemFlagEntries: "decElemFlagEntries", decFlagEntries: "decFlagEntries", decElemTypeEntries: "decElemTypeEntries", decTypeHiddenEntries: "decTypeHiddenEntries", decElemColorEntries: "decElemColorEntries", decElemGildingEntries: "decElemGildingEntries", decElemTechEntries: "decElemTechEntries", decElemPosEntries: "decElemPosEntries", decElemToolEntries: "decElemToolEntries", decElemTypolEntries: "decElemTypolEntries", imgTypeEntries: "imgTypeEntries", artTypeEntries: "artTypeEntries", artStyleEntries: "artStyleEntries", ctTagEntries: "ctTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries", idTagEntries: "idTagEntries", idScopeEntries: "idScopeEntries" }, outputs: { decorationChange: "decorationChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <!-- id -->\r\n <mat-form-field>\r\n <mat-label>ID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.required && (eid.dirty || eid.touched)\"\r\n >EID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.maxLength && (eid.dirty || eid.touched)\"\r\n >EID too long</mat-error\r\n >\r\n </mat-form-field>\r\n &nbsp;\r\n <!-- name -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput [formControl]=\"name\" />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.maxLength && (name.dirty || name.touched)\"\r\n >name too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- flags -->\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"decFlags$ | async\"\r\n (flagsChange)=\"onFlagsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- note -->\r\n <br />\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"3\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #24a524\"\r\n >hourglass_empty</mat-icon\r\n >\r\n chronotopes</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [chronotopes]=\"chronotopes.value\"\r\n (chronotopesChange)=\"onChronotopesChange($event)\"\r\n ></cadmus-asserted-chronotope-set>\r\n </mat-expansion-panel>\r\n\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #bb3d6c\"\r\n >library_books</mat-icon\r\n >\r\n references</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [tagEntries]=\"refTagEntries\"\r\n [typeEntries]=\"refTypeEntries\"\r\n [references]=\"references.value\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n ></cadmus-refs-doc-references>\r\n </mat-expansion-panel>\r\n\r\n <!-- artists -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #ddcd41\">palette</mat-icon>\r\n artists</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addArtist()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> artist\r\n </button>\r\n </div>\r\n <table *ngIf=\"artists?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>name</th>\r\n <th>EID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let artist of artists?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this artist\"\r\n (click)=\"editArtist(artist, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveArtistUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveArtistDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this artist\"\r\n (click)=\"removeArtist(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ artist.type | flatLookup : artTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ artist.name }}</td>\r\n <td>{{ artist.eid }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <mat-expansion-panel [expanded]=\"editedArtist\" [disabled]=\"!editedArtist\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>artist {{ editedArtist?.name }}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-cod-decoration-artist\r\n [ctTagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [artTypeEntries]=\"artTypeEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [artStyleEntries]=\"artStyleEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [artist]=\"editedArtist\"\r\n (artistChange)=\"onArtistSave($event)\"\r\n (editorClose)=\"editArtist(null)\"\r\n ></cadmus-cod-decoration-artist>\r\n </mat-expansion-panel>\r\n </mat-expansion-panel>\r\n\r\n <!-- elements -->\r\n <h3>elements</h3>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addElement()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> element\r\n </button>\r\n </div>\r\n <table *ngIf=\"elements?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>key</th>\r\n <th>parent</th>\r\n <th>type</th>\r\n <th>subject</th>\r\n <th>extent</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let element of elements?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this element\"\r\n (click)=\"editElement(element, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveElementUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveElementDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this element\"\r\n (click)=\"removeElement(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ element.key }}</td>\r\n <td>{{ element.parentKey }}</td>\r\n <td>\r\n {{ element.type | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ element.subject }}</td>\r\n <td>{{ element.ranges | codLocationRange }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- ELEMENT -->\r\n <mat-expansion-panel [disabled]=\"!editedElement\" [expanded]=\"editedElement\">\r\n <cadmus-cod-decoration-element\r\n [imgTypeEntries]=\"imgTypeEntries\"\r\n [decElemPosEntries]=\"decElemPosEntries\"\r\n [decElemFlagEntries]=\"decElemFlagEntries\"\r\n [decElemTechEntries]=\"decElemTechEntries\"\r\n [decElemToolEntries]=\"decElemToolEntries\"\r\n [decElemTypeEntries]=\"decElemTypeEntries\"\r\n [decElemColorEntries]=\"decElemColorEntries\"\r\n [decElemTypolEntries]=\"decElemTypolEntries\"\r\n [decTypeHiddenEntries]=\"decTypeHiddenEntries\"\r\n [decElemGildingEntries]=\"decElemGildingEntries\"\r\n [element]=\"editedElement\"\r\n [parentKeys]=\"parentKeys\"\r\n (elementChange)=\"onElementSave($event)\"\r\n (editorClose)=\"editElement(null)\"\r\n ></cadmus-cod-decoration-element>\r\n </mat-expansion-panel>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard decoration changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-flat-button\r\n matTooltip=\"Accept decoration changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> decoration\r\n </button>\r\n </div>\r\n</form>\r\n", styles: ["th{text-align:left;font-weight:400;color:silver}.long-text{width:90%;max-width:800px}h3{margin-top:12px;background-color:#5db2fd;border-radius:6px;padding:0 6px;color:#fff}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i10.AssertedChronotopeSetComponent, selector: "cadmus-asserted-chronotope-set", inputs: ["chronotopes", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["chronotopesChange"] }, { kind: "component", type: i11.DocReferencesComponent, selector: "cadmus-refs-doc-references", inputs: ["references", "typeEntries", "tagEntries"], outputs: ["referencesChange"] }, { kind: "component", type: i12.FlagsPickerComponent, selector: "cadmus-ui-flags-picker", inputs: ["flags", "numbering", "toolbar", "allowUserFlags", "flagTips"], outputs: ["flagsChange"] }, { kind: "component", type: i13.CodDecorationElementComponent, selector: "cadmus-cod-decoration-element", inputs: ["element", "parentKeys", "decElemTypeEntries", "decTypeHiddenEntries", "decElemFlagEntries", "decElemColorEntries", "decElemGildingEntries", "decElemTechEntries", "decElemPosEntries", "decElemToolEntries", "decElemTypolEntries", "imgTypeEntries"], outputs: ["elementChange", "editorClose"] }, { kind: "component", type: i14.CodDecorationArtistComponent, selector: "cadmus-cod-decoration-artist", inputs: ["artist", "artTypeEntries", "artStyleEntries", "ctTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "idTagEntries", "idScopeEntries"], outputs: ["artistChange", "editorClose"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.FlatLookupPipe, name: "flatLookup" }, { kind: "pipe", type: i16.CodLocationRangePipe, name: "codLocationRange" }] });
329
333
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: CodDecorationComponent, decorators: [{
330
334
  type: Component,
331
- args: [{ selector: 'cadmus-cod-decoration', template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <!-- id -->\r\n <mat-form-field>\r\n <mat-label>ID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.required && (eid.dirty || eid.touched)\"\r\n >EID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.maxLength && (eid.dirty || eid.touched)\"\r\n >EID too long</mat-error\r\n >\r\n </mat-form-field>\r\n &nbsp;\r\n <!-- name -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput [formControl]=\"name\" />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.maxLength && (name.dirty || name.touched)\"\r\n >name too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- flags -->\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availFlags\"\r\n [selectedIds]=\"initialFlags\"\r\n (selectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- note -->\r\n <br />\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"3\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #24a524\"\r\n >hourglass_empty</mat-icon\r\n >\r\n chronotopes</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [chronotopes]=\"chronotopes.value\"\r\n (chronotopesChange)=\"onChronotopesChange($event)\"\r\n ></cadmus-asserted-chronotope-set>\r\n </mat-expansion-panel>\r\n\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #bb3d6c\"\r\n >library_books</mat-icon\r\n >\r\n references</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [tagEntries]=\"refTagEntries\"\r\n [typeEntries]=\"refTypeEntries\"\r\n [references]=\"references.value\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n ></cadmus-refs-doc-references>\r\n </mat-expansion-panel>\r\n\r\n <!-- artists -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #ddcd41\">palette</mat-icon>\r\n artists</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addArtist()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> artist\r\n </button>\r\n </div>\r\n <table *ngIf=\"artists?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>name</th>\r\n <th>EID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let artist of artists?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this artist\"\r\n (click)=\"editArtist(artist, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveArtistUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveArtistDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this artist\"\r\n (click)=\"removeArtist(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ artist.type | flatLookup : artTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ artist.name }}</td>\r\n <td>{{ artist.eid }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <mat-expansion-panel [expanded]=\"editedArtist\" [disabled]=\"!editedArtist\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>artist {{ editedArtist?.name }}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-cod-decoration-artist\r\n [ctTagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [artTypeEntries]=\"artTypeEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [artStyleEntries]=\"artStyleEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [artist]=\"editedArtist\"\r\n (artistChange)=\"onArtistSave($event)\"\r\n (editorClose)=\"editArtist(null)\"\r\n ></cadmus-cod-decoration-artist>\r\n </mat-expansion-panel>\r\n </mat-expansion-panel>\r\n\r\n <!-- elements -->\r\n <h3>elements</h3>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addElement()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> element\r\n </button>\r\n </div>\r\n <table *ngIf=\"elements?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>key</th>\r\n <th>parent</th>\r\n <th>type</th>\r\n <th>subject</th>\r\n <th>extent</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let element of elements?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this element\"\r\n (click)=\"editElement(element, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveElementUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveElementDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this element\"\r\n (click)=\"removeElement(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ element.key }}</td>\r\n <td>{{ element.parentKey }}</td>\r\n <td>\r\n {{ element.type | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ element.subject }}</td>\r\n <td>{{ element.ranges | codLocationRange }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- ELEMENT -->\r\n <mat-expansion-panel [disabled]=\"!editedElement\" [expanded]=\"editedElement\">\r\n <cadmus-cod-decoration-element\r\n [imgTypeEntries]=\"imgTypeEntries\"\r\n [decElemPosEntries]=\"decElemPosEntries\"\r\n [decElemFlagEntries]=\"decElemFlagEntries\"\r\n [decElemTechEntries]=\"decElemTechEntries\"\r\n [decElemToolEntries]=\"decElemToolEntries\"\r\n [decElemTypeEntries]=\"decElemTypeEntries\"\r\n [decElemColorEntries]=\"decElemColorEntries\"\r\n [decElemTypolEntries]=\"decElemTypolEntries\"\r\n [decTypeHiddenEntries]=\"decTypeHiddenEntries\"\r\n [decElemGildingEntries]=\"decElemGildingEntries\"\r\n [element]=\"editedElement\"\r\n [parentKeys]=\"parentKeys\"\r\n (elementChange)=\"onElementSave($event)\"\r\n (editorClose)=\"editElement(null)\"\r\n ></cadmus-cod-decoration-element>\r\n </mat-expansion-panel>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard decoration changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-flat-button\r\n matTooltip=\"Accept decoration changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> decoration\r\n </button>\r\n </div>\r\n</form>\r\n", styles: ["th{text-align:left;font-weight:400;color:silver}.long-text{width:90%;max-width:800px}h3{margin-top:12px;background-color:#5db2fd;border-radius:6px;padding:0 6px;color:#fff}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"] }]
335
+ args: [{ selector: 'cadmus-cod-decoration', template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <!-- id -->\r\n <mat-form-field>\r\n <mat-label>ID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.required && (eid.dirty || eid.touched)\"\r\n >EID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(eid).errors?.maxLength && (eid.dirty || eid.touched)\"\r\n >EID too long</mat-error\r\n >\r\n </mat-form-field>\r\n &nbsp;\r\n <!-- name -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput [formControl]=\"name\" />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.maxLength && (name.dirty || name.touched)\"\r\n >name too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- flags -->\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"decFlags$ | async\"\r\n (flagsChange)=\"onFlagsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- note -->\r\n <br />\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"3\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #24a524\"\r\n >hourglass_empty</mat-icon\r\n >\r\n chronotopes</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [chronotopes]=\"chronotopes.value\"\r\n (chronotopesChange)=\"onChronotopesChange($event)\"\r\n ></cadmus-asserted-chronotope-set>\r\n </mat-expansion-panel>\r\n\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #bb3d6c\"\r\n >library_books</mat-icon\r\n >\r\n references</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [tagEntries]=\"refTagEntries\"\r\n [typeEntries]=\"refTypeEntries\"\r\n [references]=\"references.value\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n ></cadmus-refs-doc-references>\r\n </mat-expansion-panel>\r\n\r\n <!-- artists -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title\r\n ><mat-icon style=\"margin-right: 8px; color: #ddcd41\">palette</mat-icon>\r\n artists</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addArtist()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> artist\r\n </button>\r\n </div>\r\n <table *ngIf=\"artists?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>name</th>\r\n <th>EID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let artist of artists?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this artist\"\r\n (click)=\"editArtist(artist, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveArtistUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this artist down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveArtistDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this artist\"\r\n (click)=\"removeArtist(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ artist.type | flatLookup : artTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ artist.name }}</td>\r\n <td>{{ artist.eid }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <mat-expansion-panel [expanded]=\"editedArtist\" [disabled]=\"!editedArtist\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>artist {{ editedArtist?.name }}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-cod-decoration-artist\r\n [ctTagEntries]=\"ctTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [artTypeEntries]=\"artTypeEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [artStyleEntries]=\"artStyleEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [artist]=\"editedArtist\"\r\n (artistChange)=\"onArtistSave($event)\"\r\n (editorClose)=\"editArtist(null)\"\r\n ></cadmus-cod-decoration-artist>\r\n </mat-expansion-panel>\r\n </mat-expansion-panel>\r\n\r\n <!-- elements -->\r\n <h3>elements</h3>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addElement()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> element\r\n </button>\r\n </div>\r\n <table *ngIf=\"elements?.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>key</th>\r\n <th>parent</th>\r\n <th>type</th>\r\n <th>subject</th>\r\n <th>extent</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let element of elements?.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this element\"\r\n (click)=\"editElement(element, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveElementUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this element down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveElementDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this element\"\r\n (click)=\"removeElement(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ element.key }}</td>\r\n <td>{{ element.parentKey }}</td>\r\n <td>\r\n {{ element.type | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ element.subject }}</td>\r\n <td>{{ element.ranges | codLocationRange }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- ELEMENT -->\r\n <mat-expansion-panel [disabled]=\"!editedElement\" [expanded]=\"editedElement\">\r\n <cadmus-cod-decoration-element\r\n [imgTypeEntries]=\"imgTypeEntries\"\r\n [decElemPosEntries]=\"decElemPosEntries\"\r\n [decElemFlagEntries]=\"decElemFlagEntries\"\r\n [decElemTechEntries]=\"decElemTechEntries\"\r\n [decElemToolEntries]=\"decElemToolEntries\"\r\n [decElemTypeEntries]=\"decElemTypeEntries\"\r\n [decElemColorEntries]=\"decElemColorEntries\"\r\n [decElemTypolEntries]=\"decElemTypolEntries\"\r\n [decTypeHiddenEntries]=\"decTypeHiddenEntries\"\r\n [decElemGildingEntries]=\"decElemGildingEntries\"\r\n [element]=\"editedElement\"\r\n [parentKeys]=\"parentKeys\"\r\n (elementChange)=\"onElementSave($event)\"\r\n (editorClose)=\"editElement(null)\"\r\n ></cadmus-cod-decoration-element>\r\n </mat-expansion-panel>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard decoration changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-flat-button\r\n matTooltip=\"Accept decoration changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> decoration\r\n </button>\r\n </div>\r\n</form>\r\n", styles: ["th{text-align:left;font-weight:400;color:silver}.long-text{width:90%;max-width:800px}h3{margin-top:12px;background-color:#5db2fd;border-radius:6px;padding:0 6px;color:#fff}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"] }]
332
336
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.DialogService }]; }, propDecorators: { decoration: [{
333
337
  type: Input
334
338
  }], decElemFlagEntries: [{
@@ -374,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
374
378
  }], editorClose: [{
375
379
  type: Output
376
380
  }] } });
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWRlY29yYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXBhcnQtY29kaWNvbG9neS1kZWNvcmF0aW9ucy9zcmMvbGliL2NvZC1kZWNvcmF0aW9uL2NvZC1kZWNvcmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi9jb2QtZGVjb3JhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFJTCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFNSCxNQUFNLE9BQU8sc0JBQXNCO0lBMEhqQyxZQUFZLFdBQXdCLEVBQVUsY0FBNkI7UUFBN0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFScEUsa0JBQWEsR0FBRztZQUNyQixLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUUsVUFBVTtZQUNwQixRQUFRLEVBQUUsSUFBSTtZQUNkLDBEQUEwRDtZQUMxRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDO1FBR0EsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JB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QURuQixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBR0EsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgQXNzZXJ0ZWRDaHJvbm90b3BlIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWNocm9ub3RvcGUnO1xyXG5pbXBvcnQgeyBEb2NSZWZlcmVuY2UgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLXJlZnMtZG9jLXJlZmVyZW5jZXMnO1xyXG5pbXBvcnQgeyBGbGFnIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy11aS1mbGFncy1waWNrZXInO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQG15cm1pZG9uL25nLW1hdC10b29scyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvZERlY29yYXRpb24sXHJcbiAgQ29kRGVjb3JhdGlvbkFydGlzdCxcclxuICBDb2REZWNvcmF0aW9uRWxlbWVudCxcclxufSBmcm9tICcuLi9jb2QtZGVjb3JhdGlvbnMtcGFydCc7XHJcblxyXG4vKipcclxuICogTWFudXNjcmlwdCdzIGRlY29yYXRpb24gZWRpdG9yLlxyXG4gKiBUaGlzIGNvbXBvbmVudCByZXF1aXJlcyB0aGUgY29kLWRlY29yYXRpb24tZWxlbWVudC10eXBlcyB0aGVzYXVydXMuXHJcbiAqIEFjY29yZGluZyB0byB0aGUgdHlwZSBzZWxlY3RlZCwgaXQgY2hhbmdlcyBpdHMgVUkgYnk6XHJcbiAqIC0gZmlsdGVyaW5nIHRoZSBjb250ZW50IG9mIGFsbCB0aGUgb3RoZXIgdGhlc2F1cmkgKGV4Y2VwdFxyXG4gKiBjb2QtZGVjb3JhdGlvbi10eXBlLWhpZGRlbiwgd2hpY2ggaGFzIGEgc3BlY2lhbCBtZWFuaW5nKSxcclxuICogd2hlbiB0aGV5IGhhdmUgYSBoaWVyYXJjaHkgKGkuZS4gdGhlaXIgSURzIGNvbnRhaW4gYSBkb3QpLlxyXG4gKiBTdWNoIHR5cGUtZGVwZW5kZW50IHRoZXNhdXJpIGhhdmUgdGhlaXIgZW50cmllcyBJRHMgcHJlZml4ZWRcclxuICogd2l0aCB0aGUgdHlwZSBJRCBmb2xsb3dlZCBieSBkb3QuIEZvciBpbnN0YW5jZSwgdHlwZSBcImlsbFwiXHJcbiAqIGhhcyBzb21lIGNvcnJlc3BvbmRpbmcgZW50cmllcyBpbiBhIHR5cGUtZGVwZW5kZW50IHRoZXNhdXJ1c1xyXG4gKiBsaWtlIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdHlwZXMsIGxpa2UgXCJpbGwubWluaWF0dXJlXCIsXHJcbiAqIFwiaWxsLmRyYXdpbmdcIiwgZXRjLlxyXG4gKiBBbHNvLCBpZiB0aGUgZmlsdGVyZWQgY29udGVudCBvZiBhIHRoZXNhdXJ1cyBoYXBwZW5zIHRvIGhhdmVcclxuICogYW4gZW50cnkgSUQgZXF1YWwgdG8gXCItXCIgb25jZSB0aGUgdHlwZSBwcmVmaXggaGFzIGJlZW4gc3RyaXBwZWRcclxuICogb3V0LCB0aGlzIG1lYW5zIHRoYXQgaW4gdGhpcyBjYXNlIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2xcclxuICogc2hvdWxkIGJlIGEgZnJlZSB0ZXh0IGJveCByYXRoZXIgdGhhbiBhIHNlbGVjdG9yLlxyXG4gKiBUaGlzIGFueXdheSBkb2VzIG5vdCBhcHBseSB0byB0aG9zZSBjb250cm9scyBhbGxvd2luZyBtdWx0aXBsZVxyXG4gKiBzZWxlY3Rpb25zLCBsaWtlIGZsYWdzIG9yIGNvbG9ycy5cclxuICogLSBoaWRpbmcgc29tZSBjb250cm9scy4gV2hlbiBhIHR5cGUgaXMgc2VsZWN0ZWQsIHRoZSB0aGVzYXVydXNcclxuICogY29kLWRlY29yYXRpb24tdHlwZS1oaWRkZW4gaXMgbG9va2VkIHVwIHRvIGZpbmQgYW4gZW50cnlcclxuICogd2l0aCBJRCBlcXVhbCB0byB0aGUgc2VsZWN0ZWQgdHlwZSBJRC4gSWYgZm91bmQsIGl0IGlzIGFzc3VtZWRcclxuICogdGhhdCBpdHMgdmFsdWUgaXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBuYW1lcyBvZiB0aG9zZVxyXG4gKiBjb250cm9scyB3aGljaCBzaG91bGQgYmUgaGlkZGVuLlxyXG4gKiBUaGlzIGxvZ2ljIGlzIGVmZmVjdGl2ZWx5IGltcGxlbWVudGVkIGJ5XHJcbiAqIENvZERlY29yYXRpb25FbGVtZW50Q29tcG9uZW50LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjYWRtdXMtY29kLWRlY29yYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2QtZGVjb3JhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29kLWRlY29yYXRpb24uY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29kRGVjb3JhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSBfZGVjb3JhdGlvbjogQ29kRGVjb3JhdGlvbiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9kZWNGbGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY29yYXRpb24oKTogQ29kRGVjb3JhdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjb3JhdGlvbjtcclxuICB9XHJcbiAgcHVibGljIHNldCBkZWNvcmF0aW9uKHZhbHVlOiBDb2REZWNvcmF0aW9uIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fZGVjb3JhdGlvbiA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGVjb3JhdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtZmxhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNFbGVtRmxhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWZsYWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY0ZsYWdFbnRyaWVzKCk6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY0ZsYWdFbnRyaWVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRlY0ZsYWdFbnRyaWVzKHZhbHVlOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kZWNGbGFnRW50cmllcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gdmFsdWU/Lmxlbmd0aFxyXG4gICAgICA/IHZhbHVlLm1hcCgoZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGUuaWQsXHJcbiAgICAgICAgICAgIGxhYmVsOiBlLnZhbHVlLFxyXG4gICAgICAgICAgfSBhcyBGbGFnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIDogW107XHJcbiAgfVxyXG5cclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LXR5cGVzIChyZXF1aXJlZClcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNFbGVtVHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWRlY29yYXRpb24tdHlwZS1oaWRkZW5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNUeXBlSGlkZGVuRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LWNvbG9yc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1Db2xvckVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC1naWxkaW5nc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1HaWxkaW5nRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LXRlY2huaXF1ZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNFbGVtVGVjaEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC1wb3NpdGlvbnNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNFbGVtUG9zRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LXRvb2xzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVjRWxlbVRvb2xFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdHlwb2xvZ2llc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1UeXBvbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWltYWdlLXR5cGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaW1nVHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWRlY29yYXRpb24tYXJ0aXN0LXR5cGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXJ0VHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLW5hbWVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXJ0U3R5bGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGNocm9ub3RvcGUtdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGN0VGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBhc3NlcnRpb24tdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFzc1RhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10eXBlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlR5cGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGRvYy1yZWZlcmVuY2UtdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlRhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gZXh0ZXJuYWwtaWQtdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkVGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBleHRlcm5hbC1pZC1zY29wZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpZFNjb3BlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGRlY29yYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxDb2REZWNvcmF0aW9uPjtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZWRpdG9yQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwdWJsaWMgZWlkOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgbmFtZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGZsYWdzOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIGNocm9ub3RvcGVzOiBGb3JtQ29udHJvbDxBc3NlcnRlZENocm9ub3RvcGVbXT47XHJcbiAgcHVibGljIGFydGlzdHM6IEZvcm1Db250cm9sPENvZERlY29yYXRpb25BcnRpc3RbXT47XHJcbiAgcHVibGljIG5vdGU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyByZWZlcmVuY2VzOiBGb3JtQ29udHJvbDxEb2NSZWZlcmVuY2VbXT47XHJcbiAgcHVibGljIGVsZW1lbnRzOiBGb3JtQ29udHJvbDxDb2REZWNvcmF0aW9uRWxlbWVudFtdPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBwdWJsaWMgaW5pdGlhbEZsYWdzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgYXZhaWxGbGFnczogRmxhZ1tdO1xyXG5cclxuICBwdWJsaWMgZWRpdGVkRWxlbWVudEluZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGVkaXRlZEVsZW1lbnQ6IENvZERlY29yYXRpb25FbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBwYXJlbnRLZXlzOiBzdHJpbmdbXTtcclxuXHJcbiAgcHVibGljIGVkaXRlZEFydGlzdEluZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGVkaXRlZEFydGlzdD86IENvZERlY29yYXRpb25BcnRpc3Q7XHJcblxyXG4gIHB1YmxpYyBlZGl0b3JPcHRpb25zID0ge1xyXG4gICAgdGhlbWU6ICd2cy1saWdodCcsXHJcbiAgICBsYW5ndWFnZTogJ21hcmtkb3duJyxcclxuICAgIHdvcmRXcmFwOiAnb24nLFxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0dWxhcmVuL25neC1tb25hY28tZWRpdG9yL2lzc3Vlcy8xOVxyXG4gICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgdGhpcy5lZGl0ZWRFbGVtZW50SW5kZXggPSAtMTtcclxuICAgIHRoaXMucGFyZW50S2V5cyA9IFtdO1xyXG4gICAgdGhpcy5lZGl0ZWRBcnRpc3RJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5kZWNvcmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb2REZWNvcmF0aW9uPigpO1xyXG4gICAgdGhpcy5lZGl0b3JDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgdGhpcy5pbml0aWFsRmxhZ3MgPSBbXTtcclxuICAgIHRoaXMuYXZhaWxGbGFncyA9IFtdO1xyXG4gICAgLy8gZm9ybVxyXG4gICAgdGhpcy5laWQgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCkpO1xyXG4gICAgdGhpcy5uYW1lID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXHJcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5mbGFncyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmNocm9ub3RvcGVzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuYXJ0aXN0cyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLm5vdGUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMDApKTtcclxuICAgIHRoaXMucmVmZXJlbmNlcyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmVsZW1lbnRzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgZWlkOiB0aGlzLmVpZCxcclxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICBmbGFnczogdGhpcy5mbGFncyxcclxuICAgICAgY2hyb25vdG9wZXM6IHRoaXMuY2hyb25vdG9wZXMsXHJcbiAgICAgIGFydGlzdHM6IHRoaXMuYXJ0aXN0cyxcclxuICAgICAgbm90ZTogdGhpcy5ub3RlLFxyXG4gICAgICByZWZlcmVuY2VzOiB0aGlzLnJlZmVyZW5jZXMsXHJcbiAgICAgIGVsZW1lbnRzOiB0aGlzLmVsZW1lbnRzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kZWNvcmF0aW9uKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybSh0aGlzLl9kZWNvcmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShkZWNvcmF0aW9uOiBDb2REZWNvcmF0aW9uIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAoIWRlY29yYXRpb24pIHtcclxuICAgICAgdGhpcy5pbml0aWFsRmxhZ3MgPSBbXTtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNocm9ub3RvcGVzLnNldFZhbHVlKGRlY29yYXRpb24uY2hyb25vdG9wZXMgfHwgW10pO1xyXG4gICAgdGhpcy5yZWZlcmVuY2VzLnNldFZhbHVlKGRlY29yYXRpb24ucmVmZXJlbmNlcyB8fCBbXSk7XHJcbiAgICB0aGlzLmluaXRpYWxGbGFncyA9IGRlY29yYXRpb24uZmxhZ3MgfHwgW107XHJcblxyXG4gICAgdGhpcy5laWQuc2V0VmFsdWUoZGVjb3JhdGlvbi5laWQgfHwgbnVsbCk7XHJcbiAgICB0aGlzLm5hbWUuc2V0VmFsdWUoZGVjb3JhdGlvbi5uYW1lKTtcclxuICAgIHRoaXMubm90ZS5zZXRWYWx1ZShkZWNvcmF0aW9uLm5vdGUgfHwgbnVsbCk7XHJcbiAgICB0aGlzLmFydGlzdHMuc2V0VmFsdWUoZGVjb3JhdGlvbi5hcnRpc3RzIHx8IFtdKTtcclxuICAgIHRoaXMuZWxlbWVudHMuc2V0VmFsdWUoZGVjb3JhdGlvbi5lbGVtZW50cyB8fCBbXSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhcmVudEtleXMoKTtcclxuXHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNocm9ub3RvcGVzQ2hhbmdlKGNocm9ub3RvcGVzOiBBc3NlcnRlZENocm9ub3RvcGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaHJvbm90b3Blcy5zZXRWYWx1ZShjaHJvbm90b3Blcyk7XHJcbiAgICB0aGlzLmNocm9ub3RvcGVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY2hyb25vdG9wZXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlZmVyZW5jZXNDaGFuZ2UocmVmZXJlbmNlczogRG9jUmVmZXJlbmNlW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVmZXJlbmNlcy5zZXRWYWx1ZShyZWZlcmVuY2VzKTtcclxuICAgIHRoaXMucmVmZXJlbmNlcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLnJlZmVyZW5jZXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNlbGVjdGVkSWRzQ2hhbmdlKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZmxhZ3Muc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuZmxhZ3MudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5mbGFncy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWNvcmF0aW9uKCk6IENvZERlY29yYXRpb24ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZWlkOiB0aGlzLmVpZC52YWx1ZT8udHJpbSgpLFxyXG4gICAgICBuYW1lOiB0aGlzLm5hbWUudmFsdWU/LnRyaW0oKSB8fCAnJyxcclxuICAgICAgZmxhZ3M6IHRoaXMuZmxhZ3MudmFsdWU/Lmxlbmd0aCA/IHRoaXMuZmxhZ3MudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgIGNocm9ub3RvcGVzOiB0aGlzLmNocm9ub3RvcGVzLnZhbHVlPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuY2hyb25vdG9wZXMudmFsdWVcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgcmVmZXJlbmNlczogdGhpcy5yZWZlcmVuY2VzLnZhbHVlPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMucmVmZXJlbmNlcy52YWx1ZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBhcnRpc3RzOiB0aGlzLmFydGlzdHMudmFsdWU/Lmxlbmd0aCA/IHRoaXMuYXJ0aXN0cy52YWx1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgbm90ZTogdGhpcy5ub3RlLnZhbHVlPy50cmltKCksXHJcbiAgICAgIGVsZW1lbnRzOiB0aGlzLmVsZW1lbnRzLnZhbHVlPy5sZW5ndGggPyB0aGlzLmVsZW1lbnRzLnZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBlbGVtZW50c1xyXG4gIHB1YmxpYyBhZGRFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0RWxlbWVudCh7XHJcbiAgICAgIHR5cGU6IHRoaXMuZGVjRWxlbVR5cGVFbnRyaWVzPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuZGVjRWxlbVR5cGVFbnRyaWVzWzBdLmlkXHJcbiAgICAgICAgOiAnJyxcclxuICAgICAgZmxhZ3M6IFtdLFxyXG4gICAgICByYW5nZXM6IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEVsZW1lbnQoZWxlbWVudDogQ29kRGVjb3JhdGlvbkVsZW1lbnQgfCBudWxsLCBpbmRleCA9IC0xKTogdm9pZCB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50SW5kZXggPSAtMTtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50SW5kZXggPSBpbmRleDtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50S2V5cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbGVtZW50cy52YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucGFyZW50S2V5cyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSB0aGlzLmVsZW1lbnRzLnZhbHVlLm1hcChcclxuICAgICAgKGU6IENvZERlY29yYXRpb25FbGVtZW50KSA9PiBlLmtleSFcclxuICAgICk7XHJcbiAgICB0aGlzLnBhcmVudEtleXMgPSBbLi4ubmV3IFNldChrZXlzKV0uc29ydCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRWxlbWVudFNhdmUoZWxlbWVudDogQ29kRGVjb3JhdGlvbkVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLnRoaXMuZWxlbWVudHMudmFsdWVdO1xyXG5cclxuICAgIGlmICh0aGlzLmVkaXRlZEVsZW1lbnRJbmRleCA+IC0xKSB7XHJcbiAgICAgIGVsZW1lbnRzLnNwbGljZSh0aGlzLmVkaXRlZEVsZW1lbnRJbmRleCwgMSwgZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWxlbWVudHMuc2V0VmFsdWUoZWxlbWVudHMpO1xyXG4gICAgdGhpcy5lbGVtZW50cy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVkaXRFbGVtZW50KG51bGwpO1xyXG4gICAgdGhpcy51cGRhdGVQYXJlbnRLZXlzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5jb25maXJtKCdDb25maXJtYXRpb24nLCAnRGVsZXRlIGVsZW1lbnQ/JylcclxuICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgLnN1YnNjcmliZSgoeWVzOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHllcykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5lbGVtZW50cy52YWx1ZV07XHJcbiAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5lbGVtZW50cy5zZXRWYWx1ZShpdGVtcyk7XHJcbiAgICAgICAgICB0aGlzLmVsZW1lbnRzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIHRoaXMuZWxlbWVudHMubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUGFyZW50S2V5cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUVsZW1lbnRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmVsZW1lbnRzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuZWxlbWVudHMudmFsdWVdO1xyXG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGl0ZW1zLnNwbGljZShpbmRleCAtIDEsIDAsIGl0ZW0pO1xyXG4gICAgdGhpcy5lbGVtZW50cy5zZXRWYWx1ZShpdGVtcyk7XHJcbiAgICB0aGlzLmVsZW1lbnRzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZWxlbWVudHMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlRWxlbWVudERvd24oaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4ICsgMSA+PSB0aGlzLmVsZW1lbnRzLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5lbGVtZW50cy52YWx1ZVtpbmRleF07XHJcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmVsZW1lbnRzLnZhbHVlXTtcclxuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBpdGVtKTtcclxuICAgIHRoaXMuZWxlbWVudHMuc2V0VmFsdWUoaXRlbXMpO1xyXG4gICAgdGhpcy5lbGVtZW50cy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gYXJ0aXN0c1xyXG4gIHB1YmxpYyBhZGRBcnRpc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRBcnRpc3Qoe1xyXG4gICAgICB0eXBlOiB0aGlzLmFydFR5cGVFbnRyaWVzPy5sZW5ndGggPyB0aGlzLmFydFR5cGVFbnRyaWVzWzBdLmlkIDogJycsXHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEFydGlzdChhcnRpc3Q6IENvZERlY29yYXRpb25BcnRpc3QgfCBudWxsLCBpbmRleCA9IC0xKTogdm9pZCB7XHJcbiAgICBpZiAoIWFydGlzdCkge1xyXG4gICAgICB0aGlzLmVkaXRlZEFydGlzdEluZGV4ID0gLTE7XHJcbiAgICAgIHRoaXMuZWRpdGVkQXJ0aXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0ZWRBcnRpc3RJbmRleCA9IGluZGV4O1xyXG4gICAgICB0aGlzLmVkaXRlZEFydGlzdCA9IGFydGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFydGlzdFNhdmUoYXJ0aXN0OiBDb2REZWNvcmF0aW9uQXJ0aXN0KTogdm9pZCB7XHJcbiAgICBjb25zdCBhcnRpc3RzID0gWy4uLnRoaXMuYXJ0aXN0cy52YWx1ZV07XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdGVkQXJ0aXN0SW5kZXggPiAtMSkge1xyXG4gICAgICBhcnRpc3RzLnNwbGljZSh0aGlzLmVkaXRlZEFydGlzdEluZGV4LCAxLCBhcnRpc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJ0aXN0cy5wdXNoKGFydGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcnRpc3RzLnNldFZhbHVlKGFydGlzdHMpO1xyXG4gICAgdGhpcy5hcnRpc3RzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuYXJ0aXN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgdGhpcy5lZGl0QXJ0aXN0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFydGlzdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5jb25maXJtKCdDb25maXJtYXRpb24nLCAnRGVsZXRlIGFydGlzdD8nKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh5ZXMpID0+IHtcclxuICAgICAgICBpZiAoeWVzKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmFydGlzdHMudmFsdWVdO1xyXG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIHRoaXMuYXJ0aXN0cy5zZXRWYWx1ZShpdGVtcyk7XHJcbiAgICAgICAgICB0aGlzLmFydGlzdHMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgdGhpcy5hcnRpc3RzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlQXJ0aXN0VXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4IDwgMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5hcnRpc3RzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuYXJ0aXN0cy52YWx1ZV07XHJcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaXRlbXMuc3BsaWNlKGluZGV4IC0gMSwgMCwgaXRlbSk7XHJcbiAgICB0aGlzLmFydGlzdHMuc2V0VmFsdWUoaXRlbXMpO1xyXG4gICAgdGhpcy5hcnRpc3RzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuYXJ0aXN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdmVBcnRpc3REb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChpbmRleCArIDEgPj0gdGhpcy5hcnRpc3RzLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5hcnRpc3RzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuYXJ0aXN0cy52YWx1ZV07XHJcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaXRlbXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgaXRlbSk7XHJcbiAgICB0aGlzLmFydGlzdHMuc2V0VmFsdWUoaXRlbXMpO1xyXG4gICAgdGhpcy5hcnRpc3RzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuYXJ0aXN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGVjb3JhdGlvbiA9IHRoaXMuZ2V0RGVjb3JhdGlvbigpO1xyXG4gICAgdGhpcy5kZWNvcmF0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZGVjb3JhdGlvbik7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdj5cclxuICAgIDwhLS0gaWQgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+SUQ8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJlaWRcIiAvPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KGVpZCkuZXJyb3JzPy5yZXF1aXJlZCAmJiAoZWlkLmRpcnR5IHx8IGVpZC50b3VjaGVkKVwiXHJcbiAgICAgICAgPkVJRCByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgID5cclxuICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICpuZ0lmPVwiJGFueShlaWQpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChlaWQuZGlydHkgfHwgZWlkLnRvdWNoZWQpXCJcclxuICAgICAgICA+RUlEIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICZuYnNwO1xyXG4gICAgPCEtLSBuYW1lIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPm5hbWU8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJuYW1lXCIgLz5cclxuICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICpuZ0lmPVwiJGFueShuYW1lKS5lcnJvcnM/LnJlcXVpcmVkICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZClcIlxyXG4gICAgICAgID5uYW1lIHJlcXVpcmVkPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KG5hbWUpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZClcIlxyXG4gICAgICAgID5uYW1lIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBmbGFncyAtLT5cclxuICA8ZmllbGRzZXQ+XHJcbiAgICA8bGVnZW5kPmZlYXR1cmVzPC9sZWdlbmQ+XHJcbiAgICA8Y2FkbXVzLXVpLWZsYWdzLXBpY2tlclxyXG4gICAgICBbZmxhZ3NdPVwiYXZhaWxGbGFnc1wiXHJcbiAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsRmxhZ3NcIlxyXG4gICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25TZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgPC9maWVsZHNldD5cclxuXHJcbiAgPCEtLSBub3RlIC0tPlxyXG4gIDxiciAvPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxvbmctdGV4dFwiPlxyXG4gICAgPG1hdC1sYWJlbD5ub3RlPC9tYXQtbGFiZWw+XHJcbiAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibm90ZVwiPjwvdGV4dGFyZWE+XHJcbiAgICA8bWF0LWVycm9yXHJcbiAgICAgICpuZ0lmPVwiJGFueShub3RlKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAobm90ZS5kaXJ0eSB8fCBub3RlLnRvdWNoZWQpXCJcclxuICAgICAgPm5vdGUgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDwhLS0gY2hyb25vdG9wZXMgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGVcclxuICAgICAgICA+PG1hdC1pY29uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHg7IGNvbG9yOiAjMjRhNTI0XCJcclxuICAgICAgICAgID5ob3VyZ2xhc3NfZW1wdHk8L21hdC1pY29uXHJcbiAgICAgICAgPlxyXG4gICAgICAgIGNocm9ub3RvcGVzPC9tYXQtcGFuZWwtdGl0bGVcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxjYWRtdXMtYXNzZXJ0ZWQtY2hyb25vdG9wZS1zZXRcclxuICAgICAgW3RhZ0VudHJpZXNdPVwiY3RUYWdFbnRyaWVzXCJcclxuICAgICAgW2Fzc1RhZ0VudHJpZXNdPVwiYXNzVGFnRW50cmllc1wiXHJcbiAgICAgIFtyZWZUYWdFbnRyaWVzXT1cInJlZlRhZ0VudHJpZXNcIlxyXG4gICAgICBbcmVmVHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbY2hyb25vdG9wZXNdPVwiY2hyb25vdG9wZXMudmFsdWVcIlxyXG4gICAgICAoY2hyb25vdG9wZXNDaGFuZ2UpPVwib25DaHJvbm90b3Blc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NhZG11cy1hc3NlcnRlZC1jaHJvbm90b3BlLXNldD5cclxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcblxyXG4gIDwhLS0gcmVmZXJlbmNlcyAtLT5cclxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPG1hdC1wYW5lbC10aXRsZVxyXG4gICAgICAgID48bWF0LWljb24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweDsgY29sb3I6ICNiYjNkNmNcIlxyXG4gICAgICAgICAgPmxpYnJhcnlfYm9va3M8L21hdC1pY29uXHJcbiAgICAgICAgPlxyXG4gICAgICAgIHJlZmVyZW5jZXM8L21hdC1wYW5lbC10aXRsZVxyXG4gICAgICA+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPGNhZG11cy1yZWZzLWRvYy1yZWZlcmVuY2VzXHJcbiAgICAgIFt0YWdFbnRyaWVzXT1cInJlZlRhZ0VudHJpZXNcIlxyXG4gICAgICBbdHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbcmVmZXJlbmNlc109XCJyZWZlcmVuY2VzLnZhbHVlXCJcclxuICAgICAgKHJlZmVyZW5jZXNDaGFuZ2UpPVwib25SZWZlcmVuY2VzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgPjwvY2FkbXVzLXJlZnMtZG9jLXJlZmVyZW5jZXM+XHJcbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICA8IS0tIGFydGlzdHMgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGVcclxuICAgICAgICA+PG1hdC1pY29uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHg7IGNvbG9yOiAjZGRjZDQxXCI+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgYXJ0aXN0czwvbWF0LXBhbmVsLXRpdGxlXHJcbiAgICAgID5cclxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAoY2xpY2spPVwiYWRkQXJ0aXN0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPiBhcnRpc3RcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx0YWJsZSAqbmdJZj1cImFydGlzdHM/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgPHRoPnR5cGU8L3RoPlxyXG4gICAgICAgICAgPHRoPm5hbWU8L3RoPlxyXG4gICAgICAgICAgPHRoPkVJRDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0clxyXG4gICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgIGxldCBhcnRpc3Qgb2YgYXJ0aXN0cz8udmFsdWU7XHJcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XHJcbiAgICAgICAgICAgIGxldCBmaXJzdCA9IGZpcnN0O1xyXG4gICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGFydGlzdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRBcnRpc3QoYXJ0aXN0LCBpKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdGhpcyBhcnRpc3QgdXBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaXJzdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVBcnRpc3RVcChpKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSB0aGlzIGFydGlzdCBkb3duXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGFzdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVBcnRpc3REb3duKGkpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHRoaXMgYXJ0aXN0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQXJ0aXN0KGkpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICB7eyBhcnRpc3QudHlwZSB8IGZsYXRMb29rdXAgOiBhcnRUeXBlRW50cmllcyA6IFwiaWRcIiA6IFwidmFsdWVcIiB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZD57eyBhcnRpc3QubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICA8dGQ+e3sgYXJ0aXN0LmVpZCB9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiZWRpdGVkQXJ0aXN0XCIgW2Rpc2FibGVkXT1cIiFlZGl0ZWRBcnRpc3RcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+YXJ0aXN0IHt7IGVkaXRlZEFydGlzdD8ubmFtZSB9fTwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8Y2FkbXVzLWNvZC1kZWNvcmF0aW9uLWFydGlzdFxyXG4gICAgICAgIFtjdFRhZ0VudHJpZXNdPVwiY3RUYWdFbnRyaWVzXCJcclxuICAgICAgICBbYXNzVGFnRW50cmllc109XCJhc3NUYWdFbnRyaWVzXCJcclxuICAgICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcclxuICAgICAgICBbYXJ0VHlwZUVudHJpZXNdPVwiYXJ0VHlwZUVudHJpZXNcIlxyXG4gICAgICAgIFtyZWZUeXBlRW50cmllc109XCJyZWZUeXBlRW50cmllc1wiXHJcbiAgICAgICAgW2FydFN0eWxlRW50cmllc109XCJhcnRTdHlsZUVudHJpZXNcIlxyXG4gICAgICAgIFtpZFRhZ0VudHJpZXNdPVwiaWRUYWdFbnRyaWVzXCJcclxuICAgICAgICBbaWRTY29wZUVudHJpZXNdPVwiaWRTY29wZUVudHJpZXNcIlxyXG4gICAgICAgIFthcnRpc3RdPVwiZWRpdGVkQXJ0aXN0XCJcclxuICAgICAgICAoYXJ0aXN0Q2hhbmdlKT1cIm9uQXJ0aXN0U2F2ZSgkZXZlbnQpXCJcclxuICAgICAgICAoZWRpdG9yQ2xvc2UpPVwiZWRpdEFydGlzdChudWxsKVwiXHJcbiAgICAgID48L2NhZG11cy1jb2QtZGVjb3JhdGlvbi1hcnRpc3Q+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICA8IS0tIGVsZW1lbnRzIC0tPlxyXG4gIDxoMz5lbGVtZW50czwvaDM+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwiYWRkRWxlbWVudCgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPiBlbGVtZW50XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8dGFibGUgKm5nSWY9XCJlbGVtZW50cz8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoPmtleTwvdGg+XHJcbiAgICAgICAgPHRoPnBhcmVudDwvdGg+XHJcbiAgICAgICAgPHRoPnR5cGU8L3RoPlxyXG4gICAgICAgIDx0aD5zdWJqZWN0PC90aD5cclxuICAgICAgICA8dGg+ZXh0ZW50PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHk+XHJcbiAgICAgIDx0clxyXG4gICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgb2YgZWxlbWVudHM/LnZhbHVlO1xyXG4gICAgICAgICAgbGV0IGkgPSBpbmRleDtcclxuICAgICAgICAgIGxldCBmaXJzdCA9IGZpcnN0O1xyXG4gICAgICAgICAgbGV0IGxhc3QgPSBsYXN0XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGVsZW1lbnRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEVsZW1lbnQoZWxlbWVudCwgaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSB0aGlzIGVsZW1lbnQgdXBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlyc3RcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibW92ZUVsZW1lbnRVcChpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdGhpcyBlbGVtZW50IGRvd25cIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibGFzdFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlRWxlbWVudERvd24oaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIGVsZW1lbnRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IGVsZW1lbnQua2V5IH19PC90ZD5cclxuICAgICAgICA8dGQ+e3sgZWxlbWVudC5wYXJlbnRLZXkgfX08L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIHt7IGVsZW1lbnQudHlwZSB8IGZsYXRMb29rdXAgOiBkZWNFbGVtVHlwZUVudHJpZXMgOiBcImlkXCIgOiBcInZhbHVlXCIgfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD57eyBlbGVtZW50LnN1YmplY3QgfX08L3RkPlxyXG4gICAgICAgIDx0ZD57eyBlbGVtZW50LnJhbmdlcyB8IGNvZExvY2F0aW9uUmFuZ2UgfX08L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90Ym9keT5cclxuICA8L3RhYmxlPlxyXG5cclxuICA8IS0tIEVMRU1FTlQgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2Rpc2FibGVkXT1cIiFlZGl0ZWRFbGVtZW50XCIgW2V4cGFuZGVkXT1cImVkaXRlZEVsZW1lbnRcIj5cclxuICAgIDxjYWRtdXMtY29kLWRlY29yYXRpb24tZWxlbWVudFxyXG4gICAgICBbaW1nVHlwZUVudHJpZXNdPVwiaW1nVHlwZUVudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbVBvc0VudHJpZXNdPVwiZGVjRWxlbVBvc0VudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbUZsYWdFbnRyaWVzXT1cImRlY0VsZW1GbGFnRW50cmllc1wiXHJcbiAgICAgIFtkZWNFbGVtVGVjaEVudHJpZXNdPVwiZGVjRWxlbVRlY2hFbnRyaWVzXCJcclxuICAgICAgW2RlY0VsZW1Ub29sRW50cmllc109XCJkZWNFbGVtVG9vbEVudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbVR5cGVFbnRyaWVzXT1cImRlY0VsZW1UeXBlRW50cmllc1wiXHJcbiAgICAgIFtkZWNFbGVtQ29sb3JFbnRyaWVzXT1cImRlY0VsZW1Db2xvckVudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbVR5cG9sRW50cmllc109XCJkZWNFbGVtVHlwb2xFbnRyaWVzXCJcclxuICAgICAgW2RlY1R5cGVIaWRkZW5FbnRyaWVzXT1cImRlY1R5cGVIaWRkZW5FbnRyaWVzXCJcclxuICAgICAgW2RlY0VsZW1HaWxkaW5nRW50cmllc109XCJkZWNFbGVtR2lsZGluZ0VudHJpZXNcIlxyXG4gICAgICBbZWxlbWVudF09XCJlZGl0ZWRFbGVtZW50XCJcclxuICAgICAgW3BhcmVudEtleXNdPVwicGFyZW50S2V5c1wiXHJcbiAgICAgIChlbGVtZW50Q2hhbmdlKT1cIm9uRWxlbWVudFNhdmUoJGV2ZW50KVwiXHJcbiAgICAgIChlZGl0b3JDbG9zZSk9XCJlZGl0RWxlbWVudChudWxsKVwiXHJcbiAgICA+PC9jYWRtdXMtY29kLWRlY29yYXRpb24tZWxlbWVudD5cclxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8aHIgLz5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yb3dcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiRGlzY2FyZCBkZWNvcmF0aW9uIGNoYW5nZXNcIlxyXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFjY2VwdCBkZWNvcmF0aW9uIGNoYW5nZXNcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGZvcm0ucHJpc3RpbmVcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj4gZGVjb3JhdGlvblxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWRlY29yYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXBhcnQtY29kaWNvbG9neS1kZWNvcmF0aW9ucy9zcmMvbGliL2NvZC1kZWNvcmF0aW9uL2NvZC1kZWNvcmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi9jb2QtZGVjb3JhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFJTCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS3hDLE9BQU8sRUFBUSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTNUUsU0FBUyxXQUFXLENBQUMsS0FBcUI7SUFDeEMsT0FBTztRQUNMLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNaLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztLQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQTBIakMsWUFBWSxXQUF3QixFQUFVLGNBQTZCO1FBQTdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBWHBFLGtCQUFhLEdBQUc7WUFDckIsS0FBSyxFQUFFLFVBQVU7WUFDakIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsUUFBUSxFQUFFLElBQUk7WUFDZCwwREFBMEQ7WUFDMUQsZUFB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QUFtQjtzQkFEekIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBSUMsZUFBZTtzQkFEckIsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBR0EsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgQXNzZXJ0ZWRDaHJvbm90b3BlIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWNocm9ub3RvcGUnO1xyXG5pbXBvcnQgeyBEb2NSZWZlcmVuY2UgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLXJlZnMtZG9jLXJlZmVyZW5jZXMnO1xyXG5pbXBvcnQgeyBGbGFnLCBGbGFnc1BpY2tlckFkYXB0ZXIgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLXVpLWZsYWdzLXBpY2tlcic7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAbXlybWlkb24vbmctbWF0LXRvb2xzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29kRGVjb3JhdGlvbixcclxuICBDb2REZWNvcmF0aW9uQXJ0aXN0LFxyXG4gIENvZERlY29yYXRpb25FbGVtZW50LFxyXG59IGZyb20gJy4uL2NvZC1kZWNvcmF0aW9ucy1wYXJ0JztcclxuXHJcbmZ1bmN0aW9uIGVudHJ5VG9GbGFnKGVudHJ5OiBUaGVzYXVydXNFbnRyeSk6IEZsYWcge1xyXG4gIHJldHVybiB7XHJcbiAgICBpZDogZW50cnkuaWQsXHJcbiAgICBsYWJlbDogZW50cnkudmFsdWUsXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hbnVzY3JpcHQncyBkZWNvcmF0aW9uIGVkaXRvci5cclxuICogVGhpcyBjb21wb25lbnQgcmVxdWlyZXMgdGhlIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdHlwZXMgdGhlc2F1cnVzLlxyXG4gKiBBY2NvcmRpbmcgdG8gdGhlIHR5cGUgc2VsZWN0ZWQsIGl0IGNoYW5nZXMgaXRzIFVJIGJ5OlxyXG4gKiAtIGZpbHRlcmluZyB0aGUgY29udGVudCBvZiBhbGwgdGhlIG90aGVyIHRoZXNhdXJpIChleGNlcHRcclxuICogY29kLWRlY29yYXRpb24tdHlwZS1oaWRkZW4sIHdoaWNoIGhhcyBhIHNwZWNpYWwgbWVhbmluZyksXHJcbiAqIHdoZW4gdGhleSBoYXZlIGEgaGllcmFyY2h5IChpLmUuIHRoZWlyIElEcyBjb250YWluIGEgZG90KS5cclxuICogU3VjaCB0eXBlLWRlcGVuZGVudCB0aGVzYXVyaSBoYXZlIHRoZWlyIGVudHJpZXMgSURzIHByZWZpeGVkXHJcbiAqIHdpdGggdGhlIHR5cGUgSUQgZm9sbG93ZWQgYnkgZG90LiBGb3IgaW5zdGFuY2UsIHR5cGUgXCJpbGxcIlxyXG4gKiBoYXMgc29tZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gYSB0eXBlLWRlcGVuZGVudCB0aGVzYXVydXNcclxuICogbGlrZSBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LXR5cGVzLCBsaWtlIFwiaWxsLm1pbmlhdHVyZVwiLFxyXG4gKiBcImlsbC5kcmF3aW5nXCIsIGV0Yy5cclxuICogQWxzbywgaWYgdGhlIGZpbHRlcmVkIGNvbnRlbnQgb2YgYSB0aGVzYXVydXMgaGFwcGVucyB0byBoYXZlXHJcbiAqIGFuIGVudHJ5IElEIGVxdWFsIHRvIFwiLVwiIG9uY2UgdGhlIHR5cGUgcHJlZml4IGhhcyBiZWVuIHN0cmlwcGVkXHJcbiAqIG91dCwgdGhpcyBtZWFucyB0aGF0IGluIHRoaXMgY2FzZSB0aGUgY29ycmVzcG9uZGluZyBjb250cm9sXHJcbiAqIHNob3VsZCBiZSBhIGZyZWUgdGV4dCBib3ggcmF0aGVyIHRoYW4gYSBzZWxlY3Rvci5cclxuICogVGhpcyBhbnl3YXkgZG9lcyBub3QgYXBwbHkgdG8gdGhvc2UgY29udHJvbHMgYWxsb3dpbmcgbXVsdGlwbGVcclxuICogc2VsZWN0aW9ucywgbGlrZSBmbGFncyBvciBjb2xvcnMuXHJcbiAqIC0gaGlkaW5nIHNvbWUgY29udHJvbHMuIFdoZW4gYSB0eXBlIGlzIHNlbGVjdGVkLCB0aGUgdGhlc2F1cnVzXHJcbiAqIGNvZC1kZWNvcmF0aW9uLXR5cGUtaGlkZGVuIGlzIGxvb2tlZCB1cCB0byBmaW5kIGFuIGVudHJ5XHJcbiAqIHdpdGggSUQgZXF1YWwgdG8gdGhlIHNlbGVjdGVkIHR5cGUgSUQuIElmIGZvdW5kLCBpdCBpcyBhc3N1bWVkXHJcbiAqIHRoYXQgaXRzIHZhbHVlIGlzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgbmFtZXMgb2YgdGhvc2VcclxuICogY29udHJvbHMgd2hpY2ggc2hvdWxkIGJlIGhpZGRlbi5cclxuICogVGhpcyBsb2dpYyBpcyBlZmZlY3RpdmVseSBpbXBsZW1lbnRlZCBieVxyXG4gKiBDb2REZWNvcmF0aW9uRWxlbWVudENvbXBvbmVudC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLWNvZC1kZWNvcmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29kLWRlY29yYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZC1kZWNvcmF0aW9uLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZERlY29yYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZsYWdBZGFwdGVyOiBGbGFnc1BpY2tlckFkYXB0ZXI7XHJcbiAgcHJpdmF0ZSBfZGVjb3JhdGlvbjogQ29kRGVjb3JhdGlvbiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9kZWNGbGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY29yYXRpb24oKTogQ29kRGVjb3JhdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjb3JhdGlvbjtcclxuICB9XHJcbiAgcHVibGljIHNldCBkZWNvcmF0aW9uKHZhbHVlOiBDb2REZWNvcmF0aW9uIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fZGVjb3JhdGlvbiA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGVjb3JhdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtZmxhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNFbGVtRmxhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWZsYWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY0ZsYWdFbnRyaWVzKCk6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY0ZsYWdFbnRyaWVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRlY0ZsYWdFbnRyaWVzKHZhbHVlOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fZGVjRmxhZ0VudHJpZXMgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2RlY0ZsYWdFbnRyaWVzID0gdmFsdWUgfHwgW107XHJcbiAgICB0aGlzLl9mbGFnQWRhcHRlci5zZXRTbG90RmxhZ3MoXHJcbiAgICAgICdkZWNvcmF0aW9uJyxcclxuICAgICAgdGhpcy5fZGVjRmxhZ0VudHJpZXMubWFwKGVudHJ5VG9GbGFnKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdHlwZXMgKHJlcXVpcmVkKVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1UeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi10eXBlLWhpZGRlblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY1R5cGVIaWRkZW5FbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtY29sb3JzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVjRWxlbUNvbG9yRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LWdpbGRpbmdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVjRWxlbUdpbGRpbmdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdGVjaG5pcXVlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1UZWNoRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LXBvc2l0aW9uc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1Qb3NFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdG9vbHNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWNFbGVtVG9vbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC10eXBvbG9naWVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVjRWxlbVR5cG9sRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtaW1hZ2UtdHlwZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpbWdUeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1hcnRpc3QtdHlwZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhcnRUeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUtbmFtZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhcnRTdHlsZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gY2hyb25vdG9wZS10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY3RUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGFzc2VydGlvbi10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXNzVGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBkb2MtcmVmZXJlbmNlLXR5cGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBleHRlcm5hbC1pZC10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGV4dGVybmFsLWlkLXNjb3Blc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkU2NvcGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZGVjb3JhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPENvZERlY29yYXRpb24+O1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBlZGl0b3JDbG9zZTogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIHB1YmxpYyBlaWQ6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBuYW1lOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZmxhZ3M6IEZvcm1Db250cm9sPEZsYWdbXT47XHJcbiAgcHVibGljIGNocm9ub3RvcGVzOiBGb3JtQ29udHJvbDxBc3NlcnRlZENocm9ub3RvcGVbXT47XHJcbiAgcHVibGljIGFydGlzdHM6IEZvcm1Db250cm9sPENvZERlY29yYXRpb25BcnRpc3RbXT47XHJcbiAgcHVibGljIG5vdGU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyByZWZlcmVuY2VzOiBGb3JtQ29udHJvbDxEb2NSZWZlcmVuY2VbXT47XHJcbiAgcHVibGljIGVsZW1lbnRzOiBGb3JtQ29udHJvbDxDb2REZWNvcmF0aW9uRWxlbWVudFtdPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBwdWJsaWMgZWRpdGVkRWxlbWVudEluZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGVkaXRlZEVsZW1lbnQ6IENvZERlY29yYXRpb25FbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBwYXJlbnRLZXlzOiBzdHJpbmdbXTtcclxuXHJcbiAgcHVibGljIGVkaXRlZEFydGlzdEluZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGVkaXRlZEFydGlzdD86IENvZERlY29yYXRpb25BcnRpc3Q7XHJcblxyXG4gIHB1YmxpYyBlZGl0b3JPcHRpb25zID0ge1xyXG4gICAgdGhlbWU6ICd2cy1saWdodCcsXHJcbiAgICBsYW5ndWFnZTogJ21hcmtkb3duJyxcclxuICAgIHdvcmRXcmFwOiAnb24nLFxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0dWxhcmVuL25neC1tb25hY28tZWRpdG9yL2lzc3Vlcy8xOVxyXG4gICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxyXG4gIH07XHJcblxyXG4gIC8vIGZsYWdzXHJcbiAgcHVibGljIGRlY0ZsYWdzJDogT2JzZXJ2YWJsZTxGbGFnW10+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgIHRoaXMuZWRpdGVkRWxlbWVudEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnBhcmVudEtleXMgPSBbXTtcclxuICAgIHRoaXMuZWRpdGVkQXJ0aXN0SW5kZXggPSAtMTtcclxuICAgIHRoaXMuZGVjb3JhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29kRGVjb3JhdGlvbj4oKTtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8vIGZsYWdzXHJcbiAgICB0aGlzLl9mbGFnQWRhcHRlciA9IG5ldyBGbGFnc1BpY2tlckFkYXB0ZXIoKTtcclxuICAgIHRoaXMuZGVjRmxhZ3MkID0gdGhpcy5fZmxhZ0FkYXB0ZXIuc2VsZWN0RmxhZ3MoJ2RlY29yYXRpb24nKTtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMuZWlkID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApKTtcclxuICAgIHRoaXMubmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCksXHJcbiAgICBdKTtcclxuICAgIHRoaXMuZmxhZ3MgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5jaHJvbm90b3BlcyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmFydGlzdHMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5ub3RlID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDAwKSk7XHJcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5lbGVtZW50cyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGVpZDogdGhpcy5laWQsXHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgZmxhZ3M6IHRoaXMuZmxhZ3MsXHJcbiAgICAgIGNocm9ub3RvcGVzOiB0aGlzLmNocm9ub3RvcGVzLFxyXG4gICAgICBhcnRpc3RzOiB0aGlzLmFydGlzdHMsXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZSxcclxuICAgICAgcmVmZXJlbmNlczogdGhpcy5yZWZlcmVuY2VzLFxyXG4gICAgICBlbGVtZW50czogdGhpcy5lbGVtZW50cyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZGVjb3JhdGlvbikge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm0odGhpcy5fZGVjb3JhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm0oZGVjb3JhdGlvbjogQ29kRGVjb3JhdGlvbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKCFkZWNvcmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaHJvbm90b3Blcy5zZXRWYWx1ZShkZWNvcmF0aW9uLmNocm9ub3RvcGVzIHx8IFtdKTtcclxuICAgIHRoaXMucmVmZXJlbmNlcy5zZXRWYWx1ZShkZWNvcmF0aW9uLnJlZmVyZW5jZXMgfHwgW10pO1xyXG4gICAgdGhpcy5fZmxhZ0FkYXB0ZXIuc2V0U2xvdENoZWNrcygnZGVjb3JhdGlvbicsIGRlY29yYXRpb24uZmxhZ3MgfHwgW10pO1xyXG4gICAgdGhpcy5laWQuc2V0VmFsdWUoZGVjb3JhdGlvbi5laWQgfHwgbnVsbCk7XHJcbiAgICB0aGlzLm5hbWUuc2V0VmFsdWUoZGVjb3JhdGlvbi5uYW1lKTtcclxuICAgIHRoaXMubm90ZS5zZXRWYWx1ZShkZWNvcmF0aW9uLm5vdGUgfHwgbnVsbCk7XHJcbiAgICB0aGlzLmFydGlzdHMuc2V0VmFsdWUoZGVjb3JhdGlvbi5hcnRpc3RzIHx8IFtdKTtcclxuICAgIHRoaXMuZWxlbWVudHMuc2V0VmFsdWUoZGVjb3JhdGlvbi5lbGVtZW50cyB8fCBbXSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhcmVudEtleXMoKTtcclxuXHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNocm9ub3RvcGVzQ2hhbmdlKGNocm9ub3RvcGVzOiBBc3NlcnRlZENocm9ub3RvcGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaHJvbm90b3Blcy5zZXRWYWx1ZShjaHJvbm90b3Blcyk7XHJcbiAgICB0aGlzLmNocm9ub3RvcGVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY2hyb25vdG9wZXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlZmVyZW5jZXNDaGFuZ2UocmVmZXJlbmNlczogRG9jUmVmZXJlbmNlW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVmZXJlbmNlcy5zZXRWYWx1ZShyZWZlcmVuY2VzKTtcclxuICAgIHRoaXMucmVmZXJlbmNlcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLnJlZmVyZW5jZXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZsYWdzQ2hhbmdlKGZsYWdzOiBGbGFnW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZsYWdBZGFwdGVyLnNldFNsb3RGbGFncygnZmxhZ3MnLCBmbGFncywgdHJ1ZSk7XHJcbiAgICB0aGlzLmZsYWdzLnNldFZhbHVlKGZsYWdzKTtcclxuICAgIHRoaXMuZmxhZ3MudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5mbGFncy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWNvcmF0aW9uKCk6IENvZERlY29yYXRpb24ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZWlkOiB0aGlzLmVpZC52YWx1ZT8udHJpbSgpLFxyXG4gICAgICBuYW1lOiB0aGlzLm5hbWUudmFsdWU/LnRyaW0oKSB8fCAnJyxcclxuICAgICAgZmxhZ3M6IHRoaXMuX2ZsYWdBZGFwdGVyLmdldE9wdGlvbmFsQ2hlY2tlZEZsYWdJZHMoJ2ZsYWdzJyksXHJcbiAgICAgIGNocm9ub3RvcGVzOiB0aGlzLmNocm9ub3RvcGVzLnZhbHVlPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuY2hyb25vdG9wZXMudmFsdWVcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgcmVmZXJlbmNlczogdGhpcy5yZWZlcmVuY2VzLnZhbHVlPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMucmVmZXJlbmNlcy52YWx1ZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBhcnRpc3RzOiB0aGlzLmFydGlzdHMudmFsdWU/Lmxlbmd0aCA/IHRoaXMuYXJ0aXN0cy52YWx1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgbm90ZTogdGhpcy5ub3RlLnZhbHVlPy50cmltKCksXHJcbiAgICAgIGVsZW1lbnRzOiB0aGlzLmVsZW1lbnRzLnZhbHVlPy5sZW5ndGggPyB0aGlzLmVsZW1lbnRzLnZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBlbGVtZW50c1xyXG4gIHB1YmxpYyBhZGRFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0RWxlbWVudCh7XHJcbiAgICAgIHR5cGU6IHRoaXMuZGVjRWxlbVR5cGVFbnRyaWVzPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuZGVjRWxlbVR5cGVFbnRyaWVzWzBdLmlkXHJcbiAgICAgICAgOiAnJyxcclxuICAgICAgZmxhZ3M6IFtdLFxyXG4gICAgICByYW5nZXM6IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEVsZW1lbnQoZWxlbWVudDogQ29kRGVjb3JhdGlvbkVsZW1lbnQgfCBudWxsLCBpbmRleCA9IC0xKTogdm9pZCB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50SW5kZXggPSAtMTtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50SW5kZXggPSBpbmRleDtcclxuICAgICAgdGhpcy5lZGl0ZWRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50S2V5cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbGVtZW50cy52YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucGFyZW50S2V5cyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSB0aGlzLmVsZW1lbnRzLnZhbHVlLm1hcChcclxuICAgICAgKGU6IENvZERlY29yYXRpb25FbGVtZW50KSA9PiBlLmtleSFcclxuICAgICk7XHJcbiAgICB0aGlzLnBhcmVudEtleXMgPSBbLi4ubmV3IFNldChrZXlzKV0uc29ydCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRWxlbWVudFNhdmUoZWxlbWVudDogQ29kRGVjb3JhdGlvbkVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLnRoaXMuZWxlbWVudHMudmFsdWVdO1xyXG5cclxuICAgIGlmICh0aGlzLmVkaXRlZEVsZW1lbnRJbmRleCA+IC0xKSB7XHJcbiAgICAgIGVsZW1lbnRzLnNwbGljZSh0aGlzLmVkaXRlZEVsZW1lbnRJbmRleCwgMSwgZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWxlbWVudHMuc2V0VmFsdWUoZWxlbWVudHMpO1xyXG4gICAgdGhpcy5lbGVtZW50cy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVkaXRFbGVtZW50KG51bGwpO1xyXG4gICAgdGhpcy51cGRhdGVQYXJlbnRLZXlzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5jb25maXJtKCdDb25maXJtYXRpb24nLCAnRGVsZXRlIGVsZW1lbnQ/JylcclxuICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgLnN1YnNjcmliZSgoeWVzOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHllcykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5lbGVtZW50cy52YWx1ZV07XHJcbiAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5lbGVtZW50cy5zZXRWYWx1ZShpdGVtcyk7XHJcbiAgICAgICAgICB0aGlzLmVsZW1lbnRzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIHRoaXMuZWxlbWVudHMubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUGFyZW50S2V5cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUVsZW1lbnRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmVsZW1lbnRzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuZWxlbWVudHMudmFsdWVdO1xyXG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGl0ZW1zLnNwbGljZShpbmRleCAtIDEsIDAsIGl0ZW0pO1xyXG4gICAgdGhpcy5lbGVtZW50cy5zZXRWYWx1ZShpdGVtcyk7XHJcbiAgICB0aGlzLmVsZW1lbnRzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZWxlbWVudHMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlRWxlbWVudERvd24oaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4ICsgMSA+PSB0aGlzLmVsZW1lbnRzLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5lbGVtZW50cy52YWx1ZVtpbmRleF07XHJcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmVsZW1lbnRzLnZhbHVlXTtcclxuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBpdGVtKTtcclxuICAgIHRoaXMuZWxlbWVudHMuc2V0VmFsdWUoaXRlbXMpO1xyXG4gICAgdGhpcy5lbGVtZW50cy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gYXJ0aXN0c1xyXG4gIHB1YmxpYyBhZGRBcnRpc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRBcnRpc3Qoe1xyXG4gICAgICB0eXBlOiB0aGlzLmFydFR5cGVFbnRyaWVzPy5sZW5ndGggPyB0aGlzLmFydFR5cGVFbnRyaWVzWzBdLmlkIDogJycsXHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEFydGlzdChhcnRpc3Q6IENvZERlY29yYXRpb25BcnRpc3QgfCBudWxsLCBpbmRleCA9IC0xKTogdm9pZCB7XHJcbiAgICBpZiAoIWFydGlzdCkge1xyXG4gICAgICB0aGlzLmVkaXRlZEFydGlzdEluZGV4ID0gLTE7XHJcbiAgICAgIHRoaXMuZWRpdGVkQXJ0aXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0ZWRBcnRpc3RJbmRleCA9IGluZGV4O1xyXG4gICAgICB0aGlzLmVkaXRlZEFydGlzdCA9IGFydGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFydGlzdFNhdmUoYXJ0aXN0OiBDb2REZWNvcmF0aW9uQXJ0aXN0KTogdm9pZCB7XHJcbiAgICBjb25zdCBhcnRpc3RzID0gWy4uLnRoaXMuYXJ0aXN0cy52YWx1ZV07XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdGVkQXJ0aXN0SW5kZXggPiAtMSkge1xyXG4gICAgICBhcnRpc3RzLnNwbGljZSh0aGlzLmVkaXRlZEFydGlzdEluZGV4LCAxLCBhcnRpc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJ0aXN0cy5wdXNoKGFydGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcnRpc3RzLnNldFZhbHVlKGFydGlzdHMpO1xyXG4gICAgdGhpcy5hcnRpc3RzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuYXJ0aXN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgdGhpcy5lZGl0QXJ0aXN0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFydGlzdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5jb25maXJtKCdDb25maXJtYXRpb24nLCAnRGVsZXRlIGFydGlzdD8nKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh5ZXMpID0+IHtcclxuICAgICAgICBpZiAoeWVzKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmFydGlzdHMudmFsdWVdO1xyXG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIHRoaXMuYXJ0aXN0cy5zZXRWYWx1ZShpdGVtcyk7XHJcbiAgICAgICAgICB0aGlzLmFydGlzdHMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgdGhpcy5hcnRpc3RzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlQXJ0aXN0VXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4IDwgMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5hcnRpc3RzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuYXJ0aXN0cy52YWx1ZV07XHJcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaXRlbXMuc3BsaWNlKGluZGV4IC0gMSwgMCwgaXRlbSk7XHJcbiAgICB0aGlzLmFydGlzdHMuc2V0VmFsdWUoaXRlbXMpO1xyXG4gICAgdGhpcy5hcnRpc3RzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuYXJ0aXN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdmVBcnRpc3REb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChpbmRleCArIDEgPj0gdGhpcy5hcnRpc3RzLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5hcnRpc3RzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuYXJ0aXN0cy52YWx1ZV07XHJcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaXRlbXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgaXRlbSk7XHJcbiAgICB0aGlzLmFydGlzdHMuc2V0VmFsdWUoaXRlbXMpO1xyXG4gICAgdGhpcy5hcnRpc3RzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuYXJ0aXN0cy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGVjb3JhdGlvbiA9IHRoaXMuZ2V0RGVjb3JhdGlvbigpO1xyXG4gICAgdGhpcy5kZWNvcmF0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZGVjb3JhdGlvbik7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdj5cclxuICAgIDwhLS0gaWQgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+SUQ8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJlaWRcIiAvPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KGVpZCkuZXJyb3JzPy5yZXF1aXJlZCAmJiAoZWlkLmRpcnR5IHx8IGVpZC50b3VjaGVkKVwiXHJcbiAgICAgICAgPkVJRCByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgID5cclxuICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICpuZ0lmPVwiJGFueShlaWQpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChlaWQuZGlydHkgfHwgZWlkLnRvdWNoZWQpXCJcclxuICAgICAgICA+RUlEIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICZuYnNwO1xyXG4gICAgPCEtLSBuYW1lIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPm5hbWU8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJuYW1lXCIgLz5cclxuICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICpuZ0lmPVwiJGFueShuYW1lKS5lcnJvcnM/LnJlcXVpcmVkICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZClcIlxyXG4gICAgICAgID5uYW1lIHJlcXVpcmVkPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KG5hbWUpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZClcIlxyXG4gICAgICAgID5uYW1lIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBmbGFncyAtLT5cclxuICA8ZmllbGRzZXQ+XHJcbiAgICA8bGVnZW5kPmZlYXR1cmVzPC9sZWdlbmQ+XHJcbiAgICA8Y2FkbXVzLXVpLWZsYWdzLXBpY2tlclxyXG4gICAgICBbZmxhZ3NdPVwiZGVjRmxhZ3MkIHwgYXN5bmNcIlxyXG4gICAgICAoZmxhZ3NDaGFuZ2UpPVwib25GbGFnc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgPC9maWVsZHNldD5cclxuXHJcbiAgPCEtLSBub3RlIC0tPlxyXG4gIDxiciAvPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxvbmctdGV4dFwiPlxyXG4gICAgPG1hdC1sYWJlbD5ub3RlPC9tYXQtbGFiZWw+XHJcbiAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibm90ZVwiPjwvdGV4dGFyZWE+XHJcbiAgICA8bWF0LWVycm9yXHJcbiAgICAgICpuZ0lmPVwiJGFueShub3RlKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAobm90ZS5kaXJ0eSB8fCBub3RlLnRvdWNoZWQpXCJcclxuICAgICAgPm5vdGUgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDwhLS0gY2hyb25vdG9wZXMgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGVcclxuICAgICAgICA+PG1hdC1pY29uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHg7IGNvbG9yOiAjMjRhNTI0XCJcclxuICAgICAgICAgID5ob3VyZ2xhc3NfZW1wdHk8L21hdC1pY29uXHJcbiAgICAgICAgPlxyXG4gICAgICAgIGNocm9ub3RvcGVzPC9tYXQtcGFuZWwtdGl0bGVcclxuICAgICAgPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxjYWRtdXMtYXNzZXJ0ZWQtY2hyb25vdG9wZS1zZXRcclxuICAgICAgW3RhZ0VudHJpZXNdPVwiY3RUYWdFbnRyaWVzXCJcclxuICAgICAgW2Fzc1RhZ0VudHJpZXNdPVwiYXNzVGFnRW50cmllc1wiXHJcbiAgICAgIFtyZWZUYWdFbnRyaWVzXT1cInJlZlRhZ0VudHJpZXNcIlxyXG4gICAgICBbcmVmVHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbY2hyb25vdG9wZXNdPVwiY2hyb25vdG9wZXMudmFsdWVcIlxyXG4gICAgICAoY2hyb25vdG9wZXNDaGFuZ2UpPVwib25DaHJvbm90b3Blc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NhZG11cy1hc3NlcnRlZC1jaHJvbm90b3BlLXNldD5cclxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcblxyXG4gIDwhLS0gcmVmZXJlbmNlcyAtLT5cclxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPG1hdC1wYW5lbC10aXRsZVxyXG4gICAgICAgID48bWF0LWljb24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweDsgY29sb3I6ICNiYjNkNmNcIlxyXG4gICAgICAgICAgPmxpYnJhcnlfYm9va3M8L21hdC1pY29uXHJcbiAgICAgICAgPlxyXG4gICAgICAgIHJlZmVyZW5jZXM8L21hdC1wYW5lbC10aXRsZVxyXG4gICAgICA+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPGNhZG11cy1yZWZzLWRvYy1yZWZlcmVuY2VzXHJcbiAgICAgIFt0YWdFbnRyaWVzXT1cInJlZlRhZ0VudHJpZXNcIlxyXG4gICAgICBbdHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbcmVmZXJlbmNlc109XCJyZWZlcmVuY2VzLnZhbHVlXCJcclxuICAgICAgKHJlZmVyZW5jZXNDaGFuZ2UpPVwib25SZWZlcmVuY2VzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgPjwvY2FkbXVzLXJlZnMtZG9jLXJlZmVyZW5jZXM+XHJcbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICA8IS0tIGFydGlzdHMgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGVcclxuICAgICAgICA+PG1hdC1pY29uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHg7IGNvbG9yOiAjZGRjZDQxXCI+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgYXJ0aXN0czwvbWF0LXBhbmVsLXRpdGxlXHJcbiAgICAgID5cclxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAoY2xpY2spPVwiYWRkQXJ0aXN0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPiBhcnRpc3RcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx0YWJsZSAqbmdJZj1cImFydGlzdHM/LnZhbHVlPy5sZW5ndGhcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgPHRoPnR5cGU8L3RoPlxyXG4gICAgICAgICAgPHRoPm5hbWU8L3RoPlxyXG4gICAgICAgICAgPHRoPkVJRDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0clxyXG4gICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgIGxldCBhcnRpc3Qgb2YgYXJ0aXN0cz8udmFsdWU7XHJcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XHJcbiAgICAgICAgICAgIGxldCBmaXJzdCA9IGZpcnN0O1xyXG4gICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGFydGlzdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRBcnRpc3QoYXJ0aXN0LCBpKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdGhpcyBhcnRpc3QgdXBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaXJzdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVBcnRpc3RVcChpKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSB0aGlzIGFydGlzdCBkb3duXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGFzdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVBcnRpc3REb3duKGkpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHRoaXMgYXJ0aXN0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQXJ0aXN0KGkpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICB7eyBhcnRpc3QudHlwZSB8IGZsYXRMb29rdXAgOiBhcnRUeXBlRW50cmllcyA6IFwiaWRcIiA6IFwidmFsdWVcIiB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZD57eyBhcnRpc3QubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICA8dGQ+e3sgYXJ0aXN0LmVpZCB9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiZWRpdGVkQXJ0aXN0XCIgW2Rpc2FibGVkXT1cIiFlZGl0ZWRBcnRpc3RcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+YXJ0aXN0IHt7IGVkaXRlZEFydGlzdD8ubmFtZSB9fTwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8Y2FkbXVzLWNvZC1kZWNvcmF0aW9uLWFydGlzdFxyXG4gICAgICAgIFtjdFRhZ0VudHJpZXNdPVwiY3RUYWdFbnRyaWVzXCJcclxuICAgICAgICBbYXNzVGFnRW50cmllc109XCJhc3NUYWdFbnRyaWVzXCJcclxuICAgICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcclxuICAgICAgICBbYXJ0VHlwZUVudHJpZXNdPVwiYXJ0VHlwZUVudHJpZXNcIlxyXG4gICAgICAgIFtyZWZUeXBlRW50cmllc109XCJyZWZUeXBlRW50cmllc1wiXHJcbiAgICAgICAgW2FydFN0eWxlRW50cmllc109XCJhcnRTdHlsZUVudHJpZXNcIlxyXG4gICAgICAgIFtpZFRhZ0VudHJpZXNdPVwiaWRUYWdFbnRyaWVzXCJcclxuICAgICAgICBbaWRTY29wZUVudHJpZXNdPVwiaWRTY29wZUVudHJpZXNcIlxyXG4gICAgICAgIFthcnRpc3RdPVwiZWRpdGVkQXJ0aXN0XCJcclxuICAgICAgICAoYXJ0aXN0Q2hhbmdlKT1cIm9uQXJ0aXN0U2F2ZSgkZXZlbnQpXCJcclxuICAgICAgICAoZWRpdG9yQ2xvc2UpPVwiZWRpdEFydGlzdChudWxsKVwiXHJcbiAgICAgID48L2NhZG11cy1jb2QtZGVjb3JhdGlvbi1hcnRpc3Q+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICA8IS0tIGVsZW1lbnRzIC0tPlxyXG4gIDxoMz5lbGVtZW50czwvaDM+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwiYWRkRWxlbWVudCgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPiBlbGVtZW50XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8dGFibGUgKm5nSWY9XCJlbGVtZW50cz8udmFsdWU/Lmxlbmd0aFwiPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoPmtleTwvdGg+XHJcbiAgICAgICAgPHRoPnBhcmVudDwvdGg+XHJcbiAgICAgICAgPHRoPnR5cGU8L3RoPlxyXG4gICAgICAgIDx0aD5zdWJqZWN0PC90aD5cclxuICAgICAgICA8dGg+ZXh0ZW50PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHk+XHJcbiAgICAgIDx0clxyXG4gICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgb2YgZWxlbWVudHM/LnZhbHVlO1xyXG4gICAgICAgICAgbGV0IGkgPSBpbmRleDtcclxuICAgICAgICAgIGxldCBmaXJzdCA9IGZpcnN0O1xyXG4gICAgICAgICAgbGV0IGxhc3QgPSBsYXN0XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGVsZW1lbnRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEVsZW1lbnQoZWxlbWVudCwgaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSB0aGlzIGVsZW1lbnQgdXBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlyc3RcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibW92ZUVsZW1lbnRVcChpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdGhpcyBlbGVtZW50IGRvd25cIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibGFzdFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlRWxlbWVudERvd24oaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIGVsZW1lbnRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRWxlbWVudChpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IGVsZW1lbnQua2V5IH19PC90ZD5cclxuICAgICAgICA8dGQ+e3sgZWxlbWVudC5wYXJlbnRLZXkgfX08L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIHt7IGVsZW1lbnQudHlwZSB8IGZsYXRMb29rdXAgOiBkZWNFbGVtVHlwZUVudHJpZXMgOiBcImlkXCIgOiBcInZhbHVlXCIgfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD57eyBlbGVtZW50LnN1YmplY3QgfX08L3RkPlxyXG4gICAgICAgIDx0ZD57eyBlbGVtZW50LnJhbmdlcyB8IGNvZExvY2F0aW9uUmFuZ2UgfX08L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90Ym9keT5cclxuICA8L3RhYmxlPlxyXG5cclxuICA8IS0tIEVMRU1FTlQgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2Rpc2FibGVkXT1cIiFlZGl0ZWRFbGVtZW50XCIgW2V4cGFuZGVkXT1cImVkaXRlZEVsZW1lbnRcIj5cclxuICAgIDxjYWRtdXMtY29kLWRlY29yYXRpb24tZWxlbWVudFxyXG4gICAgICBbaW1nVHlwZUVudHJpZXNdPVwiaW1nVHlwZUVudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbVBvc0VudHJpZXNdPVwiZGVjRWxlbVBvc0VudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbUZsYWdFbnRyaWVzXT1cImRlY0VsZW1GbGFnRW50cmllc1wiXHJcbiAgICAgIFtkZWNFbGVtVGVjaEVudHJpZXNdPVwiZGVjRWxlbVRlY2hFbnRyaWVzXCJcclxuICAgICAgW2RlY0VsZW1Ub29sRW50cmllc109XCJkZWNFbGVtVG9vbEVudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbVR5cGVFbnRyaWVzXT1cImRlY0VsZW1UeXBlRW50cmllc1wiXHJcbiAgICAgIFtkZWNFbGVtQ29sb3JFbnRyaWVzXT1cImRlY0VsZW1Db2xvckVudHJpZXNcIlxyXG4gICAgICBbZGVjRWxlbVR5cG9sRW50cmllc109XCJkZWNFbGVtVHlwb2xFbnRyaWVzXCJcclxuICAgICAgW2RlY1R5cGVIaWRkZW5FbnRyaWVzXT1cImRlY1R5cGVIaWRkZW5FbnRyaWVzXCJcclxuICAgICAgW2RlY0VsZW1HaWxkaW5nRW50cmllc109XCJkZWNFbGVtR2lsZGluZ0VudHJpZXNcIlxyXG4gICAgICBbZWxlbWVudF09XCJlZGl0ZWRFbGVtZW50XCJcclxuICAgICAgW3BhcmVudEtleXNdPVwicGFyZW50S2V5c1wiXHJcbiAgICAgIChlbGVtZW50Q2hhbmdlKT1cIm9uRWxlbWVudFNhdmUoJGV2ZW50KVwiXHJcbiAgICAgIChlZGl0b3JDbG9zZSk9XCJlZGl0RWxlbWVudChudWxsKVwiXHJcbiAgICA+PC9jYWRtdXMtY29kLWRlY29yYXRpb24tZWxlbWVudD5cclxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8aHIgLz5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yb3dcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiRGlzY2FyZCBkZWNvcmF0aW9uIGNoYW5nZXNcIlxyXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFjY2VwdCBkZWNvcmF0aW9uIGNoYW5nZXNcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGZvcm0ucHJpc3RpbmVcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj4gZGVjb3JhdGlvblxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
@@ -57,9 +57,13 @@ export class CodDecorationArtistStyleComponent {
57
57
  }
58
58
  onChronotopeChange(chronotope) {
59
59
  this.chronotope.setValue(chronotope || null);
60
+ this.chronotope.updateValueAndValidity();
61
+ this.chronotope.markAsDirty();
60
62
  }
61
63
  onAssertionChange(assertion) {
62
64
  this.assertion.setValue(assertion || null);
65
+ this.assertion.updateValueAndValidity();
66
+ this.assertion.markAsDirty();
63
67
  }
64
68
  getStyle() {
65
69
  return {
@@ -103,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
103
107
  }], editorClose: [{
104
108
  type: Output
105
109
  }] } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUvY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUvY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFheEIsTUFBTSxPQUFPLGlDQUFpQztJQXlDNUMsWUFBWSxXQUF3QjtRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNwQyxVQUFVLENBQUMsUUFBUTtZQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUN6QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENB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QVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OzhIQTNHVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQywyU0NuQjlDLHFnRUFrRUE7MkZEL0NhLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxvQ0FBb0M7a0dBUW5DLEtBQUs7c0JBRGYsS0FBSztnQkFjQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLFdBQVc7c0JBRGpCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBUaGVzYXVydXNFbnRyeSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29yZSc7XHJcbmltcG9ydCB7IEFzc2VydGVkQ2hyb25vdG9wZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtcmVmcy1hc3NlcnRlZC1jaHJvbm90b3BlJztcclxuaW1wb3J0IHsgQXNzZXJ0aW9uIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGlvbic7XHJcblxyXG5pbXBvcnQgeyBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfSBmcm9tICcuLi9jb2QtZGVjb3JhdGlvbnMtcGFydCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NhZG11cy1jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZC1kZWNvcmF0aW9uLWFydGlzdC1zdHlsZS5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgX3N0eWxlOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzdHlsZSgpOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHN0eWxlKHZhbHVlOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl9zdHlsZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBjaHJvbm90b3BlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdFRhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gYXNzZXJ0aW9uLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGRvYy1yZWZlcmVuY2UtdHlwZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBkb2MtcmVmZXJlbmNlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc3R5bGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGU+O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZWRpdG9yQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwdWJsaWMgbmFtZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGhhc0Nocm9ub3RvcGU6IEZvcm1Db250cm9sPGJvb2xlYW4+O1xyXG4gIHB1YmxpYyBjaHJvbm90b3BlOiBGb3JtQ29udHJvbDxBc3NlcnRlZENocm9ub3RvcGUgfCBudWxsPjtcclxuICBwdWJsaWMgaGFzQXNzZXJ0aW9uOiBGb3JtQ29udHJvbDxib29sZWFuPjtcclxuICBwdWJsaWMgYXNzZXJ0aW9uOiBGb3JtQ29udHJvbDxBc3NlcnRpb24gfCBudWxsPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuc3R5bGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvZERlY29yYXRpb25BcnRpc3RTdHlsZT4oKTtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMubmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCksXHJcbiAgICBdKTtcclxuICAgIHRoaXMuaGFzQ2hyb25vdG9wZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmNocm9ub3RvcGUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gICAgdGhpcy5oYXNBc3NlcnRpb24gPSBmb3JtQnVpbGRlci5jb250cm9sKGZhbHNlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5hc3NlcnRpb24gPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgIGhhc0Nocm9ub3RvcGU6IHRoaXMuaGFzQ2hyb25vdG9wZSxcclxuICAgICAgY2hyb25vdG9wZTogdGhpcy5jaHJvbm90b3BlLFxyXG4gICAgICBoYXNBc3NlcnRpb246IHRoaXMuaGFzQXNzZXJ0aW9uLFxyXG4gICAgICBhc3NlcnRpb246IHRoaXMuYXNzZXJ0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShzdHlsZTogQ29kRGVjb3JhdGlvbkFydGlzdFN0eWxlIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAoIXN0eWxlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm5hbWUuc2V0VmFsdWUoc3R5bGUubmFtZSk7XHJcbiAgICB0aGlzLmhhc0Nocm9ub3RvcGUuc2V0VmFsdWUoc3R5bGUuY2hyb25vdG9wZSA/IHRydWUgOiBmYWxzZSk7XHJcbiAgICB0aGlzLmhhc0Fzc2VydGlvbi5zZXRWYWx1ZShzdHlsZS5hc3NlcnRpb24gPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgdGhpcy5jaHJvbm90b3BlLnNldFZhbHVlKHN0eWxlLmNocm9ub3RvcGUgfHwgbnVsbCk7XHJcbiAgICB0aGlzLmFzc2VydGlvbi5zZXRWYWx1ZShzdHlsZS5hc3NlcnRpb24gfHwgbnVsbCk7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNocm9ub3RvcGVDaGFuZ2UoY2hyb25vdG9wZTogQXNzZXJ0ZWRDaHJvbm90b3BlIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLmNocm9ub3RvcGUuc2V0VmFsdWUoY2hyb25vdG9wZSB8fCBudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFzc2VydGlvbkNoYW5nZShhc3NlcnRpb246IEFzc2VydGlvbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdGhpcy5hc3NlcnRpb24uc2V0VmFsdWUoYXNzZXJ0aW9uIHx8IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdHlsZSgpOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZTogdGhpcy5uYW1lLnZhbHVlPy50cmltKCkgfHwgJycsXHJcbiAgICAgIGNocm9ub3RvcGU6IHRoaXMuaGFzQ2hyb25vdG9wZS52YWx1ZVxyXG4gICAgICAgID8gdGhpcy5jaHJvbm90b3BlLnZhbHVlIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBhc3NlcnRpb246IHRoaXMuaGFzQXNzZXJ0aW9uLnZhbHVlXHJcbiAgICAgICAgPyB0aGlzLmFzc2VydGlvbi52YWx1ZSB8fCB1bmRlZmluZWRcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0b3JDbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zdHlsZSA9IHRoaXMuZ2V0U3R5bGUoKTtcclxuICAgIHRoaXMuc3R5bGVDaGFuZ2UuZW1pdCh0aGlzLl9zdHlsZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdj5cclxuICAgIDwhLS0gbmFtZSAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD5uYW1lPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibmFtZVwiIC8+XHJcbiAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAqbmdJZj1cIiRhbnkobmFtZSkuZXJyb3JzPy5yZXF1aXJlZCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpXCJcclxuICAgICAgICA+bmFtZSByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgID5cclxuICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICpuZ0lmPVwiJGFueShuYW1lKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpXCJcclxuICAgICAgICA+bmFtZSB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgID5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gY2hyb25vdG9wZSAtLT5cclxuICA8ZGl2PlxyXG4gICAgPG1hdC1jaGVja2JveCBbZm9ybUNvbnRyb2xdPVwiaGFzQ2hyb25vdG9wZVwiPmNocm9ub3RvcGU8L21hdC1jaGVja2JveD5cclxuICAgIDxjYWRtdXMtcmVmcy1hc3NlcnRlZC1jaHJvbm90b3BlXHJcbiAgICAgICpuZ0lmPVwiaGFzQ2hyb25vdG9wZT8udmFsdWVcIlxyXG4gICAgICBbdGFnRW50cmllc109XCJjdFRhZ0VudHJpZXNcIlxyXG4gICAgICBbYXNzVGFnRW50cmllc109XCJhc3NUYWdFbnRyaWVzXCJcclxuICAgICAgW3JlZlRhZ0VudHJpZXNdPVwicmVmVGFnRW50cmllc1wiXHJcbiAgICAgIFtyZWZUeXBlRW50cmllc109XCJyZWZUeXBlRW50cmllc1wiXHJcbiAgICAgIFtjaHJvbm90b3BlXT1cImNocm9ub3RvcGUudmFsdWVcIlxyXG4gICAgICAoY2hyb25vdG9wZUNoYW5nZSk9XCJvbkNocm9ub3RvcGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICA+PC9jYWRtdXMtcmVmcy1hc3NlcnRlZC1jaHJvbm90b3BlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGFzc2VydGlvbiAtLT5cclxuICA8ZGl2PlxyXG4gICAgPG1hdC1jaGVja2JveCBbZm9ybUNvbnRyb2xdPVwiaGFzQXNzZXJ0aW9uXCI+YXNzZXJ0aW9uPC9tYXQtY2hlY2tib3g+XHJcbiAgICA8Y2FkbXVzLXJlZnMtYXNzZXJ0aW9uXHJcbiAgICAgICpuZ0lmPVwiaGFzQXNzZXJ0aW9uPy52YWx1ZVwiXHJcbiAgICAgIFthc3NUYWdFbnRyaWVzXT1cImFzc1RhZ0VudHJpZXNcIlxyXG4gICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcclxuICAgICAgW3JlZlR5cGVFbnRyaWVzXT1cInJlZlR5cGVFbnRyaWVzXCJcclxuICAgICAgW2Fzc2VydGlvbl09XCJhc3NlcnRpb24udmFsdWVcIlxyXG4gICAgICAoYXNzZXJ0aW9uQ2hhbmdlKT1cIm9uQXNzZXJ0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgPjwvY2FkbXVzLXJlZnMtYXNzZXJ0aW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGJ1dHRvbnMgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiRGlzY2FyZCBjaGFuZ2VzXCJcclxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJBY2NlcHQgY2hhbmdlc1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgZm9ybS5wcmlzdGluZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUvY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUvY29kLWRlY29yYXRpb24tYXJ0aXN0LXN0eWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFheEIsTUFBTSxPQUFPLGlDQUFpQztJQXlDNUMsWUFBWSxXQUF3QjtRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNwQyxVQUFVLENBQUMsUUFBUTtZQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUN6QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENB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QyxTQUFTO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVM7Z0JBQ25DLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OzhIQS9HVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQywyU0NuQjlDLHFnRUFrRUE7MkZEL0NhLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxvQ0FBb0M7a0dBUW5DLEtBQUs7c0JBRGYsS0FBSztnQkFjQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLFdBQVc7c0JBRGpCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBUaGVzYXVydXNFbnRyeSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29yZSc7XHJcbmltcG9ydCB7IEFzc2VydGVkQ2hyb25vdG9wZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtcmVmcy1hc3NlcnRlZC1jaHJvbm90b3BlJztcclxuaW1wb3J0IHsgQXNzZXJ0aW9uIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGlvbic7XHJcblxyXG5pbXBvcnQgeyBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfSBmcm9tICcuLi9jb2QtZGVjb3JhdGlvbnMtcGFydCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NhZG11cy1jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2QtZGVjb3JhdGlvbi1hcnRpc3Qtc3R5bGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZC1kZWNvcmF0aW9uLWFydGlzdC1zdHlsZS5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgX3N0eWxlOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzdHlsZSgpOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHN0eWxlKHZhbHVlOiBDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGUgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl9zdHlsZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBjaHJvbm90b3BlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdFRhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgLy8gYXNzZXJ0aW9uLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vIGRvYy1yZWZlcmVuY2UtdHlwZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBkb2MtcmVmZXJlbmNlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc3R5bGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDb2REZWNvcmF0aW9uQXJ0aXN0U3R5bGU+O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZWRpdG9yQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwdWJsaWMgbmFtZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGhhc0Nocm9ub3RvcGU6IEZvcm1Db250cm9sPGJvb2xlYW4+O1xyXG4gIHB1YmxpYyBjaHJvbm90b3BlOiBGb3JtQ29udHJvbDxBc3NlcnRlZENocm9ub3RvcGUgfCBudWxsPjtcclxuICBwdWJsaWMgaGFzQXNzZXJ0aW9uOiBGb3JtQ29udHJvbDxib29sZWFuPjtcclxuICBwdWJsaWMgYXNzZXJ0aW9uOiBGb3JtQ29udHJvbDxBc3NlcnRpb24gfCBudWxsPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuc3R5bGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvZERlY29yYXRpb25BcnRpc3RTdHlsZT4oKTtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMubmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCksXHJcbiAgICBdKTtcclxuICAgIHRoaXMuaGFzQ2hyb25vdG9wZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmNocm9ub3RvcGUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gICAgdGhpcy5oYXNBc3NlcnRpb24gPSBmb3JtQnVpbGRlci5jb250cm9sKGZhbHNlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5hc3NlcnRpb24gPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgIGhhc0Nocm9ub3RvcGU6IHRoaXMuaGFzQ2hyb25vdG9wZSxcclxuICAgICAgY2hyb25vdG9wZTogdGhpcy5jaHJvbm90b3BlLFxyXG4gICAgICBoYXNBc3NlcnRpb246IHRoaXMuaGFzQXNzZXJ0aW9uLFxyXG4gICAgICBhc3NlcnRpb246IHRoaXMuYXNzZXJ0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShzdHlsZTogQ29kRGVjb3JhdGlvbkFydGlzdFN0eWxlIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAoIXN0eWxlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm5hbWUuc2V0VmFsdWUoc3R5bGUubmFtZSk7XHJcbiAgICB0aGlzLmhhc0Nocm9ub3RvcGUuc2V0VmFsdWUoc3R5bGUuY2hyb25vdG9wZSA/IHRydWUgOiBmYWxzZSk7XHJcbiAgICB0aGlzLmhhc0Fzc2VydGlvbi5zZXRWYWx1ZShzdHlsZS5hc3NlcnRpb24gPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgdGhpcy5jaHJvbm90b3BlLnNldFZhbHVlKHN0eWxlLmNocm9ub3RvcGUgfHwgbnVsbCk7XHJcbiAgICB0aGlzLmFzc2VydGlvbi5zZXRWYWx1ZShzdHlsZS5hc3NlcnRpb24gfHwgbnVsbCk7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNocm9ub3RvcGVDaGFuZ2UoY2hyb25vdG9wZTogQXNzZXJ0ZWRDaHJvbm90b3BlIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLmNocm9ub3RvcGUuc2V0VmFsdWUoY2hyb25vdG9wZSB8fCBudWxsKTtcclxuICAgIHRoaXMuY2hyb25vdG9wZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNocm9ub3RvcGUubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFzc2VydGlvbkNoYW5nZShhc3NlcnRpb246IEFzc2VydGlvbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdGhpcy5hc3NlcnRpb24uc2V0VmFsdWUoYXNzZXJ0aW9uIHx8IG51bGwpO1xyXG4gICAgdGhpcy5hc3NlcnRpb24udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5hc3NlcnRpb24ubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3R5bGUoKTogQ29kRGVjb3JhdGlvbkFydGlzdFN0eWxlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZS52YWx1ZT8udHJpbSgpIHx8ICcnLFxyXG4gICAgICBjaHJvbm90b3BlOiB0aGlzLmhhc0Nocm9ub3RvcGUudmFsdWVcclxuICAgICAgICA/IHRoaXMuY2hyb25vdG9wZS52YWx1ZSB8fCB1bmRlZmluZWRcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgYXNzZXJ0aW9uOiB0aGlzLmhhc0Fzc2VydGlvbi52YWx1ZVxyXG4gICAgICAgID8gdGhpcy5hc3NlcnRpb24udmFsdWUgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3R5bGUgPSB0aGlzLmdldFN0eWxlKCk7XHJcbiAgICB0aGlzLnN0eWxlQ2hhbmdlLmVtaXQodGhpcy5fc3R5bGUpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxyXG4gIDxkaXY+XHJcbiAgICA8IS0tIG5hbWUgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+bmFtZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm5hbWVcIiAvPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KG5hbWUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKG5hbWUuZGlydHkgfHwgbmFtZS50b3VjaGVkKVwiXHJcbiAgICAgICAgPm5hbWUgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICA+XHJcbiAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAqbmdJZj1cIiRhbnkobmFtZSkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKG5hbWUuZGlydHkgfHwgbmFtZS50b3VjaGVkKVwiXHJcbiAgICAgICAgPm5hbWUgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgICA+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGNocm9ub3RvcGUgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImhhc0Nocm9ub3RvcGVcIj5jaHJvbm90b3BlPC9tYXQtY2hlY2tib3g+XHJcbiAgICA8Y2FkbXVzLXJlZnMtYXNzZXJ0ZWQtY2hyb25vdG9wZVxyXG4gICAgICAqbmdJZj1cImhhc0Nocm9ub3RvcGU/LnZhbHVlXCJcclxuICAgICAgW3RhZ0VudHJpZXNdPVwiY3RUYWdFbnRyaWVzXCJcclxuICAgICAgW2Fzc1RhZ0VudHJpZXNdPVwiYXNzVGFnRW50cmllc1wiXHJcbiAgICAgIFtyZWZUYWdFbnRyaWVzXT1cInJlZlRhZ0VudHJpZXNcIlxyXG4gICAgICBbcmVmVHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbY2hyb25vdG9wZV09XCJjaHJvbm90b3BlLnZhbHVlXCJcclxuICAgICAgKGNocm9ub3RvcGVDaGFuZ2UpPVwib25DaHJvbm90b3BlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgPjwvY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtY2hyb25vdG9wZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhc3NlcnRpb24gLS0+XHJcbiAgPGRpdj5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImhhc0Fzc2VydGlvblwiPmFzc2VydGlvbjwvbWF0LWNoZWNrYm94PlxyXG4gICAgPGNhZG11cy1yZWZzLWFzc2VydGlvblxyXG4gICAgICAqbmdJZj1cImhhc0Fzc2VydGlvbj8udmFsdWVcIlxyXG4gICAgICBbYXNzVGFnRW50cmllc109XCJhc3NUYWdFbnRyaWVzXCJcclxuICAgICAgW3JlZlRhZ0VudHJpZXNdPVwicmVmVGFnRW50cmllc1wiXHJcbiAgICAgIFtyZWZUeXBlRW50cmllc109XCJyZWZUeXBlRW50cmllc1wiXHJcbiAgICAgIFthc3NlcnRpb25dPVwiYXNzZXJ0aW9uLnZhbHVlXCJcclxuICAgICAgKGFzc2VydGlvbkNoYW5nZSk9XCJvbkFzc2VydGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NhZG11cy1yZWZzLWFzc2VydGlvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBidXR0b25zIC0tPlxyXG4gIDxkaXY+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkRpc2NhcmQgY2hhbmdlc1wiXHJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiQWNjZXB0IGNoYW5nZXNcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGZvcm0ucHJpc3RpbmVcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==