@coolon/angular-ui-powerups 13.1.7 → 13.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/assets/table.scss +2 -2
  2. package/esm2020/lib/components/commands/command/command.component.mjs +18 -5
  3. package/esm2020/lib/components/components.module.mjs +22 -19
  4. package/esm2020/lib/components/exports.mjs +28 -21
  5. package/esm2020/lib/components/tables/abstract-table-model.mjs +70 -29
  6. package/esm2020/lib/components/tables/abstract-table.component.mjs +12 -10
  7. package/esm2020/lib/components/tables/column/column-list-model.mjs +39 -0
  8. package/esm2020/lib/components/tables/column/column-model.mjs +180 -0
  9. package/esm2020/lib/components/tables/column/column-template/column-template.directive.mjs +35 -0
  10. package/esm2020/lib/components/tables/column/column-text-properties.mjs +2 -0
  11. package/esm2020/lib/components/tables/column/custom-template-column-model.mjs +16 -0
  12. package/esm2020/lib/components/tables/column/custom-value-column-model.mjs +37 -0
  13. package/esm2020/lib/components/tables/column/editor-controls-column-model.mjs +21 -0
  14. package/esm2020/lib/components/tables/column/list-propery-column-model.mjs +48 -0
  15. package/esm2020/lib/components/tables/column/property-column-model.mjs +92 -0
  16. package/esm2020/lib/components/tables/column/selection-column-model.mjs +40 -0
  17. package/esm2020/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +55 -0
  18. package/esm2020/lib/components/tables/editor/edit-session.mjs +23 -0
  19. package/esm2020/lib/components/tables/editor/editable-cell-renderer.mjs +2 -0
  20. package/esm2020/lib/components/tables/{table/paginator → paginator}/paginator.component.mjs +4 -4
  21. package/esm2020/lib/components/tables/renderer/cell-editors.mjs +2 -0
  22. package/esm2020/lib/components/tables/renderer/cell-portal-ref.mjs +93 -0
  23. package/esm2020/lib/components/tables/renderer/cell-renderer.mjs +2 -0
  24. package/esm2020/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +30 -0
  25. package/esm2020/lib/components/tables/{table → renderer}/default-header-cell-renderer/default-header-cell-renderer.component.mjs +1 -1
  26. package/esm2020/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.mjs +40 -0
  27. package/esm2020/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +31 -0
  28. package/esm2020/lib/components/tables/renderer/selection-cell/selection-cell.component.mjs +26 -0
  29. package/esm2020/lib/components/tables/renderer/table-cell/table-cell.component.mjs +93 -0
  30. package/esm2020/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +32 -0
  31. package/esm2020/lib/components/tables/search/column-text-search-formatter.mjs +52 -0
  32. package/esm2020/lib/components/tables/search/enable-cell-text-search.decorator.mjs +30 -0
  33. package/esm2020/lib/components/tables/table/table-model.mjs +2 -10
  34. package/esm2020/lib/components/tables/table/table.component.mjs +12 -12
  35. package/esm2020/lib/components/tables/table-row-menu/table-row-menu.component.mjs +84 -0
  36. package/esm2020/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  37. package/esm2020/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  38. package/esm2020/lib/components/tables/tree-table/tree-table-component.mjs +10 -10
  39. package/esm2020/lib/components/tables/tree-table/tree-table-model.mjs +1 -1
  40. package/esm2020/lib/interaction/activity-ref.mjs +2 -2
  41. package/esm2020/lib/interaction/activity.mjs +36 -27
  42. package/esm2020/lib/interaction/components/abstract-confirm-dialog.component.mjs +1 -1
  43. package/esm2020/lib/interaction/components/abstract-dialog.component.mjs +6 -1
  44. package/esm2020/lib/interaction/components/activity-actions/activity-actions.component.mjs +18 -5
  45. package/esm2020/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs +5 -2
  46. package/esm2020/lib/interaction/components/input-activities/input-activity.mjs +2 -4
  47. package/fesm2015/coolon-angular-ui-powerups.mjs +660 -460
  48. package/fesm2015/coolon-angular-ui-powerups.mjs.map +1 -1
  49. package/fesm2020/coolon-angular-ui-powerups.mjs +801 -602
  50. package/fesm2020/coolon-angular-ui-powerups.mjs.map +1 -1
  51. package/lib/components/commands/command/command.component.d.ts +5 -2
  52. package/lib/components/components.module.d.ts +55 -54
  53. package/lib/components/exports.d.ts +27 -20
  54. package/lib/components/tables/abstract-table-model.d.ts +24 -13
  55. package/lib/components/tables/abstract-table.component.d.ts +6 -5
  56. package/lib/components/tables/{column-list-model.d.ts → column/column-list-model.d.ts} +4 -4
  57. package/lib/components/tables/column/column-model.d.ts +77 -0
  58. package/lib/components/tables/column/custom-template-column-model.d.ts +8 -0
  59. package/lib/components/tables/column/custom-value-column-model.d.ts +10 -0
  60. package/lib/components/tables/column/editor-controls-column-model.d.ts +13 -0
  61. package/lib/components/tables/column/list-propery-column-model.d.ts +15 -0
  62. package/lib/components/tables/column/property-column-model.d.ts +24 -0
  63. package/lib/components/tables/column/selection-column-model.d.ts +12 -0
  64. package/lib/components/tables/{table → editor}/edit-row-controls/edit-row-controls.component.d.ts +1 -1
  65. package/lib/components/tables/{edit-session.d.ts → editor/edit-session.d.ts} +2 -2
  66. package/lib/components/tables/{table/mutable-cell-renderer.d.ts → editor/editable-cell-renderer.d.ts} +2 -2
  67. package/lib/components/tables/{table/paginator → paginator}/paginator.component.d.ts +1 -1
  68. package/lib/components/tables/{table → renderer}/cell-portal-ref.d.ts +18 -18
  69. package/lib/components/tables/renderer/cell-renderer.d.ts +3 -0
  70. package/lib/components/tables/{table → renderer}/default-cell-renderer/default-cell-renderer.component.d.ts +1 -1
  71. package/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.d.ts +12 -0
  72. package/lib/components/tables/{table/select-header-cell-renderer/select-header-cell-renderer.component.d.ts → renderer/select-header-cell/selection-header-cell.component.d.ts} +3 -3
  73. package/lib/components/tables/{table/select-cell-renderer/select-cell-renderer.component.d.ts → renderer/selection-cell/selection-cell.component.d.ts} +3 -3
  74. package/lib/components/tables/{table/table-cell-renderer/table-cell-renderer.component.d.ts → renderer/table-cell/table-cell.component.d.ts} +5 -5
  75. package/lib/components/tables/{table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts → renderer/table-header-cell/table-header-cell.component.d.ts} +4 -4
  76. package/lib/components/tables/search/column-text-search-formatter.d.ts +28 -0
  77. package/lib/components/tables/search/enable-cell-text-search.decorator.d.ts +25 -0
  78. package/lib/components/tables/table/table-model.d.ts +3 -9
  79. package/lib/components/tables/table/table.component.d.ts +4 -4
  80. package/lib/components/tables/{table/table-row-menu → table-row-menu}/table-row-menu.component.d.ts +3 -3
  81. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
  82. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +1 -1
  83. package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -2
  84. package/lib/components/tables/tree-table/tree-table-model.d.ts +1 -1
  85. package/lib/interaction/activity.d.ts +15 -10
  86. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +6 -1
  87. package/lib/interaction/components/input-activities/input-activity.d.ts +0 -1
  88. package/package.json +2 -1
  89. package/esm2020/lib/components/tables/column-list-model.mjs +0 -39
  90. package/esm2020/lib/components/tables/edit-session.mjs +0 -23
  91. package/esm2020/lib/components/tables/table/cell-editors.mjs +0 -2
  92. package/esm2020/lib/components/tables/table/cell-portal-ref.mjs +0 -93
  93. package/esm2020/lib/components/tables/table/cell-renderer.mjs +0 -2
  94. package/esm2020/lib/components/tables/table/column-model.mjs +0 -392
  95. package/esm2020/lib/components/tables/table/column-template/column-template.directive.mjs +0 -35
  96. package/esm2020/lib/components/tables/table/column-text-properties.mjs +0 -2
  97. package/esm2020/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.mjs +0 -22
  98. package/esm2020/lib/components/tables/table/edit-row-controls/edit-row-controls.component.mjs +0 -55
  99. package/esm2020/lib/components/tables/table/mutable-cell-renderer.mjs +0 -2
  100. package/esm2020/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.mjs +0 -26
  101. package/esm2020/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.mjs +0 -31
  102. package/esm2020/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.mjs +0 -93
  103. package/esm2020/lib/components/tables/table/table-def.mjs +0 -2
  104. package/esm2020/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.mjs +0 -32
  105. package/esm2020/lib/components/tables/table/table-row-menu/table-row-menu.component.mjs +0 -84
  106. package/esm2020/lib/components/tables/table/text-search-predicate.mjs +0 -2
  107. package/lib/components/tables/table/cell-renderer.d.ts +0 -5
  108. package/lib/components/tables/table/column-model.d.ts +0 -145
  109. package/lib/components/tables/table/table-def.d.ts +0 -7
  110. package/lib/components/tables/table/text-search-predicate.d.ts +0 -1
  111. /package/lib/components/tables/{table → column}/column-template/column-template.directive.d.ts +0 -0
  112. /package/lib/components/tables/{table → column}/column-text-properties.d.ts +0 -0
  113. /package/lib/components/tables/{table → renderer}/cell-editors.d.ts +0 -0
  114. /package/lib/components/tables/{table → renderer}/default-header-cell-renderer/default-header-cell-renderer.component.d.ts +0 -0
@@ -1,8 +1,19 @@
1
- import { assert, DelegatingListModel, DirtyTrackingForm, Dsl, EventListenerList, GarbageCollector, lang, MutableListModel, TrackExternal, ValueModel } from '@coolon/pectin';
2
- import { isFunction, isNil } from 'lodash';
3
- import { ColumnListModel } from './column-list-model';
4
- import { EditSession } from './edit-session';
5
- import { CustomTemplateColumnModel, CustomValueColumnModel, EditorControlColumnModel, ListPropertyColumnModel, PropertyColumnModel, SelectionColumnModel } from './table/column-model';
1
+ import { Injector } from "@angular/core";
2
+ import { assert, DelegatingListModel, DelegatingValueModel, DirtyTrackingForm, Dsl, EventListenerList, Functions, GarbageCollector, lang, MutableListModel, TrackExternal, ValueModel } from "@coolon/pectin";
3
+ import escapeStringRegexp from "escape-string-regexp";
4
+ import { isFunction, isNil } from "lodash";
5
+ import { ColumnListModel } from "./column/column-list-model";
6
+ import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
7
+ import { CustomValueColumnModel } from "./column/custom-value-column-model";
8
+ import { EditorControlColumnModel } from "./column/editor-controls-column-model";
9
+ import { ListPropertyColumnModel } from "./column/list-propery-column-model";
10
+ import { PropertyColumnModel } from "./column/property-column-model";
11
+ import { SelectionColumnModel } from "./column/selection-column-model";
12
+ import { EditSession } from "./editor/edit-session";
13
+ import * as _ from "lodash";
14
+ import { ColumnTextSearchFormatter } from "./search/column-text-search-formatter";
15
+ var DefaultValueFormatter = ColumnTextSearchFormatter.DefaultValueFormatter;
16
+ var DefaultArrayFormatter = ColumnTextSearchFormatter.DefaultArrayFormatter;
6
17
  // export type StringPropertiesOf<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
7
18
  // export type NumberPropertiesOf<T> = { [K in keyof T]: T[K] extends number ? K : never }[keyof T];
8
19
  class RowClass {
@@ -19,39 +30,69 @@ export class AbstractTableModel extends GarbageCollector {
19
30
  this._editorSessions = new MutableListModel();
20
31
  this.rowClassNamePredicates = [];
21
32
  this.rowClickListeners = new EventListenerList();
33
+ this._searchText$ = new DelegatingValueModel();
22
34
  this._createForm = (row) => new DirtyTrackingForm();
23
35
  this.trackBy = (index, item) => {
24
36
  return this.identityOf ? this.identityOf(item) : index;
25
37
  };
26
38
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
27
- this._rowsBeingEdited = new MutableListModel([], {
39
+ this._rowsBeingEdited$ = new MutableListModel([], {
28
40
  identifiedWith: row => this.identityOf(row)
29
41
  });
30
- this._editorSessionByRowId = chain(this._editorSessions).indexBy('rowId');
31
- this.editing = chain(this._editorSessions).count().isGreaterThan(0);
32
- this.dataSource = chain(this._dataSource).replaceAll(this.rowsBeingEdited);
33
- this.firstEditableColumn = chain(this.columns).select(c => c.hasEditorPortal()).first();
34
- this.firstVisibleColumn = chain(this._columnList).first();
35
- this.lastVisibleColumn = chain(this._columnList).last();
36
- this.rowSelectionDisabledOnAllColumns = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
42
+ this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
43
+ this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
44
+ this._textSearchPredicate$ = chain(this._searchText$).map(text => {
45
+ return _.isEmpty(text) ? Functions.identity : (rows) => {
46
+ const regex = new RegExp(escapeStringRegexp(text), "i");
47
+ return rows.filter(row => this.hasMatchingColumn(row, regex));
48
+ };
49
+ }, {
50
+ allowNil: true,
51
+ dependsOn: this.columns
52
+ });
53
+ this.dataSource = chain(this._dataSource)
54
+ .reduceToList(items => this._textSearchPredicate$.value(items), {
55
+ dependsOn: this._textSearchPredicate$
56
+ })
57
+ .replaceAll(this.rowsBeingEdited$);
58
+ this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
59
+ this.firstVisibleColumn$ = chain(this._columnList).first();
60
+ this.lastVisibleColumn$ = chain(this._columnList).last();
61
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
37
62
  }
38
63
  findMatchingColumns(row, regex) {
39
- return this.columns.value.filter(c => c.isTextMatch(row, regex));
64
+ return this.columns.value.filter(c => regex.test(c.getSearchTextFor(row)));
40
65
  }
66
+ // @Trace()
41
67
  hasMatchingColumn(row, regex) {
42
- return !!this.columns.value.find(c => c.isTextMatch(row, regex));
68
+ return !!this.columns.value.find(c => regex.test(c.getSearchTextFor(row)));
69
+ }
70
+ initialise(injector) {
71
+ // not sure if I should define these at the module level or not...
72
+ const customInjector = Injector.create({
73
+ providers: [
74
+ { provide: DefaultValueFormatter },
75
+ { provide: DefaultArrayFormatter }
76
+ ],
77
+ parent: injector
78
+ });
79
+ this.columns.value.forEach(c => c.initialise(customInjector));
43
80
  }
44
81
  setDataSource(sourceOfTruth) {
45
82
  this._dataSource.setDelegate(sourceOfTruth);
46
83
  }
84
+ setTextSearch(searchText$, throttleDelayMilliseconds = 100) {
85
+ const { chain } = Dsl.disposeWith(this);
86
+ this._searchText$.setDelegate(chain(searchText$).throttle(throttleDelayMilliseconds));
87
+ }
47
88
  identityOf(row) {
48
89
  return this._dataSource.identityOf(row);
49
90
  }
50
- get rowsBeingEdited() {
51
- return this._rowsBeingEdited.readonly;
91
+ get rowsBeingEdited$() {
92
+ return this._rowsBeingEdited$.readonly;
52
93
  }
53
94
  get columns() {
54
- return this._columnList.allColumns;
95
+ return this._columnList.allColumns$;
55
96
  }
56
97
  get visibleColumns() {
57
98
  return this._columnList.readonly;
@@ -66,9 +107,9 @@ export class AbstractTableModel extends GarbageCollector {
66
107
  }
67
108
  _addSelectionColumn(selectionModel, visible) {
68
109
  assert.isNil(this.selectionColumnModel);
69
- const columnId = 'selection-column';
110
+ const columnId = "selection-column";
70
111
  this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), selectionModel);
71
- this.addRowClass('aup-row-selected', row => this.selectionColumnModel.isSelected(row));
112
+ this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
72
113
  const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
73
114
  if (!isNil(visible)) {
74
115
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
@@ -80,7 +121,7 @@ export class AbstractTableModel extends GarbageCollector {
80
121
  if (isFunction(formFactory)) {
81
122
  this._createForm = formFactory;
82
123
  }
83
- const columnId = 'editControls';
124
+ const columnId = "editControls";
84
125
  return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
85
126
  }
86
127
  addCustomColumn(columnId, dataAccessor) {
@@ -122,7 +163,7 @@ export class AbstractTableModel extends GarbageCollector {
122
163
  }
123
164
  startEditSession(row) {
124
165
  const rowId = this.identityOf(row);
125
- if (this._rowsBeingEdited.query().indexOf(row) > -1) {
166
+ if (this._rowsBeingEdited$.query().indexOf(row) > -1) {
126
167
  return lang.illegalState(`Row with id=${rowId} already being edited`);
127
168
  }
128
169
  // todo: pass the factories to the edit session so we can make the whole lot pluggable?
@@ -130,12 +171,12 @@ export class AbstractTableModel extends GarbageCollector {
130
171
  const saveCommand = this.saveCommandFactory.create(form);
131
172
  const editSession = new EditSession(rowId, row, form, saveCommand);
132
173
  const { when } = Dsl.disposeWith(editSession);
133
- when(editSession.liveRowValue).changes((editedValue) => {
134
- this._rowsBeingEdited.replaceOrPush(editedValue);
135
- }, { initialValue: 'triggerChangeUnlessNil' });
174
+ when(editSession.liveRowValue$).changes((editedValue) => {
175
+ this._rowsBeingEdited$.replaceOrPush(editedValue);
176
+ }, { initialValue: "triggerChangeUnlessNil" });
136
177
  this._editorSessions.push(editSession);
137
178
  editSession.onDispose(() => {
138
- this._rowsBeingEdited.remove(editSession.liveRowValue.value);
179
+ this._rowsBeingEdited$.remove(editSession.liveRowValue$.value);
139
180
  this._editorSessions.remove(editSession);
140
181
  });
141
182
  return editSession;
@@ -145,7 +186,7 @@ export class AbstractTableModel extends GarbageCollector {
145
186
  }
146
187
  cancelAllEditorSessions() {
147
188
  this._editorSessions.runInTransaction((draft) => {
148
- this._rowsBeingEdited.runInTransaction(() => {
189
+ this._rowsBeingEdited$.runInTransaction(() => {
149
190
  draft.value.forEach(session => session.dispose());
150
191
  });
151
192
  });
@@ -154,7 +195,7 @@ export class AbstractTableModel extends GarbageCollector {
154
195
  return this.isRowSelectionEnabled() && column.isRowSelectionEnabled();
155
196
  }
156
197
  isRowSelectionEnabled() {
157
- return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns.value;
198
+ return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns$.value;
158
199
  }
159
200
  hasUserSelectionModel() {
160
201
  return !!this.selectionColumnModel?.selectionModel.getDelegate();
@@ -182,4 +223,4 @@ export class AbstractTableModel extends GarbageCollector {
182
223
  }
183
224
  }
184
225
  TrackExternal.oneTimeBinding(AbstractTableModel);
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsTUFBTSxFQUdOLG1CQUFtQixFQUNuQixpQkFBaUIsRUFFakIsR0FBRyxFQUNILGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsSUFBSSxFQUlKLGdCQUFnQixFQUVoQixhQUFhLEVBRWIsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBR0wseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBRXZCLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDckIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixvR0FBb0c7QUFDcEcsb0dBQW9HO0FBRXBHLE1BQU0sUUFBUTtJQUNaLFlBQXFCLFNBQWlCLEVBQ2pCLE9BQThCO1FBRDlCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7SUFDbkQsQ0FBQztDQUNGO0FBR0QsTUFBTSxPQUFPLGtCQUF3QixTQUFRLGdCQUFnQjtJQTBCM0Q7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQXpCTyxnQkFBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLG1CQUFtQixFQUFPLENBQUMsQ0FBQztRQUd0RSxnQkFBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJ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SUFDM0MsQ0FBQztDQUNGO0FBR0QsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgQm9vbGVhblZhbHVlTW9kZWxDaGFpbiwgQ29tbWFuZCxcbiAgQ29tbWFuZEZhY3RvcnksXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERpcnR5VHJhY2tpbmdGb3JtLFxuICBEaXNwb3NhYmxlLFxuICBEc2wsXG4gIEV2ZW50TGlzdGVuZXJMaXN0LFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBsYW5nLFxuICBMaXN0TW9kZWwsXG4gIExpc3RNb2RlbENoYWluLFxuICBNYXBNb2RlbENoYWluLFxuICBNdXRhYmxlTGlzdE1vZGVsLFxuICBTZWxlY3Rpb25Nb2RlbCxcbiAgVHJhY2tFeHRlcm5hbCxcbiAgVHlwZXMsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbHVtbkxpc3RNb2RlbCB9IGZyb20gJy4vY29sdW1uLWxpc3QtbW9kZWwnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQtc2Vzc2lvbic7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXIgfSBmcm9tICcuL3RhYmxlL2NlbGwtcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgQ2VsbFJlbmRlcmVyT3B0aW9ucyxcbiAgQ29sdW1uTW9kZWwsXG4gIEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWwsXG4gIEN1c3RvbVZhbHVlQ29sdW1uTW9kZWwsXG4gIEVkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbCxcbiAgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWwsXG4gIE9uQ29tcG9uZW50SW5pdCxcbiAgUHJvcGVydHlDb2x1bW5Nb2RlbCxcbiAgU2VsZWN0aW9uQ29sdW1uTW9kZWxcbn0gZnJvbSAnLi90YWJsZS9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHsgQ29sdW1uVGV4dFByb3BlcnRpZXMgfSBmcm9tICcuL3RhYmxlL2NvbHVtbi10ZXh0LXByb3BlcnRpZXMnO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcmVhZG9ubHkgZGF0YVNvdXJjZTogTGlzdE1vZGVsQ2hhaW48Um93PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5MaXN0ID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IENvbHVtbkxpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgX2VkaXRvclNlc3Npb25zID0gbmV3IE11dGFibGVMaXN0TW9kZWw8RWRpdFNlc3Npb248Um93Pj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm93c0JlaW5nRWRpdGVkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXA6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH07XG5cbiAgcHJpdmF0ZSBzYXZlQ29tbWFuZEZhY3Rvcnk6IENvbW1hbmQuRmFjdG9yeTxEaXJ0eVRyYWNraW5nRm9ybTxSb3c+LCBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj47XG4gIHByaXZhdGUgX2VkaXRvclNlc3Npb25CeVJvd0lkOiBNYXBNb2RlbENoYWluPGFueSwgRWRpdFNlc3Npb248Um93Pj47XG5cbiAgcmVhZG9ubHkgZWRpdGluZzogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcbiAgcmVhZG9ubHkgZmlyc3RFZGl0YWJsZUNvbHVtbjogVmFsdWVNb2RlbENoYWluPENvbHVtbk1vZGVsPFJvdz4+O1xuICBwcml2YXRlIHNlbGVjdGlvbkNvbHVtbk1vZGVsOiBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+O1xuICBwcml2YXRlIHJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsaWNrTGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PChyb3c6IFJvdykgPT4gdm9pZD4oKTtcbiAgcmVhZG9ubHkgZmlyc3RWaXNpYmxlQ29sdW1uOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuICByZWFkb25seSBsYXN0VmlzaWJsZUNvbHVtbjogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcblxuICBwcml2YXRlIF9jcmVhdGVGb3JtOiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4gPSAocm93KSA9PiBuZXcgRGlydHlUcmFja2luZ0Zvcm08Um93PigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9uIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkID0gbmV3IE11dGFibGVMaXN0TW9kZWw8Um93PihbXSwge1xuICAgICAgaWRlbnRpZmllZFdpdGg6IHJvdyA9PiB0aGlzLmlkZW50aXR5T2Yocm93KVxuICAgIH0pO1xuICAgIHRoaXMuX2VkaXRvclNlc3Npb25CeVJvd0lkID0gY2hhaW4odGhpcy5fZWRpdG9yU2Vzc2lvbnMpLmluZGV4QnkoJ3Jvd0lkJyk7XG4gICAgdGhpcy5lZGl0aW5nID0gY2hhaW4odGhpcy5fZWRpdG9yU2Vzc2lvbnMpLmNvdW50KCkuaXNHcmVhdGVyVGhhbigwKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBjaGFpbih0aGlzLl9kYXRhU291cmNlKS5yZXBsYWNlQWxsKHRoaXMucm93c0JlaW5nRWRpdGVkKTtcblxuICAgIHRoaXMuZmlyc3RFZGl0YWJsZUNvbHVtbiA9IGNoYWluKHRoaXMuY29sdW1ucykuc2VsZWN0KGMgPT4gYy5oYXNFZGl0b3JQb3J0YWwoKSkuZmlyc3QoKTtcbiAgICB0aGlzLmZpcnN0VmlzaWJsZUNvbHVtbiA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLmZpcnN0KCk7XG4gICAgdGhpcy5sYXN0VmlzaWJsZUNvbHVtbiA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLmxhc3QoKTtcblxuICAgIHRoaXMucm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMgPSBjaGFpbih0aGlzLl9jb2x1bW5MaXN0KS5zZWxlY3QoY29sdW1uID0+IGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSkuY291bnQoKS5lcXVhbHMoMCk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdDb2x1bW5zKHJvdzogUm93LCByZWdleDogUmVnRXhwKTogQ29sdW1uTW9kZWw8Um93PltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLnZhbHVlLmZpbHRlcihjID0+IGMuaXNUZXh0TWF0Y2gocm93LCByZWdleCkpO1xuICB9XG5cbiAgaGFzTWF0Y2hpbmdDb2x1bW4ocm93OiBSb3csIHJlZ2V4OiBSZWdFeHApOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbHVtbnMudmFsdWUuZmluZChjID0+IGMuaXNUZXh0TWF0Y2gocm93LCByZWdleCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGFTb3VyY2Uoc291cmNlT2ZUcnV0aDogTGlzdE1vZGVsPFJvdz4pIHtcbiAgICB0aGlzLl9kYXRhU291cmNlLnNldERlbGVnYXRlKHNvdXJjZU9mVHJ1dGgpO1xuICB9XG5cbiAgaWRlbnRpdHlPZihyb3c6IFJvdyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UuaWRlbnRpdHlPZihyb3cpO1xuICB9XG5cbiAgZ2V0IHJvd3NCZWluZ0VkaXRlZCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZC5yZWFkb25seTtcbiAgfVxuXG4gIHJlYWRvbmx5IHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogUm93KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlPZiA/IHRoaXMuaWRlbnRpdHlPZihpdGVtKSA6IGluZGV4O1xuICB9O1xuXG4gIGdldCBjb2x1bW5zKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxpc3QuYWxsQ29sdW1ucztcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LnJlYWRvbmx5O1xuICB9XG5cbiAgcGx1Y2s8UCBleHRlbmRzIFR5cGVzLlZhbHVlUHJvcGVydGllc09mPFJvdz4+KHByb3BlcnR5OiBQLCBvcHRpb25zPzogeyBjb2x1bW5JZDogc3RyaW5nIH0pOiBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4ge1xuICAgIGNvbnN0IGNvbHVtbklkID0gb3B0aW9ucz8uY29sdW1uSWQgfHwgcHJvcGVydHkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgcHJvcGVydHksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBwbHVja0xpc3Q8UCBleHRlbmRzIFR5cGVzLkFycmF5UHJvcGVydGllc09mPFJvdz4+KHByb3BlcnR5OiBQLCBvcHRpb25zPzogeyBjb2x1bW5JZDogc3RyaW5nIH0pOiBMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+IHtcbiAgICBjb25zdCBjb2x1bW5JZCA9IG9wdGlvbnM/LmNvbHVtbklkIHx8IHByb3BlcnR5LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+KGNvbHVtbklkLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfYWRkU2VsZWN0aW9uQ29sdW1uKHNlbGVjdGlvbk1vZGVsPzogU2VsZWN0aW9uTW9kZWw8Um93PiwgdmlzaWJsZT86IFZhbHVlTW9kZWw8Ym9vbGVhbj4gfCBib29sZWFuKTogU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwpO1xuICAgIGNvbnN0IGNvbHVtbklkID0gJ3NlbGVjdGlvbi1jb2x1bW4nO1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwgPSBuZXcgU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIHNlbGVjdGlvbk1vZGVsKTtcbiAgICB0aGlzLmFkZFJvd0NsYXNzKCdhdXAtcm93LXNlbGVjdGVkJywgcm93ID0+IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwuaXNTZWxlY3RlZChyb3cpKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db2x1bW5Nb2RlbCA9IHRoaXMuYWRkQ29sdW1uKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwsIDApO1xuICAgIGlmICghaXNOaWwodmlzaWJsZSkpIHtcbiAgICAgIHNlbGVjdGlvbkNvbHVtbk1vZGVsLnZpc2libGVXaGlsZSh2aXNpYmxlIGluc3RhbmNlb2YgVmFsdWVNb2RlbCA/IHZpc2libGUgOiBWYWx1ZU1vZGVsLmNvbnN0YW50KHZpc2libGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvbHVtbk1vZGVsO1xuICB9XG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW58UHJvbWlzZTxib29sZWFuPj4sIGZvcm1GYWN0b3J5PzogKHJvdzogUm93KSA9PiBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KTogRWRpdG9yQ29udHJvbENvbHVtbk1vZGVsPFJvdz4ge1xuICAgIHRoaXMuc2F2ZUNvbW1hbmRGYWN0b3J5ID0gc2F2ZUNvbW1hbmRGYWN0b3J5O1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvcm1GYWN0b3J5KSkge1xuICAgICAgdGhpcy5fY3JlYXRlRm9ybSA9IGZvcm1GYWN0b3J5O1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5JZCA9ICdlZGl0Q29udHJvbHMnO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgRWRpdG9yQ29udHJvbENvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsIHNhdmVDb21tYW5kRmFjdG9yeSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIGFkZEN1c3RvbUNvbHVtbjxWPihjb2x1bW5JZDogc3RyaW5nLCBkYXRhQWNjZXNzb3I6IChyb3c6IFJvdykgPT4gVik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBWPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCBkYXRhQWNjZXNzb3IpKTtcbiAgfVxuXG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Jbml0PzogT25Db21wb25lbnRJbml0PEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvcHRpb25zPzogQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvbkNvbXBvbmVudEluaXRPck9wdGlvbnM/OiBPbkNvbXBvbmVudEluaXQ8Qz4gfCBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgQz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93Pihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIHJvdyA9PiByb3cpKS5jZWxsUmVuZGVyZXIoY29tcG9uZW50LCBvbkNvbXBvbmVudEluaXRPck9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVGVtcGxhdGVDb2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZyk6IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRSb3dDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcHJlZGljYXRlOiAocm93OiBSb3cpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJvd0NsYXNzTmFtZVByZWRpY2F0ZXMucHVzaChuZXcgUm93Q2xhc3M8Um93PihjbGFzc05hbWUsIHByZWRpY2F0ZSkpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3Nlcyhyb3c6IFJvdyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkubWF0Y2hlcyhyb3cpKSB7XG4gICAgICAgIGNsYXNzTmFtZXMucHVzaChpLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXM7XG4gIH1cblxuICB1c2VGb3JtRmFjdG9yeShmYWN0b3J5OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiB0aGlzIHtcbiAgICB0aGlzLl9jcmVhdGVGb3JtID0gZmFjdG9yeTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRDb2x1bW48QyBleHRlbmRzIENvbHVtbk1vZGVsPFJvdz4+KGNvbHVtbjogQywgaW5kZXg/OiBudW1iZXIpOiBDIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5hZGRDb2x1bW4oY29sdW1uLCBpbmRleCk7XG4gIH1cblxuICAvLyByZW1vdmVDb2x1bW4oY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gIC8vXG4gIC8vIH1cblxuICBjb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5UZXh0UHJvcGVydGllczogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogQ29sdW1uVGV4dFByb3BlcnRpZXMgfSkge1xuICAgIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID0gY29sdW1uVGV4dFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZDogc3RyaW5nKTogQ29sdW1uVGV4dFByb3BlcnRpZXMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cCA/IHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwW2NvbHVtbklkXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXJ0RWRpdFNlc3Npb24ocm93OiBSb3cpOiBFZGl0U2Vzc2lvbjxSb3c+IHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuaWRlbnRpdHlPZihyb3cpO1xuICAgIGlmICh0aGlzLl9yb3dzQmVpbmdFZGl0ZWQucXVlcnkoKS5pbmRleE9mKHJvdykgPiAtMSkge1xuICAgICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGBSb3cgd2l0aCBpZD0ke3Jvd0lkfSBhbHJlYWR5IGJlaW5nIGVkaXRlZGApO1xuICAgIH1cblxuICAgIC8vIHRvZG86IHBhc3MgdGhlIGZhY3RvcmllcyB0byB0aGUgZWRpdCBzZXNzaW9uIHNvIHdlIGNhbiBtYWtlIHRoZSB3aG9sZSBsb3QgcGx1Z2dhYmxlP1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9jcmVhdGVGb3JtKHJvdyk7XG4gICAgY29uc3Qgc2F2ZUNvbW1hbmQgPSB0aGlzLnNhdmVDb21tYW5kRmFjdG9yeS5jcmVhdGUoZm9ybSk7XG4gICAgY29uc3QgZWRpdFNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb248Um93Pihyb3dJZCwgcm93LCBmb3JtLCBzYXZlQ29tbWFuZCk7XG4gICAgY29uc3QgeyB3aGVuIH0gPSBEc2wuZGlzcG9zZVdpdGgoZWRpdFNlc3Npb24pO1xuICAgIHdoZW4oZWRpdFNlc3Npb24ubGl2ZVJvd1ZhbHVlKS5jaGFuZ2VzKChlZGl0ZWRWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkLnJlcGxhY2VPclB1c2goZWRpdGVkVmFsdWUpO1xuICAgIH0sIHsgaW5pdGlhbFZhbHVlOiAndHJpZ2dlckNoYW5nZVVubGVzc05pbCcgfSk7XG5cbiAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5wdXNoKGVkaXRTZXNzaW9uKTtcbiAgICBlZGl0U2Vzc2lvbi5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkLnJlbW92ZShlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucmVtb3ZlKGVkaXRTZXNzaW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZWRpdFNlc3Npb247XG4gIH1cblxuICBnZXRFZGl0U2Vzc2lvbkZvcihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JTZXNzaW9uQnlSb3dJZC5nZXQodGhpcy5pZGVudGl0eU9mKHJvdykpO1xuICB9XG5cbiAgY2FuY2VsQWxsRWRpdG9yU2Vzc2lvbnMoKSB7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucnVuSW5UcmFuc2FjdGlvbigoZHJhZnQpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZC5ydW5JblRyYW5zYWN0aW9uKCgpID0+IHtcbiAgICAgICAgZHJhZnQudmFsdWUuZm9yRWFjaChzZXNzaW9uID0+IHNlc3Npb24uZGlzcG9zZSgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpICYmIGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWwoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucy52YWx1ZTtcbiAgfVxuXG4gIGhhc1VzZXJTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbC5nZXREZWxlZ2F0ZSgpO1xuICB9XG5cbiAgZ2V0U2VsZWN0aW9uTW9kZWwoKTogU2VsZWN0aW9uTW9kZWw8Um93PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdGlvbk1vZGVsO1xuICB9XG5cbiAgaXNIb3ZlckVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIGlzQ3Vyc29yRW5hYmxlZChjb2x1bW46IENvbHVtbk1vZGVsPFJvdz4pIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uKSB8fCB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmxpc3RlbmVyQ291bnQgPiAwO1xuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogUm93KSB7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbD8uc2VsZWN0Um93KHJvdyk7XG4gIH1cblxuICBvblJvd0NsaWNrZWQoY2FsbGJhY2s6IChyb3c6IFJvdykgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmFkZChjYWxsYmFjayk7XG4gIH1cblxuICBfbm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4sIHJvdzogUm93KSB7XG4gICAgaWYgKHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbk1vZGVsKSkge1xuICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5maXJlKGwgPT4gbChyb3cpKTtcbiAgfVxufVxuXG5cblRyYWNrRXh0ZXJuYWwub25lVGltZUJpbmRpbmcoQWJzdHJhY3RUYWJsZU1vZGVsKTtcbiJdfQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxNQUFNLEVBR04sbUJBQW1CLEVBQUUsb0JBQW9CLEVBQ3pDLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQUUsU0FBUyxFQUM1QixnQkFBZ0IsRUFDaEIsSUFBSSxFQUlKLGdCQUFnQixFQUVoQixhQUFhLEVBRWIsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxrQkFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXBELE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSx5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QUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxDQUFDO0lBQ25ELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQXdCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBNEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUE2QixFQUFFLEdBQVE7UUFDeEQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFHRCxhQUFhLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sIENvbW1hbmQsXG4gIENvbW1hbmRGYWN0b3J5LFxuICBEZWxlZ2F0aW5nTGlzdE1vZGVsLCBEZWxlZ2F0aW5nVmFsdWVNb2RlbCxcbiAgRGlydHlUcmFja2luZ0Zvcm0sXG4gIERpc3Bvc2FibGUsXG4gIERzbCxcbiAgRXZlbnRMaXN0ZW5lckxpc3QsIEZ1bmN0aW9ucyxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZUxpc3RNb2RlbCxcbiAgU2VsZWN0aW9uTW9kZWwsIFRyYWNlLFxuICBUcmFja0V4dGVybmFsLFxuICBUeXBlcyxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluXG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IGVzY2FwZVN0cmluZ1JlZ2V4cCBmcm9tIFwiZXNjYXBlLXN0cmluZy1yZWdleHBcIjtcblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwgfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBDb2x1bW5MaXN0TW9kZWwgfSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWwgfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHsgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbCB9IGZyb20gXCIuL2NvbHVtbi9jdXN0b20tdmFsdWUtY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWwgfSBmcm9tIFwiLi9jb2x1bW4vZWRpdG9yLWNvbnRyb2xzLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHsgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWwgfSBmcm9tIFwiLi9jb2x1bW4vbGlzdC1wcm9wZXJ5LWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHsgUHJvcGVydHlDb2x1bW5Nb2RlbCB9IGZyb20gXCIuL2NvbHVtbi9wcm9wZXJ0eS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvbkNvbHVtbk1vZGVsIH0gZnJvbSBcIi4vY29sdW1uL3NlbGVjdGlvbi1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSBcIi4vZWRpdG9yL2VkaXQtc2Vzc2lvblwiO1xuaW1wb3J0IHsgQ2VsbFJlbmRlcmVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvY2VsbC1yZW5kZXJlclwiO1xuaW1wb3J0IHtcbiAgQ2VsbFJlbmRlcmVyT3B0aW9ucyxcbiAgQ29sdW1uTW9kZWwsXG4gIE9uQ29tcG9uZW50SW5pdFxufSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQgeyBDb2x1bW5UZXh0UHJvcGVydGllcyB9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tdGV4dC1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIgfSBmcm9tIFwiLi9zZWFyY2gvY29sdW1uLXRleHQtc2VhcmNoLWZvcm1hdHRlclwiO1xuaW1wb3J0IERlZmF1bHRWYWx1ZUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdFZhbHVlRm9ybWF0dGVyO1xuaW1wb3J0IERlZmF1bHRBcnJheUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdEFycmF5Rm9ybWF0dGVyO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcmVhZG9ubHkgZGF0YVNvdXJjZTogTGlzdE1vZGVsQ2hhaW48Um93PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5MaXN0ID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IENvbHVtbkxpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgX2VkaXRvclNlc3Npb25zID0gbmV3IE11dGFibGVMaXN0TW9kZWw8RWRpdFNlc3Npb248Um93Pj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm93c0JlaW5nRWRpdGVkJDogTXV0YWJsZUxpc3RNb2RlbDxSb3c+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsYXNzTmFtZVByZWRpY2F0ZXM6IFJvd0NsYXNzPFJvdz5bXSA9IFtdO1xuXG4gIHByaXZhdGUgX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9O1xuXG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHJlYWRvbmx5IGVkaXRpbmckOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICByZWFkb25seSBmaXJzdEVkaXRhYmxlQ29sdW1uJDogVmFsdWVNb2RlbENoYWluPENvbHVtbk1vZGVsPFJvdz4+O1xuICBwcml2YXRlIHNlbGVjdGlvbkNvbHVtbk1vZGVsOiBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+O1xuICBwcml2YXRlIHJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dDbGlja0xpc3RlbmVycyA9IG5ldyBFdmVudExpc3RlbmVyTGlzdDwocm93OiBSb3cpID0+IHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGZpcnN0VmlzaWJsZUNvbHVtbiQ6IFZhbHVlTW9kZWw8Q29sdW1uTW9kZWw8Um93Pj47XG4gIHJlYWRvbmx5IGxhc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hUZXh0JCA9IG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRm9ybTogKHJvdzogUm93KSA9PiBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+ID0gKHJvdykgPT4gbmV3IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4oKTtcbiAgcHJpdmF0ZSBfdGV4dFNlYXJjaFByZWRpY2F0ZSQ6IFZhbHVlTW9kZWxDaGFpbjwoaXRlbXM6Um93W10pID0+IFJvd1tdPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlLCBzd2l0Y2hPbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxSb3c+KFtdLCB7XG4gICAgICBpZGVudGlmaWVkV2l0aDogcm93ID0+IHRoaXMuaWRlbnRpdHlPZihyb3cpXG4gICAgfSk7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuaW5kZXhCeShcInJvd0lkXCIpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy5fdGV4dFNlYXJjaFByZWRpY2F0ZSQgPSBjaGFpbih0aGlzLl9zZWFyY2hUZXh0JCkubWFwKHRleHQgPT4ge1xuICAgICAgcmV0dXJuIF8uaXNFbXB0eSh0ZXh0KSA/IEZ1bmN0aW9ucy5pZGVudGl0eSA6IChyb3dzOlJvd1tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVTdHJpbmdSZWdleHAodGV4dCksIFwiaVwiKTtcbiAgICAgICAgcmV0dXJuIHJvd3MuZmlsdGVyKHJvdyA9PiB0aGlzLmhhc01hdGNoaW5nQ29sdW1uKHJvdywgcmVnZXgpKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGFsbG93TmlsOiB0cnVlLFxuICAgICAgZGVwZW5kc09uOiB0aGlzLmNvbHVtbnNcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IGNoYWluKHRoaXMuX2RhdGFTb3VyY2UpXG4gICAgICAucmVkdWNlVG9MaXN0KGl0ZW1zID0+IHRoaXMuX3RleHRTZWFyY2hQcmVkaWNhdGUkLnZhbHVlKGl0ZW1zKSwge1xuICAgICAgICBkZXBlbmRzT246IHRoaXMuX3RleHRTZWFyY2hQcmVkaWNhdGUkXG4gICAgICB9KVxuICAgICAgLnJlcGxhY2VBbGwodGhpcy5yb3dzQmVpbmdFZGl0ZWQkKTtcblxuICAgIHRoaXMuZmlyc3RFZGl0YWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLmNvbHVtbnMpLnNlbGVjdChjID0+IGMuaGFzRWRpdG9yUG9ydGFsKCkpLmZpcnN0KCk7XG4gICAgdGhpcy5maXJzdFZpc2libGVDb2x1bW4kID0gY2hhaW4odGhpcy5fY29sdW1uTGlzdCkuZmlyc3QoKTtcbiAgICB0aGlzLmxhc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLmxhc3QoKTtcblxuICAgIHRoaXMucm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkID0gY2hhaW4odGhpcy5fY29sdW1uTGlzdCkuc2VsZWN0KGNvbHVtbiA9PiBjb2x1bW4uaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkpLmNvdW50KCkuZXF1YWxzKDApO1xuXG4gIH1cblxuICBmaW5kTWF0Y2hpbmdDb2x1bW5zKHJvdzogUm93LCByZWdleDogUmVnRXhwKTogQ29sdW1uTW9kZWw8Um93PltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLnZhbHVlLmZpbHRlcihjID0+IHJlZ2V4LnRlc3QoYy5nZXRTZWFyY2hUZXh0Rm9yKHJvdykpKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGhhc01hdGNoaW5nQ29sdW1uKHJvdzogUm93LCByZWdleDogUmVnRXhwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb2x1bW5zLnZhbHVlLmZpbmQoYyA9PiByZWdleC50ZXN0KGMuZ2V0U2VhcmNoVGV4dEZvcihyb3cpKSk7XG4gIH1cblxuICBpbml0aWFsaXNlKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIC8vIG5vdCBzdXJlIGlmIEkgc2hvdWxkIGRlZmluZSB0aGVzZSBhdCB0aGUgbW9kdWxlIGxldmVsIG9yIG5vdC4uLlxuICAgIGNvbnN0IGN1c3RvbUluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7cHJvdmlkZTogRGVmYXVsdFZhbHVlRm9ybWF0dGVyfSxcbiAgICAgICAge3Byb3ZpZGU6IERlZmF1bHRBcnJheUZvcm1hdHRlcn1cbiAgICAgIF0sXG4gICAgICBwYXJlbnQ6IGluamVjdG9yXG4gICAgfSk7XG4gICAgdGhpcy5jb2x1bW5zLnZhbHVlLmZvckVhY2goYyA9PiBjLmluaXRpYWxpc2UoY3VzdG9tSW5qZWN0b3IpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREYXRhU291cmNlKHNvdXJjZU9mVHJ1dGg6IExpc3RNb2RlbDxSb3c+KSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZS5zZXREZWxlZ2F0ZShzb3VyY2VPZlRydXRoKTtcbiAgfVxuXG4gIHNldFRleHRTZWFyY2goc2VhcmNoVGV4dCQ6IFZhbHVlTW9kZWw8c3RyaW5nPiwgdGhyb3R0bGVEZWxheU1pbGxpc2Vjb25kczogbnVtYmVyID0gMTAwKSB7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3NlYXJjaFRleHQkLnNldERlbGVnYXRlKGNoYWluKHNlYXJjaFRleHQkKS50aHJvdHRsZSh0aHJvdHRsZURlbGF5TWlsbGlzZWNvbmRzKSk7XG4gIH1cblxuICBpZGVudGl0eU9mKHJvdzogUm93KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS5pZGVudGl0eU9mKHJvdyk7XG4gIH1cblxuICBnZXQgcm93c0JlaW5nRWRpdGVkJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVhZG9ubHk7XG4gIH1cblxuICByZWFkb25seSB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4ge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5T2YgPyB0aGlzLmlkZW50aXR5T2YoaXRlbSkgOiBpbmRleDtcbiAgfTtcblxuICBnZXQgY29sdW1ucygpOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LmFsbENvbHVtbnMkO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxpc3QucmVhZG9ubHk7XG4gIH1cblxuICBwbHVjazxQIGV4dGVuZHMgVHlwZXMuVmFsdWVQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7IGNvbHVtbklkOiBzdHJpbmcgfSk6IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgUHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+KGNvbHVtbklkLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHBsdWNrTGlzdDxQIGV4dGVuZHMgVHlwZXMuQXJyYXlQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7IGNvbHVtbklkOiBzdHJpbmcgfSk6IExpc3RQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4ge1xuICAgIGNvbnN0IGNvbHVtbklkID0gb3B0aW9ucz8uY29sdW1uSWQgfHwgcHJvcGVydHkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IExpc3RQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4oY29sdW1uSWQsIHByb3BlcnR5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9hZGRTZWxlY3Rpb25Db2x1bW4oc2VsZWN0aW9uTW9kZWw/OiBTZWxlY3Rpb25Nb2RlbDxSb3c+LCB2aXNpYmxlPzogVmFsdWVNb2RlbDxib29sZWFuPiB8IGJvb2xlYW4pOiBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+IHtcbiAgICBhc3NlcnQuaXNOaWwodGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCk7XG4gICAgY29uc3QgY29sdW1uSWQgPSBcInNlbGVjdGlvbi1jb2x1bW5cIjtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsID0gbmV3IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCBzZWxlY3Rpb25Nb2RlbCk7XG4gICAgdGhpcy5hZGRSb3dDbGFzcyhcImF1cC1yb3ctc2VsZWN0ZWRcIiwgcm93ID0+IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwuaXNTZWxlY3RlZChyb3cpKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db2x1bW5Nb2RlbCA9IHRoaXMuYWRkQ29sdW1uKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwsIDApO1xuICAgIGlmICghaXNOaWwodmlzaWJsZSkpIHtcbiAgICAgIHNlbGVjdGlvbkNvbHVtbk1vZGVsLnZpc2libGVXaGlsZSh2aXNpYmxlIGluc3RhbmNlb2YgVmFsdWVNb2RlbCA/IHZpc2libGUgOiBWYWx1ZU1vZGVsLmNvbnN0YW50KHZpc2libGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvbHVtbk1vZGVsO1xuICB9XG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PiwgZm9ybUZhY3Rvcnk/OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkgPSBzYXZlQ29tbWFuZEZhY3Rvcnk7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9ybUZhY3RvcnkpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGb3JtID0gZm9ybUZhY3Rvcnk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbklkID0gXCJlZGl0Q29udHJvbHNcIjtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEVkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCBzYXZlQ29tbWFuZEZhY3RvcnksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRDdXN0b21Db2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZywgZGF0YUFjY2Vzc29yOiAocm93OiBSb3cpID0+IFYpOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgZGF0YUFjY2Vzc29yKSk7XG4gIH1cblxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uSW5pdD86IE9uQ29tcG9uZW50SW5pdDxDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb3B0aW9ucz86IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Db21wb25lbnRJbml0T3JPcHRpb25zPzogT25Db21wb25lbnRJbml0PEM+IHwgQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCByb3cgPT4gcm93KSkuY2VsbFJlbmRlcmVyKGNvbXBvbmVudCwgb25Db21wb25lbnRJbml0T3JPcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRlbXBsYXRlQ29sdW1uPFY+KGNvbHVtbklkOiBzdHJpbmcpOiBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgYWRkUm93Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHByZWRpY2F0ZTogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gICAgdGhpcy5yb3dDbGFzc05hbWVQcmVkaWNhdGVzLnB1c2gobmV3IFJvd0NsYXNzPFJvdz4oY2xhc3NOYW1lLCBwcmVkaWNhdGUpKTtcbiAgfVxuXG4gIGdldFJvd0NsYXNzZXMocm93OiBSb3cpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLnJvd0NsYXNzTmFtZVByZWRpY2F0ZXMuZm9yRWFjaChpID0+IHtcbiAgICAgIGlmIChpLm1hdGNoZXMocm93KSkge1xuICAgICAgICBjbGFzc05hbWVzLnB1c2goaS5jbGFzc05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGFzc05hbWVzO1xuICB9XG5cbiAgdXNlRm9ybUZhY3RvcnkoZmFjdG9yeTogKHJvdzogUm93KSA9PiBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KTogdGhpcyB7XG4gICAgdGhpcy5fY3JlYXRlRm9ybSA9IGZhY3Rvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW5Nb2RlbDxSb3c+Pihjb2x1bW46IEMsIGluZGV4PzogbnVtYmVyKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxpc3QuYWRkQ29sdW1uKGNvbHVtbiwgaW5kZXgpO1xuICB9XG5cbiAgLy8gcmVtb3ZlQ29sdW1uKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pikge1xuICAvL1xuICAvLyB9XG5cbiAgY29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uVGV4dFByb3BlcnRpZXM6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH0pIHtcbiAgICB0aGlzLl9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cCA9IGNvbHVtblRleHRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQ6IHN0cmluZyk6IENvbHVtblRleHRQcm9wZXJ0aWVzIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXAgPyB0aGlzLl9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cFtjb2x1bW5JZF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGFydEVkaXRTZXNzaW9uKHJvdzogUm93KTogRWRpdFNlc3Npb248Um93PiB7XG4gICAgY29uc3Qgcm93SWQgPSB0aGlzLmlkZW50aXR5T2Yocm93KTtcbiAgICBpZiAodGhpcy5fcm93c0JlaW5nRWRpdGVkJC5xdWVyeSgpLmluZGV4T2Yocm93KSA+IC0xKSB7XG4gICAgICByZXR1cm4gbGFuZy5pbGxlZ2FsU3RhdGUoYFJvdyB3aXRoIGlkPSR7cm93SWR9IGFscmVhZHkgYmVpbmcgZWRpdGVkYCk7XG4gICAgfVxuXG4gICAgLy8gdG9kbzogcGFzcyB0aGUgZmFjdG9yaWVzIHRvIHRoZSBlZGl0IHNlc3Npb24gc28gd2UgY2FuIG1ha2UgdGhlIHdob2xlIGxvdCBwbHVnZ2FibGU/XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuX2NyZWF0ZUZvcm0ocm93KTtcbiAgICBjb25zdCBzYXZlQ29tbWFuZCA9IHRoaXMuc2F2ZUNvbW1hbmRGYWN0b3J5LmNyZWF0ZShmb3JtKTtcbiAgICBjb25zdCBlZGl0U2Vzc2lvbiA9IG5ldyBFZGl0U2Vzc2lvbjxSb3c+KHJvd0lkLCByb3csIGZvcm0sIHNhdmVDb21tYW5kKTtcbiAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aChlZGl0U2Vzc2lvbik7XG4gICAgd2hlbihlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkKS5jaGFuZ2VzKChlZGl0ZWRWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZXBsYWNlT3JQdXNoKGVkaXRlZFZhbHVlKTtcbiAgICB9LCB7IGluaXRpYWxWYWx1ZTogXCJ0cmlnZ2VyQ2hhbmdlVW5sZXNzTmlsXCIgfSk7XG5cbiAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5wdXNoKGVkaXRTZXNzaW9uKTtcbiAgICBlZGl0U2Vzc2lvbi5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZW1vdmUoZWRpdFNlc3Npb24ubGl2ZVJvd1ZhbHVlJC52YWx1ZSk7XG4gICAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5yZW1vdmUoZWRpdFNlc3Npb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBlZGl0U2Vzc2lvbjtcbiAgfVxuXG4gIGdldEVkaXRTZXNzaW9uRm9yKHJvdzogUm93KTogRWRpdFNlc3Npb248Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvclNlc3Npb25CeVJvd0lkLmdldCh0aGlzLmlkZW50aXR5T2Yocm93KSk7XG4gIH1cblxuICBjYW5jZWxBbGxFZGl0b3JTZXNzaW9ucygpIHtcbiAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5ydW5JblRyYW5zYWN0aW9uKChkcmFmdCkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5ydW5JblRyYW5zYWN0aW9uKCgpID0+IHtcbiAgICAgICAgZHJhZnQudmFsdWUuZm9yRWFjaChzZXNzaW9uID0+IHNlc3Npb24uZGlzcG9zZSgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpICYmIGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWwoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWU7XG4gIH1cblxuICBoYXNVc2VyU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbD8uc2VsZWN0aW9uTW9kZWwuZ2V0RGVsZWdhdGUoKTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbk1vZGVsKCk6IFNlbGVjdGlvbk1vZGVsPFJvdz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbDtcbiAgfVxuXG4gIGlzSG92ZXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBpc0N1cnNvckVuYWJsZWQoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbikgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdykge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25Sb3dDbGlja2VkKGNhbGxiYWNrOiAocm93OiBSb3cpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDbGlja0xpc3RlbmVycy5hZGQoY2FsbGJhY2spO1xuICB9XG5cbiAgX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW5Nb2RlbCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgfVxuICAgIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuZmlyZShsID0+IGwocm93KSk7XG4gIH1cbn1cblxuXG5UcmFja0V4dGVybmFsLm9uZVRpbWVCaW5kaW5nKEFic3RyYWN0VGFibGVNb2RlbCk7XG4iXX0=
@@ -1,14 +1,14 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { Component, ElementRef, HostBinding, Input, NgZone } from '@angular/core';
2
+ import { Component, ElementRef, HostBinding, Injector, Input, NgZone } from "@angular/core";
3
3
  import { Dsl, MutableValueModel, StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';
4
4
  import { lang } from '@coolon/typescript-utilities';
5
5
  import { ResizeAwareComponent } from '../resize-aware.component';
6
- import { CustomTemplateColumnModel } from './table/column-model';
6
+ import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
7
7
  import * as i0 from "@angular/core";
8
8
  /**
9
9
  * Create your model:
10
10
  * @example
11
- * this.heroTableModel = TableModel.fromList(heroList, table => {
11
+ * this.heroTableModel = new TableModel(heroList, table => {
12
12
  * table.pluck("firstName");
13
13
  * table.pluck("lastName");
14
14
  * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
@@ -20,7 +20,7 @@ import * as i0 from "@angular/core";
20
20
  *
21
21
  * Column templates
22
22
  * @example
23
- * this.heroTableModel = TableModel.fromList(heroList, table => {
23
+ * this.heroTableModel = new TableModel(heroList, table => {
24
24
  * table.pluck("firstName");
25
25
  * table.pluck("lastName");
26
26
  * table.addTemplateColumn("specialColumn");
@@ -65,8 +65,9 @@ import * as i0 from "@angular/core";
65
65
  * }
66
66
  */
67
67
  export class AbstractTableComponent extends ResizeAwareComponent {
68
- constructor(elementRef, ngZone) {
68
+ constructor(elementRef, ngZone, injector) {
69
69
  super(elementRef, ngZone);
70
+ this.injector = injector;
70
71
  /**
71
72
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
72
73
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
@@ -98,6 +99,7 @@ export class AbstractTableComponent extends ResizeAwareComponent {
98
99
  }
99
100
  ngOnInit() {
100
101
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
102
+ this.getModel().initialise(this.injector);
101
103
  this.columns = chain(this.getModel().columns);
102
104
  this.columnIds = chain(this.columns).pluck('columnId');
103
105
  this.columnsById = chain(this.columns).indexBy('columnId');
@@ -116,11 +118,11 @@ export class AbstractTableComponent extends ResizeAwareComponent {
116
118
  }
117
119
  // @Trace()
118
120
  isFirstVisibleColumn(columnId) {
119
- return this.getModel().firstVisibleColumn.query().value?.columnId === columnId;
121
+ return this.getModel().firstVisibleColumn$.query().value?.columnId === columnId;
120
122
  }
121
123
  // @Trace()
122
124
  isLastVisibleColumn(columnId) {
123
- return this.getModel().lastVisibleColumn.query().value?.columnId === columnId;
125
+ return this.getModel().lastVisibleColumn$.query().value?.columnId === columnId;
124
126
  }
125
127
  getColumnClasses(columnId) {
126
128
  const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
@@ -133,7 +135,7 @@ export class AbstractTableComponent extends ResizeAwareComponent {
133
135
  return classes;
134
136
  }
135
137
  }
136
- AbstractTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
138
+ AbstractTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
137
139
  AbstractTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeaderModel: "showHeaderModel", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class.enable-scrolling": "this.enableScrolling", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
138
140
  __decorate([
139
141
  TrackExternal({ defaultValue: true }),
@@ -149,7 +151,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
149
151
  selector: 'aup-abstract-table',
150
152
  template: ''
151
153
  }]
152
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showHeaderModel: [{
154
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { showHeaderModel: [{
153
155
  type: Input
154
156
  }], showHeader: [{
155
157
  type: Input
@@ -165,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
165
167
  type: HostBinding,
166
168
  args: ['class.hide-header']
167
169
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFJUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsR0FBRyxFQUdILGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRSxPQUFPLEVBQWUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwREc7QUFLSCxNQUFNLE9BQU8sc0JBQTRCLFNBQVEsb0JBQW9CO0lBaUNuRSxZQUFZLFVBQXNCLEVBQUUsTUFBYztRQUNoRCxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBeEI1Qjs7OztXQUlHO1FBR0gsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFTeEIsa0VBQWtFO1FBQ2pELGlCQUFZLEdBQUcsSUFBSSxpQkFBaUIsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRCxjQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUcvRCxpQkFBWSxHQUFHLHFCQUFxQixDQUFDO1FBSW5DLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QyxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFELDRHQUE0RztZQUM1RyxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDdEYsT0FBTyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxFQUFFO1lBQ0QsU0FBUyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvQyxhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUM1RSxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsSUFDSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVE7UUFDaEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFnQixFQUFFLFdBQTZCLEVBQUUsYUFBK0IsRUFBRSxRQUFpQixFQUFFLFFBQWlCO1FBQzNJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxZQUFZLHlCQUF5QixFQUFFO1lBQy9DLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsV0FBNkIsRUFBRSxHQUFRO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVc7SUFDWCxvQkFBb0IsQ0FBQyxRQUFnQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLFFBQVEsQ0FBQztJQUNqRixDQUFDO0lBRUQsV0FBVztJQUNYLG1CQUFtQixDQUFDLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUMvQixNQUFNLE9BQU8sR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O21IQXRHVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixpVkFGdkIsRUFBRTtBQU1aO0lBREMsYUFBYSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDOzhCQUNyQixVQUFVOytEQUFVO0FBSXJDO0lBREMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUM7OzBEQUNqQjsyRkFSVCxzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7c0hBS0MsZUFBZTtzQkFGZCxLQUFLO2dCQU1OLFVBQVU7c0JBRlQsS0FBSztnQkFXTixlQUFlO3NCQUZkLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsd0JBQXdCO2dCQWVyQyxZQUFZO3NCQURYLFdBQVc7dUJBQUMsT0FBTztnQkF1QmhCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRHNsLCBMaXN0TW9kZWwsXG4gIExpc3RNb2RlbENoYWluLFxuICBNYXBNb2RlbENoYWluLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgU3RvcmVJblZhbHVlTW9kZWwsXG4gIFRyYWNrRXh0ZXJuYWwsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgbGFuZyB9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgUmVzaXplQXdhcmVDb21wb25lbnQgfSBmcm9tICcuLi9yZXNpemUtYXdhcmUuY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0VGFibGVNb2RlbCB9IGZyb20gJy4vYWJzdHJhY3QtdGFibGUtbW9kZWwnO1xuaW1wb3J0IHsgQ29sdW1uTW9kZWwsIEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWwgfSBmcm9tICcuL3RhYmxlL2NvbHVtbi1tb2RlbCc7XG5cbi8qKlxuICogQ3JlYXRlIHlvdXIgbW9kZWw6XG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IFRhYmxlTW9kZWwuZnJvbUxpc3QoaGVyb0xpc3QsIHRhYmxlID0+IHtcbiAqICAgdGFibGUucGx1Y2soXCJmaXJzdE5hbWVcIik7XG4gKiAgIHRhYmxlLnBsdWNrKFwibGFzdE5hbWVcIik7XG4gKiAgIHRhYmxlLmFkZEN1c3RvbUNvbHVtbihcImZ1bGxOYW1lXCIsIGhlcm8gPT4gYCR7aGVyby5maXJzdE5hbWV9ICR7aGVyby5sYXN0TmFtZX1gKTtcbiAqIH0pO1xuICpcbiAqIENyZWF0ZSB5b3VyIHRhYmxlXG4gKiBAZXhhbXBsZVxuICogPGF1cC10YWJsZSBbdGFibGVNb2RlbF09XCJoZXJvVGFibGVNb2RlbFwiPjwvYXVwLXRhYmxlPlxuICpcbiAqIENvbHVtbiB0ZW1wbGF0ZXNcbiAqIEBleGFtcGxlXG4gKiB0aGlzLmhlcm9UYWJsZU1vZGVsID0gVGFibGVNb2RlbC5mcm9tTGlzdChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkVGVtcGxhdGVDb2x1bW4oXCJzcGVjaWFsQ29sdW1uXCIpO1xuICogfSk7XG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+XG4gKiAgIDxkaXYgKmF1cENvbHVtblRlbXBsYXRlPVwibGV0IGhlcm87IGNvbHVtbklkOiAnc3BlY2lhbENvbHVtbic7IGZpbGxDZWxsOiB0cnVlOyBwYWRDaGlsZDpmYWxzZVwiPlxuICogICAgIHt7aGVyby5uYW1lfX1cbiAqICAgPC9kaXY+XG4gKiA8L2F1cC10YWJsZT5cbiAqXG4gKiBTdHlsaW5nXG4gKiBAZXhhbXBsZVxuICogIC8vIGdsb2JhbCBzZXR0aW5nc1xuICogOnJvb3Qge1xuICogICAtLWF1cC10YWJsZS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yOiByZWJlY2NhcHVycGxlOyAvLyBkZWZhdWx0cyB0byB0cmFuc3BhcmVudFxuICogICAtLWF1cC10YWJsZS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWF1cC10YWJsZS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogfVxuICpcbiAqIC8vIHBlciB0YWJsZSBzZXR0aW5ncy5cbiAqIGF1cC10YWJsZSB7XG4gKiAgIC0tY29sdW1uLWdhcDogMTBweDsgLy8gZGVmYXVsdHMgdG8gMjRweFxuICogICAtLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tZmlyc3QtY29sdW1uLXBhZGRpbmctbGVmdDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqICAgLS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICpcbiAqICAgYXVwLXRhYmxlLWhlYWRlci1jZWxsLXJlbmRlcmVyLFxuICogICBhdXAtdGFibGUtY2VsbC1yZW5kZXJlciB7XG4gKiAgICAgJi5hdXAtY29sLW15LWRhc2hlcmlzZWQtY29sdW1uLWlkIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICAgICYuZmlyc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5sYXN0LXZpc2libGUtY29sdW1uIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1cC1hYnN0cmFjdC10YWJsZScsXG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRhYmxlQ29tcG9uZW50PFJvdz4gZXh0ZW5kcyBSZXNpemVBd2FyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KClcbiAgQFRyYWNrRXh0ZXJuYWwoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgc2hvd0hlYWRlck1vZGVsOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuXG4gIEBJbnB1dCgpXG4gIEBTdG9yZUluVmFsdWVNb2RlbCgnc2hvd0hlYWRlck1vZGVsJylcbiAgc2hvd0hlYWRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHNjcm9sbGluZy4gIE9uY2UgZW5hYmxlZCB0aGUgdGFibGUgd2lsbCBoYXZlIDAgaW1wbGljaXQgaGVpZ2h0LiAgWW91IHdpbGwgZWl0aGVyXG4gICAqIG5lZWQgdG8gc2V0IGl0IGV4cGxpY2l0bHkgZS5nLiBoZWlnaHQ6IDQwMHB4OyBvciBieSB1c2luZyBmbGV4IG9yIGdyaWQgbGF5b3V0IHRvIG1ha2UgaXQgZmlsbCBpdCdzXG4gICAqIGNvbnRhaW5tZW50IGFyZWEuXG4gICAqL1xuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmVuYWJsZS1zY3JvbGxpbmcnKVxuICBlbmFibGVTY3JvbGxpbmcgPSBmYWxzZTtcblxuICBjb2x1bW5zOiBMaXN0TW9kZWxDaGFpbjxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgY29sdW1uSWRzOiBMaXN0TW9kZWxDaGFpbjxzdHJpbmc+O1xuICBwcml2YXRlIGNvbHVtbnNCeUlkOiBNYXBNb2RlbENoYWluPHN0cmluZywgQ29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcmVhZG9ubHkgdmlzaWJsZVJvd0NvdW50OiBWYWx1ZU1vZGVsPG51bWJlcj47XG5cblxuICAvLyBUT0RPOiBzdXBwb3J0IHVzZXIgZGVmaW5lZCBoZWFkZXIgYW5kIHJvdyBoZWlnaHRzIHZpYSBjc3MgdmFycy5cbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJIZWlnaHQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPig1Nik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm93SGVpZ2h0ID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNDgpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBiYXNlQ3NzQ2xhc3MgPSAnYXVwLXRhYmxlLWNvbXBvbmVudCc7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBuZ1pvbmUpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcblxuICAgIGNvbnN0IGFjdHVhbEhlYWRlckhlaWdodCA9IGNoYWluKHRoaXMuc2hvd0hlYWRlck1vZGVsKS5tYXAoc2hvdyA9PiB7XG4gICAgICByZXR1cm4gc2hvdyA/IHRoaXMuaGVhZGVySGVpZ2h0LnZhbHVlIDogMDtcbiAgICB9LCB7IGRlcGVuZHNPbjogdGhpcy5oZWFkZXJIZWlnaHQgfSk7XG5cbiAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IGNoYWluKHRoaXMuYm91bmRzTW9kZWwpLm1hcChib3VuZHMgPT4ge1xuICAgICAgLy8gVE9ETzogdGhpcyBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IGFueSBjc3Mgc3R5bGluZyBhZGp1c3RtZW50cyBldGMuICBXaWxsIGludmVzdGlnYXRlIGlmIGl0J3MgYW4gaXNzdWUuXG4gICAgICBjb25zdCByYXdSb3dDb3VudCA9IChib3VuZHMuaGVpZ2h0IC0gYWN0dWFsSGVhZGVySGVpZ2h0LnZhbHVlKSAvIHRoaXMucm93SGVpZ2h0LnZhbHVlO1xuICAgICAgcmV0dXJuIHJhd1Jvd0NvdW50IDwgMSA/IDAgOiBNYXRoLmZsb29yKHJhd1Jvd0NvdW50KTtcbiAgICB9LCB7XG4gICAgICBkZXBlbmRzT246IFthY3R1YWxIZWFkZXJIZWlnaHQsIHRoaXMucm93SGVpZ2h0XSxcbiAgICAgIHBvc3Rwb25lV2hpbGU6IGNoYWluKHRoaXMuYm91bmRzTW9kZWwpLnBsdWNrTnVtZXJpYygnaGVpZ2h0JykuaXNMZXNzVGhhbigxKVxuICAgIH0pO1xuXG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhpZGUtaGVhZGVyJylcbiAgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLnNob3dIZWFkZXI7XG4gIH1cblxuICBnZXRNb2RlbCgpOiBBYnN0cmFjdFRhYmxlTW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIGxhbmcuYWJzdHJhY3RNZXRob2QodGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlLCBzd2l0Y2hPbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuY29sdW1ucyA9IGNoYWluKHRoaXMuZ2V0TW9kZWwoKS5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbHVtbklkcyA9IGNoYWluKHRoaXMuY29sdW1ucykucGx1Y2soJ2NvbHVtbklkJyk7XG4gICAgdGhpcy5jb2x1bW5zQnlJZCA9IGNoYWluKHRoaXMuY29sdW1ucykuaW5kZXhCeSgnY29sdW1uSWQnKTtcbiAgfVxuXG4gIGlzRWRpdGluZyhyb3c6IFJvdyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0TW9kZWwoKS5nZXRFZGl0U2Vzc2lvbkZvcihyb3cpO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5UZW1wbGF0ZShjb2x1bW5JZDogc3RyaW5nLCB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgZmlsbENlbGw6IGJvb2xlYW4sIHBhZENoaWxkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zQnlJZC5nZXQoY29sdW1uSWQpO1xuICAgIGlmIChjb2x1bW4gaW5zdGFuY2VvZiBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsKSB7XG4gICAgICBjb2x1bW4uc2V0VGVtcGxhdGUodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXIsIGZpbGxDZWxsLCBwYWRDaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgbm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4sIHJvdzogUm93KSB7XG4gICAgdGhpcy5nZXRNb2RlbCgpLl9ub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbCwgcm93KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmZpcnN0VmlzaWJsZUNvbHVtbi5xdWVyeSgpLnZhbHVlPy5jb2x1bW5JZCA9PT0gY29sdW1uSWQ7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBpc0xhc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmxhc3RWaXNpYmxlQ29sdW1uLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIGdldENvbHVtbkNsYXNzZXMoY29sdW1uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbYGF1cC1jb2wtJHt0aGlzLmNvbHVtbnNCeUlkLmdldChjb2x1bW5JZCkuZGFzaGVyaXNlZENvbHVtbklkfWBdO1xuICAgIGlmICh0aGlzLmlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmaXJzdC12aXNpYmxlLWNvbHVtbicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0xhc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdsYXN0LXZpc2libGUtY29sdW1uJyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG59XG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQUUsUUFBUSxFQUNyQixLQUFLLEVBQ0wsTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxHQUFHLEVBR0gsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVsRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBERztBQUtILE1BQU0sT0FBTyxzQkFBNEIsU0FBUSxvQkFBb0I7SUFpQ25FLFlBQVksVUFBc0IsRUFBRSxNQUFjLEVBQW1CLFFBQWtCO1FBQ3JGLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFEeUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXZCdkY7Ozs7V0FJRztRQUdILG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBU3hCLGtFQUFrRTtRQUNqRCxpQkFBWSxHQUFHLElBQUksaUJBQWlCLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDakQsY0FBUyxHQUFHLElBQUksaUJBQWlCLENBQVMsRUFBRSxDQUFDLENBQUM7UUFHL0QsaUJBQVksR0FBRyxxQkFB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RUFBRSxFQUFFO2lCQUNiOzZJQUtDLGVBQWU7c0JBRmQsS0FBSztnQkFNTixVQUFVO3NCQUZULEtBQUs7Z0JBV04sZUFBZTtzQkFGZCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFlckMsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLE9BQU87Z0JBdUJoQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZywgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIERzbCwgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBUcmFja0V4dGVybmFsLFxuICBWYWx1ZU1vZGVsXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IGxhbmcgfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7IFJlc2l6ZUF3YXJlQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzaXplLWF3YXJlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdFRhYmxlTW9kZWwgfSBmcm9tICcuL2Fic3RyYWN0LXRhYmxlLW1vZGVsJztcbmltcG9ydCB7IENvbHVtbk1vZGVsIH0gZnJvbSAnLi9jb2x1bW4vY29sdW1uLW1vZGVsJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWwgfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuXG4vKipcbiAqIENyZWF0ZSB5b3VyIG1vZGVsOlxuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkQ3VzdG9tQ29sdW1uKFwiZnVsbE5hbWVcIiwgaGVybyA9PiBgJHtoZXJvLmZpcnN0TmFtZX0gJHtoZXJvLmxhc3ROYW1lfWApO1xuICogfSk7XG4gKlxuICogQ3JlYXRlIHlvdXIgdGFibGVcbiAqIEBleGFtcGxlXG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+PC9hdXAtdGFibGU+XG4gKlxuICogQ29sdW1uIHRlbXBsYXRlc1xuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkVGVtcGxhdGVDb2x1bW4oXCJzcGVjaWFsQ29sdW1uXCIpO1xuICogfSk7XG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+XG4gKiAgIDxkaXYgKmF1cENvbHVtblRlbXBsYXRlPVwibGV0IGhlcm87IGNvbHVtbklkOiAnc3BlY2lhbENvbHVtbic7IGZpbGxDZWxsOiB0cnVlOyBwYWRDaGlsZDpmYWxzZVwiPlxuICogICAgIHt7aGVyby5uYW1lfX1cbiAqICAgPC9kaXY+XG4gKiA8L2F1cC10YWJsZT5cbiAqXG4gKiBTdHlsaW5nXG4gKiBAZXhhbXBsZVxuICogIC8vIGdsb2JhbCBzZXR0aW5nc1xuICogOnJvb3Qge1xuICogICAtLWF1cC10YWJsZS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yOiByZWJlY2NhcHVycGxlOyAvLyBkZWZhdWx0cyB0byB0cmFuc3BhcmVudFxuICogICAtLWF1cC10YWJsZS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWF1cC10YWJsZS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogfVxuICpcbiAqIC8vIHBlciB0YWJsZSBzZXR0aW5ncy5cbiAqIGF1cC10YWJsZSB7XG4gKiAgIC0tY29sdW1uLWdhcDogMTBweDsgLy8gZGVmYXVsdHMgdG8gMjRweFxuICogICAtLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tZmlyc3QtY29sdW1uLXBhZGRpbmctbGVmdDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqICAgLS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICpcbiAqICAgYXVwLXRhYmxlLWhlYWRlci1jZWxsLXJlbmRlcmVyLFxuICogICBhdXAtdGFibGUtY2VsbC1yZW5kZXJlciB7XG4gKiAgICAgJi5hdXAtY29sLW15LWRhc2hlcmlzZWQtY29sdW1uLWlkIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICAgICYuZmlyc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5sYXN0LXZpc2libGUtY29sdW1uIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1cC1hYnN0cmFjdC10YWJsZScsXG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRhYmxlQ29tcG9uZW50PFJvdz4gZXh0ZW5kcyBSZXNpemVBd2FyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KClcbiAgQFRyYWNrRXh0ZXJuYWwoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgc2hvd0hlYWRlck1vZGVsOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuXG4gIEBJbnB1dCgpXG4gIEBTdG9yZUluVmFsdWVNb2RlbCgnc2hvd0hlYWRlck1vZGVsJylcbiAgc2hvd0hlYWRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHNjcm9sbGluZy4gIE9uY2UgZW5hYmxlZCB0aGUgdGFibGUgd2lsbCBoYXZlIDAgaW1wbGljaXQgaGVpZ2h0LiAgWW91IHdpbGwgZWl0aGVyXG4gICAqIG5lZWQgdG8gc2V0IGl0IGV4cGxpY2l0bHkgZS5nLiBoZWlnaHQ6IDQwMHB4OyBvciBieSB1c2luZyBmbGV4IG9yIGdyaWQgbGF5b3V0IHRvIG1ha2UgaXQgZmlsbCBpdCdzXG4gICAqIGNvbnRhaW5tZW50IGFyZWEuXG4gICAqL1xuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmVuYWJsZS1zY3JvbGxpbmcnKVxuICBlbmFibGVTY3JvbGxpbmcgPSBmYWxzZTtcblxuICBjb2x1bW5zOiBMaXN0TW9kZWxDaGFpbjxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgY29sdW1uSWRzOiBMaXN0TW9kZWxDaGFpbjxzdHJpbmc+O1xuICBwcml2YXRlIGNvbHVtbnNCeUlkOiBNYXBNb2RlbENoYWluPHN0cmluZywgQ29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcmVhZG9ubHkgdmlzaWJsZVJvd0NvdW50OiBWYWx1ZU1vZGVsPG51bWJlcj47XG5cblxuICAvLyBUT0RPOiBzdXBwb3J0IHVzZXIgZGVmaW5lZCBoZWFkZXIgYW5kIHJvdyBoZWlnaHRzIHZpYSBjc3MgdmFycy5cbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJIZWlnaHQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPig1Nik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm93SGVpZ2h0ID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNDgpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBiYXNlQ3NzQ2xhc3MgPSAnYXVwLXRhYmxlLWNvbXBvbmVudCc7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmdab25lOiBOZ1pvbmUsIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgbmdab25lKTtcbiAgICBjb25zdCB7IGNoYWluLCB3aGVuIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICBjb25zdCBhY3R1YWxIZWFkZXJIZWlnaHQgPSBjaGFpbih0aGlzLnNob3dIZWFkZXJNb2RlbCkubWFwKHNob3cgPT4ge1xuICAgICAgcmV0dXJuIHNob3cgPyB0aGlzLmhlYWRlckhlaWdodC52YWx1ZSA6IDA7XG4gICAgfSwgeyBkZXBlbmRzT246IHRoaXMuaGVhZGVySGVpZ2h0IH0pO1xuXG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSBjaGFpbih0aGlzLmJvdW5kc01vZGVsKS5tYXAoYm91bmRzID0+IHtcbiAgICAgIC8vIFRPRE86IHRoaXMgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBhbnkgY3NzIHN0eWxpbmcgYWRqdXN0bWVudHMgZXRjLiAgV2lsbCBpbnZlc3RpZ2F0ZSBpZiBpdCdzIGFuIGlzc3VlLlxuICAgICAgY29uc3QgcmF3Um93Q291bnQgPSAoYm91bmRzLmhlaWdodCAtIGFjdHVhbEhlYWRlckhlaWdodC52YWx1ZSkgLyB0aGlzLnJvd0hlaWdodC52YWx1ZTtcbiAgICAgIHJldHVybiByYXdSb3dDb3VudCA8IDEgPyAwIDogTWF0aC5mbG9vcihyYXdSb3dDb3VudCk7XG4gICAgfSwge1xuICAgICAgZGVwZW5kc09uOiBbYWN0dWFsSGVhZGVySGVpZ2h0LCB0aGlzLnJvd0hlaWdodF0sXG4gICAgICBwb3N0cG9uZVdoaWxlOiBjaGFpbih0aGlzLmJvdW5kc01vZGVsKS5wbHVja051bWVyaWMoJ2hlaWdodCcpLmlzTGVzc1RoYW4oMSlcbiAgICB9KTtcblxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oaWRlLWhlYWRlcicpXG4gIGdldCBoaWRlSGVhZGVyKCkge1xuICAgIHJldHVybiAhdGhpcy5zaG93SGVhZGVyO1xuICB9XG5cbiAgZ2V0TW9kZWwoKTogQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4ge1xuICAgIHJldHVybiBsYW5nLmFic3RyYWN0TWV0aG9kKHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT24gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmdldE1vZGVsKCkuaW5pdGlhbGlzZSh0aGlzLmluamVjdG9yKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBjaGFpbih0aGlzLmdldE1vZGVsKCkuY29sdW1ucyk7XG4gICAgdGhpcy5jb2x1bW5JZHMgPSBjaGFpbih0aGlzLmNvbHVtbnMpLnBsdWNrKCdjb2x1bW5JZCcpO1xuICAgIHRoaXMuY29sdW1uc0J5SWQgPSBjaGFpbih0aGlzLmNvbHVtbnMpLmluZGV4QnkoJ2NvbHVtbklkJyk7XG4gIH1cblxuICBpc0VkaXRpbmcocm93OiBSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldE1vZGVsKCkuZ2V0RWRpdFNlc3Npb25Gb3Iocm93KTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uVGVtcGxhdGUoY29sdW1uSWQ6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGZpbGxDZWxsOiBib29sZWFuLCBwYWRDaGlsZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc0J5SWQuZ2V0KGNvbHVtbklkKTtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbCkge1xuICAgICAgY29sdW1uLnNldFRlbXBsYXRlKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyLCBmaWxsQ2VsbCwgcGFkQ2hpbGQpO1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIHRoaXMuZ2V0TW9kZWwoKS5fbm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uTW9kZWwsIHJvdyk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBpc0ZpcnN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5maXJzdFZpc2libGVDb2x1bW4kLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGlzTGFzdFZpc2libGVDb2x1bW4oY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE1vZGVsKCkubGFzdFZpc2libGVDb2x1bW4kLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIGdldENvbHVtbkNsYXNzZXMoY29sdW1uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbYGF1cC1jb2wtJHt0aGlzLmNvbHVtbnNCeUlkLmdldChjb2x1bW5JZCkuZGFzaGVyaXNlZENvbHVtbklkfWBdO1xuICAgIGlmICh0aGlzLmlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmaXJzdC12aXNpYmxlLWNvbHVtbicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0xhc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdsYXN0LXZpc2libGUtY29sdW1uJyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { AbstractComputedListModel, Dsl, lang, MutableListModel } from '@coolon/pectin';
2
+ import { isNil } from 'lodash';
3
+ export class ColumnListModel extends AbstractComputedListModel {
4
+ constructor() {
5
+ super();
6
+ this._allColumns$ = new MutableListModel();
7
+ const { chain } = Dsl.disposeWith(this);
8
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
9
+ }
10
+ get allColumns$() {
11
+ return this._allColumns$.readonly;
12
+ }
13
+ getColumn(id) {
14
+ return this.columnsById$.get(id);
15
+ }
16
+ hasColumn(id) {
17
+ return !!this.columnsById$.get(id);
18
+ }
19
+ addColumn(column, index) {
20
+ if (this.hasColumn(column.columnId)) {
21
+ lang.illegalState(`Column with id=${column.columnId} already exists`);
22
+ }
23
+ this.registerDisposable(column);
24
+ this.runInTransaction(() => {
25
+ if (!isNil(index)) {
26
+ this._allColumns$.insert(index, column);
27
+ }
28
+ else {
29
+ this._allColumns$.push(column);
30
+ }
31
+ this.registerDisposable(this.trackSource(column.visible$));
32
+ });
33
+ return column;
34
+ }
35
+ doComputeValue() {
36
+ return this._allColumns$.value.filter(c => c.visible$.value);
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxpc3QtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUcvQixNQUFNLE9BQU8sZUFBcUIsU0FBUSx5QkFBb0Q7SUFLNUY7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUpPLGlCQUFZLEdBQUcsSUFBSSxnQkFBZ0IsRUFBb0IsQ0FBQztRQUt2RSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBVTtRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBVTtRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUE2QixNQUFTLEVBQUUsS0FBYztRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLE1BQU0sQ0FBQyxRQUFRLGlCQUFpQixDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29tcHV0ZWRMaXN0TW9kZWwsIERzbCwgbGFuZywgTGlzdE1vZGVsLCBNYXBNb2RlbENoYWluLCBNdXRhYmxlTGlzdE1vZGVsIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb2x1bW5Nb2RlbCB9IGZyb20gJy4vY29sdW1uLW1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkxpc3RNb2RlbDxSb3c+IGV4dGVuZHMgQWJzdHJhY3RDb21wdXRlZExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+LCBib29sZWFuPiB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsQ29sdW1ucyQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbnNCeUlkJDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuY29sdW1uc0J5SWQkID0gY2hhaW4odGhpcy5fYWxsQ29sdW1ucyQpLmluZGV4QnkoJ2NvbHVtbklkJyk7XG4gIH1cblxuICBnZXQgYWxsQ29sdW1ucyQoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fYWxsQ29sdW1ucyQucmVhZG9ubHk7XG4gIH1cblxuICBnZXRDb2x1bW4oaWQ6IHN0cmluZyk6IENvbHVtbk1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnNCeUlkJC5nZXQoaWQpO1xuICB9XG5cbiAgaGFzQ29sdW1uKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbHVtbnNCeUlkJC5nZXQoaWQpO1xuICB9XG5cbiAgYWRkQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW5Nb2RlbDxSb3c+Pihjb2x1bW46IEMsIGluZGV4PzogbnVtYmVyKTogQyB7XG4gICAgaWYgKHRoaXMuaGFzQ29sdW1uKGNvbHVtbi5jb2x1bW5JZCkpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKGBDb2x1bW4gd2l0aCBpZD0ke2NvbHVtbi5jb2x1bW5JZH0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG4gICAgdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUoY29sdW1uKTtcbiAgICB0aGlzLnJ1bkluVHJhbnNhY3Rpb24oKCkgPT4ge1xuICAgICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgICAgdGhpcy5fYWxsQ29sdW1ucyQuaW5zZXJ0KGluZGV4LCBjb2x1bW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWxsQ29sdW1ucyQucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUodGhpcy50cmFja1NvdXJjZShjb2x1bW4udmlzaWJsZSQpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgZG9Db21wdXRlVmFsdWUoKTogQ29sdW1uTW9kZWw8Um93PltdIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsQ29sdW1ucyQudmFsdWUuZmlsdGVyKGMgPT4gYy52aXNpYmxlJC52YWx1ZSk7XG4gIH1cbn1cbiJdfQ==