@eo-sdk/client 11.1.0-rc.2 → 11.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -60,10 +60,12 @@ export class TreeComponent {
60
60
  switch (event.key) {
61
61
  case 'ArrowUp': {
62
62
  this.focusNode(false);
63
+ this._ensureVisible();
63
64
  break;
64
65
  }
65
66
  case 'ArrowDown': {
66
67
  this.focusNode(true);
68
+ this._ensureVisible();
67
69
  break;
68
70
  }
69
71
  case 'ArrowRight': {
@@ -198,20 +200,29 @@ export class TreeComponent {
198
200
  this.visibleNodes.forEach(n => (n.focused = false));
199
201
  }
200
202
  if (node) {
201
- const nodes = document.querySelectorAll('eo-tree-node');
202
- nodes.forEach(n => {
203
- if (n.querySelector('.label span').textContent === node.name) {
204
- n.scrollIntoView({
205
- behavior: "smooth",
206
- block: "start",
207
- inline: "nearest"
208
- });
209
- }
210
- });
211
203
  node.focused = true;
212
204
  this.focusedNode = node;
213
205
  }
214
206
  }
207
+ _ensureVisible() {
208
+ setTimeout(() => {
209
+ const container = this.elementRef.nativeElement;
210
+ const el = container.querySelector('eo-tree-node .label.focused');
211
+ const containerRect = container.getBoundingClientRect();
212
+ const elRect = el.getBoundingClientRect();
213
+ /* The first one checks the structure tree for scroll down
214
+ * The second one checks the structure tree for scroll up
215
+ * The third one checks the trees in selection dialogs for scroll down
216
+ * The fourth one checks the trees in selection dialogs for scroll up
217
+ */
218
+ if (elRect.bottom >= window.innerHeight
219
+ || elRect.top < 50
220
+ || elRect.bottom >= containerRect.height
221
+ || elRect.top - containerRect.top <= 30) {
222
+ el.scrollIntoView();
223
+ }
224
+ }, 200);
225
+ }
215
226
  focusNode(next) {
216
227
  if (this.visibleNodes.length) {
217
228
  let index = 0, shift = next ? 1 : -1;
@@ -278,4 +289,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
278
289
  type: HostListener,
279
290
  args: ['keydown', ['$event']]
280
291
  }] } });
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay90cmVlL3RyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdHJlZS90cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWtCdkUsTUFBTSxPQUFPLGFBQWE7SUEwQnhCLFlBQW1CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4QlgsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVwQyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5QixzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFDakMsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFLeEIsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHMUIsaUJBQVksR0FBRyx1Q0FBdUMsQ0FBQztRQUV2RCxpQkFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtRQUVoRCxxRkFBcUY7UUFDM0UseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQyxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDN0IsQ0FBQyxDQUFBO0lBR0QsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0lBRUQsSUFDSSxnQkFBZ0IsQ0FBQyxLQUFlO1FBQ2xDLElBQUksQ0FB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WUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgZm9yd2FyZFJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsIEVsZW1lbnRSZWYsIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1RyZWVOb2RlLCBUcmVlT3B0aW9uc30gZnJvbSAnLi90cmVlLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRyZWVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpIF90YWJJbmRleCA9IDA7XG5cbiAgcHJpdmF0ZSBfZXhwYW5kZWROb2Rlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0ZWROb2Rlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBzZWxlY3RlZE5vZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIHZpc2libGVOb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBmb2N1c2VkTm9kZTogVHJlZU5vZGU7XG5cbiAgdHJlZTogVHJlZU5vZGVbXTtcblxuICBASW5wdXQoKSBvcHRpb25zOiBUcmVlT3B0aW9ucyA9IHt9O1xuICBASW5wdXQoKSBpc0Rpc3BsYXllZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdlby5lcnJvci5zdHJ1Y3R1cmUudHJlZS5ub3QuYXZhaWxhYmxlJztcblxuICBASW5wdXQoKSBzZWxlY3Rpb25LZXkgPSAnICc7IC8vIGRlZmF1bHQgaXMgU3BhY2VcblxuICAvLyB0aGUgbm9kZXMgdGhhdCBhcmUgc2VsZWN0ZWQuIEluIGNhc2Ugb2YgYG11bHRpc2VsZWN0YCBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIGJlIGFuXG4gIEBPdXRwdXQoKSBleHBhbmRlZE5vZGVzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgQElucHV0KCdoaWdobGlnaHRlZE5vZGVzJylcbiAgc2V0IGhpZ2hsaWdodGVkTm9kZXMobm9kZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faGlnaGxpZ2h0ZWROb2RlcyA9IG5vZGVzIHx8IFtdO1xuICAgIHRoaXMudmlzaWJsZU5vZGVzLmZvckVhY2gobiA9PiAobi5oaWdobGlnaHRlZCA9ICEhdGhpcy5faGlnaGxpZ2h0ZWROb2Rlcy5maW5kKGlkID0+IGlkID09PSBuLmlkKSkpO1xuICB9XG5cbiAgQElucHV0KCd0cmVlJylcbiAgc2V0IHRyZWVJbnB1dCh0cmVlOiBUcmVlTm9kZVtdKSB7XG4gICAgLy8gdGhpcy50cmVlID0gdHJlZTtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICB0aGlzLl9leHBhbmRlZE5vZGVzID0gW107XG4gICAgdGhpcy5mb2N1c2VkTm9kZSA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVUcmVlKHRyZWUpO1xuICB9XG5cbiAgQElucHV0KCd0cmVlVXBkYXRlJylcbiAgc2V0IHRyZWVVcGRhdGUodHJlZTogVHJlZU5vZGVbXSkge1xuICAgIGlmICh0cmVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyZWUodHJlZSk7XG4gICAgfVxuICB9XG5cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIG9uRm9jdXNJbih0YXJnZXQ6IGFueSkge1xuICAgIGlmICghdGhpcy5mb2N1c2VkTm9kZSB8fCAhdGhpcy5mb2N1c2VkTm9kZS5mb2N1c2VkKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc2VsZWN0ZWROb2Rlc1swXSB8fCB0aGlzLnZpc2libGVOb2Rlc1swXTtcbiAgICAgIHRoaXMudXBkYXRlRm9jdXMobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gICAgb25Gb2N1c091dCgpIHtcbiAgICAgIHRoaXMudXBkYXRlRm9jdXMoKTtcbiAgICB9XG5cbiAgb25Gb2N1cyhldnQpIHtcbiAgfVxuXG4gIG9uQmx1cihldnQpIHtcbiAgfVxuXG4gIG9uVG9nZ2xlKGV2dCkge1xuXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgdGhpcy5mb2N1c05vZGUoZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgdGhpcy5mb2N1c05vZGUodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IHtcbiAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZCh0aGlzLmZvY3VzZWROb2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOiB7XG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQodGhpcy5mb2N1c2VkTm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSB0aGlzLnNlbGVjdGlvbktleToge1xuICAgICAgICAvLyB0b2dnbGUgc2VsZWN0aW9uIG9mIHRoZSBmb2N1c2VkIG5vZGVcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE5vZGUuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIC8vIHRoaXMuZm9jdXNlZE5vZGUuc2VsZWN0ZWQgPSAhdGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RlZDtcbiAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdGVkKHRoaXMuZm9jdXNlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIC8vIHRvZ2dsZSBzZWxlY3Rpb24gb2YgdGhlIGZvY3VzZWQgbm9kZVxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgLy8gdGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RlZCA9ICF0aGlzLmZvY3VzZWROb2RlLnNlbGVjdGVkO1xuICAgICAgICAgIHRoaXMub25Ob2RlU2VsZWN0ZWQodGhpcy5mb2N1c2VkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFsnQXJyb3dVcCcsICdBcnJvd0Rvd24nLCAnQXJyb3dSaWdodCcsICdBcnJvd0xlZnQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cblxuICB3cml0ZVZhbHVlKHNlbGVjdGVkTm9kZXM6IFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBsZXQgX3NlbGVjdGVkTm9kZXMgPSAhc2VsZWN0ZWROb2RlcyB8fCBBcnJheS5pc0FycmF5KHNlbGVjdGVkTm9kZXMpID8gc2VsZWN0ZWROb2RlcyB8fCBbXSA6IFtzZWxlY3RlZE5vZGVzXTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZXMubGVuZ3RoICE9PSBfc2VsZWN0ZWROb2Rlcy5sZW5ndGggfHwgdGhpcy5zZWxlY3RlZE5vZGVzLnNvbWUoKG4sIGkpID0+IG4uaWQgIT09IF9zZWxlY3RlZE5vZGVzW2ldLmlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gX3NlbGVjdGVkTm9kZXM7XG4gICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy50cmVlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChub2RlKSB7XG4gICAgLy8gaWYgdGhlIHNlbGVjdGVkIG5vZGUgaXNuJ3QgYWxsb3dlZCB0byBiZSBzZWxlY3RlZCwgd2UnbGwgaW5zdGVhZCB0cnkgdG9cbiAgICAvLyB0b2dnbGUgZXhwYW5kZWQgZmxhZyBmb3IgcGFyZW50IG5vZGVzXG4gICAgdGhpcy5vblNlbGVjdGVkLmVtaXQobm9kZSk7XG4gICAgdGhpcy51cGRhdGVGb2N1cyhub2RlLCB0aGlzLmZvY3VzZWROb2RlKTtcblxuICAgIGlmICghbm9kZS5zZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNlbGVjdGVkID0gIW5vZGUuc2VsZWN0ZWQ7XG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdWx0aXNlbGVjdCAmJiB0aGlzLnNlbGVjdGVkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzWzBdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlRGVzZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgbiA9PiBuLmlkICE9PSBub2RlLmlkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5vcHRpb25zLm11bHRpc2VsZWN0ID8gdGhpcy5zZWxlY3RlZE5vZGVzIDogdGhpcy5zZWxlY3RlZE5vZGVzWzBdKTtcbiAgICB9XG4gIH1cblxuXG4gIHB1YmxpYyBvbk5vZGVFeHBhbmRlZChub2RlOiBUcmVlTm9kZSkge1xuICAgIHRoaXMuY29sbGVjdFZpc2libGVOb2Rlcyhub2RlKTtcbiAgICB0aGlzLmV4cGFuZGVkTm9kZXNDaGFuZ2VkLmVtaXQodGhpcy5fZXhwYW5kZWROb2Rlcyk7XG4gIH1cblxuXG4gIHB1YmxpYyB0b2dnbGVFeHBhbmRlZChub2RlOiBUcmVlTm9kZSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG4gICAgICB0aGlzLm9uTm9kZUV4cGFuZGVkKG5vZGUpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gVXBkYXRlIHRoZSB0cmVlIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgbm9kZXNcbiAgcHJpdmF0ZSB1cGRhdGVUcmVlKHRyZWU/OiBhbnkpIHtcbiAgICBpZiAodHJlZSB8fCB0aGlzLnRyZWUpIHtcbiAgICAgIHRoaXMudHJlZSA9ICh0cmVlIHx8IHRoaXMudHJlZSkubWFwKG5vZGUgPT4gdGhpcy51cGRhdGVUcmVlTm9kZShub2RlLCBbXSkpO1xuICAgICAgdGhpcy5jb2xsZWN0VmlzaWJsZU5vZGVzKCk7XG4gICAgfVxuICB9XG5cblxuICAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gd2Fsa2luZyB0aGUgdHJlZSBub2RlcyBhbmQgc2V0dGluZyB0aGUgbm9kZXMgYHNlbGVjdGVkYCBmbGFnc1xuICBwcml2YXRlIHVwZGF0ZVRyZWVOb2RlKG5vZGU6IFRyZWVOb2RlLCBwYXJlbnRzOiBUcmVlTm9kZVtdKSB7XG4gICAgbm9kZS5zZWxlY3RlZCA9ICEhdGhpcy5zZWxlY3RlZE5vZGVzLmZpbmQobiA9PiBub2RlLmlkID09PSBuLmlkIHx8ICghbi5pZCAmJiBub2RlLmRhdGE/LnZhbHVlID09PSBuLnZhbHVlKSk7XG4gICAgbm9kZS5leHBhbmRlZCA9IHRoaXMuX2V4cGFuZGVkTm9kZXMubGVuZ3RoID8gISF0aGlzLl9leHBhbmRlZE5vZGVzLmZpbmQoaWQgPT4gaWQgPT09IG5vZGUuaWQpIDogbm9kZS5leHBhbmRlZDtcbiAgICBub2RlLmhpZ2hsaWdodGVkID0gISF0aGlzLl9oaWdobGlnaHRlZE5vZGVzLmZpbmQoaWQgPT4gaWQgPT09IG5vZGUuaWQpO1xuICAgIG5vZGUuZm9jdXNlZCA9IHRoaXMuZm9jdXNlZE5vZGUgJiYgdGhpcy5mb2N1c2VkTm9kZS5pZCA9PT0gbm9kZS5pZCA/IHRoaXMuZm9jdXNlZE5vZGUuZm9jdXNlZCA6IGZhbHNlO1xuICAgIC8vIG5vZGUubGV2ZWwgPSBwYXJlbnRzLmxlbmd0aDtcblxuICAgIC8vIGV4cGFuZCBhbGwgcGFyZW50IG5vZGVzIGFzIHdlbGxcbiAgICBpZiAobm9kZS5zZWxlY3RlZCAmJiBwYXJlbnRzLmxlbmd0aCkge1xuICAgICAgcGFyZW50cy5mb3JFYWNoKHAgPT4gKHAuZXhwYW5kZWQgPSB0cnVlKSk7XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2gobiA9PiB0aGlzLnVwZGF0ZVRyZWVOb2RlKG4sIHBhcmVudHMuY29uY2F0KFtub2RlXSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvLyBDb2xsZWN0IGFsbCB2aXNpYmxlIG5vZGVzIGluIHRoZSByaWdodCBvcmRlciB0byBiZSB1c2VkIHRvIGZldGNoIHRoZSBwcmV2aW91cyBvclxuICAvLyBuZXh0IG5vZGUgdXNpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgcHJpdmF0ZSBjb2xsZWN0VmlzaWJsZU5vZGVzKG5vZGU/OiBUcmVlTm9kZSkge1xuICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy5jb2xsZWN0VmlzaWJsZUNoaWxkcmVuKHRoaXMudHJlZSk7XG4gICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy52aXNpYmxlTm9kZXMuZmlsdGVyKG4gPT4gbi5zZWxlY3RlZCk7XG4gIH1cblxuICAvLyByZWN1cnNpdmUgcGFydCBvZiBjb2xsZWN0Q2hpbGROb2RlcygpXG4gIHByaXZhdGUgY29sbGVjdFZpc2libGVDaGlsZHJlbihub2RlczogVHJlZU5vZGVbXSA9IFtdKSB7XG4gICAgbGV0IGZsYXQgPSBbXTtcbiAgICB0aGlzLl9leHBhbmRlZE5vZGVzID0gW107XG4gICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGZsYXQucHVzaChub2RlKTtcbiAgICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMucHVzaChub2RlLmlkKTtcbiAgICAgICAgZmxhdCA9IGZsYXQuY29uY2F0KHRoaXMuY29sbGVjdFZpc2libGVDaGlsZHJlbihub2RlLmNoaWxkcmVuKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZsYXQ7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvY3VzKG5vZGU/OiBUcmVlTm9kZSwgb2xkPzogVHJlZU5vZGUpIHtcbiAgICBpZiAob2xkKSB7XG4gICAgICBpZiAobm9kZSAhPT0gb2xkKSB7XG4gICAgICAgIG9sZC5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZU5vZGVzLmZvckVhY2gobiA9PiAobi5mb2N1c2VkID0gZmFsc2UpKTtcbiAgICB9XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZW8tdHJlZS1ub2RlJyk7XG4gICAgICBub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICBpZiAobi5xdWVyeVNlbGVjdG9yKCcubGFiZWwgc3BhbicpLnRleHRDb250ZW50ID09PSBub2RlLm5hbWUpIHtcbiAgICAgICAgICBuLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgYmxvY2s6IFwic3RhcnRcIixcbiAgICAgICAgICAgIGlubGluZTogXCJuZWFyZXN0XCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBub2RlLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5mb2N1c2VkTm9kZSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05vZGUobmV4dD86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy52aXNpYmxlTm9kZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgaW5kZXggPSAwLCBzaGlmdCA9IG5leHQgPyAxIDogLTE7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy52aXNpYmxlTm9kZXMuZmluZCgobiwgaSkgPT4ge1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgIHJldHVybiBuLmZvY3VzZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbmV4dElkeCA9IG5vZGUgPyBpbmRleCArIHNoaWZ0IDogMDtcbiAgICAgIGNvbnN0IGlkeCA9IG5leHRJZHggPj0gdGhpcy52aXNpYmxlTm9kZXMubGVuZ3RoID8gMCA6IChuZXh0SWR4IDwgMCA/IHRoaXMudmlzaWJsZU5vZGVzLmxlbmd0aCAtIDEgOiBuZXh0SWR4KTtcbiAgICAgIHRoaXMudXBkYXRlRm9jdXModGhpcy52aXNpYmxlTm9kZXNbaWR4XSwgbm9kZSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZW8tdHJlZVwiIGVvUnRsQXdhcmUgKm5nSWY9XCJ0cmVlLmxlbmd0aDsgZWxzZSBub1RyZWVzXCI+XG4gIDxlby10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgdHJlZVwiIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVFeHBhbmRlZENoYW5nZWQpPVwidG9nZ2xlRXhwYW5kZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZVNlbGVjdGVkKT1cIm9uTm9kZVNlbGVjdGVkKCRldmVudClcIj48L2VvLXRyZWUtbm9kZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25vVHJlZXM+XG4gIDxkaXYgY2xhc3M9XCJ0cmVlIHRyZWUtcGFuZWwtZXJyb3IgZW8tYm9keSBlcnJvclwiPlxuICAgIDxlby1pY29uIGNsYXNzPVwiZXJyb3IgZXJyb3JfX2ljb25cIiBbaWNvblNyY109XCInaWNfZXJyb3Iuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICA8cCB0cmFuc2xhdGU+e3tlbXB0eU1lc3NhZ2V9fTwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay90cmVlL3RyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdHJlZS90cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWtCdkUsTUFBTSxPQUFPLGFBQWE7SUEwQnhCLFlBQW1CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4QlgsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVwQyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5QixzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFDakMsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFLeEIsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHMUIsaUJBQVksR0FBRyx1Q0FBdUMsQ0FBQztRQUV2RCxpQkFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtRQUVoRCxxRkFBcUY7UUFDM0UseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQyxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDN0IsQ0FBQyxDQUFBO0lBR0QsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0lBRUQsSUFDSSxnQkFBZ0IsQ0FBQyxLQUFlO1FBQ2xDLElBQUksQ0FB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QUs7Z0JBR0ksb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBWUgsZ0JBQWdCO3NCQURuQixLQUFLO3VCQUFDLGtCQUFrQjtnQkFPckIsU0FBUztzQkFEWixLQUFLO3VCQUFDLE1BQU07Z0JBVVQsVUFBVTtzQkFEYixLQUFLO3VCQUFDLFlBQVk7Z0JBU25CLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBU3hDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVO2dCQWdCMUIsS0FBSztzQkFESixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBmb3J3YXJkUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZywgRWxlbWVudFJlZiwgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VHJlZU5vZGUsIFRyZWVPcHRpb25zfSBmcm9tICcuL3RyZWUuY29tcG9uZW50LmludGVyZmFjZSc7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHJlZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgX3RhYkluZGV4ID0gMDtcblxuICBwcml2YXRlIF9leHBhbmRlZE5vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9oaWdobGlnaHRlZE5vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHNlbGVjdGVkTm9kZXM6IGFueVtdID0gW107XG4gIHByaXZhdGUgdmlzaWJsZU5vZGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGZvY3VzZWROb2RlOiBUcmVlTm9kZTtcblxuICB0cmVlOiBUcmVlTm9kZVtdO1xuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFRyZWVPcHRpb25zID0ge307XG4gIEBJbnB1dCgpIGlzRGlzcGxheWVkOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ2VvLmVycm9yLnN0cnVjdHVyZS50cmVlLm5vdC5hdmFpbGFibGUnO1xuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbktleSA9ICcgJzsgLy8gZGVmYXVsdCBpcyBTcGFjZVxuXG4gIC8vIHRoZSBub2RlcyB0aGF0IGFyZSBzZWxlY3RlZC4gSW4gY2FzZSBvZiBgbXVsdGlzZWxlY3RgIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgYmUgYW5cbiAgQE91dHB1dCgpIGV4cGFuZGVkTm9kZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBASW5wdXQoJ2hpZ2hsaWdodGVkTm9kZXMnKVxuICBzZXQgaGlnaGxpZ2h0ZWROb2Rlcyhub2Rlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9oaWdobGlnaHRlZE5vZGVzID0gbm9kZXMgfHwgW107XG4gICAgdGhpcy52aXNpYmxlTm9kZXMuZm9yRWFjaChuID0+IChuLmhpZ2hsaWdodGVkID0gISF0aGlzLl9oaWdobGlnaHRlZE5vZGVzLmZpbmQoaWQgPT4gaWQgPT09IG4uaWQpKSk7XG4gIH1cblxuICBASW5wdXQoJ3RyZWUnKVxuICBzZXQgdHJlZUlucHV0KHRyZWU6IFRyZWVOb2RlW10pIHtcbiAgICAvLyB0aGlzLnRyZWUgPSB0cmVlO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMgPSBbXTtcbiAgICB0aGlzLmZvY3VzZWROb2RlID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZVRyZWUodHJlZSk7XG4gIH1cblxuICBASW5wdXQoJ3RyZWVVcGRhdGUnKVxuICBzZXQgdHJlZVVwZGF0ZSh0cmVlOiBUcmVlTm9kZVtdKSB7XG4gICAgaWYgKHRyZWUpIHtcbiAgICAgIHRoaXMudXBkYXRlVHJlZSh0cmVlKTtcbiAgICB9XG4gIH1cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25Gb2N1c0luKHRhcmdldDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmZvY3VzZWROb2RlIHx8ICF0aGlzLmZvY3VzZWROb2RlLmZvY3VzZWQpIHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5zZWxlY3RlZE5vZGVzWzBdIHx8IHRoaXMudmlzaWJsZU5vZGVzWzBdO1xuICAgICAgdGhpcy51cGRhdGVGb2N1cyhub2RlKTtcbiAgICB9XG4gIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgICBvbkZvY3VzT3V0KCkge1xuICAgICAgdGhpcy51cGRhdGVGb2N1cygpO1xuICAgIH1cblxuICBvbkZvY3VzKGV2dCkge1xuICB9XG5cbiAgb25CbHVyKGV2dCkge1xuICB9XG5cbiAgb25Ub2dnbGUoZXZ0KSB7XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLmZvY3VzTm9kZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVZpc2libGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuZm9jdXNOb2RlKHRydWUpO1xuICAgICAgICB0aGlzLl9lbnN1cmVWaXNpYmxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IHtcbiAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZCh0aGlzLmZvY3VzZWROb2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOiB7XG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQodGhpcy5mb2N1c2VkTm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSB0aGlzLnNlbGVjdGlvbktleToge1xuICAgICAgICAvLyB0b2dnbGUgc2VsZWN0aW9uIG9mIHRoZSBmb2N1c2VkIG5vZGVcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE5vZGUuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIC8vIHRoaXMuZm9jdXNlZE5vZGUuc2VsZWN0ZWQgPSAhdGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RlZDtcbiAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdGVkKHRoaXMuZm9jdXNlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIC8vIHRvZ2dsZSBzZWxlY3Rpb24gb2YgdGhlIGZvY3VzZWQgbm9kZVxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgLy8gdGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RlZCA9ICF0aGlzLmZvY3VzZWROb2RlLnNlbGVjdGVkO1xuICAgICAgICAgIHRoaXMub25Ob2RlU2VsZWN0ZWQodGhpcy5mb2N1c2VkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFsnQXJyb3dVcCcsICdBcnJvd0Rvd24nLCAnQXJyb3dSaWdodCcsICdBcnJvd0xlZnQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cblxuICB3cml0ZVZhbHVlKHNlbGVjdGVkTm9kZXM6IFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBsZXQgX3NlbGVjdGVkTm9kZXMgPSAhc2VsZWN0ZWROb2RlcyB8fCBBcnJheS5pc0FycmF5KHNlbGVjdGVkTm9kZXMpID8gc2VsZWN0ZWROb2RlcyB8fCBbXSA6IFtzZWxlY3RlZE5vZGVzXTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZXMubGVuZ3RoICE9PSBfc2VsZWN0ZWROb2Rlcy5sZW5ndGggfHwgdGhpcy5zZWxlY3RlZE5vZGVzLnNvbWUoKG4sIGkpID0+IG4uaWQgIT09IF9zZWxlY3RlZE5vZGVzW2ldLmlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gX3NlbGVjdGVkTm9kZXM7XG4gICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy50cmVlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChub2RlKSB7XG4gICAgLy8gaWYgdGhlIHNlbGVjdGVkIG5vZGUgaXNuJ3QgYWxsb3dlZCB0byBiZSBzZWxlY3RlZCwgd2UnbGwgaW5zdGVhZCB0cnkgdG9cbiAgICAvLyB0b2dnbGUgZXhwYW5kZWQgZmxhZyBmb3IgcGFyZW50IG5vZGVzXG4gICAgdGhpcy5vblNlbGVjdGVkLmVtaXQobm9kZSk7XG4gICAgdGhpcy51cGRhdGVGb2N1cyhub2RlLCB0aGlzLmZvY3VzZWROb2RlKTtcblxuICAgIGlmICghbm9kZS5zZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNlbGVjdGVkID0gIW5vZGUuc2VsZWN0ZWQ7XG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdWx0aXNlbGVjdCAmJiB0aGlzLnNlbGVjdGVkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzWzBdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlRGVzZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgbiA9PiBuLmlkICE9PSBub2RlLmlkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5vcHRpb25zLm11bHRpc2VsZWN0ID8gdGhpcy5zZWxlY3RlZE5vZGVzIDogdGhpcy5zZWxlY3RlZE5vZGVzWzBdKTtcbiAgICB9XG4gIH1cblxuXG4gIHB1YmxpYyBvbk5vZGVFeHBhbmRlZChub2RlOiBUcmVlTm9kZSkge1xuICAgIHRoaXMuY29sbGVjdFZpc2libGVOb2Rlcyhub2RlKTtcbiAgICB0aGlzLmV4cGFuZGVkTm9kZXNDaGFuZ2VkLmVtaXQodGhpcy5fZXhwYW5kZWROb2Rlcyk7XG4gIH1cblxuXG4gIHB1YmxpYyB0b2dnbGVFeHBhbmRlZChub2RlOiBUcmVlTm9kZSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG4gICAgICB0aGlzLm9uTm9kZUV4cGFuZGVkKG5vZGUpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gVXBkYXRlIHRoZSB0cmVlIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgbm9kZXNcbiAgcHJpdmF0ZSB1cGRhdGVUcmVlKHRyZWU/OiBhbnkpIHtcbiAgICBpZiAodHJlZSB8fCB0aGlzLnRyZWUpIHtcbiAgICAgIHRoaXMudHJlZSA9ICh0cmVlIHx8IHRoaXMudHJlZSkubWFwKG5vZGUgPT4gdGhpcy51cGRhdGVUcmVlTm9kZShub2RlLCBbXSkpO1xuICAgICAgdGhpcy5jb2xsZWN0VmlzaWJsZU5vZGVzKCk7XG4gICAgfVxuICB9XG5cblxuICAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gd2Fsa2luZyB0aGUgdHJlZSBub2RlcyBhbmQgc2V0dGluZyB0aGUgbm9kZXMgYHNlbGVjdGVkYCBmbGFnc1xuICBwcml2YXRlIHVwZGF0ZVRyZWVOb2RlKG5vZGU6IFRyZWVOb2RlLCBwYXJlbnRzOiBUcmVlTm9kZVtdKSB7XG4gICAgbm9kZS5zZWxlY3RlZCA9ICEhdGhpcy5zZWxlY3RlZE5vZGVzLmZpbmQobiA9PiBub2RlLmlkID09PSBuLmlkIHx8ICghbi5pZCAmJiBub2RlLmRhdGE/LnZhbHVlID09PSBuLnZhbHVlKSk7XG4gICAgbm9kZS5leHBhbmRlZCA9IHRoaXMuX2V4cGFuZGVkTm9kZXMubGVuZ3RoID8gISF0aGlzLl9leHBhbmRlZE5vZGVzLmZpbmQoaWQgPT4gaWQgPT09IG5vZGUuaWQpIDogbm9kZS5leHBhbmRlZDtcbiAgICBub2RlLmhpZ2hsaWdodGVkID0gISF0aGlzLl9oaWdobGlnaHRlZE5vZGVzLmZpbmQoaWQgPT4gaWQgPT09IG5vZGUuaWQpO1xuICAgIG5vZGUuZm9jdXNlZCA9IHRoaXMuZm9jdXNlZE5vZGUgJiYgdGhpcy5mb2N1c2VkTm9kZS5pZCA9PT0gbm9kZS5pZCA/IHRoaXMuZm9jdXNlZE5vZGUuZm9jdXNlZCA6IGZhbHNlO1xuICAgIC8vIG5vZGUubGV2ZWwgPSBwYXJlbnRzLmxlbmd0aDtcblxuICAgIC8vIGV4cGFuZCBhbGwgcGFyZW50IG5vZGVzIGFzIHdlbGxcbiAgICBpZiAobm9kZS5zZWxlY3RlZCAmJiBwYXJlbnRzLmxlbmd0aCkge1xuICAgICAgcGFyZW50cy5mb3JFYWNoKHAgPT4gKHAuZXhwYW5kZWQgPSB0cnVlKSk7XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2gobiA9PiB0aGlzLnVwZGF0ZVRyZWVOb2RlKG4sIHBhcmVudHMuY29uY2F0KFtub2RlXSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvLyBDb2xsZWN0IGFsbCB2aXNpYmxlIG5vZGVzIGluIHRoZSByaWdodCBvcmRlciB0byBiZSB1c2VkIHRvIGZldGNoIHRoZSBwcmV2aW91cyBvclxuICAvLyBuZXh0IG5vZGUgdXNpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgcHJpdmF0ZSBjb2xsZWN0VmlzaWJsZU5vZGVzKG5vZGU/OiBUcmVlTm9kZSkge1xuICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy5jb2xsZWN0VmlzaWJsZUNoaWxkcmVuKHRoaXMudHJlZSk7XG4gICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy52aXNpYmxlTm9kZXMuZmlsdGVyKG4gPT4gbi5zZWxlY3RlZCk7XG4gIH1cblxuICAvLyByZWN1cnNpdmUgcGFydCBvZiBjb2xsZWN0Q2hpbGROb2RlcygpXG4gIHByaXZhdGUgY29sbGVjdFZpc2libGVDaGlsZHJlbihub2RlczogVHJlZU5vZGVbXSA9IFtdKSB7XG4gICAgbGV0IGZsYXQgPSBbXTtcbiAgICB0aGlzLl9leHBhbmRlZE5vZGVzID0gW107XG4gICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGZsYXQucHVzaChub2RlKTtcbiAgICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMucHVzaChub2RlLmlkKTtcbiAgICAgICAgZmxhdCA9IGZsYXQuY29uY2F0KHRoaXMuY29sbGVjdFZpc2libGVDaGlsZHJlbihub2RlLmNoaWxkcmVuKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZsYXQ7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvY3VzKG5vZGU/OiBUcmVlTm9kZSwgb2xkPzogVHJlZU5vZGUpIHtcbiAgICBpZiAob2xkKSB7XG4gICAgICBpZiAobm9kZSAhPT0gb2xkKSB7XG4gICAgICAgIG9sZC5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZU5vZGVzLmZvckVhY2gobiA9PiAobi5mb2N1c2VkID0gZmFsc2UpKTtcbiAgICB9XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuZm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzZWROb2RlID0gbm9kZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnN1cmVWaXNpYmxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgZWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignZW8tdHJlZS1ub2RlIC5sYWJlbC5mb2N1c2VkJyk7XG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAvKiBUaGUgZmlyc3Qgb25lIGNoZWNrcyB0aGUgc3RydWN0dXJlIHRyZWUgZm9yIHNjcm9sbCBkb3duXG4gICAgICAgKiBUaGUgc2Vjb25kIG9uZSBjaGVja3MgdGhlIHN0cnVjdHVyZSB0cmVlIGZvciBzY3JvbGwgdXBcbiAgICAgICAqIFRoZSB0aGlyZCBvbmUgY2hlY2tzIHRoZSB0cmVlcyBpbiBzZWxlY3Rpb24gZGlhbG9ncyBmb3Igc2Nyb2xsIGRvd25cbiAgICAgICAqIFRoZSBmb3VydGggb25lIGNoZWNrcyB0aGUgdHJlZXMgaW4gc2VsZWN0aW9uIGRpYWxvZ3MgZm9yIHNjcm9sbCB1cFxuICAgICAgICovXG4gICAgICBpZiAoZWxSZWN0LmJvdHRvbSA+PSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgfHwgZWxSZWN0LnRvcCA8IDUwXG4gICAgICAgIHx8IGVsUmVjdC5ib3R0b20gPj0gY29udGFpbmVyUmVjdC5oZWlnaHRcbiAgICAgICAgfHwgZWxSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wIDw9IDMwKSB7XG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfSwgIDIwMClcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOb2RlKG5leHQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudmlzaWJsZU5vZGVzLmxlbmd0aCkge1xuICAgICAgbGV0IGluZGV4ID0gMCwgc2hpZnQgPSBuZXh0ID8gMSA6IC0xO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudmlzaWJsZU5vZGVzLmZpbmQoKG4sIGkpID0+IHtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICByZXR1cm4gbi5mb2N1c2VkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5leHRJZHggPSBub2RlID8gaW5kZXggKyBzaGlmdCA6IDA7XG4gICAgICBjb25zdCBpZHggPSBuZXh0SWR4ID49IHRoaXMudmlzaWJsZU5vZGVzLmxlbmd0aCA/IDAgOiAobmV4dElkeCA8IDAgPyB0aGlzLnZpc2libGVOb2Rlcy5sZW5ndGggLSAxIDogbmV4dElkeCk7XG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzKHRoaXMudmlzaWJsZU5vZGVzW2lkeF0sIG5vZGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImVvLXRyZWVcIiBlb1J0bEF3YXJlICpuZ0lmPVwidHJlZS5sZW5ndGg7IGVsc2Ugbm9UcmVlc1wiPlxuICA8ZW8tdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIHRyZWVcIiBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlRXhwYW5kZWRDaGFuZ2VkKT1cInRvZ2dsZUV4cGFuZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVTZWxlY3RlZCk9XCJvbk5vZGVTZWxlY3RlZCgkZXZlbnQpXCI+PC9lby10cmVlLW5vZGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNub1RyZWVzPlxuICA8ZGl2IGNsYXNzPVwidHJlZSB0cmVlLXBhbmVsLWVycm9yIGVvLWJvZHkgZXJyb3JcIj5cbiAgICA8ZW8taWNvbiBjbGFzcz1cImVycm9yIGVycm9yX19pY29uXCIgW2ljb25TcmNdPVwiJ2ljX2Vycm9yLnN2ZydcIj48L2VvLWljb24+XG4gICAgPHAgdHJhbnNsYXRlPnt7ZW1wdHlNZXNzYWdlfX08L3A+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==