@coolon/angular-ui-powerups 16.1.0-aplpha.35 → 16.1.0-aplpha.36

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.
@@ -58,15 +58,15 @@ export class AbstractTableModel extends GarbageCollector {
58
58
  });
59
59
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
60
60
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
61
- this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
61
+ this.textSearchPredicate$ = chain(this.visibleColumns$).reduce(columns => {
62
62
  return (row, regex) => {
63
63
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
64
64
  };
65
65
  });
66
66
  this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
67
- this.firstVisibleColumn$ = chain(this._columnList).first();
68
- this.lastVisibleColumn$ = chain(this._columnList).last();
69
- this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
67
+ this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
68
+ this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
69
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList.visibleColumns$).select(column => column.isRowSelectionEnabled()).count().equals(0);
70
70
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
71
71
  this.selectedItems$ = this.selectionModelProxy.selectedItems$;
72
72
  this.leadSelection$ = this.selectionModelProxy.leadSelection$;
@@ -146,8 +146,8 @@ export class AbstractTableModel extends GarbageCollector {
146
146
  get columns() {
147
147
  return this._columnList.allColumns$;
148
148
  }
149
- get visibleColumns() {
150
- return this._columnList.readonly$;
149
+ get visibleColumns$() {
150
+ return this._columnList.visibleColumns$;
151
151
  }
152
152
  pluck(property, options) {
153
153
  const columnId = options?.columnId || property.toString();
@@ -167,7 +167,7 @@ export class AbstractTableModel extends GarbageCollector {
167
167
  this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
168
168
  this.selectionColumnModel.useSelectionModel(selectionModel);
169
169
  this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
170
- const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
170
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, { before: null }); // first column
171
171
  if (!isNil(visible)) {
172
172
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
173
173
  }
@@ -211,8 +211,8 @@ export class AbstractTableModel extends GarbageCollector {
211
211
  });
212
212
  return classNames;
213
213
  }
214
- addColumn(column, index) {
215
- return this._columnList.addColumn(column, index);
214
+ addColumn(column, position) {
215
+ return this._columnList.addColumn(column, position);
216
216
  }
217
217
  columnTextProperties(columnTextProperties) {
218
218
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -261,4 +261,4 @@ export class AbstractTableModel extends GarbageCollector {
261
261
  }
262
262
  }
263
263
  ProxyRegistry.registerOneTimeBinding(AbstractTableModel);
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUdoQixnQkFBZ0IsRUFFaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixjQUFjLEVBRWQsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRWxELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFNaEYsT0FBTyxF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O0NBRUY7QUFDRCxhQUFhLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQge0luamVjdG9yfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBCb29sZWFuVmFsdWVNb2RlbENoYWluLFxuICBDb21tYW5kLFxuICBDb25zdHJ1Y3RhYmxlLFxuICBEZWxlZ2F0aW5nTGlzdE1vZGVsLFxuICBEaXJ0eVRyYWNraW5nRm9ybSxcbiAgRGlzcG9zYWJsZSxcbiAgRHNsLFxuICBFdmVudExpc3RlbmVyTGlzdCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgTGlzdE1vZGVsLFxuICBNYXBNb2RlbENoYWluLFxuICBNdXRhYmxlTGlzdE1vZGVsLFxuICBQcm94aWZpZWQsXG4gIHByb3hpZnksXG4gIFByb3h5UmVnaXN0cnksXG4gIFNlbGVjdGlvbk1vZGVsLFxuICBUeXBlcyxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluXG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tIFwiQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllc1wiO1xuXG5pbXBvcnQge2lzRnVuY3Rpb24sIGlzTmlsfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQge0NvbHVtbkxpc3RNb2RlbH0gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi1saXN0LW1vZGVsXCI7XG5pbXBvcnQge0NlbGxSZW5kZXJlck9wdGlvbnMsIENvbHVtbk1vZGVsLCBPbkNvbXBvbmVudEluaXR9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Q29sdW1uVGV4dFByb3BlcnRpZXN9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tdGV4dC1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQge0N1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9jdXN0b20tdGVtcGxhdGUtY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge0N1c3RvbVZhbHVlQ29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9jdXN0b20tdmFsdWUtY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge0VkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2VkaXRvci1jb250cm9scy1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7TGlzdFByb3BlcnR5Q29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9saXN0LXByb3BlcnktY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge1Byb3BlcnR5Q29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9wcm9wZXJ0eS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7U2VsZWN0aW9uQ29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9zZWxlY3Rpb24tY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge0VkaXRTZXNzaW9ufSBmcm9tIFwiLi9lZGl0b3IvZWRpdC1zZXNzaW9uXCI7XG5cbmltcG9ydCB7Q29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcn0gZnJvbSBcIi4vZmlsdGVyL2NvbHVtbi10ZXh0LXNlYXJjaC1mb3JtYXR0ZXJcIjtcbmltcG9ydCB7VGV4dFNlYXJjaFByZWRpY2F0ZX0gZnJvbSBcIi4vZmlsdGVyL3RleHQtc2VhcmNoLXByZWRpY2F0ZVwiO1xuaW1wb3J0IHtDZWxsUmVuZGVyZXJ9IGZyb20gXCIuL3JlbmRlcmVyL2NlbGwtcmVuZGVyZXJcIjtcbmltcG9ydCB7XG4gIFRhYmxlTW9yZU1lbnVQb3B1cENvbXBvbmVudFxufSBmcm9tIFwiLi9yZW5kZXJlci90YWJsZS1tb3JlLW1lbnUvdGFibGUtbW9yZS1tZW51LXBvcHVwL3RhYmxlLW1vcmUtbWVudS1wb3B1cC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVNb3JlTWVudUNvbXBvbmVudH0gZnJvbSBcIi4vcmVuZGVyZXIvdGFibGUtbW9yZS1tZW51L3RhYmxlLW1vcmUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCBEZWZhdWx0QXJyYXlGb3JtYXR0ZXIgPSBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyLkRlZmF1bHRBcnJheUZvcm1hdHRlcjtcbmltcG9ydCBEZWZhdWx0VmFsdWVGb3JtYXR0ZXIgPSBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyLkRlZmF1bHRWYWx1ZUZvcm1hdHRlcjtcblxuLy8gZXhwb3J0IHR5cGUgU3RyaW5nUHJvcGVydGllc09mPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyA/IEsgOiBuZXZlciB9W2tleW9mIFRdO1xuLy8gZXhwb3J0IHR5cGUgTnVtYmVyUHJvcGVydGllc09mPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG51bWJlciA/IEsgOiBuZXZlciB9W2tleW9mIFRdO1xuXG5jbGFzcyBSb3dDbGFzczxSb3c+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IG1hdGNoZXM6IChyb3c6IFJvdykgPT4gYm9vbGVhbikge1xuICB9XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGFibGVNb2RlbDxSb3c+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhU291cmNlJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZmlsdGVyZWRSb3dzJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdmlzaWJsZVJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5MaXN0ID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IENvbHVtbkxpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgX2VkaXRvclNlc3Npb25zID0gbmV3IE11dGFibGVMaXN0TW9kZWw8RWRpdFNlc3Npb248Um93Pj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm93c0JlaW5nRWRpdGVkJDogTXV0YWJsZUxpc3RNb2RlbDxSb3c+O1xuICBwcml2YXRlIHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PjtcbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbkJ5Um93SWQ6IE1hcE1vZGVsQ2hhaW48YW55LCBFZGl0U2Vzc2lvbjxSb3c+PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsYXNzTmFtZVByZWRpY2F0ZXM6IFJvd0NsYXNzPFJvdz5bXSA9IFtdO1xuXG4gIHByaXZhdGUgX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9O1xuXG4gIHJlYWRvbmx5IGVkaXRpbmckOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICByZWFkb25seSBmaXJzdEVkaXRhYmxlQ29sdW1uJDogVmFsdWVNb2RlbENoYWluPENvbHVtbk1vZGVsPFJvdz4+O1xuICBwcml2YXRlIHNlbGVjdGlvbkNvbHVtbk1vZGVsOiBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+O1xuICBwcml2YXRlIHJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dDbGlja0xpc3RlbmVycyA9IG5ldyBFdmVudExpc3RlbmVyTGlzdDwocm93OiBSb3cpID0+IHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGZpcnN0VmlzaWJsZUNvbHVtbiQ6IFZhbHVlTW9kZWw8Q29sdW1uTW9kZWw8Um93Pj47XG4gIHJlYWRvbmx5IGxhc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcblxuICBwcml2YXRlIF9jcmVhdGVGb3JtOiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4gPSAocm93KSA9PiBuZXcgRGlydHlUcmFja2luZ0Zvcm08Um93PigpO1xuICByZWFkb25seSB0ZXh0U2VhcmNoUHJlZGljYXRlJDogVmFsdWVNb2RlbDxUZXh0U2VhcmNoUHJlZGljYXRlPFJvdz4+O1xuICBwcm90ZWN0ZWQgaWRlbnRpdHlPZjogKGl0ZW06IFJvdykgPT4gYW55O1xuICByZWFkb25seSBkYXRhU291cmNlRW1wdHkkOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvbk1vZGVsUHJveHkgPSBwcm94aWZ5KFNlbGVjdGlvbk1vZGVsPFJvdz4pIGFzIFByb3hpZmllZDxTZWxlY3Rpb25Nb2RlbDxSb3c+PjtcblxuICByZWFkb25seSBzZWxlY3RlZEl0ZW1zJDogTGlzdE1vZGVsPFJvdz47XG4gIHJlYWRvbmx5IGxlYWRTZWxlY3Rpb24kOiBWYWx1ZU1vZGVsPFJvdz47XG4gIHJlYWRvbmx5IGhhc1NlbGVjdGlvbiQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qge2NoYWlufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkID0gbmV3IE11dGFibGVMaXN0TW9kZWw8Um93PihbXSwge1xuICAgICAgaWRlbnRpZmllZFdpdGg6IHJvdyA9PiB0aGlzLmlkZW50aXR5T2Yocm93KVxuICAgIH0pO1xuICAgIHRoaXMuX2VkaXRvclNlc3Npb25CeVJvd0lkID0gY2hhaW4odGhpcy5fZWRpdG9yU2Vzc2lvbnMpLmluZGV4QnkoXCJyb3dJZFwiKTtcbiAgICB0aGlzLmVkaXRpbmckID0gY2hhaW4odGhpcy5fZWRpdG9yU2Vzc2lvbnMpLmNvdW50KCkuaXNHcmVhdGVyVGhhbigwKTtcblxuICAgIHRoaXMudGV4dFNlYXJjaFByZWRpY2F0ZSQgPSBjaGFpbih0aGlzLnZpc2libGVDb2x1bW5zKS5yZWR1Y2UoY29sdW1ucyA9PiB7XG4gICAgICByZXR1cm4gKHJvdzogUm93LCByZWdleDogUmVnRXhwKSA9PiB7XG4gICAgICAgIHJldHVybiAoIXJlZ2V4IHx8ICEhY29sdW1ucy5maW5kKGMgPT4gcmVnZXgudGVzdChjLmdldFNlYXJjaFRleHRGb3Iocm93KSkpKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5maXJzdEVkaXRhYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuY29sdW1ucykuc2VsZWN0KGMgPT4gYy5oYXNFZGl0b3JQb3J0YWwoKSkuZmlyc3QoKTtcbiAgICB0aGlzLmZpcnN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLl9jb2x1bW5MaXN0KS5maXJzdCgpO1xuICAgIHRoaXMubGFzdFZpc2libGVDb2x1bW4kID0gY2hhaW4odGhpcy5fY29sdW1uTGlzdCkubGFzdCgpO1xuXG4gICAgdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQgPSBjaGFpbih0aGlzLl9jb2x1bW5MaXN0KS5zZWxlY3QoY29sdW1uID0+IGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSkuY291bnQoKS5lcXVhbHMoMCk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VFbXB0eSQgPSBjaGFpbih0aGlzLmRhdGFTb3VyY2UkKS5pc0VtcHR5KCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMkID0gdGhpcy5zZWxlY3Rpb25Nb2RlbFByb3h5LnNlbGVjdGVkSXRlbXMkO1xuICAgIHRoaXMubGVhZFNlbGVjdGlvbiQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkubGVhZFNlbGVjdGlvbiQ7XG4gICAgdGhpcy5oYXNTZWxlY3Rpb24kID0gY2hhaW4odGhpcy5zZWxlY3RlZEl0ZW1zJCkuaXNOb3RFbXB0eSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSQpIHtcbiAgICB0aGlzLl9kYXRhU291cmNlJC5zZXREZWxlZ2F0ZShkYXRhU291cmNlJCk7XG4gIH1cblxuICAvKipcbiAgICogVG9kbzogbWFrZSB0aGlzIGZvcmNlIG9uZSB0YWJsZSBhdCBhIHRpbWVcbiAgICogQHBhcmFtIGluamVjdG9yXG4gICAqIEBwYXJhbSBpZGVudGl0eU9mXG4gICAqIEBwYXJhbSByZXN0XG4gICAqL1xuICBpbml0aWFsaXNlKGluamVjdG9yOiBJbmplY3RvciwgaWRlbnRpdHlPZjogKGl0ZW06IFJvdykgPT4gYW55KSB7XG4gICAgLy8gbm90IHN1cmUgaWYgSSBzaG91bGQgZGVmaW5lIHRoZXNlIGF0IHRoZSBtb2R1bGUgbGV2ZWwgb3Igbm90Li4uXG4gICAgY29uc3QgY3VzdG9tSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtwcm92aWRlOiBEZWZhdWx0VmFsdWVGb3JtYXR0ZXJ9LFxuICAgICAgICB7cHJvdmlkZTogRGVmYXVsdEFycmF5Rm9ybWF0dGVyfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogaW5qZWN0b3JcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbnMudmFsdWUuZm9yRWFjaChjID0+IGMuaW5pdGlhbGlzZShjdXN0b21JbmplY3RvcikpO1xuICAgIHRoaXMuaWRlbnRpdHlPZiA9IGlkZW50aXR5T2Y7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzIHRoYXQgYXJlIHZpc2libGUgYWZ0ZXIgYW55IGZpbHRlcnMgYXJlIGFwcGxpZWQuICBJZiB0aGVyZSBhcmVcbiAgICogbm8gZmlsdGVycyB0aGVuIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgcm9vdCBkYXRhc2V0LlxuICAgKi9cbiAgZ2V0IGZpbHRlcmVkUm93cyQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZFJvd3MkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzIGFyZSBjdXJyZW50bHkgdmlzaWJsZSB0byB0aGUgdXNlci4gIEkuZS4gdGhlIGN1cnJlbnQgcGFnZSBpbiBhIHBhZ2VkIHRhYmxlIG9yIHRoZVxuICAgKiBleHBhbmRlZCByb3dzIGluIGEgdHJlZSB0YWJsZS5cbiAgICovXG4gIGdldCB2aXNpYmxlUm93cyQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgZ2V0IHJvd3NCZWluZ0VkaXRlZCQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIHN0YXJ0RWRpdFNlc3Npb24ocm93OiBSb3cpOiBFZGl0U2Vzc2lvbjxSb3c+IHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuaWRlbnRpdHlPZihyb3cpO1xuICAgIGlmICh0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnF1ZXJ5KCkuaW5kZXhPZihyb3cpID4gLTEpIHtcbiAgICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgUm93IHdpdGggaWQ9JHtyb3dJZH0gYWxyZWFkeSBiZWluZyBlZGl0ZWRgKTtcbiAgICB9XG5cbiAgICAvLyB0b2RvOiBwYXNzIHRoZSBmYWN0b3JpZXMgdG8gdGhlIGVkaXQgc2Vzc2lvbiBzbyB3ZSBjYW4gbWFrZSB0aGUgd2hvbGUgbG90IHBsdWdnYWJsZT9cbiAgICBjb25zdCBmb3JtID0gdGhpcy5fY3JlYXRlRm9ybShyb3cpO1xuICAgIGNvbnN0IHNhdmVDb21tYW5kID0gdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkuY3JlYXRlKGZvcm0sIHtkaXNwb3NlZFdpdGg6IHRoaXN9KTtcbiAgICBjb25zdCBlZGl0U2Vzc2lvbiA9IG5ldyBFZGl0U2Vzc2lvbjxSb3c+KHJvd0lkLCByb3csIGZvcm0sIHNhdmVDb21tYW5kKTtcbiAgICBjb25zdCB7d2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgoZWRpdFNlc3Npb24pO1xuICAgIHdoZW4oZWRpdFNlc3Npb24ubGl2ZVJvd1ZhbHVlJCkuY2hhbmdlcygoZWRpdGVkVmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVwbGFjZU9yUHVzaChlZGl0ZWRWYWx1ZSk7XG4gICAgfSwge2luaXRpYWxWYWx1ZTogXCJ0cmlnZ2VyQ2hhbmdlVW5sZXNzTmlsXCJ9KTtcblxuICAgIHRoaXMuX2VkaXRvclNlc3Npb25zLnB1c2goZWRpdFNlc3Npb24pO1xuICAgIGVkaXRTZXNzaW9uLm9uRGlzcG9zZSgoKSA9PiB7XG4gICAgICB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJlbW92ZShlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkLnZhbHVlKTtcbiAgICAgIHRoaXMuX2VkaXRvclNlc3Npb25zLnJlbW92ZShlZGl0U2Vzc2lvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVkaXRTZXNzaW9uO1xuICB9XG5cbiAgZ2V0RWRpdFNlc3Npb25Gb3Iocm93OiBSb3cpOiBFZGl0U2Vzc2lvbjxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQuZ2V0KHRoaXMuaWRlbnRpdHlPZihyb3cpKTtcbiAgfVxuXG4gIGNhbmNlbEFsbEVkaXRvclNlc3Npb25zKCkge1xuICAgIHRoaXMuX2VkaXRvclNlc3Npb25zLnJ1bkluVHJhbnNhY3Rpb24oKGRyYWZ0KSA9PiB7XG4gICAgICB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJ1bkluVHJhbnNhY3Rpb24oKCkgPT4ge1xuICAgICAgICBkcmFmdC52YWx1ZS5mb3JFYWNoKHNlc3Npb24gPT4gc2Vzc2lvbi5kaXNwb3NlKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGdldCBjb2x1bW5zKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxpc3QuYWxsQ29sdW1ucyQ7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5yZWFkb25seSQ7XG4gIH1cblxuICBwbHVjazxQIGV4dGVuZHMgVHlwZXMuVmFsdWVQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7IGNvbHVtbklkOiBzdHJpbmcgfSk6IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgUHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+KGNvbHVtbklkLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHBsdWNrTGlzdDxQIGV4dGVuZHMgVHlwZXMuQXJyYXlQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7IGNvbHVtbklkOiBzdHJpbmcgfSk6IExpc3RQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4ge1xuICAgIGNvbnN0IGNvbHVtbklkID0gb3B0aW9ucz8uY29sdW1uSWQgfHwgcHJvcGVydHkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IExpc3RQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4oY29sdW1uSWQsIHByb3BlcnR5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgLy8gVE9ETzogY2xlYW4gdGhpcyB1cCBhbmQgYXNzaWduIHRoZSBzZWxlY3Rpb24gbW9kZWwgb24gdGVoIHRhYmxlIGRpcmVjdGx5LlxuICAvLyAgICAgICB0YWJsZU1vZGVsLnVzZVNlbGVjdGlvbk1vZGVsKG1vZGVsKSBhbmQgaGF2ZSB0aGUgc2VsZWNpdG9uIGNvbHVtbiBhdXRvbWF0aWNhbGx5XG4gIC8vICAgICAgIGFkZGVkLiAgTmVlZCB0byBsb29rIGF0IGhvdyB3ZSdyZSB1c2luZyB0aGUgdmlzaWJpbGl0eSBjb250cm9scyBhcyB3ZWxsLlxuICAvLyAgICAgICBTaG91bGQgYWxzbyBsYXp5IGNyZWF0ZSB0aGUgc2VsZWN0aW9uIGNvbHVtbiBtb2RlbCBpZiBzb21lb25lIGFjY2Vzc2VzIGl0LlxuICBwcm90ZWN0ZWQgX2FkZFNlbGVjdGlvbkNvbHVtbihzZWxlY3Rpb25Nb2RlbD86IFNlbGVjdGlvbk1vZGVsPFJvdz4sIHZpc2libGU/OiBWYWx1ZU1vZGVsPGJvb2xlYW4+IHwgYm9vbGVhbik6IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz4ge1xuICAgIGFzc2VydC5pc05pbCh0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsKTtcbiAgICBjb25zdCBjb2x1bW5JZCA9IFwic2VsZWN0aW9uLWNvbHVtblwiO1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwgPSBuZXcgU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIHRoaXMuc2VsZWN0aW9uTW9kZWxQcm94eSk7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC51c2VTZWxlY3Rpb25Nb2RlbChzZWxlY3Rpb25Nb2RlbClcbiAgICB0aGlzLmFkZFJvd0NsYXNzKFwiYXVwLXJvdy1zZWxlY3RlZFwiLCByb3cgPT4gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC5pc1NlbGVjdGVkKHJvdykpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkNvbHVtbk1vZGVsID0gdGhpcy5hZGRDb2x1bW4odGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCwgMCk7XG4gICAgaWYgKCFpc05pbCh2aXNpYmxlKSkge1xuICAgICAgc2VsZWN0aW9uQ29sdW1uTW9kZWwudmlzaWJsZVdoaWxlKHZpc2libGUgaW5zdGFuY2VvZiBWYWx1ZU1vZGVsID8gdmlzaWJsZSA6IFZhbHVlTW9kZWwuY29uc3RhbnQodmlzaWJsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0aW9uQ29sdW1uTW9kZWw7XG4gIH1cblxuXG4gIGFkZEVkaXRDb250cm9scyhzYXZlQ29tbWFuZEZhY3Rvcnk6IENvbW1hbmQuRmFjdG9yeTxEaXJ0eVRyYWNraW5nRm9ybTxSb3c+LCBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj4sIGZvcm1GYWN0b3J5PzogKHJvdzogUm93KSA9PiBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KTogRWRpdG9yQ29udHJvbENvbHVtbk1vZGVsPFJvdz4ge1xuICAgIHRoaXMuc2F2ZUNvbW1hbmRGYWN0b3J5ID0gc2F2ZUNvbW1hbmRGYWN0b3J5O1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvcm1GYWN0b3J5KSkge1xuICAgICAgdGhpcy5fY3JlYXRlRm9ybSA9IGZvcm1GYWN0b3J5O1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5JZCA9IFwiZWRpdENvbnRyb2xzXCI7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgc2F2ZUNvbW1hbmRGYWN0b3J5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgYWRkQ3VzdG9tQ29sdW1uPFY+KGNvbHVtbklkOiBzdHJpbmcsIGRhdGFBY2Nlc3NvcjogKHJvdzogUm93KSA9PiBWKTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBWPihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIGRhdGFBY2Nlc3NvcikpO1xuICB9XG5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvbkluaXQ/OiBPbkNvbXBvbmVudEluaXQ8Qz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PlxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9wdGlvbnM/OiBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgQz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PlxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uQ29tcG9uZW50SW5pdE9yT3B0aW9ucz86IE9uQ29tcG9uZW50SW5pdDxDPiB8IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgcm93ID0+IHJvdykpLmNlbGxSZW5kZXJlcihjb21wb25lbnQsIG9uQ29tcG9uZW50SW5pdE9yT3B0aW9ucyk7XG4gIH1cblxuICBhZGRNb3JlTWVudShjb21wb25lbnRDbGFzczogQ29uc3RydWN0YWJsZTxUYWJsZU1vcmVNZW51UG9wdXBDb21wb25lbnQ8Um93Pj4pIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDb2x1bW4oXCJtb3JlLW1lbnVcIiwgVGFibGVNb3JlTWVudUNvbXBvbmVudCwgKGNvbXBvbmVudDpUYWJsZU1vcmVNZW51Q29tcG9uZW50PFJvdz4pID0+IHtcbiAgICAgIGNvbXBvbmVudC5jb25maWd1cmVQb3B1cENvbXBvbmVudFR5cGUoY29tcG9uZW50Q2xhc3MpO1xuICAgIH0pLmNvbHVtblRleHRQcm9wZXJ0aWVzKHtcbiAgICAgIGhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYWRkVGVtcGxhdGVDb2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZyk6IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRSb3dDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcHJlZGljYXRlOiAocm93OiBSb3cpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJvd0NsYXNzTmFtZVByZWRpY2F0ZXMucHVzaChuZXcgUm93Q2xhc3M8Um93PihjbGFzc05hbWUsIHByZWRpY2F0ZSkpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3Nlcyhyb3c6IFJvdyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkubWF0Y2hlcyhyb3cpKSB7XG4gICAgICAgIGNsYXNzTmFtZXMucHVzaChpLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXM7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhZGRDb2x1bW48QyBleHRlbmRzIENvbHVtbk1vZGVsPFJvdz4+KGNvbHVtbjogQywgaW5kZXg/OiBudW1iZXIpOiBDIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5hZGRDb2x1bW4oY29sdW1uLCBpbmRleCk7XG4gIH1cblxuICBjb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5UZXh0UHJvcGVydGllczogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogQ29sdW1uVGV4dFByb3BlcnRpZXMgfSkge1xuICAgIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID0gY29sdW1uVGV4dFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZDogc3RyaW5nKTogQ29sdW1uVGV4dFByb3BlcnRpZXMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cCA/IHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwW2NvbHVtbklkXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpICYmIGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkgJiYgIXRoaXMucm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkLnZhbHVlO1xuICB9XG5cbiAgaGFzVXNlclNlbGVjdGlvbk1vZGVsVGhhdElzRW5hYmxlZCgpIHtcbiAgICBjb25zdCB1c2VyU2VsZWN0aW9uTW9kZWwgPSB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbC5nZXRQcm94eVRhcmdldCgpO1xuICAgIHJldHVybiAhIXVzZXJTZWxlY3Rpb25Nb2RlbCAmJiB1c2VyU2VsZWN0aW9uTW9kZWwuZW5hYmxlZCQudmFsdWU7XG4gIH1cblxuICBnZXRTZWxlY3Rpb25Nb2RlbCgpOiBTZWxlY3Rpb25Nb2RlbDxSb3c+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbD8uc2VsZWN0aW9uTW9kZWw7XG4gIH1cblxuICBpc0hvdmVyRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSB8fCB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmxpc3RlbmVyQ291bnQgPiAwO1xuICB9XG5cbiAgaXNDdXJzb3JFbmFibGVkKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW4pIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3RSb3cocm93KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2tlZChjYWxsYmFjazogKHJvdzogUm93KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuYWRkKGNhbGxiYWNrKTtcbiAgfVxuXG4gIF9ub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Piwgcm93OiBSb3cpIHtcbiAgICBpZiAodGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uTW9kZWwpKSB7XG4gICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyh7XG4gICAgICAvLyAgIGhhc0VuYWJsZWRVc2VyU2VsZWN0aW9uTW9kZWw6IHRoaXMuaGFzVXNlclNlbGVjdGlvbk1vZGVsVGhhdElzRW5hYmxlZCgpLFxuICAgICAgLy8gICBhbGxTZWxlY3Rpb25EaXNhYmxlZDogdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWUsXG4gICAgICAvLyAgIHJvd1NlbGVjdGlvbkVuYWJsZWQ6IHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCksXG4gICAgICAvLyAgIHJvd1NlbGVjdGlvbkVuYWJsZWRGb3JDb2x1bW46IGNvbHVtbk1vZGVsLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpXG4gICAgICAvLyB9KVxuICAgIH1cblxuICAgIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuZmlyZShsID0+IGwocm93KSk7XG4gIH1cblxufVxuUHJveHlSZWdpc3RyeS5yZWdpc3Rlck9uZVRpbWVCaW5kaW5nKEFic3RyYWN0VGFibGVNb2RlbClcbiJdfQ==
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUdoQixnQkFBZ0IsRUFFaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixjQUFjLEVBRWQsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRWxELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFNaEYsT0FBTyxF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LENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FFRjtBQUNELGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7SW5qZWN0b3J9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIENvbW1hbmQsXG4gIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERpcnR5VHJhY2tpbmdGb3JtLFxuICBEaXNwb3NhYmxlLFxuICBEc2wsXG4gIEV2ZW50TGlzdGVuZXJMaXN0LFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBMaXN0TW9kZWwsXG4gIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIFByb3hpZmllZCxcbiAgcHJveGlmeSxcbiAgUHJveHlSZWdpc3RyeSxcbiAgU2VsZWN0aW9uTW9kZWwsXG4gIFR5cGVzLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQge2xhbmd9IGZyb20gXCJAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzXCI7XG5cbmltcG9ydCB7aXNGdW5jdGlvbiwgaXNOaWx9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7Q29sdW1uTGlzdE1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWxcIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyT3B0aW9ucywgQ29sdW1uTW9kZWwsIE9uQ29tcG9uZW50SW5pdH0gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5UZXh0UHJvcGVydGllc30gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi10ZXh0LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7Q3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS10ZW1wbGF0ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Q3VzdG9tVmFsdWVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS12YWx1ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdG9yQ29udHJvbENvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vZWRpdG9yLWNvbnRyb2xzLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2xpc3QtcHJvcGVyeS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3Byb3BlcnR5LWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtTZWxlY3Rpb25Db2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3NlbGVjdGlvbi1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdFNlc3Npb259IGZyb20gXCIuL2VkaXRvci9lZGl0LXNlc3Npb25cIjtcblxuaW1wb3J0IHtDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyfSBmcm9tIFwiLi9maWx0ZXIvY29sdW1uLXRleHQtc2VhcmNoLWZvcm1hdHRlclwiO1xuaW1wb3J0IHtUZXh0U2VhcmNoUHJlZGljYXRlfSBmcm9tIFwiLi9maWx0ZXIvdGV4dC1zZWFyY2gtcHJlZGljYXRlXCI7XG5pbXBvcnQge0NlbGxSZW5kZXJlcn0gZnJvbSBcIi4vcmVuZGVyZXIvY2VsbC1yZW5kZXJlclwiO1xuaW1wb3J0IHtcbiAgVGFibGVNb3JlTWVudVBvcHVwQ29tcG9uZW50XG59IGZyb20gXCIuL3JlbmRlcmVyL3RhYmxlLW1vcmUtbWVudS90YWJsZS1tb3JlLW1lbnUtcG9wdXAvdGFibGUtbW9yZS1tZW51LXBvcHVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vcmVNZW51Q29tcG9uZW50fSBmcm9tIFwiLi9yZW5kZXJlci90YWJsZS1tb3JlLW1lbnUvdGFibGUtbW9yZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IERlZmF1bHRBcnJheUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdEFycmF5Rm9ybWF0dGVyO1xuaW1wb3J0IERlZmF1bHRWYWx1ZUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdFZhbHVlRm9ybWF0dGVyO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFTb3VyY2UkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9maWx0ZXJlZFJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkxpc3QgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgQ29sdW1uTGlzdE1vZGVsPFJvdz4oKSk7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbnMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxFZGl0U2Vzc2lvbjxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dzQmVpbmdFZGl0ZWQkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXA6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH07XG5cbiAgcmVhZG9ubHkgZWRpdGluZyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHJlYWRvbmx5IGZpcnN0RWRpdGFibGVDb2x1bW4kOiBWYWx1ZU1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIHByaXZhdGUgc2VsZWN0aW9uQ29sdW1uTW9kZWw6IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz47XG4gIHByaXZhdGUgcm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsaWNrTGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PChyb3c6IFJvdykgPT4gdm9pZD4oKTtcbiAgcmVhZG9ubHkgZmlyc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgcmVhZG9ubHkgbGFzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHByaXZhdGUgX2NyZWF0ZUZvcm06IChyb3c6IFJvdykgPT4gRGlydHlUcmFja2luZ0Zvcm08Um93PiA9IChyb3cpID0+IG5ldyBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KCk7XG4gIHJlYWRvbmx5IHRleHRTZWFyY2hQcmVkaWNhdGUkOiBWYWx1ZU1vZGVsPFRleHRTZWFyY2hQcmVkaWNhdGU8Um93Pj47XG4gIHByb3RlY3RlZCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnk7XG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VFbXB0eSQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZWxQcm94eSA9IHByb3hpZnkoU2VsZWN0aW9uTW9kZWw8Um93PikgYXMgUHJveGlmaWVkPFNlbGVjdGlvbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxSb3c+KFtdLCB7XG4gICAgICBpZGVudGlmaWVkV2l0aDogcm93ID0+IHRoaXMuaWRlbnRpdHlPZihyb3cpXG4gICAgfSk7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuaW5kZXhCeShcInJvd0lkXCIpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5yZWR1Y2UoY29sdW1ucyA9PiB7XG4gICAgICByZXR1cm4gKHJvdzogUm93LCByZWdleDogUmVnRXhwKSA9PiB7XG4gICAgICAgIHJldHVybiAoIXJlZ2V4IHx8ICEhY29sdW1ucy5maW5kKGMgPT4gcmVnZXgudGVzdChjLmdldFNlYXJjaFRleHRGb3Iocm93KSkpKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5maXJzdEVkaXRhYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuY29sdW1ucykuc2VsZWN0KGMgPT4gYy5oYXNFZGl0b3JQb3J0YWwoKSkuZmlyc3QoKTtcbiAgICB0aGlzLmZpcnN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLnZpc2libGVDb2x1bW5zJCkuZmlyc3QoKTtcbiAgICB0aGlzLmxhc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5sYXN0KCk7XG5cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QudmlzaWJsZUNvbHVtbnMkKS5zZWxlY3QoY29sdW1uID0+IGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSkuY291bnQoKS5lcXVhbHMoMCk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VFbXB0eSQgPSBjaGFpbih0aGlzLmRhdGFTb3VyY2UkKS5pc0VtcHR5KCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMkID0gdGhpcy5zZWxlY3Rpb25Nb2RlbFByb3h5LnNlbGVjdGVkSXRlbXMkO1xuICAgIHRoaXMubGVhZFNlbGVjdGlvbiQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkubGVhZFNlbGVjdGlvbiQ7XG4gICAgdGhpcy5oYXNTZWxlY3Rpb24kID0gY2hhaW4odGhpcy5zZWxlY3RlZEl0ZW1zJCkuaXNOb3RFbXB0eSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSQpIHtcbiAgICB0aGlzLl9kYXRhU291cmNlJC5zZXREZWxlZ2F0ZShkYXRhU291cmNlJCk7XG4gIH1cblxuICAvKipcbiAgICogVG9kbzogbWFrZSB0aGlzIGZvcmNlIG9uZSB0YWJsZSBhdCBhIHRpbWVcbiAgICogQHBhcmFtIGluamVjdG9yXG4gICAqIEBwYXJhbSBpZGVudGl0eU9mXG4gICAqIEBwYXJhbSByZXN0XG4gICAqL1xuICBpbml0aWFsaXNlKGluamVjdG9yOiBJbmplY3RvciwgaWRlbnRpdHlPZjogKGl0ZW06IFJvdykgPT4gYW55KSB7XG4gICAgLy8gbm90IHN1cmUgaWYgSSBzaG91bGQgZGVmaW5lIHRoZXNlIGF0IHRoZSBtb2R1bGUgbGV2ZWwgb3Igbm90Li4uXG4gICAgY29uc3QgY3VzdG9tSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtwcm92aWRlOiBEZWZhdWx0VmFsdWVGb3JtYXR0ZXJ9LFxuICAgICAgICB7cHJvdmlkZTogRGVmYXVsdEFycmF5Rm9ybWF0dGVyfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogaW5qZWN0b3JcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbnMudmFsdWUuZm9yRWFjaChjID0+IGMuaW5pdGlhbGlzZShjdXN0b21JbmplY3RvcikpO1xuICAgIHRoaXMuaWRlbnRpdHlPZiA9IGlkZW50aXR5T2Y7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzIHRoYXQgYXJlIHZpc2libGUgYWZ0ZXIgYW55IGZpbHRlcnMgYXJlIGFwcGxpZWQuICBJZiB0aGVyZSBhcmVcbiAgICogbm8gZmlsdGVycyB0aGVuIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgcm9vdCBkYXRhc2V0LlxuICAgKi9cbiAgZ2V0IGZpbHRlcmVkUm93cyQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZFJvd3MkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByb3dzIGFyZSBjdXJyZW50bHkgdmlzaWJsZSB0byB0aGUgdXNlci4gIEkuZS4gdGhlIGN1cnJlbnQgcGFnZSBpbiBhIHBhZ2VkIHRhYmxlIG9yIHRoZVxuICAgKiBleHBhbmRlZCByb3dzIGluIGEgdHJlZSB0YWJsZS5cbiAgICovXG4gIGdldCB2aXNpYmxlUm93cyQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgZ2V0IHJvd3NCZWluZ0VkaXRlZCQoKTogTGlzdE1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIHN0YXJ0RWRpdFNlc3Npb24ocm93OiBSb3cpOiBFZGl0U2Vzc2lvbjxSb3c+IHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuaWRlbnRpdHlPZihyb3cpO1xuICAgIGlmICh0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnF1ZXJ5KCkuaW5kZXhPZihyb3cpID4gLTEpIHtcbiAgICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgUm93IHdpdGggaWQ9JHtyb3dJZH0gYWxyZWFkeSBiZWluZyBlZGl0ZWRgKTtcbiAgICB9XG5cbiAgICAvLyB0b2RvOiBwYXNzIHRoZSBmYWN0b3JpZXMgdG8gdGhlIGVkaXQgc2Vzc2lvbiBzbyB3ZSBjYW4gbWFrZSB0aGUgd2hvbGUgbG90IHBsdWdnYWJsZT9cbiAgICBjb25zdCBmb3JtID0gdGhpcy5fY3JlYXRlRm9ybShyb3cpO1xuICAgIGNvbnN0IHNhdmVDb21tYW5kID0gdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkuY3JlYXRlKGZvcm0sIHtkaXNwb3NlZFdpdGg6IHRoaXN9KTtcbiAgICBjb25zdCBlZGl0U2Vzc2lvbiA9IG5ldyBFZGl0U2Vzc2lvbjxSb3c+KHJvd0lkLCByb3csIGZvcm0sIHNhdmVDb21tYW5kKTtcbiAgICBjb25zdCB7d2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgoZWRpdFNlc3Npb24pO1xuICAgIHdoZW4oZWRpdFNlc3Npb24ubGl2ZVJvd1ZhbHVlJCkuY2hhbmdlcygoZWRpdGVkVmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVwbGFjZU9yUHVzaChlZGl0ZWRWYWx1ZSk7XG4gICAgfSwge2luaXRpYWxWYWx1ZTogXCJ0cmlnZ2VyQ2hhbmdlVW5sZXNzTmlsXCJ9KTtcblxuICAgIHRoaXMuX2VkaXRvclNlc3Npb25zLnB1c2goZWRpdFNlc3Npb24pO1xuICAgIGVkaXRTZXNzaW9uLm9uRGlzcG9zZSgoKSA9PiB7XG4gICAgICB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJlbW92ZShlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkLnZhbHVlKTtcbiAgICAgIHRoaXMuX2VkaXRvclNlc3Npb25zLnJlbW92ZShlZGl0U2Vzc2lvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVkaXRTZXNzaW9uO1xuICB9XG5cbiAgZ2V0RWRpdFNlc3Npb25Gb3Iocm93OiBSb3cpOiBFZGl0U2Vzc2lvbjxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQuZ2V0KHRoaXMuaWRlbnRpdHlPZihyb3cpKTtcbiAgfVxuXG4gIGNhbmNlbEFsbEVkaXRvclNlc3Npb25zKCkge1xuICAgIHRoaXMuX2VkaXRvclNlc3Npb25zLnJ1bkluVHJhbnNhY3Rpb24oKGRyYWZ0KSA9PiB7XG4gICAgICB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJ1bkluVHJhbnNhY3Rpb24oKCkgPT4ge1xuICAgICAgICBkcmFmdC52YWx1ZS5mb3JFYWNoKHNlc3Npb24gPT4gc2Vzc2lvbi5kaXNwb3NlKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGdldCBjb2x1bW5zKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxpc3QuYWxsQ29sdW1ucyQ7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMkKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxpc3QudmlzaWJsZUNvbHVtbnMkO1xuICB9XG5cbiAgcGx1Y2s8UCBleHRlbmRzIFR5cGVzLlZhbHVlUHJvcGVydGllc09mPFJvdz4+KHByb3BlcnR5OiBQLCBvcHRpb25zPzogeyBjb2x1bW5JZDogc3RyaW5nIH0pOiBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4ge1xuICAgIGNvbnN0IGNvbHVtbklkID0gb3B0aW9ucz8uY29sdW1uSWQgfHwgcHJvcGVydHkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgcHJvcGVydHksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBwbHVja0xpc3Q8UCBleHRlbmRzIFR5cGVzLkFycmF5UHJvcGVydGllc09mPFJvdz4+KHByb3BlcnR5OiBQLCBvcHRpb25zPzogeyBjb2x1bW5JZDogc3RyaW5nIH0pOiBMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+IHtcbiAgICBjb25zdCBjb2x1bW5JZCA9IG9wdGlvbnM/LmNvbHVtbklkIHx8IHByb3BlcnR5LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+KGNvbHVtbklkLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIC8vIFRPRE86IGNsZWFuIHRoaXMgdXAgYW5kIGFzc2lnbiB0aGUgc2VsZWN0aW9uIG1vZGVsIG9uIHRlaCB0YWJsZSBkaXJlY3RseS5cbiAgLy8gICAgICAgdGFibGVNb2RlbC51c2VTZWxlY3Rpb25Nb2RlbChtb2RlbCkgYW5kIGhhdmUgdGhlIHNlbGVjaXRvbiBjb2x1bW4gYXV0b21hdGljYWxseVxuICAvLyAgICAgICBhZGRlZC4gIE5lZWQgdG8gbG9vayBhdCBob3cgd2UncmUgdXNpbmcgdGhlIHZpc2liaWxpdHkgY29udHJvbHMgYXMgd2VsbC5cbiAgLy8gICAgICAgU2hvdWxkIGFsc28gbGF6eSBjcmVhdGUgdGhlIHNlbGVjdGlvbiBjb2x1bW4gbW9kZWwgaWYgc29tZW9uZSBhY2Nlc3NlcyBpdC5cbiAgcHJvdGVjdGVkIF9hZGRTZWxlY3Rpb25Db2x1bW4oc2VsZWN0aW9uTW9kZWw/OiBTZWxlY3Rpb25Nb2RlbDxSb3c+LCB2aXNpYmxlPzogVmFsdWVNb2RlbDxib29sZWFuPiB8IGJvb2xlYW4pOiBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+IHtcbiAgICBhc3NlcnQuaXNOaWwodGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCk7XG4gICAgY29uc3QgY29sdW1uSWQgPSBcInNlbGVjdGlvbi1jb2x1bW5cIjtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsID0gbmV3IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwudXNlU2VsZWN0aW9uTW9kZWwoc2VsZWN0aW9uTW9kZWwpXG4gICAgdGhpcy5hZGRSb3dDbGFzcyhcImF1cC1yb3ctc2VsZWN0ZWRcIiwgcm93ID0+IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwuaXNTZWxlY3RlZChyb3cpKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db2x1bW5Nb2RlbCA9IHRoaXMuYWRkQ29sdW1uKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwsIHtiZWZvcmU6IG51bGx9KTsgLy8gZmlyc3QgY29sdW1uXG4gICAgaWYgKCFpc05pbCh2aXNpYmxlKSkge1xuICAgICAgc2VsZWN0aW9uQ29sdW1uTW9kZWwudmlzaWJsZVdoaWxlKHZpc2libGUgaW5zdGFuY2VvZiBWYWx1ZU1vZGVsID8gdmlzaWJsZSA6IFZhbHVlTW9kZWwuY29uc3RhbnQodmlzaWJsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0aW9uQ29sdW1uTW9kZWw7XG4gIH1cblxuXG4gIGFkZEVkaXRDb250cm9scyhzYXZlQ29tbWFuZEZhY3Rvcnk6IENvbW1hbmQuRmFjdG9yeTxEaXJ0eVRyYWNraW5nRm9ybTxSb3c+LCBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj4sIGZvcm1GYWN0b3J5PzogKHJvdzogUm93KSA9PiBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KTogRWRpdG9yQ29udHJvbENvbHVtbk1vZGVsPFJvdz4ge1xuICAgIHRoaXMuc2F2ZUNvbW1hbmRGYWN0b3J5ID0gc2F2ZUNvbW1hbmRGYWN0b3J5O1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvcm1GYWN0b3J5KSkge1xuICAgICAgdGhpcy5fY3JlYXRlRm9ybSA9IGZvcm1GYWN0b3J5O1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5JZCA9IFwiZWRpdENvbnRyb2xzXCI7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgc2F2ZUNvbW1hbmRGYWN0b3J5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgYWRkQ3VzdG9tQ29sdW1uPFY+KGNvbHVtbklkOiBzdHJpbmcsIGRhdGFBY2Nlc3NvcjogKHJvdzogUm93KSA9PiBWKTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBWPihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIGRhdGFBY2Nlc3NvcikpO1xuICB9XG5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvbkluaXQ/OiBPbkNvbXBvbmVudEluaXQ8Qz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PlxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9wdGlvbnM/OiBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgQz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PlxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uQ29tcG9uZW50SW5pdE9yT3B0aW9ucz86IE9uQ29tcG9uZW50SW5pdDxDPiB8IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgcm93ID0+IHJvdykpLmNlbGxSZW5kZXJlcihjb21wb25lbnQsIG9uQ29tcG9uZW50SW5pdE9yT3B0aW9ucyk7XG4gIH1cblxuICBhZGRNb3JlTWVudShjb21wb25lbnRDbGFzczogQ29uc3RydWN0YWJsZTxUYWJsZU1vcmVNZW51UG9wdXBDb21wb25lbnQ8Um93Pj4pIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDb2x1bW4oXCJtb3JlLW1lbnVcIiwgVGFibGVNb3JlTWVudUNvbXBvbmVudCwgKGNvbXBvbmVudDpUYWJsZU1vcmVNZW51Q29tcG9uZW50PFJvdz4pID0+IHtcbiAgICAgIGNvbXBvbmVudC5jb25maWd1cmVQb3B1cENvbXBvbmVudFR5cGUoY29tcG9uZW50Q2xhc3MpO1xuICAgIH0pLmNvbHVtblRleHRQcm9wZXJ0aWVzKHtcbiAgICAgIGhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYWRkVGVtcGxhdGVDb2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZyk6IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRSb3dDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcHJlZGljYXRlOiAocm93OiBSb3cpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJvd0NsYXNzTmFtZVByZWRpY2F0ZXMucHVzaChuZXcgUm93Q2xhc3M8Um93PihjbGFzc05hbWUsIHByZWRpY2F0ZSkpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3Nlcyhyb3c6IFJvdyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkubWF0Y2hlcyhyb3cpKSB7XG4gICAgICAgIGNsYXNzTmFtZXMucHVzaChpLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXM7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhZGRDb2x1bW48QyBleHRlbmRzIENvbHVtbk1vZGVsPFJvdz4+KGNvbHVtbjogQywgcG9zaXRpb24/OiBDb2x1bW5MaXN0TW9kZWwuUG9zaXRpb24pOiBDIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5hZGRDb2x1bW4oY29sdW1uLCBwb3NpdGlvbik7XG4gIH1cblxuICBjb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5UZXh0UHJvcGVydGllczogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogQ29sdW1uVGV4dFByb3BlcnRpZXMgfSkge1xuICAgIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID0gY29sdW1uVGV4dFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZDogc3RyaW5nKTogQ29sdW1uVGV4dFByb3BlcnRpZXMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cCA/IHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwW2NvbHVtbklkXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpICYmIGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkgJiYgIXRoaXMucm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkLnZhbHVlO1xuICB9XG5cbiAgaGFzVXNlclNlbGVjdGlvbk1vZGVsVGhhdElzRW5hYmxlZCgpIHtcbiAgICBjb25zdCB1c2VyU2VsZWN0aW9uTW9kZWwgPSB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbC5nZXRQcm94eVRhcmdldCgpO1xuICAgIHJldHVybiAhIXVzZXJTZWxlY3Rpb25Nb2RlbCAmJiB1c2VyU2VsZWN0aW9uTW9kZWwuZW5hYmxlZCQudmFsdWU7XG4gIH1cblxuICBnZXRTZWxlY3Rpb25Nb2RlbCgpOiBTZWxlY3Rpb25Nb2RlbDxSb3c+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbD8uc2VsZWN0aW9uTW9kZWw7XG4gIH1cblxuICBpc0hvdmVyRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSB8fCB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmxpc3RlbmVyQ291bnQgPiAwO1xuICB9XG5cbiAgaXNDdXJzb3JFbmFibGVkKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW4pIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3RSb3cocm93KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2tlZChjYWxsYmFjazogKHJvdzogUm93KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuYWRkKGNhbGxiYWNrKTtcbiAgfVxuXG4gIF9ub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Piwgcm93OiBSb3cpIHtcbiAgICBpZiAodGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uTW9kZWwpKSB7XG4gICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyh7XG4gICAgICAvLyAgIGhhc0VuYWJsZWRVc2VyU2VsZWN0aW9uTW9kZWw6IHRoaXMuaGFzVXNlclNlbGVjdGlvbk1vZGVsVGhhdElzRW5hYmxlZCgpLFxuICAgICAgLy8gICBhbGxTZWxlY3Rpb25EaXNhYmxlZDogdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWUsXG4gICAgICAvLyAgIHJvd1NlbGVjdGlvbkVuYWJsZWQ6IHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCksXG4gICAgICAvLyAgIHJvd1NlbGVjdGlvbkVuYWJsZWRGb3JDb2x1bW46IGNvbHVtbk1vZGVsLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpXG4gICAgICAvLyB9KVxuICAgIH1cblxuICAgIHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMuZmlyZShsID0+IGwocm93KSk7XG4gIH1cblxufVxuUHJveHlSZWdpc3RyeS5yZWdpc3Rlck9uZVRpbWVCaW5kaW5nKEFic3RyYWN0VGFibGVNb2RlbClcbiJdfQ==
@@ -1,44 +1,104 @@
1
- import { AbstractComputedListModel, Dsl, lang, MutableListModel } from '@coolon/pectin';
2
- import { isNil } from 'lodash';
3
- export class ColumnListModel extends AbstractComputedListModel {
4
- _allColumns$ = new MutableListModel();
5
- columnsById$;
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Dsl, GarbageCollector, lang, MutableListModel, Trace, WatchList } from '@coolon/pectin';
3
+ import { generateKeyBetween } from "fractional-indexing";
4
+ class ColumnRef {
5
+ column;
6
+ position;
7
+ constructor(column, position) {
8
+ this.column = column;
9
+ this.position = position;
10
+ }
11
+ }
12
+ export class ColumnListModel extends GarbageCollector {
13
+ _columnRefs$ = new MutableListModel();
14
+ orderedColumnRefs$;
15
+ _columnsById$;
16
+ allColumns$;
17
+ columnVisibilities$ = new WatchList();
18
+ visibleColumns$;
6
19
  constructor() {
7
20
  super();
8
21
  const { chain } = Dsl.disposeWith(this);
9
- this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
10
- }
11
- get allColumns$() {
12
- return this._allColumns$.readonly$;
22
+ this.orderedColumnRefs$ = chain(this._columnRefs$).orderBy("position", "asc");
23
+ this.allColumns$ = this.orderedColumnRefs$.pluck("column");
24
+ this._columnsById$ = chain(this.allColumns$).indexBy('columnId');
25
+ this.visibleColumns$ = chain(this.allColumns$).select(it => it.visible$.value, {
26
+ dependsOn: this.columnVisibilities$
27
+ });
13
28
  }
29
+ // get allColumns$(): ListModel<ColumnModel<Row>> {
30
+ // return this._allColumns$.readonly$;
31
+ // }
14
32
  getColumn(id) {
15
- return this.columnsById$.get(id);
33
+ return this._columnsById$.get(id);
16
34
  }
17
35
  hasColumn(id) {
18
- return !!this.columnsById$.get(id);
36
+ return !!this._columnsById$.get(id);
19
37
  }
20
38
  hasMatchingColumn(row, regex) {
21
39
  // only search the visible columns
22
- return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
40
+ return !!this.visibleColumns$.value.find(c => regex.test(c.getSearchTextFor(row)));
23
41
  }
24
- addColumn(column, index) {
42
+ addColumn(column, position) {
25
43
  if (this.hasColumn(column.columnId)) {
26
44
  lang.illegalState(`Column with id=${column.columnId} already exists`);
27
45
  }
28
46
  this.registerDisposable(column);
29
- this.runInTransaction(() => {
30
- if (!isNil(index)) {
31
- this._allColumns$.insert(index, column);
32
- }
33
- else {
34
- this._allColumns$.push(column);
47
+ this._columnRefs$.push(new ColumnRef(column, this.computePosition(position)));
48
+ this.columnVisibilities$.add(column.visible$);
49
+ return column;
50
+ }
51
+ computePosition(position) {
52
+ const q = this.orderedColumnRefs$.query();
53
+ return ColumnListModel.processPosition(position, {
54
+ before(col) {
55
+ const beforeIndex = q.findIndex(ref => ref.column === col);
56
+ const beforeCol = q.value[beforeIndex];
57
+ const afterCol = beforeIndex - 1 > 0 ? q.value[beforeIndex - 1] : undefined;
58
+ console.log({ afterCol, beforeCol });
59
+ return generateKeyBetween(afterCol?.position, beforeCol.position);
60
+ },
61
+ after(col) {
62
+ const afterIndex = q.findIndex(ref => ref.column === col);
63
+ const afterCol = q.value[afterIndex];
64
+ const beforeCol = afterIndex + 1 < q.length ? q.value[afterIndex + 1] : undefined;
65
+ console.log({ afterCol, beforeCol });
66
+ return generateKeyBetween(afterCol.position, beforeCol?.position);
67
+ },
68
+ first() {
69
+ return generateKeyBetween(null, q.first()?.position);
70
+ },
71
+ last() {
72
+ // add it to the end of the list
73
+ return generateKeyBetween(q.last()?.position, null);
35
74
  }
36
- this.registerDisposable(this.trackSource(column.visible$));
37
75
  });
38
- return column;
39
76
  }
40
77
  doComputeValue() {
41
- return this._allColumns$.value.filter(c => c.visible$.value);
78
+ return this.allColumns$.value.filter(c => c.visible$.value);
42
79
  }
43
80
  }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxpc3QtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQTRCLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEgsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUc3QixNQUFNLE9BQU8sZUFBcUIsU0FBUSx5QkFBb0Q7SUFFM0UsWUFBWSxHQUFHLElBQUksZ0JBQWdCLEVBQW9CLENBQUM7SUFDeEQsWUFBWSxDQUEwQztJQUV2RTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDbEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVEsRUFBRSxLQUFhO1FBQ3ZDLGtDQUFrQztRQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUyxDQUE2QixNQUFTLEVBQUUsS0FBYztRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLE1BQU0sQ0FBQyxRQUFRLGlCQUFpQixDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb21wdXRlZExpc3RNb2RlbCwgRHNsLCBsYW5nLCBMaXN0TW9kZWwsIE1hcE1vZGVsQ2hhaW4sIE11dGFibGVMaXN0TW9kZWx9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcblxuaW1wb3J0IHtpc05pbH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Q29sdW1uTW9kZWx9IGZyb20gJy4vY29sdW1uLW1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkxpc3RNb2RlbDxSb3c+IGV4dGVuZHMgQWJzdHJhY3RDb21wdXRlZExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+LCBib29sZWFuPiB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsQ29sdW1ucyQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbnNCeUlkJDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuY29sdW1uc0J5SWQkID0gY2hhaW4odGhpcy5fYWxsQ29sdW1ucyQpLmluZGV4QnkoJ2NvbHVtbklkJyk7XG4gIH1cblxuICBnZXQgYWxsQ29sdW1ucyQoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fYWxsQ29sdW1ucyQucmVhZG9ubHkkO1xuICB9XG5cbiAgZ2V0Q29sdW1uKGlkOiBzdHJpbmcpOiBDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zQnlJZCQuZ2V0KGlkKTtcbiAgfVxuXG4gIGhhc0NvbHVtbihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb2x1bW5zQnlJZCQuZ2V0KGlkKTtcbiAgfVxuXG4gIGhhc01hdGNoaW5nQ29sdW1uKHJvdzogUm93LCByZWdleDogUmVnRXhwKTogYm9vbGVhbiB7XG4gICAgLy8gb25seSBzZWFyY2ggdGhlIHZpc2libGUgY29sdW1uc1xuICAgIHJldHVybiAhIXRoaXMudmFsdWUuZmluZChjID0+IHJlZ2V4LnRlc3QoYy5nZXRTZWFyY2hUZXh0Rm9yKHJvdykpKTtcbiAgfVxuXG4gIGFkZENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uTW9kZWw8Um93Pj4oY29sdW1uOiBDLCBpbmRleD86IG51bWJlcik6IEMge1xuICAgIGlmICh0aGlzLmhhc0NvbHVtbihjb2x1bW4uY29sdW1uSWQpKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShgQ29sdW1uIHdpdGggaWQ9JHtjb2x1bW4uY29sdW1uSWR9IGFscmVhZHkgZXhpc3RzYCk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKGNvbHVtbik7XG4gICAgdGhpcy5ydW5JblRyYW5zYWN0aW9uKCgpID0+IHtcbiAgICAgIGlmICghaXNOaWwoaW5kZXgpKSB7XG4gICAgICAgIHRoaXMuX2FsbENvbHVtbnMkLmluc2VydChpbmRleCwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2FsbENvbHVtbnMkLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKHRoaXMudHJhY2tTb3VyY2UoY29sdW1uLnZpc2libGUkKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGRvQ29tcHV0ZVZhbHVlKCk6IENvbHVtbk1vZGVsPFJvdz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbENvbHVtbnMkLnZhbHVlLmZpbHRlcihjID0+IGMudmlzaWJsZSQudmFsdWUpO1xuICB9XG59XG4iXX0=
81
+ __decorate([
82
+ Trace(),
83
+ __metadata("design:type", Function),
84
+ __metadata("design:paramtypes", [Object]),
85
+ __metadata("design:returntype", String)
86
+ ], ColumnListModel.prototype, "computePosition", null);
87
+ (function (ColumnListModel) {
88
+ function processPosition(position, callback) {
89
+ if (position) {
90
+ const keys = Object.keys(position);
91
+ if (keys.includes("before")) {
92
+ return position["before"] ? callback.before(position["before"]) : callback.first();
93
+ }
94
+ else {
95
+ return position["after"] ? callback.before(position["after"]) : callback.last();
96
+ }
97
+ }
98
+ else {
99
+ return callback.last();
100
+ }
101
+ }
102
+ ColumnListModel.processPosition = processPosition;
103
+ })(ColumnListModel || (ColumnListModel = {}));
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxpc3QtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxHQUFHLEVBQUUsZ0JBQWdCLEVBQ3JCLElBQUksRUFJSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUFFLFNBQVMsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUd2RCxNQUFNLFNBQVM7SUFDUTtJQUFtQztJQUF4RCxZQUFxQixNQUF3QixFQUFXLFFBQWdCO1FBQW5ELFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUN4RSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sZUFBcUIsU0FBUSxnQkFBZ0I7SUFFdkMsWUFBWSxHQUFHLElBQUksZ0JBQWdCLEVBQWtCLENBQUM7SUFDdEQsa0JBQWtCLENBQWlDO0lBQ25ELGFBQWEsQ0FBMEM7SUFDL0QsV0FBVyxDQUE4QjtJQUN6QyxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsRUFBVyxDQUFBO0lBQzlDLGVBQWUsQ0FBOEI7SUFFdEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFFBQVEs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TyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTthQUNuRjtpQkFBTTtnQkFDTCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO2FBQ2hGO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQWhCZSwrQkFBZSxrQkFnQjlCLENBQUE7QUFHSCxDQUFDLEVBeEJnQixlQUFlLEtBQWYsZUFBZSxRQXdCL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnN0cmFjdENvbXB1dGVkTGlzdE1vZGVsLFxuICBEc2wsIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTGlzdE1vZGVsQ2hhaW4sXG4gIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIFRyYWNlLCBXYXRjaExpc3Rcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtnZW5lcmF0ZUtleUJldHdlZW59IGZyb20gXCJmcmFjdGlvbmFsLWluZGV4aW5nXCI7XG5pbXBvcnQge0NvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi1tb2RlbCc7XG5cbmNsYXNzIENvbHVtblJlZjxST1c+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY29sdW1uOiBDb2x1bW5Nb2RlbDxST1c+LCByZWFkb25seSBwb3NpdGlvbjogc3RyaW5nKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbkxpc3RNb2RlbDxSb3c+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uUmVmcyQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxDb2x1bW5SZWY8Um93Pj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmRlcmVkQ29sdW1uUmVmcyQ6IExpc3RNb2RlbENoYWluPENvbHVtblJlZjxSb3c+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc0J5SWQkOiBNYXBNb2RlbENoYWluPHN0cmluZywgQ29sdW1uTW9kZWw8Um93Pj47XG4gIHJlYWRvbmx5IGFsbENvbHVtbnMkOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj47XG4gIHJlYWRvbmx5IGNvbHVtblZpc2liaWxpdGllcyQgPSBuZXcgV2F0Y2hMaXN0PGJvb2xlYW4+KClcbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnMkOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMub3JkZXJlZENvbHVtblJlZnMkID0gY2hhaW4odGhpcy5fY29sdW1uUmVmcyQpLm9yZGVyQnkoXCJwb3NpdGlvblwiLCBcImFzY1wiKTtcbiAgICB0aGlzLmFsbENvbHVtbnMkID0gdGhpcy5vcmRlcmVkQ29sdW1uUmVmcyQucGx1Y2soXCJjb2x1bW5cIik7XG5cbiAgICB0aGlzLl9jb2x1bW5zQnlJZCQgPSBjaGFpbih0aGlzLmFsbENvbHVtbnMkKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMkID0gY2hhaW4odGhpcy5hbGxDb2x1bW5zJCkuc2VsZWN0KGl0ID0+IGl0LnZpc2libGUkLnZhbHVlLCB7XG4gICAgICBkZXBlbmRzT246IHRoaXMuY29sdW1uVmlzaWJpbGl0aWVzJFxuICAgIH0pXG4gIH1cblxuICAvLyBnZXQgYWxsQ29sdW1ucyQoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgLy8gICByZXR1cm4gdGhpcy5fYWxsQ29sdW1ucyQucmVhZG9ubHkkO1xuICAvLyB9XG5cbiAgZ2V0Q29sdW1uKGlkOiBzdHJpbmcpOiBDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uc0J5SWQkLmdldChpZCk7XG4gIH1cblxuICBoYXNDb2x1bW4oaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbHVtbnNCeUlkJC5nZXQoaWQpO1xuICB9XG5cbiAgaGFzTWF0Y2hpbmdDb2x1bW4ocm93OiBSb3csIHJlZ2V4OiBSZWdFeHApOiBib29sZWFuIHtcbiAgICAvLyBvbmx5IHNlYXJjaCB0aGUgdmlzaWJsZSBjb2x1bW5zXG4gICAgcmV0dXJuICEhdGhpcy52aXNpYmxlQ29sdW1ucyQudmFsdWUuZmluZChjID0+IHJlZ2V4LnRlc3QoYy5nZXRTZWFyY2hUZXh0Rm9yKHJvdykpKTtcbiAgfVxuXG4gIGFkZENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uTW9kZWw8Um93Pj4oY29sdW1uOiBDLCBwb3NpdGlvbj86IENvbHVtbkxpc3RNb2RlbC5Qb3NpdGlvbik6IEMge1xuICAgIGlmICh0aGlzLmhhc0NvbHVtbihjb2x1bW4uY29sdW1uSWQpKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShgQ29sdW1uIHdpdGggaWQ9JHtjb2x1bW4uY29sdW1uSWR9IGFscmVhZHkgZXhpc3RzYCk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKGNvbHVtbik7XG4gICAgdGhpcy5fY29sdW1uUmVmcyQucHVzaChuZXcgQ29sdW1uUmVmPFJvdz4oY29sdW1uLCB0aGlzLmNvbXB1dGVQb3NpdGlvbihwb3NpdGlvbikpKTtcbiAgICB0aGlzLmNvbHVtblZpc2liaWxpdGllcyQuYWRkKGNvbHVtbi52aXNpYmxlJCk7XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIEBUcmFjZSgpXG4gIGNvbXB1dGVQb3NpdGlvbihwb3NpdGlvbj86IENvbHVtbkxpc3RNb2RlbC5Qb3NpdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgcSA9IHRoaXMub3JkZXJlZENvbHVtblJlZnMkLnF1ZXJ5KCk7XG4gICAgcmV0dXJuIENvbHVtbkxpc3RNb2RlbC5wcm9jZXNzUG9zaXRpb24ocG9zaXRpb24sIHtcbiAgICAgIGJlZm9yZShjb2w6IENvbHVtbk1vZGVsPGFueT4pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBiZWZvcmVJbmRleCA9IHEuZmluZEluZGV4KHJlZiA9PiByZWYuY29sdW1uID09PSBjb2wpXG4gICAgICAgIGNvbnN0IGJlZm9yZUNvbCA9IHEudmFsdWVbYmVmb3JlSW5kZXhdO1xuICAgICAgICBjb25zdCBhZnRlckNvbCA9IGJlZm9yZUluZGV4IC0gMSA+IDAgPyBxLnZhbHVlW2JlZm9yZUluZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKHthZnRlckNvbCwgYmVmb3JlQ29sfSlcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlS2V5QmV0d2VlbihcbiAgICAgICAgICBhZnRlckNvbD8ucG9zaXRpb24sXG4gICAgICAgICAgYmVmb3JlQ29sLnBvc2l0aW9uXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYWZ0ZXIoY29sOiBDb2x1bW5Nb2RlbDxhbnk+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJJbmRleCA9IHEuZmluZEluZGV4KHJlZiA9PiByZWYuY29sdW1uID09PSBjb2wpXG4gICAgICAgIGNvbnN0IGFmdGVyQ29sID0gcS52YWx1ZVthZnRlckluZGV4XTtcbiAgICAgICAgY29uc3QgYmVmb3JlQ29sID0gYWZ0ZXJJbmRleCArIDEgPCBxLmxlbmd0aCA/IHEudmFsdWVbYWZ0ZXJJbmRleCsxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc29sZS5sb2coe2FmdGVyQ29sLCBiZWZvcmVDb2x9KVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVLZXlCZXR3ZWVuKFxuICAgICAgICAgIGFmdGVyQ29sLnBvc2l0aW9uLFxuICAgICAgICAgIGJlZm9yZUNvbD8ucG9zaXRpb25cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBmaXJzdCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZ2VuZXJhdGVLZXlCZXR3ZWVuKCBudWxsLCBxLmZpcnN0KCk/LnBvc2l0aW9uKTtcbiAgICAgIH0sXG4gICAgICBsYXN0KCkge1xuICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVLZXlCZXR3ZWVuKHEubGFzdCgpPy5wb3NpdGlvbiwgbnVsbCk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cbiAgZG9Db21wdXRlVmFsdWUoKTogQ29sdW1uTW9kZWw8Um93PltdIHtcbiAgICByZXR1cm4gdGhpcy5hbGxDb2x1bW5zJC52YWx1ZS5maWx0ZXIoYyA9PiBjLnZpc2libGUkLnZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbHVtbkxpc3RNb2RlbCB7XG4gIHR5cGUgQmVmb3JlID0geyBiZWZvcmU6IENvbHVtbk1vZGVsPGFueT4gfCBudWxsIH07IC8vIGJlZm9yZTpudWxsID09PSBmaXJzdFxuICB0eXBlIEFmdGVyID0geyBhZnRlcjogQ29sdW1uTW9kZWw8YW55PiB8IG51bGwgfTsgLy8gYWZ0ZXI6bnVsbCA9PT0gbGFzdFxuICBleHBvcnQgdHlwZSBQb3NpdGlvbiA9IEJlZm9yZSB8IEFmdGVyO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUG9zaXRpb24ocG9zaXRpb246IENvbHVtbkxpc3RNb2RlbC5Qb3NpdGlvbiB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IHtcbiAgICBiZWZvcmUoY29sOiBDb2x1bW5Nb2RlbDxhbnk+IHwgbnVsbCk6IHN0cmluZyxcbiAgICBhZnRlcihjb2w6IENvbHVtbk1vZGVsPGFueT4gfCBudWxsKTogc3RyaW5nLFxuICAgIGZpcnN0KCk6IHN0cmluZ1xuICAgIGxhc3QoKTogc3RyaW5nXG4gIH0pOiBzdHJpbmcge1xuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKTtcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKFwiYmVmb3JlXCIpKSB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbltcImJlZm9yZVwiXSA/IGNhbGxiYWNrLmJlZm9yZShwb3NpdGlvbltcImJlZm9yZVwiXSkgOiBjYWxsYmFjay5maXJzdCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25bXCJhZnRlclwiXSA/IGNhbGxiYWNrLmJlZm9yZShwb3NpdGlvbltcImFmdGVyXCJdKSA6IGNhbGxiYWNrLmxhc3QoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2subGFzdCgpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==
@@ -39,7 +39,7 @@ import { MatTableModule } from '@angular/material/table';
39
39
  import * as i4$1 from '@angular/material/tooltip';
40
40
  import { MatTooltipModule } from '@angular/material/tooltip';
41
41
  import * as i1$3 from '@coolon/pectin';
42
- import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, proxify, ValueModel, Proxify, StoreInValueModel, Command, MutableListModel, StoreInListModel, Disposable, DelegatingListModel, MutableValueModel, DelegateToValueModel, FocusManager, EventListenerList, Guard, DelegatingFormListModel, Binding, DebugContext, DelegateToListModel, DelegatingFormValueModel, ListModel, Functions, PageController, SelectionModel, CanProxy, MultipleSelectionModel, AbstractComputedListModel, DirtyTrackingForm, ProxyRegistry, DelegatingCommand, PagedListModel, ComputedListModel, Deferred, ReducingValueModel, AndValueModel } from '@coolon/pectin';
42
+ import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, proxify, ValueModel, Proxify, StoreInValueModel, Command, MutableListModel, StoreInListModel, Disposable, DelegatingListModel, MutableValueModel, DelegateToValueModel, FocusManager, EventListenerList, Guard, DelegatingFormListModel, Binding, DebugContext, DelegateToListModel, DelegatingFormValueModel, ListModel, Functions, PageController, SelectionModel, CanProxy, MultipleSelectionModel, WatchList, Trace, DirtyTrackingForm, ProxyRegistry, DelegatingCommand, PagedListModel, ComputedListModel, Deferred, ReducingValueModel, AndValueModel } from '@coolon/pectin';
43
43
  import { __decorate, __param, __metadata } from 'tslib';
44
44
  import * as i1 from '@angular/platform-browser';
45
45
  import escapeStringRegexp from 'escape-string-regexp';
@@ -52,6 +52,7 @@ import * as i5 from '@angular/material/core';
52
52
  import { produce } from 'immer';
53
53
  import ResizeObserver from 'resize-observer-polyfill';
54
54
  import { isFunction as isFunction$1, isNil as isNil$1, isEmpty as isEmpty$1, last, findLast } from 'lodash-es';
55
+ import { generateKeyBetween } from 'fractional-indexing';
55
56
  import * as i5$1 from '@angular/cdk/a11y';
56
57
  import { A11yModule } from '@angular/cdk/a11y';
57
58
  import * as i7$1 from '@angular/flex-layout';
@@ -3484,47 +3485,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
3484
3485
  type: Directive
3485
3486
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
3486
3487
 
3487
- class ColumnListModel extends AbstractComputedListModel {
3488
- _allColumns$ = new MutableListModel();
3489
- columnsById$;
3488
+ class ColumnRef {
3489
+ column;
3490
+ position;
3491
+ constructor(column, position) {
3492
+ this.column = column;
3493
+ this.position = position;
3494
+ }
3495
+ }
3496
+ class ColumnListModel extends GarbageCollector {
3497
+ _columnRefs$ = new MutableListModel();
3498
+ orderedColumnRefs$;
3499
+ _columnsById$;
3500
+ allColumns$;
3501
+ columnVisibilities$ = new WatchList();
3502
+ visibleColumns$;
3490
3503
  constructor() {
3491
3504
  super();
3492
3505
  const { chain } = Dsl.disposeWith(this);
3493
- this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3494
- }
3495
- get allColumns$() {
3496
- return this._allColumns$.readonly$;
3506
+ this.orderedColumnRefs$ = chain(this._columnRefs$).orderBy("position", "asc");
3507
+ this.allColumns$ = this.orderedColumnRefs$.pluck("column");
3508
+ this._columnsById$ = chain(this.allColumns$).indexBy('columnId');
3509
+ this.visibleColumns$ = chain(this.allColumns$).select(it => it.visible$.value, {
3510
+ dependsOn: this.columnVisibilities$
3511
+ });
3497
3512
  }
3513
+ // get allColumns$(): ListModel<ColumnModel<Row>> {
3514
+ // return this._allColumns$.readonly$;
3515
+ // }
3498
3516
  getColumn(id) {
3499
- return this.columnsById$.get(id);
3517
+ return this._columnsById$.get(id);
3500
3518
  }
3501
3519
  hasColumn(id) {
3502
- return !!this.columnsById$.get(id);
3520
+ return !!this._columnsById$.get(id);
3503
3521
  }
3504
3522
  hasMatchingColumn(row, regex) {
3505
3523
  // only search the visible columns
3506
- return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
3524
+ return !!this.visibleColumns$.value.find(c => regex.test(c.getSearchTextFor(row)));
3507
3525
  }
3508
- addColumn(column, index) {
3526
+ addColumn(column, position) {
3509
3527
  if (this.hasColumn(column.columnId)) {
3510
3528
  lang.illegalState(`Column with id=${column.columnId} already exists`);
3511
3529
  }
3512
3530
  this.registerDisposable(column);
3513
- this.runInTransaction(() => {
3514
- if (!isNil(index)) {
3515
- this._allColumns$.insert(index, column);
3516
- }
3517
- else {
3518
- this._allColumns$.push(column);
3531
+ this._columnRefs$.push(new ColumnRef(column, this.computePosition(position)));
3532
+ this.columnVisibilities$.add(column.visible$);
3533
+ return column;
3534
+ }
3535
+ computePosition(position) {
3536
+ const q = this.orderedColumnRefs$.query();
3537
+ return ColumnListModel.processPosition(position, {
3538
+ before(col) {
3539
+ const beforeIndex = q.findIndex(ref => ref.column === col);
3540
+ const beforeCol = q.value[beforeIndex];
3541
+ const afterCol = beforeIndex - 1 > 0 ? q.value[beforeIndex - 1] : undefined;
3542
+ console.log({ afterCol, beforeCol });
3543
+ return generateKeyBetween(afterCol?.position, beforeCol.position);
3544
+ },
3545
+ after(col) {
3546
+ const afterIndex = q.findIndex(ref => ref.column === col);
3547
+ const afterCol = q.value[afterIndex];
3548
+ const beforeCol = afterIndex + 1 < q.length ? q.value[afterIndex + 1] : undefined;
3549
+ console.log({ afterCol, beforeCol });
3550
+ return generateKeyBetween(afterCol.position, beforeCol?.position);
3551
+ },
3552
+ first() {
3553
+ return generateKeyBetween(null, q.first()?.position);
3554
+ },
3555
+ last() {
3556
+ // add it to the end of the list
3557
+ return generateKeyBetween(q.last()?.position, null);
3519
3558
  }
3520
- this.registerDisposable(this.trackSource(column.visible$));
3521
3559
  });
3522
- return column;
3523
3560
  }
3524
3561
  doComputeValue() {
3525
- return this._allColumns$.value.filter(c => c.visible$.value);
3562
+ return this.allColumns$.value.filter(c => c.visible$.value);
3526
3563
  }
3527
3564
  }
3565
+ __decorate([
3566
+ Trace(),
3567
+ __metadata("design:type", Function),
3568
+ __metadata("design:paramtypes", [Object]),
3569
+ __metadata("design:returntype", String)
3570
+ ], ColumnListModel.prototype, "computePosition", null);
3571
+ (function (ColumnListModel) {
3572
+ function processPosition(position, callback) {
3573
+ if (position) {
3574
+ const keys = Object.keys(position);
3575
+ if (keys.includes("before")) {
3576
+ return position["before"] ? callback.before(position["before"]) : callback.first();
3577
+ }
3578
+ else {
3579
+ return position["after"] ? callback.before(position["after"]) : callback.last();
3580
+ }
3581
+ }
3582
+ else {
3583
+ return callback.last();
3584
+ }
3585
+ }
3586
+ ColumnListModel.processPosition = processPosition;
3587
+ })(ColumnListModel || (ColumnListModel = {}));
3528
3588
 
3529
3589
  const TEXT_SEARCH_FORMATTER_KEY = `aup:table:textSearchFormatter`;
3530
3590
  const Keys = Enum("useFunction", "useInstance", "useClass");
@@ -3883,15 +3943,15 @@ class AbstractTableModel extends GarbageCollector {
3883
3943
  });
3884
3944
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
3885
3945
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
3886
- this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
3946
+ this.textSearchPredicate$ = chain(this.visibleColumns$).reduce(columns => {
3887
3947
  return (row, regex) => {
3888
3948
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
3889
3949
  };
3890
3950
  });
3891
3951
  this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
3892
- this.firstVisibleColumn$ = chain(this._columnList).first();
3893
- this.lastVisibleColumn$ = chain(this._columnList).last();
3894
- this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
3952
+ this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
3953
+ this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
3954
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList.visibleColumns$).select(column => column.isRowSelectionEnabled()).count().equals(0);
3895
3955
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
3896
3956
  this.selectedItems$ = this.selectionModelProxy.selectedItems$;
3897
3957
  this.leadSelection$ = this.selectionModelProxy.leadSelection$;
@@ -3971,8 +4031,8 @@ class AbstractTableModel extends GarbageCollector {
3971
4031
  get columns() {
3972
4032
  return this._columnList.allColumns$;
3973
4033
  }
3974
- get visibleColumns() {
3975
- return this._columnList.readonly$;
4034
+ get visibleColumns$() {
4035
+ return this._columnList.visibleColumns$;
3976
4036
  }
3977
4037
  pluck(property, options) {
3978
4038
  const columnId = options?.columnId || property.toString();
@@ -3992,7 +4052,7 @@ class AbstractTableModel extends GarbageCollector {
3992
4052
  this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
3993
4053
  this.selectionColumnModel.useSelectionModel(selectionModel);
3994
4054
  this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
3995
- const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
4055
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, { before: null }); // first column
3996
4056
  if (!isNil$1(visible)) {
3997
4057
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
3998
4058
  }
@@ -4036,8 +4096,8 @@ class AbstractTableModel extends GarbageCollector {
4036
4096
  });
4037
4097
  return classNames;
4038
4098
  }
4039
- addColumn(column, index) {
4040
- return this._columnList.addColumn(column, index);
4099
+ addColumn(column, position) {
4100
+ return this._columnList.addColumn(column, position);
4041
4101
  }
4042
4102
  columnTextProperties(columnTextProperties) {
4043
4103
  this._columnTextPropertiesLookup = columnTextProperties;