ng-virtual-list 14.9.0 → 14.9.2

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.
@@ -109,6 +109,8 @@ export class NgScrollerComponent extends DisposableComponent {
109
109
  this.updateScrollBar();
110
110
  }
111
111
  };
112
+ this._animationId = -1;
113
+ this._animationId1 = -1;
112
114
  this._service.$langTextDir.pipe(tap(v => {
113
115
  this._$langTextDir.next(v);
114
116
  })).subscribe();
@@ -396,10 +398,7 @@ export class NgScrollerComponent extends DisposableComponent {
396
398
  return { a0 };
397
399
  }
398
400
  stopScrolling() {
399
- if (this._currentAnimation !== undefined) {
400
- this._currentAnimation.cancel();
401
- this._currentAnimation = undefined;
402
- }
401
+ cancelAnimationFrame(this._animationId);
403
402
  }
404
403
  move(isVertical, position, blending = false, userAction = false) {
405
404
  this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction });
@@ -430,7 +429,7 @@ export class NgScrollerComponent extends DisposableComponent {
430
429
  this.x = start;
431
430
  }
432
431
  }
433
- let finishedValue = endValue, isFinished = false, animationId;
432
+ let finishedValue = endValue, isFinished = false;
434
433
  const step = (currentTime) => {
435
434
  if (!!isCanceled) {
436
435
  return;
@@ -473,26 +472,16 @@ export class NgScrollerComponent extends DisposableComponent {
473
472
  this._$scrollEnd.next(userAction);
474
473
  }
475
474
  else {
476
- animationId = requestAnimationFrame(step);
475
+ this._animationId = requestAnimationFrame(step);
477
476
  }
478
- }, cancel = () => {
479
- cancelAnimationFrame(animationId);
480
- isCanceled = true;
481
- }, to = (value) => {
482
- finishedValue = value;
483
- }, finished = () => { return isFinished; };
484
- animationId = requestAnimationFrame(step);
485
- this._currentAnimation = {
486
- cancel,
487
- to,
488
- finished,
489
477
  };
478
+ this._animationId = requestAnimationFrame(step);
490
479
  }
491
480
  updateScrollBar() {
492
481
  this._$updateScrollBar.next();
493
482
  }
494
483
  scrollTo(params) {
495
- const posX = params.x || params.left || 0, posY = params.y || params.top || 0, userAction = params.userAction ?? false, x = posX, y = posY, behavior = params.behavior ?? INSTANT, blending = params.blending ?? true, scrollContent = this.scrollContent?.nativeElement, isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;
484
+ const posX = params.x || params.left || 0, posY = params.y || params.top || 0, userAction = params.userAction ?? false, x = posX, y = posY, behavior = params.behavior ?? INSTANT, blending = params.blending ?? true, fireUpdate = params.fireUpdate ?? true, scrollContent = this.scrollContent?.nativeElement, isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;
496
485
  if (this._isMoving) {
497
486
  if (isVertical) {
498
487
  if (y < 0 || y > this.scrollHeight) {
@@ -530,7 +519,9 @@ export class NgScrollerComponent extends DisposableComponent {
530
519
  if (this.cdkScrollable) {
531
520
  this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);
532
521
  }
533
- this._$scroll.next(userAction);
522
+ if (fireUpdate) {
523
+ this.fireScrollEvent(userAction);
524
+ }
534
525
  }
535
526
  }
536
527
  else {
@@ -542,11 +533,16 @@ export class NgScrollerComponent extends DisposableComponent {
542
533
  if (this.cdkScrollable) {
543
534
  this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);
544
535
  }
545
- this._$scroll.next(userAction);
536
+ if (fireUpdate) {
537
+ this.fireScrollEvent(userAction);
538
+ }
546
539
  }
547
540
  }
548
541
  }
549
542
  }
543
+ fireScrollEvent(userAction) {
544
+ this._$scroll.next(userAction);
545
+ }
550
546
  reset() {
551
547
  if (this.scrollBar) {
552
548
  this.scrollBar.stopScrolling();
@@ -616,4 +612,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
616
612
  }], scrollbarMinSize: [{
617
613
  type: Input
618
614
  }] } });
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUlwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVoRixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQ2hJLFdBQVcsRUFBRSxLQUFLLEdBQ25CLE1BQU0sYUFBYSxDQUFD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c0JBRFosU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBSXBELFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7Z0JBSXRELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBVXZCLFNBQVM7c0JBRFosS0FBSztnQkFVRixjQUFjO3NCQURqQixLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxLQUFLO2dCQVVGLFNBQVM7c0JBRFosS0FBSztnQkFVRixjQUFjO3NCQURqQixLQUFLO2dCQVVGLGdCQUFnQjtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsIG9mLCByYWNlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbGVyRGlyZWN0aW9uIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IFNjcm9sbEJveCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBTY3JvbGxlckRpcmVjdGlvbnMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgSWQsIElTaXplLCBTY3JvbGxCYXJUaGVtZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcclxuaW1wb3J0IHsgRWFzaW5nIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIsIGVhc2VPdXRRdWFkIH0gZnJvbSAnLi91dGlscy9lYXNlJztcclxuaW1wb3J0IHsgTmdTY3JvbGxCYXJDb21wb25lbnQgfSBmcm9tIFwiLi4vbmctc2Nyb2xsLWJhci9uZy1zY3JvbGwtYmFyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHcmFkaWVudENvbG9yUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvZ3JhZGllbnQtY29sb3ItcG9zaXRpb25zJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSxcclxuICBJTlRFUkFDVElWRSwgTU9VU0VfRE9XTiwgTU9VU0VfTU9WRSwgTU9VU0VfVVAsIFNDUk9MTEVSX1NDUk9MTCwgU0NST0xMRVJfU0NST0xMQkFSX1NDUk9MTCwgU0NST0xMRVJfV0hFRUwsIFRPVUNIX0VORCwgVE9VQ0hfTU9WRSxcclxuICBUT1VDSF9TVEFSVCwgV0hFRUwsXHJcbn0gZnJvbSAnLi4vLi4vY29uc3QnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aW9uLCBUZXh0RGlyZWN0aW9ucyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBUT1AgPSAndG9wJyxcclxuICBMRUZUID0gJ2xlZnQnLFxyXG4gIElOU1RBTlQgPSAnaW5zdGFudCcsXHJcbiAgQVVUTyA9ICdhdXRvJyxcclxuICBTTU9PVEggPSAnc21vb3RoJyxcclxuICBWRVJUSUNBTCA9ICd2ZXJ0aWNhbCcsXHJcbiAgRFVSQVRJT04gPSAyMDAwLFxyXG4gIEZSSUNUSU9OX0ZPUkNFID0gLjAzNSxcclxuICBNQVhfRFVSQVRJT04gPSA0MDAwLFxyXG4gIEFOSU1BVElPTl9EVVJBVElPTiA9IDIwMCxcclxuICBNQVNTID0gLjAwNSxcclxuICBNQVhfRElTVCA9IDEyNTAwLFxyXG4gIE1JTl9USU1FU1RBTVAgPSAyMCxcclxuICBNQVhfVkVMT0NJVFlfVElNRVNUQU1QID0gMTAwLFxyXG4gIE1JTl9BTklNQVRFRF9WQUxVRSA9IDEwLFxyXG4gIFNQRUVEX1NDQUxFID0gNTtcclxuXHJcbmNvbnN0IGdldFN0YXJ0VGltZSA9ICgpID0+IHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9XHJcblxyXG5jb25zdCBjYWxjdWxhdGVEaXJlY3Rpb24gPSAoYnVmZmVyOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPikgPT4ge1xyXG4gIGZvciAobGV0IGkgPSBidWZmZXIubGVuZ3RoIC0gMSwgbCA9IDA7IGkgPj0gbDsgaS0tKSB7XHJcbiAgICBjb25zdCB2ID0gYnVmZmVyW2ldO1xyXG4gICAgaWYgKHZbMF0gPT09IDApIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5zaWduKHZbMF0pO1xyXG4gIH1cclxuICByZXR1cm4gMTtcclxufVxyXG5cclxuaW50ZXJmYWNlIElBbmltYXRpb24ge1xyXG4gIGZpbmlzaGVkOiAoKSA9PiBib29sZWFuO1xyXG4gIHRvOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcclxuICBjYW5jZWw6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICB4PzogbnVtYmVyO1xyXG4gIHk/OiBudW1iZXI7XHJcbiAgbGVmdD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgYmxlbmRpbmc/OiBib29sZWFuO1xyXG4gIGJlaGF2aW9yPzogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCIgfCBzdHJpbmc7XHJcbiAgdXNlckFjdGlvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKSxcclxuICBXSEVFTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9XSEVFTCksXHJcbiAgU0NST0xMQkFSX1NDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2Nyb2xsZXIgZm9yIHRoZSBOZ1ZpcnR1YWxMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE0LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXNjcm9sbGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGVudCcpXHJcbiAgc2Nyb2xsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pXHJcbiAgY2RrU2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQmFyJywgeyByZWFkOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB9KVxyXG4gIHNjcm9sbEJhcjogTmdTY3JvbGxCYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JylcclxuICBzY3JvbGxWaWV3cG9ydDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkdmlld0luaXRpYWxpemVkID0gdGhpcy5fJHZpZXdJbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcbiAgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpcmVjdGlvbih2OiBTY3JvbGxlckRpcmVjdGlvbnMpIHtcclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZEVsZW1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRmb2N1c2VkRWxlbWVudCA9IHRoaXMuXyRmb2N1c2VkRWxlbWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZm9jdXNlZEVsZW1lbnQodjogSWQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZm9jdXNlZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRsb2FkaW5nID0gdGhpcy5fJGxvYWRpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fJGxvYWRpbmcubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGNsYXNzZXMgPSB0aGlzLl8kY2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xhc3Nlcyh2OiB7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgY2xhc3NlcygpIHsgcmV0dXJuIHRoaXMuXyRjbGFzc2VzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl8kc3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkZW5kT2Zmc2V0ID0gdGhpcy5fJGVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5kT2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5fJGVuZE9mZnNldC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGVtZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsQmFyVGhlbWUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclRoZW1lID0gdGhpcy5fJHNjcm9sbGJhclRoZW1lLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGVtZSh2OiBTY3JvbGxCYXJUaGVtZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoZW1lLm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaGVtZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxDbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbENsYXNzZXMgPSB0aGlzLl8kYWN0dWFsQ2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRhaW5lckNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkY29udGFpbmVyQ2xhc3NlcyA9IHRoaXMuXyRjb250YWluZXJDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgcmVhZG9ubHkgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdyYWRpZW50Q29sb3JQb3NpdGlvbnM+KFswLCAwXSk7XHJcbiAgcmVhZG9ubHkgJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkdGh1bWJTaXplID0gdGhpcy5fJHRodW1iU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iUG9zaXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHRodW1iUG9zaXRpb24gPSB0aGlzLl8kdGh1bWJQb3NpdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iU2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICR0aHVtYlNob3cgPSB0aGlzLl8kdGh1bWJTaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcGFyZWRTaWduYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkcHJlcGFyZWRTaWduYWwgPSB0aGlzLl8kcHJlcGFyZWRTaWduYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRncmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRncmFiYmluZyA9IHRoaXMuXyRncmFiYmluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihUZXh0RGlyZWN0aW9ucy5MVFIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVwZGF0ZVNjcm9sbEJhciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJvdGVjdGVkICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEVuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEVuZCA9IHRoaXMuXyRzY3JvbGxFbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJveCA9IG5ldyBTY3JvbGxCb3goKTtcclxuXHJcbiAgZ2V0IHNjcm9sbGFibGUoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRTaXplO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfeDogbnVtYmVyID0gMDtcclxuICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3ggPSB0aGlzLl9hY3R1YWxYID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgcHJpdmF0ZSBfeTogbnVtYmVyID0gMDtcclxuICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudEFuaW1hdGlvbjogSUFuaW1hdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCB0b3RhbFNpemUodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90b3RhbFNpemUgPSB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3RvdGFsU2l6ZSxcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gVkVSVElDQUw7XHJcbiAgICByZXR1cm4gaXNWZXJ0aWNhbCA/IHRvdGFsU2l6ZSA8IHZpZXdwb3J0SGVpZ2h0ID8gMCA6IHRvdGFsU2l6ZSAtIHZpZXdwb3J0SGVpZ2h0IDogdGhpcy5zY3JvbGxIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0dWFsU2Nyb2xsV2lkdGgoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoOiB2aWV3cG9ydFdpZHRoIH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBWRVJUSUNBTDtcclxuICAgIHJldHVybiBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxXaWR0aCA6IHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyAwIDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFjdHVhbFNjcm9sbExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFjdHVhbFNjcm9sbFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5feDtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5feTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxXaWR0aCgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBhY3R1YWxWaWV3cG9ydFdpZHRoID0gdmlld3BvcnRXaWR0aCxcclxuICAgICAgeyB3aWR0aDogY29udGVudFdpZHRoIH0gPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCA8IGFjdHVhbFZpZXdwb3J0V2lkdGggPyAwIDogKGNvbnRlbnRXaWR0aCAtIGFjdHVhbFZpZXdwb3J0V2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIGFjdHVhbFZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQsXHJcbiAgICAgIHsgaGVpZ2h0OiBjb250ZW50SGVpZ2h0IH0gPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQgPCBhY3R1YWxWaWV3cG9ydEhlaWdodCA/IDAgOiAoY29udGVudEhlaWdodCAtIGFjdHVhbFZpZXdwb3J0SGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlbG9jaXR5OiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgcmVhZG9ubHkgJHZpZXdwb3J0Qm91bmRzID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICByZWFkb25seSAkY29udGVudEJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF92aWV3cG9ydFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVWaWV3cG9ydEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgdGhpcy5fJHZpZXdwb3J0Qm91bmRzLm5leHQoeyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udGVudFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVDb250ZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGVudCkge1xyXG4gICAgICB0aGlzLl8kY29udGVudEJvdW5kcy5uZXh0KHsgd2lkdGg6IGNvbnRlbnQub2Zmc2V0V2lkdGgsIGhlaWdodDogY29udGVudC5vZmZzZXRIZWlnaHQgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTY3JvbGxCYXJJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zZXJ2aWNlOiBOZ1ZpcnR1YWxMaXN0U2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRsYW5nVGV4dERpci5waXBlKFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodik7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVWaWV3cG9ydEhhbmRsZXIpO1xyXG4gICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX29uUmVzaXplQ29udGVudEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKGRpcmVjdGlvbiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzVmVydGljYWwubmV4dChkaXJlY3Rpb24gPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR2aWV3cG9ydCA9IHRoaXMuJHZpZXdJbml0aWFsaXplZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IG9mKHRoaXMuc2Nyb2xsVmlld3BvcnQpLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgKSksXHJcbiAgICApLFxyXG4gICAgICAkY29udGVudCA9IHRoaXMuJHZpZXdJbml0aWFsaXplZC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG9mKHRoaXMuc2Nyb2xsQ29udGVudCkucGlwZShcclxuICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgICApKSxcclxuICAgICAgKSxcclxuICAgICAgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuJHVwZGF0ZVNjcm9sbEJhcjtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCksXHJcbiAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgc2Nyb2xsQ29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCxcclxuICAgICAgICBzY3JvbGxWaWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGh1bWJTaXplLFxyXG4gICAgICAgICAgdGh1bWJQb3NpdGlvbixcclxuICAgICAgICAgIHRodW1iR3JhZGllbnRQb3NpdGlvbnMsXHJcbiAgICAgICAgfSA9IHRoaXMuX3Njcm9sbEJveC5jYWxjdWxhdGVTY3JvbGwoe1xyXG4gICAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgICAgdmlld3BvcnRXaWR0aDogc2Nyb2xsVmlld3BvcnQub2Zmc2V0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0OiBzY3JvbGxWaWV3cG9ydC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICBjb250ZW50V2lkdGg6IHNjcm9sbENvbnRlbnQub2Zmc2V0V2lkdGgsIGNvbnRlbnRIZWlnaHQ6IHNjcm9sbENvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgc3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICBlbmRPZmZzZXQsXHJcbiAgICAgICAgICBwb3NpdGlvblg6IHRoaXMuX3gsXHJcbiAgICAgICAgICBwb3NpdGlvblk6IHRoaXMuX3ksXHJcbiAgICAgICAgICBtaW5TaXplOiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5fJHRodW1iR3JhZGllbnRQb3NpdGlvbnMubmV4dCh0aHVtYkdyYWRpZW50UG9zaXRpb25zKTtcclxuICAgICAgdGhpcy5fJHRodW1iU2l6ZS5uZXh0KHRodW1iU2l6ZSk7XHJcbiAgICAgIHRoaXMuXyR0aHVtYlBvc2l0aW9uLm5leHQodGh1bWJQb3NpdGlvbik7XHJcbiAgICAgIHRoaXMuXyR0aHVtYlNob3cubmV4dChpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgPiAwIDogdGhpcy5zY3JvbGxXaWR0aCA+IDApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJSQUZIYW5kbGVyID0gKHRpbWU6IERPTUhpZ2hSZXNUaW1lU3RhbXApID0+IHtcclxuICAgICAgdXBkYXRlU2Nyb2xsQmFySGFuZGxlcigpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkdXBkYXRlU2Nyb2xsQmFyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlU2Nyb2xsQmFySWQgPSB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZDtcclxuICAgICAgICBpZiAodXBkYXRlU2Nyb2xsQmFySWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlU2Nyb2xsQmFySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJSQUZIYW5kbGVyKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR2aWV3cG9ydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHZpZXdwb3J0ID0+IHtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyLm9ic2VydmUodmlld3BvcnQpO1xyXG4gICAgICAgIHRoaXMuX29uUmVzaXplVmlld3BvcnRIYW5kbGVyKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuX29uUmVzaXplQ29udGVudEhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxXaGVlbEV2ZW50Pihjb250ZW50LCBXSEVFTCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoV0hFRUxfRVZFTlQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPj0gMCAmJiB0aGlzLl95IDw9IHRoaXMuc2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5feCA+PSAwICYmIHRoaXMuX3ggPD0gdGhpcy5zY3JvbGxXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICAgICAgICAgIHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueCxcclxuICAgICAgICAgICAgICBkZWx0YSA9IGlzVmVydGljYWwgPyBlLmRlbHRhWSA6IGUuZGVsdGFYLCBkcCA9IHN0YXJ0UG9zICsgZGVsdGEsIHBvc2l0aW9uID0gZHAgPCAwID8gMCA6IGRwID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiBkcDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IHBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCwgdXNlckFjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbW91c2VVcCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih3aW5kb3csIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgKSxcclxuICAgICAgJG1vdXNlRHJhZ0NhbmNlbCA9ICRtb3VzZVVwLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX0RPV04sIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxCYXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNjcm9sbEJhci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhJTlRFUkFDVElWRSkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICBsZXQgcHJldlBvcyA9IHN0YXJ0UG9zLCBwcmV2Q2xpZW50UG9zaXRpb24gPSAwLCBzdGFydFBvc0RlbHRhID0gMDtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRDbGllbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS5jbGllbnRZIDogZS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgIG9mZnNldHMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKSwgdmVsb2NpdGllcyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudDxNb3VzZUV2ZW50Pih3aW5kb3csIE1PVVNFX01PVkUsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICB0YWtlVW50aWwoJG1vdXNlRHJhZ0NhbmNlbCksXHJcbiAgICAgICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS5jbGllbnRZIDogZS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCwgZGVsdGEgPSBzdGFydENsaWVudFBvcyAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIGRwID0gc3RhcnRQb3MgKyBzdGFydFBvc0RlbHRhICsgZGVsdGEsIHBvc2l0aW9uID0gTWF0aC5yb3VuZChkcCA8IDAgPyAwIDogZHAgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IGRwKSwgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IGVuZFRpbWUgLSBzdGFydFRpbWUsIHNjcm9sbERlbHRhID0gcHJldkNsaWVudFBvc2l0aW9uID09PSAwID8gMCA6IHByZXZDbGllbnRQb3NpdGlvbiAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHByZXZDbGllbnRQb3NpdGlvbiA9IGN1cnJlbnRQb3M7XHJcbiAgICAgICAgICAgICAgICBwcmV2UG9zID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmUoaXNWZXJ0aWNhbCwgcG9zaXRpb24sIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFjZShbZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHdpbmRvdywgTU9VU0VfVVAsIHsgcGFzc2l2ZTogZmFsc2UgfSksIGZyb21FdmVudDxNb3VzZUV2ZW50Pihjb250ZW50LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiBmYWxzZSB9KV0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCAwLCB2MCwgYTApO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdG91Y2hVcCA9IGZyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICksXHJcbiAgICAgICR0b3VjaENhbmNlbGVyID0gJHRvdWNoVXAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfU1RBUlQsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxCYXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNjcm9sbEJhci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhJTlRFUkFDVElWRSkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICBsZXQgcHJldlBvcyA9IHN0YXJ0UG9zLCBwcmV2Q2xpZW50UG9zaXRpb24gPSAwLCBzdGFydFBvc0RlbHRhID0gMDtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRDbGllbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRZIDogZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgIG9mZnNldHMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKSwgdmVsb2NpdGllcyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX01PVkUsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICB0YWtlVW50aWwoJHRvdWNoQ2FuY2VsZXIpLFxyXG4gICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjUG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zRGVsdGEgKz0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WSA6IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WCxcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsIGRlbHRhID0gc3RhcnRDbGllbnRQb3MgLSBjdXJyZW50UG9zLFxyXG4gICAgICAgICAgICAgICAgICBkcCA9IHN0YXJ0UG9zICsgc3RhcnRQb3NEZWx0YSArIGRlbHRhLCBwb3NpdGlvbiA9IE1hdGgucm91bmQoZHAgPCAwID8gMCA6IGRwID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiBkcCksIGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLCBzY3JvbGxEZWx0YSA9IHByZXZDbGllbnRQb3NpdGlvbiA9PT0gMCA/IDAgOiBwcmV2Q2xpZW50UG9zaXRpb24gLSBjdXJyZW50UG9zLFxyXG4gICAgICAgICAgICAgICAgICB7IHYwIH0gPSB0aGlzLmNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHMsIHNjcm9sbERlbHRhLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllcywgdjAsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICBwcmV2Q2xpZW50UG9zaXRpb24gPSBjdXJyZW50UG9zO1xyXG4gICAgICAgICAgICAgICAgcHJldlBvcyA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlKGlzVmVydGljYWwsIHBvc2l0aW9uLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhY2UoW2Zyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KSwgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KGNvbnRlbnQsIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KV0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCB0aGlzLl92ZWxvY2l0eSwgdjAsIGEwKTtcclxuICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kY2xhc3NlcywgdGhpcy4kZGlyZWN0aW9uLCB0aGlzLiRncmFiYmluZ10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtjbGFzc2VzLCBkaXJlY3Rpb24sIGdyYWJiaW5nXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxDbGFzc2VzLm5leHQoeyAuLi5jbGFzc2VzLCBbZGlyZWN0aW9uXTogdHJ1ZSwgZ3JhYmJpbmcgfSk7XHJcbiAgICAgICAgdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMubmV4dCh7IFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZyB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLl8kdmlld0luaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBkZWx0YTogbnVtYmVyLCB0aW1lc3RhbXA6IG51bWJlciwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDEwKSB7XHJcbiAgICBvZmZzZXRzLnB1c2goW2RlbHRhLCB0aW1lc3RhbXAgPCBNSU5fVElNRVNUQU1QID8gTUlOX1RJTUVTVEFNUCA6IHRpbWVzdGFtcF0pO1xyXG5cclxuICAgIGNvbnN0IGxlbiA9IG9mZnNldHMubGVuZ3RoLCBzdGFydEluZGV4ID0gbGVuID4gaW5kZXhPZmZzZXQgPyBsZW4gLSBpbmRleE9mZnNldCA6IDAsIGxhc3RWU2lnbiA9IGNhbGN1bGF0ZURpcmVjdGlvbihvZmZzZXRzKTtcclxuICAgIGxldCB2U3VtID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4LCBsID0gb2Zmc2V0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgcDAgPSBvZmZzZXRzW2ldO1xyXG4gICAgICBpZiAobGFzdFZTaWduICE9PSBNYXRoLnNpZ24ocDBbMF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHYwID0gKHAwWzFdICE9PSAwID8gbGFzdFZTaWduICogTWF0aC5hYnMocDBbMF0gLyBwMFsxXSkgKiBTUEVFRF9TQ0FMRSA6IDApO1xyXG4gICAgICB2U3VtICs9IE1hdGguc2lnbih2MCkgKiBNYXRoLnBvdyh2MCwgNCkgKiAuMDAzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGwgPSBNYXRoLm1pbihvZmZzZXRzLmxlbmd0aCwgaW5kZXhPZmZzZXQpLCB2MCA9IGwgPiAwID8gKHZTdW0gLyBsKSA6IDA7XHJcbiAgICByZXR1cm4geyB2MCB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGRlbHRhOiBudW1iZXIsIHRpbWVzdGFtcDogbnVtYmVyLCBpbmRleE9mZnNldDogbnVtYmVyID0gMTApIHtcclxuICAgIHZlbG9jaXRpZXMucHVzaChbZGVsdGEsIHRpbWVzdGFtcCA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdGltZXN0YW1wXSk7XHJcbiAgICBjb25zdCBsZW4gPSB2ZWxvY2l0aWVzLmxlbmd0aCwgc3RhcnRJbmRleCA9IGxlbiA+IGluZGV4T2Zmc2V0ID8gbGVuIC0gaW5kZXhPZmZzZXQgOiAwO1xyXG4gICAgbGV0IGFTdW0gPSAwLCBwcmV2VjA6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsIGl0ZXJhdGlvbiA9IDAsIGxhc3RWU2lnbiA9IGNhbGN1bGF0ZURpcmVjdGlvbih2ZWxvY2l0aWVzKTtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4LCBsID0gdmVsb2NpdGllcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgdjAwID0gcHJldlYwLCB2MDEgPSB2ZWxvY2l0aWVzW2ldO1xyXG4gICAgICBpZiAobGFzdFZTaWduICE9PSBNYXRoLnNpZ24odjAxWzBdKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2MDApIHtcclxuICAgICAgICBjb25zdCBhMCA9IHRpbWVzdGFtcCA8IE1BWF9WRUxPQ0lUWV9USU1FU1RBTVAgPyAodjAwWzFdICE9PSAwID8gKGxhc3RWU2lnbiAqIE1hdGguYWJzKE1hdGguYWJzKHYwMVswXSkgLSBNYXRoLmFicyh2MDBbMF0pKSkgLyBNYXRoLmFicyh2MDBbMV0pIDogMCkgOiAwO1xyXG4gICAgICAgIGFTdW0gKz0gYTA7XHJcbiAgICAgICAgcHJldlYwID0gdjAxO1xyXG4gICAgICB9XHJcbiAgICAgIHByZXZWMCA9IHYwMTtcclxuICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYTAgPSBhU3VtICogRlJJQ1RJT05fRk9SQ0U7XHJcbiAgICByZXR1cm4geyBhMCB9O1xyXG4gIH1cclxuXHJcbiAgc3RvcFNjcm9sbGluZygpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50QW5pbWF0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fY3VycmVudEFuaW1hdGlvbi5jYW5jZWwoKTtcclxuICAgICAgdGhpcy5fY3VycmVudEFuaW1hdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZShpc1ZlcnRpY2FsOiBib29sZWFuLCBwb3NpdGlvbjogbnVtYmVyLCBibGVuZGluZzogYm9vbGVhbiA9IGZhbHNlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG8oeyBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBwb3NpdGlvbiwgYmVoYXZpb3I6IElOU1RBTlQsIGJsZW5kaW5nLCB1c2VyQWN0aW9uIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlV2l0aEFjY2VsZXJhdGlvbihpc1ZlcnRpY2FsOiBib29sZWFuLCBwb3NpdGlvbjogbnVtYmVyLCB2MDogbnVtYmVyLCB2OiBudW1iZXIsIGEwOiBudW1iZXIpIHtcclxuICAgIGlmIChhMCAhPT0gMCkge1xyXG4gICAgICBjb25zdCBkdlNpZ24gPSBNYXRoLnNpZ24odiksXHJcbiAgICAgICAgZHVyYXRpb24gPSBEVVJBVElPTiwgbWF4RHVyYXRpb24gPSBNQVhfRFVSQVRJT04sXHJcbiAgICAgICAgbWF4RGlzdGFuY2UgPSBkdlNpZ24gKiBNQVhfRElTVCwgcyA9IChkdlNpZ24gKiBNYXRoLmFicygoYTAgKiBNYXRoLnBvdyhkdXJhdGlvbiwgMikpICogLjUpIC8gMTAwMCkgLyBNQVNTLFxyXG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMocykgPCBNQVhfRElTVCA/IHMgOiBtYXhEaXN0YW5jZSwgcG9zaXRpb25XaXRoVmVsb2NpdHkgPSBwb3NpdGlvbiArIGRpc3RhbmNlLFxyXG4gICAgICAgIHZtYXggPSBNYXRoLm1heChNYXRoLmFicyh2MCksIE1hdGguYWJzKHYpKSxcclxuICAgICAgICBhZCA9IE1hdGguYWJzKHZtYXggIT09IDAgPyBNYXRoLnNxcnQodm1heCkgOiAwKSAqIDEwIC8gTUFTUyxcclxuICAgICAgICBhRHVyYXRpb24gPSBhZCA8IG1heER1cmF0aW9uID8gYWQgOiBtYXhEdXJhdGlvbixcclxuICAgICAgICBzdGFydFBvc2l0aW9uID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgdGhpcy5hbmltYXRlKHN0YXJ0UG9zaXRpb24sIE1hdGgucm91bmQocG9zaXRpb25XaXRoVmVsb2NpdHkpLCBhRHVyYXRpb24sIGVhc2VPdXRRdWFkLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFuaW1hdGUoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyLCBkdXJhdGlvbiA9IEFOSU1BVElPTl9EVVJBVElPTiwgZWFzaW5nRnVuY3Rpb246IEVhc2luZyA9IGVhc2VMaW5lYXIsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBnZXRTdGFydFRpbWUoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUw7XHJcbiAgICBsZXQgaXNDYW5jZWxlZCA9IGZhbHNlLCBwcmV2UG9zID0gc3RhcnRWYWx1ZSwgc3RhcnQgPSBzdGFydFZhbHVlLCBzdGFydFBvc0RlbHRhID0gMCwgZGVsdGEgPSAwLCBwcmV2VGltZSA9IHN0YXJ0VGltZSxcclxuICAgICAgZGlmZiA9IE1hdGguYWJzKE1hdGguYWJzKGVuZFZhbHVlKSAtIE1hdGguYWJzKHN0YXJ0KSk7XHJcblxyXG4gICAgaWYgKGRpZmYgPCBNSU5fQU5JTUFURURfVkFMVUUpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBzdGFydDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBzdGFydDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaW5pc2hlZFZhbHVlID0gZW5kVmFsdWUsXHJcbiAgICAgIGlzRmluaXNoZWQgPSBmYWxzZSwgYW5pbWF0aW9uSWQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdCBzdGVwID0gKGN1cnJlbnRUaW1lOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKCEhaXNDYW5jZWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgIGxldCBzY3JvbGxEZWx0YSA9IDA7XHJcbiAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgc2Nyb2xsRGVsdGEgPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICBzdGFydFBvc0RlbHRhICs9IHNjcm9sbERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSBzdGFydFBvc0RlbHRhICsgc3RhcnQgKyAoZmluaXNoZWRWYWx1ZSAtIHN0YXJ0KSAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLmFjdHVhbFNjcm9sbEhlaWdodCA6IHRoaXMuYWN0dWFsU2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsIDwgMCA/IDAgOiB2YWwgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IHZhbCxcclxuICAgICAgICB0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSAoY3VycmVudFZhbHVlID09PSBzY3JvbGxTaXplICYmIE1hdGgucm91bmQoc2Nyb2xsU2l6ZSkgPj0gTWF0aC5yb3VuZChhY3R1YWxTY3JvbGxTaXplKSkgfHxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPT09IDAgfHwgcHJvZ3Jlc3MgPT09IDE7XHJcblxyXG4gICAgICBkZWx0YSA9IGN1cnJlbnRWYWx1ZSAtIHNjcm9sbERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdHM7XHJcbiAgICAgIHRoaXMuX3ZlbG9jaXR5ID0gdGltZXN0YW1wID4gMCA/IGRlbHRhIC8gdGltZXN0YW1wIDogMDtcclxuXHJcbiAgICAgIHByZXZUaW1lID0gdDtcclxuICAgICAgcHJldlBvcyA9IGN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGNvbnN0IHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbENvbnRlbnQpIHtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgdGhpcy55ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHstY3VycmVudFZhbHVlfXB4LCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMueCA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7LWN1cnJlbnRWYWx1ZX1weCwgMCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxFbmQubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgfVxyXG4gICAgfSwgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25JZCk7XHJcbiAgICAgIGlzQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgfSwgdG8gPSAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICBmaW5pc2hlZFZhbHVlID0gdmFsdWU7XHJcbiAgICB9LCBmaW5pc2hlZCA9ICgpID0+IHsgcmV0dXJuIGlzRmluaXNoZWQ7IH07XHJcblxyXG4gICAgYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgdGhpcy5fY3VycmVudEFuaW1hdGlvbiA9IHtcclxuICAgICAgY2FuY2VsLFxyXG4gICAgICB0byxcclxuICAgICAgZmluaXNoZWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxCYXIoKSB7XHJcbiAgICB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvKHBhcmFtczogSVNjcm9sbFRvUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwb3NYID0gcGFyYW1zLnggfHwgcGFyYW1zLmxlZnQgfHwgMCxcclxuICAgICAgcG9zWSA9IHBhcmFtcy55IHx8IHBhcmFtcy50b3AgfHwgMCxcclxuICAgICAgdXNlckFjdGlvbiA9IHBhcmFtcy51c2VyQWN0aW9uID8/IGZhbHNlLFxyXG4gICAgICB4ID0gcG9zWCxcclxuICAgICAgeSA9IHBvc1ksXHJcbiAgICAgIGJlaGF2aW9yID0gcGFyYW1zLmJlaGF2aW9yID8/IElOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gcGFyYW1zLmJsZW5kaW5nID8/IHRydWUsXHJcbiAgICAgIHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc01vdmluZykge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmICh5IDwgMCB8fCB5ID4gdGhpcy5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHggPCAwIHx8IHggPiB0aGlzLnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeHggPSB4LFxyXG4gICAgICB5eSA9IHksXHJcbiAgICAgIHByZXZYID0gdGhpcy54LFxyXG4gICAgICBwcmV2WSA9IHRoaXMueTtcclxuICAgIHRoaXMueCA9IHh4O1xyXG4gICAgdGhpcy55ID0geXk7XHJcbiAgICBpZiAoYmVoYXZpb3IgPT09IEFVVE8gfHwgYmVoYXZpb3IgPT09IFNNT09USCkge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmIChwcmV2WSAhPT0geXkpIHtcclxuICAgICAgICAgIHRoaXMuYW5pbWF0ZShwcmV2WSwgeXksIEFOSU1BVElPTl9EVVJBVElPTiwgZWFzZUxpbmVhciwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2WCAhPT0geHgpIHtcclxuICAgICAgICAgIHRoaXMuYW5pbWF0ZShwcmV2WCwgeHgsIEFOSU1BVElPTl9EVVJBVElPTiwgZWFzZUxpbmVhciwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmIChwcmV2WSAhPT0geXkpIHtcclxuICAgICAgICAgIGlmICghYmxlbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzY3JvbGxDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAkey15eX1weCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocHJldlggIT09IHh4KSB7XHJcbiAgICAgICAgICBpZiAoIWJsZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHsteHh9cHgsIDAsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGwubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMubW92ZSh0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLCAwKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoZTogYW55KSB7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IGUgYXMgbnVtYmVyO1xyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIHtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVQb3NpdGlvbixcclxuICAgICAgfSA9IHRoaXMuX3Njcm9sbEJveC5nZXRTY3JvbGxQb3NpdGlvbkJ5U2Nyb2xsQmFyKHtcclxuICAgICAgICBzY3JvbGxTaXplOiBpc1ZlcnRpY2FsID8gdGhpcy5hY3R1YWxTY3JvbGxIZWlnaHQgOiB0aGlzLmFjdHVhbFNjcm9sbFdpZHRoLFxyXG4gICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2Nyb2xsVG8oeyBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBhYnNvbHV0ZVBvc2l0aW9uLCBiZWhhdmlvcjogQVVUTywgYmxlbmRpbmc6IHRydWUsIHVzZXJBY3Rpb246IHRydWUgfSk7XHJcbiAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTEJBUl9TQ1JPTExfRVZFTlQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgaWYgKHVwZGF0ZVNjcm9sbEJhcklkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlU2Nyb2xsQmFySWQpO1xyXG4gICAgICB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIGlmICh0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGxvY2FsZVNlbnNpdGl2ZSBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiBbbGlzdERpcl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIiBjbGFzcz1cIm5ndmxfX2NvbnRhaW5lclwiXHJcbiAgICBbbmdDbGFzc109XCIoJGNvbnRhaW5lckNsYXNzZXMgfCBhc3luYykhXCI+XHJcbiAgICA8ZGl2ICNzY3JvbGxWaWV3cG9ydCBjZGtTY3JvbGxhYmxlIHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICAgICAgICA8ZGl2ICNzY3JvbGxDb250ZW50IFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIiRmb2N1c2VkRWxlbWVudCB8IGFzeW5jXCIgdGFiaW5kZXg9XCIwXCIgcGFydD1cImxpc3RcIiBjbGFzcz1cIm5ndmxfX2xpc3RcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCIoJGFjdHVhbENsYXNzZXMgfCBhc3luYykhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXNjcm9sbC1iYXIgI3Njcm9sbEJhciBbaXNWZXJ0aWNhbF09XCIoJGlzVmVydGljYWwgfCBhc3luYykhXCIgW3NpemVdPVwiKCR0aHVtYlNpemUgfCBhc3luYykhXCJcclxuICAgICAgICBbdGhlbWVdPVwiKCRzY3JvbGxiYXJUaGVtZSB8IGFzeW5jKSFcIiBbcG9zaXRpb25dPVwiKCR0aHVtYlBvc2l0aW9uIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgW3RodW1iR3JhZGllbnRQb3NpdGlvbnNdPVwiKCR0aHVtYkdyYWRpZW50UG9zaXRpb25zIHwgYXN5bmMpIVwiIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIlxyXG4gICAgICAgIFtwcmVwYXJlZF09XCIoJHByZXBhcmVkU2lnbmFsIHwgYXN5bmMpIVwiIFtzaG93XT1cIigkdGh1bWJTaG93IHwgYXN5bmMpIVwiXHJcbiAgICAgICAgKG9uRHJhZyk9XCJvblNjcm9sbEJhckRyYWdIYW5kbGVyKCRldmVudClcIj48L25nLXNjcm9sbC1iYXI+XHJcbjwvZGl2PiJdfQ==
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUlwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVoRixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQ2hJLFdBQVcsRUFBRSxLQUFLLEdBQ25CLE1BQU0sYUFBYSxDQUFD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QUMsZ0JBQWdCO2dCQVV2QixTQUFTO3NCQURaLEtBQUs7Z0JBVUYsY0FBYztzQkFEakIsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFVRixTQUFTO3NCQURaLEtBQUs7Z0JBVUYsY0FBYztzQkFEakIsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBvZiwgcmFjZSwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxlckRpcmVjdGlvbiB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxCb3ggfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgU2Nyb2xsZXJEaXJlY3Rpb25zIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IElkLCBJU2l6ZSwgU2Nyb2xsQmFyVGhlbWUgfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IEVhc2luZyB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBlYXNlTGluZWFyLCBlYXNlT3V0UXVhZCB9IGZyb20gJy4vdXRpbHMvZWFzZSc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL25nLXNjcm9sbC1iYXIvbmctc2Nyb2xsLWJhci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3JhZGllbnRDb2xvclBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2dyYWRpZW50LWNvbG9yLXBvc2l0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUsXHJcbiAgSU5URVJBQ1RJVkUsIE1PVVNFX0RPV04sIE1PVVNFX01PVkUsIE1PVVNFX1VQLCBTQ1JPTExFUl9TQ1JPTEwsIFNDUk9MTEVSX1NDUk9MTEJBUl9TQ1JPTEwsIFNDUk9MTEVSX1dIRUVMLCBUT1VDSF9FTkQsIFRPVUNIX01PVkUsXHJcbiAgVE9VQ0hfU1RBUlQsIFdIRUVMLFxyXG59IGZyb20gJy4uLy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuY29uc3QgVE9QID0gJ3RvcCcsXHJcbiAgTEVGVCA9ICdsZWZ0JyxcclxuICBJTlNUQU5UID0gJ2luc3RhbnQnLFxyXG4gIEFVVE8gPSAnYXV0bycsXHJcbiAgU01PT1RIID0gJ3Ntb290aCcsXHJcbiAgVkVSVElDQUwgPSAndmVydGljYWwnLFxyXG4gIERVUkFUSU9OID0gMjAwMCxcclxuICBGUklDVElPTl9GT1JDRSA9IC4wMzUsXHJcbiAgTUFYX0RVUkFUSU9OID0gNDAwMCxcclxuICBBTklNQVRJT05fRFVSQVRJT04gPSAyMDAsXHJcbiAgTUFTUyA9IC4wMDUsXHJcbiAgTUFYX0RJU1QgPSAxMjUwMCxcclxuICBNSU5fVElNRVNUQU1QID0gMjAsXHJcbiAgTUFYX1ZFTE9DSVRZX1RJTUVTVEFNUCA9IDEwMCxcclxuICBNSU5fQU5JTUFURURfVkFMVUUgPSAxMCxcclxuICBTUEVFRF9TQ0FMRSA9IDU7XHJcblxyXG5jb25zdCBnZXRTdGFydFRpbWUgPSAoKSA9PiB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfVxyXG5cclxuY29uc3QgY2FsY3VsYXRlRGlyZWN0aW9uID0gKGJ1ZmZlcjogQXJyYXk8W251bWJlciwgbnVtYmVyXT4pID0+IHtcclxuICBmb3IgKGxldCBpID0gYnVmZmVyLmxlbmd0aCAtIDEsIGwgPSAwOyBpID49IGw7IGktLSkge1xyXG4gICAgY29uc3QgdiA9IGJ1ZmZlcltpXTtcclxuICAgIGlmICh2WzBdID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGguc2lnbih2WzBdKTtcclxuICB9XHJcbiAgcmV0dXJuIDE7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICB4PzogbnVtYmVyO1xyXG4gIHk/OiBudW1iZXI7XHJcbiAgbGVmdD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgYmxlbmRpbmc/OiBib29sZWFuO1xyXG4gIGJlaGF2aW9yPzogXCJhdXRvXCIgfCBcImluc3RhbnRcIiB8IFwic21vb3RoXCIgfCBzdHJpbmc7XHJcbiAgdXNlckFjdGlvbj86IGJvb2xlYW47XHJcbiAgZmlyZVVwZGF0ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKSxcclxuICBXSEVFTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9XSEVFTCksXHJcbiAgU0NST0xMQkFSX1NDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2Nyb2xsZXIgZm9yIHRoZSBOZ1ZpcnR1YWxMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE0LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXNjcm9sbGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGVudCcpXHJcbiAgc2Nyb2xsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pXHJcbiAgY2RrU2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQmFyJywgeyByZWFkOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB9KVxyXG4gIHNjcm9sbEJhcjogTmdTY3JvbGxCYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JylcclxuICBzY3JvbGxWaWV3cG9ydDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkdmlld0luaXRpYWxpemVkID0gdGhpcy5fJHZpZXdJbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcbiAgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpcmVjdGlvbih2OiBTY3JvbGxlckRpcmVjdGlvbnMpIHtcclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZEVsZW1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRmb2N1c2VkRWxlbWVudCA9IHRoaXMuXyRmb2N1c2VkRWxlbWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZm9jdXNlZEVsZW1lbnQodjogSWQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZm9jdXNlZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRsb2FkaW5nID0gdGhpcy5fJGxvYWRpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fJGxvYWRpbmcubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGNsYXNzZXMgPSB0aGlzLl8kY2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xhc3Nlcyh2OiB7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgY2xhc3NlcygpIHsgcmV0dXJuIHRoaXMuXyRjbGFzc2VzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5ICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl8kc3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkZW5kT2Zmc2V0ID0gdGhpcy5fJGVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5kT2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5fJGVuZE9mZnNldC5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgZW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGVtZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsQmFyVGhlbWUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclRoZW1lID0gdGhpcy5fJHNjcm9sbGJhclRoZW1lLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGVtZSh2OiBTY3JvbGxCYXJUaGVtZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoZW1lLm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaGVtZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaGVtZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxDbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbENsYXNzZXMgPSB0aGlzLl8kYWN0dWFsQ2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRhaW5lckNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkY29udGFpbmVyQ2xhc3NlcyA9IHRoaXMuXyRjb250YWluZXJDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgcmVhZG9ubHkgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdyYWRpZW50Q29sb3JQb3NpdGlvbnM+KFswLCAwXSk7XHJcbiAgcmVhZG9ubHkgJHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSAkdGh1bWJTaXplID0gdGhpcy5fJHRodW1iU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iUG9zaXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHRodW1iUG9zaXRpb24gPSB0aGlzLl8kdGh1bWJQb3NpdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRodW1iU2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICR0aHVtYlNob3cgPSB0aGlzLl8kdGh1bWJTaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcGFyZWRTaWduYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkcHJlcGFyZWRTaWduYWwgPSB0aGlzLl8kcHJlcGFyZWRTaWduYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRncmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRncmFiYmluZyA9IHRoaXMuXyRncmFiYmluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihUZXh0RGlyZWN0aW9ucy5MVFIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVwZGF0ZVNjcm9sbEJhciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJvdGVjdGVkICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEVuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEVuZCA9IHRoaXMuXyRzY3JvbGxFbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJveCA9IG5ldyBTY3JvbGxCb3goKTtcclxuXHJcbiAgZ2V0IHNjcm9sbGFibGUoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRTaXplO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfeDogbnVtYmVyID0gMDtcclxuICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3ggPSB0aGlzLl9hY3R1YWxYID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgcHJpdmF0ZSBfeTogbnVtYmVyID0gMDtcclxuICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCB0b3RhbFNpemUodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90b3RhbFNpemUgPSB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3RvdGFsU2l6ZSxcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gVkVSVElDQUw7XHJcbiAgICByZXR1cm4gaXNWZXJ0aWNhbCA/IHRvdGFsU2l6ZSA8IHZpZXdwb3J0SGVpZ2h0ID8gMCA6IHRvdGFsU2l6ZSAtIHZpZXdwb3J0SGVpZ2h0IDogdGhpcy5zY3JvbGxIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0dWFsU2Nyb2xsV2lkdGgoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoOiB2aWV3cG9ydFdpZHRoIH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBWRVJUSUNBTDtcclxuICAgIHJldHVybiBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxXaWR0aCA6IHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyAwIDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFjdHVhbFNjcm9sbExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFjdHVhbFNjcm9sbFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5feDtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5feTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxXaWR0aCgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBhY3R1YWxWaWV3cG9ydFdpZHRoID0gdmlld3BvcnRXaWR0aCxcclxuICAgICAgeyB3aWR0aDogY29udGVudFdpZHRoIH0gPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCA8IGFjdHVhbFZpZXdwb3J0V2lkdGggPyAwIDogKGNvbnRlbnRXaWR0aCAtIGFjdHVhbFZpZXdwb3J0V2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIGFjdHVhbFZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQsXHJcbiAgICAgIHsgaGVpZ2h0OiBjb250ZW50SGVpZ2h0IH0gPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQgPCBhY3R1YWxWaWV3cG9ydEhlaWdodCA/IDAgOiAoY29udGVudEhlaWdodCAtIGFjdHVhbFZpZXdwb3J0SGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlbG9jaXR5OiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgcmVhZG9ubHkgJHZpZXdwb3J0Qm91bmRzID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICByZWFkb25seSAkY29udGVudEJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF92aWV3cG9ydFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVWaWV3cG9ydEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgdGhpcy5fJHZpZXdwb3J0Qm91bmRzLm5leHQoeyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udGVudFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVDb250ZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGVudCkge1xyXG4gICAgICB0aGlzLl8kY29udGVudEJvdW5kcy5uZXh0KHsgd2lkdGg6IGNvbnRlbnQub2Zmc2V0V2lkdGgsIGhlaWdodDogY29udGVudC5vZmZzZXRIZWlnaHQgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTY3JvbGxCYXJJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25JZDogbnVtYmVyID0gLTE7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkMTogbnVtYmVyID0gLTE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlcnZpY2U6IE5nVmlydHVhbExpc3RTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGxhbmdUZXh0RGlyLnBpcGUoXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kbGFuZ1RleHREaXIubmV4dCh2KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdmlld3BvcnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZVZpZXdwb3J0SGFuZGxlcik7XHJcbiAgICB0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoZGlyZWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KGRpcmVjdGlvbiA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdwb3J0ID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5zY3JvbGxWaWV3cG9ydCkucGlwZShcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICApKSxcclxuICAgICksXHJcbiAgICAgICRjb250ZW50ID0gdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodGhpcy5zY3JvbGxDb250ZW50KS5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICAgICkpLFxyXG4gICAgICApLFxyXG4gICAgICAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy4kdXBkYXRlU2Nyb2xsQmFyO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhckhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSxcclxuICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzY3JvbGxDb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICAgIHNjcm9sbFZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aHVtYlNpemUsXHJcbiAgICAgICAgICB0aHVtYlBvc2l0aW9uLFxyXG4gICAgICAgICAgdGh1bWJHcmFkaWVudFBvc2l0aW9ucyxcclxuICAgICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmNhbGN1bGF0ZVNjcm9sbCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgICB2aWV3cG9ydFdpZHRoOiBzY3JvbGxWaWV3cG9ydC5vZmZzZXRXaWR0aCwgdmlld3BvcnRIZWlnaHQ6IHNjcm9sbFZpZXdwb3J0Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgIGNvbnRlbnRXaWR0aDogc2Nyb2xsQ29udGVudC5vZmZzZXRXaWR0aCwgY29udGVudEhlaWdodDogc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICBzdGFydE9mZnNldCxcclxuICAgICAgICAgIGVuZE9mZnNldCxcclxuICAgICAgICAgIHBvc2l0aW9uWDogdGhpcy5feCxcclxuICAgICAgICAgIHBvc2l0aW9uWTogdGhpcy5feSxcclxuICAgICAgICAgIG1pblNpemU6IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl8kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5uZXh0KHRodW1iR3JhZGllbnRQb3NpdGlvbnMpO1xyXG4gICAgICB0aGlzLl8kdGh1bWJTaXplLm5leHQodGh1bWJTaXplKTtcclxuICAgICAgdGhpcy5fJHRodW1iUG9zaXRpb24ubmV4dCh0aHVtYlBvc2l0aW9uKTtcclxuICAgICAgdGhpcy5fJHRodW1iU2hvdy5uZXh0KGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA+IDAgOiB0aGlzLnNjcm9sbFdpZHRoID4gMCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIgPSAodGltZTogRE9NSGlnaFJlc1RpbWVTdGFtcCkgPT4ge1xyXG4gICAgICB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyKCk7XHJcbiAgICB9O1xyXG5cclxuICAgICR1cGRhdGVTY3JvbGxCYXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgICAgIGlmICh1cGRhdGVTY3JvbGxCYXJJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodmlld3BvcnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh2aWV3cG9ydCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVWaWV3cG9ydEhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KGNvbnRlbnQsIFdIRUVMLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChXSEVFTF9FVkVOVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5feSA+PSAwICYmIHRoaXMuX3kgPD0gdGhpcy5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl94ID49IDAgJiYgdGhpcy5feCA8PSB0aGlzLnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgICAgICAgc3RhcnRQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54LFxyXG4gICAgICAgICAgICAgIGRlbHRhID0gaXNWZXJ0aWNhbCA/IGUuZGVsdGFZIDogZS5kZWx0YVgsIGRwID0gc3RhcnRQb3MgKyBkZWx0YSwgcG9zaXRpb24gPSBkcCA8IDAgPyAwIDogZHAgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IGRwO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHsgW2lzVmVydGljYWwgPyBUT1AgOiBMRUZUXTogcG9zaXRpb24sIGJlaGF2aW9yOiBJTlNUQU5ULCB1c2VyQWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRtb3VzZVVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHdpbmRvdywgTU9VU0VfVVAsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICApLFxyXG4gICAgICAkbW91c2VEcmFnQ2FuY2VsID0gJG1vdXNlVXAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29udGVudCwgTU9VU0VfRE9XTiwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbEJhcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKElOVEVSQUNUSVZFKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFBvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgIGxldCBwcmV2UG9zID0gc3RhcnRQb3MsIHByZXZDbGllbnRQb3NpdGlvbiA9IDAsIHN0YXJ0UG9zRGVsdGEgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydENsaWVudFBvcyA9IGlzVmVydGljYWwgPyBlLmNsaWVudFkgOiBlLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgb2Zmc2V0cyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpLCB2ZWxvY2l0aWVzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHdpbmRvdywgTU9VU0VfTU9WRSwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkbW91c2VEcmFnQ2FuY2VsKSxcclxuICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoY1BvcyAhPT0gcHJldlBvcykge1xyXG4gICAgICAgICAgICAgICAgICBzdGFydFBvc0RlbHRhICs9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvcyA9IGlzVmVydGljYWwgPyBlLmNsaWVudFkgOiBlLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLCBkZWx0YSA9IHN0YXJ0Q2xpZW50UG9zIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgZHAgPSBzdGFydFBvcyArIHN0YXJ0UG9zRGVsdGEgKyBkZWx0YSwgcG9zaXRpb24gPSBNYXRoLnJvdW5kKGRwIDwgMCA/IDAgOiBkcCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogZHApLCBlbmRUaW1lID0gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSwgc2Nyb2xsRGVsdGEgPSBwcmV2Q2xpZW50UG9zaXRpb24gPT09IDAgPyAwIDogcHJldkNsaWVudFBvc2l0aW9uIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgcHJldkNsaWVudFBvc2l0aW9uID0gY3VycmVudFBvcztcclxuICAgICAgICAgICAgICAgIHByZXZQb3MgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZShpc1ZlcnRpY2FsLCBwb3NpdGlvbiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByYWNlKFtmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiBmYWxzZSB9KSwgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgYTAgfSA9IHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVdpdGhBY2NlbGVyYXRpb24oaXNWZXJ0aWNhbCwgcG9zaXRpb24sIDAsIHYwLCBhMCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR0b3VjaFVwID0gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgKSxcclxuICAgICAgJHRvdWNoQ2FuY2VsZXIgPSAkdG91Y2hVcC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxUb3VjaEV2ZW50Pihjb250ZW50LCBUT1VDSF9TVEFSVCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbEJhcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKElOVEVSQUNUSVZFKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuXyRncmFiYmluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFBvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgIGxldCBwcmV2UG9zID0gc3RhcnRQb3MsIHByZXZDbGllbnRQb3NpdGlvbiA9IDAsIHN0YXJ0UG9zRGVsdGEgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydENsaWVudFBvcyA9IGlzVmVydGljYWwgPyBlLnRvdWNoZXNbZS50b3VjaGVzLmxlbmd0aCAtIDFdLmNsaWVudFkgOiBlLnRvdWNoZXNbZS50b3VjaGVzLmxlbmd0aCAtIDFdLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgb2Zmc2V0cyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpLCB2ZWxvY2l0aWVzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfTU9WRSwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkdG91Y2hDYW5jZWxlciksXHJcbiAgICAgICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRZIDogZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCwgZGVsdGEgPSBzdGFydENsaWVudFBvcyAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIGRwID0gc3RhcnRQb3MgKyBzdGFydFBvc0RlbHRhICsgZGVsdGEsIHBvc2l0aW9uID0gTWF0aC5yb3VuZChkcCA8IDAgPyAwIDogZHAgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IGRwKSwgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IGVuZFRpbWUgLSBzdGFydFRpbWUsIHNjcm9sbERlbHRhID0gcHJldkNsaWVudFBvc2l0aW9uID09PSAwID8gMCA6IHByZXZDbGllbnRQb3NpdGlvbiAtIGN1cnJlbnRQb3MsXHJcbiAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHByZXZDbGllbnRQb3NpdGlvbiA9IGN1cnJlbnRQb3M7XHJcbiAgICAgICAgICAgICAgICBwcmV2UG9zID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmUoaXNWZXJ0aWNhbCwgcG9zaXRpb24sIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFjZShbZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pLCBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgYTAgfSA9IHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGdyYWJiaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVdpdGhBY2NlbGVyYXRpb24oaXNWZXJ0aWNhbCwgcG9zaXRpb24sIHRoaXMuX3ZlbG9jaXR5LCB2MCwgYTApO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRjbGFzc2VzLCB0aGlzLiRkaXJlY3Rpb24sIHRoaXMuJGdyYWJiaW5nXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2NsYXNzZXMsIGRpcmVjdGlvbiwgZ3JhYmJpbmddKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbENsYXNzZXMubmV4dCh7IC4uLmNsYXNzZXMsIFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZyB9KTtcclxuICAgICAgICB0aGlzLl8kY29udGFpbmVyQ2xhc3Nlcy5uZXh0KHsgW2RpcmVjdGlvbl06IHRydWUsIGdyYWJiaW5nIH0pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0czogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGRlbHRhOiBudW1iZXIsIHRpbWVzdGFtcDogbnVtYmVyLCBpbmRleE9mZnNldDogbnVtYmVyID0gMTApIHtcclxuICAgIG9mZnNldHMucHVzaChbZGVsdGEsIHRpbWVzdGFtcCA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdGltZXN0YW1wXSk7XHJcblxyXG4gICAgY29uc3QgbGVuID0gb2Zmc2V0cy5sZW5ndGgsIHN0YXJ0SW5kZXggPSBsZW4gPiBpbmRleE9mZnNldCA/IGxlbiAtIGluZGV4T2Zmc2V0IDogMCwgbGFzdFZTaWduID0gY2FsY3VsYXRlRGlyZWN0aW9uKG9mZnNldHMpO1xyXG4gICAgbGV0IHZTdW0gPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGwgPSBvZmZzZXRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBwMCA9IG9mZnNldHNbaV07XHJcbiAgICAgIGlmIChsYXN0VlNpZ24gIT09IE1hdGguc2lnbihwMFswXSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdjAgPSAocDBbMV0gIT09IDAgPyBsYXN0VlNpZ24gKiBNYXRoLmFicyhwMFswXSAvIHAwWzFdKSAqIFNQRUVEX1NDQUxFIDogMCk7XHJcbiAgICAgIHZTdW0gKz0gTWF0aC5zaWduKHYwKSAqIE1hdGgucG93KHYwLCA0KSAqIC4wMDM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbCA9IE1hdGgubWluKG9mZnNldHMubGVuZ3RoLCBpbmRleE9mZnNldCksIHYwID0gbCA+IDAgPyAodlN1bSAvIGwpIDogMDtcclxuICAgIHJldHVybiB7IHYwIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiwgZGVsdGE6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXIsIGluZGV4T2Zmc2V0OiBudW1iZXIgPSAxMCkge1xyXG4gICAgdmVsb2NpdGllcy5wdXNoKFtkZWx0YSwgdGltZXN0YW1wIDwgTUlOX1RJTUVTVEFNUCA/IE1JTl9USU1FU1RBTVAgOiB0aW1lc3RhbXBdKTtcclxuICAgIGNvbnN0IGxlbiA9IHZlbG9jaXRpZXMubGVuZ3RoLCBzdGFydEluZGV4ID0gbGVuID4gaW5kZXhPZmZzZXQgPyBsZW4gLSBpbmRleE9mZnNldCA6IDA7XHJcbiAgICBsZXQgYVN1bSA9IDAsIHByZXZWMDogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgaXRlcmF0aW9uID0gMCwgbGFzdFZTaWduID0gY2FsY3VsYXRlRGlyZWN0aW9uKHZlbG9jaXRpZXMpO1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGwgPSB2ZWxvY2l0aWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCB2MDAgPSBwcmV2VjAsIHYwMSA9IHZlbG9jaXRpZXNbaV07XHJcbiAgICAgIGlmIChsYXN0VlNpZ24gIT09IE1hdGguc2lnbih2MDFbMF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHYwMCkge1xyXG4gICAgICAgIGNvbnN0IGEwID0gdGltZXN0YW1wIDwgTUFYX1ZFTE9DSVRZX1RJTUVTVEFNUCA/ICh2MDBbMV0gIT09IDAgPyAobGFzdFZTaWduICogTWF0aC5hYnMoTWF0aC5hYnModjAxWzBdKSAtIE1hdGguYWJzKHYwMFswXSkpKSAvIE1hdGguYWJzKHYwMFsxXSkgOiAwKSA6IDA7XHJcbiAgICAgICAgYVN1bSArPSBhMDtcclxuICAgICAgICBwcmV2VjAgPSB2MDE7XHJcbiAgICAgIH1cclxuICAgICAgcHJldlYwID0gdjAxO1xyXG4gICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhMCA9IGFTdW0gKiBGUklDVElPTl9GT1JDRTtcclxuICAgIHJldHVybiB7IGEwIH07XHJcbiAgfVxyXG5cclxuICBzdG9wU2Nyb2xsaW5nKCkge1xyXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uSWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlKGlzVmVydGljYWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBudW1iZXIsIGJsZW5kaW5nOiBib29sZWFuID0gZmFsc2UsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IHBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCwgYmxlbmRpbmcsIHVzZXJBY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBudW1iZXIsIHYwOiBudW1iZXIsIHY6IG51bWJlciwgYTA6IG51bWJlcikge1xyXG4gICAgaWYgKGEwICE9PSAwKSB7XHJcbiAgICAgIGNvbnN0IGR2U2lnbiA9IE1hdGguc2lnbih2KSxcclxuICAgICAgICBkdXJhdGlvbiA9IERVUkFUSU9OLCBtYXhEdXJhdGlvbiA9IE1BWF9EVVJBVElPTixcclxuICAgICAgICBtYXhEaXN0YW5jZSA9IGR2U2lnbiAqIE1BWF9ESVNULCBzID0gKGR2U2lnbiAqIE1hdGguYWJzKChhMCAqIE1hdGgucG93KGR1cmF0aW9uLCAyKSkgKiAuNSkgLyAxMDAwKSAvIE1BU1MsXHJcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhzKSA8IE1BWF9ESVNUID8gcyA6IG1heERpc3RhbmNlLCBwb3NpdGlvbldpdGhWZWxvY2l0eSA9IHBvc2l0aW9uICsgZGlzdGFuY2UsXHJcbiAgICAgICAgdm1heCA9IE1hdGgubWF4KE1hdGguYWJzKHYwKSwgTWF0aC5hYnModikpLFxyXG4gICAgICAgIGFkID0gTWF0aC5hYnModm1heCAhPT0gMCA/IE1hdGguc3FydCh2bWF4KSA6IDApICogMTAgLyBNQVNTLFxyXG4gICAgICAgIGFEdXJhdGlvbiA9IGFkIDwgbWF4RHVyYXRpb24gPyBhZCA6IG1heER1cmF0aW9uLFxyXG4gICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICB0aGlzLmFuaW1hdGUoc3RhcnRQb3NpdGlvbiwgTWF0aC5yb3VuZChwb3NpdGlvbldpdGhWZWxvY2l0eSksIGFEdXJhdGlvbiwgZWFzZU91dFF1YWQsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZShzdGFydFZhbHVlOiBudW1iZXIsIGVuZFZhbHVlOiBudW1iZXIsIGR1cmF0aW9uID0gQU5JTUFUSU9OX0RVUkFUSU9OLCBlYXNpbmdGdW5jdGlvbjogRWFzaW5nID0gZWFzZUxpbmVhciwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGdldFN0YXJ0VGltZSgpLCBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTDtcclxuICAgIGxldCBpc0NhbmNlbGVkID0gZmFsc2UsIHByZXZQb3MgPSBzdGFydFZhbHVlLCBzdGFydCA9IHN0YXJ0VmFsdWUsIHN0YXJ0UG9zRGVsdGEgPSAwLCBkZWx0YSA9IDAsIHByZXZUaW1lID0gc3RhcnRUaW1lLFxyXG4gICAgICBkaWZmID0gTWF0aC5hYnMoTWF0aC5hYnMoZW5kVmFsdWUpIC0gTWF0aC5hYnMoc3RhcnQpKTtcclxuXHJcbiAgICBpZiAoZGlmZiA8IE1JTl9BTklNQVRFRF9WQUxVRSkge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIHRoaXMueSA9IHByZXZQb3MgPSBzdGFydCA9IGVuZFZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMueCA9IHByZXZQb3MgPSBzdGFydCA9IGVuZFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIHRoaXMueSA9IHN0YXJ0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMueCA9IHN0YXJ0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpbmlzaGVkVmFsdWUgPSBlbmRWYWx1ZSxcclxuICAgICAgaXNGaW5pc2hlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHN0ZXAgPSAoY3VycmVudFRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoISFpc0NhbmNlbGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjUG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgbGV0IHNjcm9sbERlbHRhID0gMDtcclxuICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICBzY3JvbGxEZWx0YSA9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgIHN0YXJ0UG9zRGVsdGEgKz0gc2Nyb2xsRGVsdGE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBjdXJyZW50VGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICBwcm9ncmVzcyA9IHN0YXJ0ID09PSBlbmRWYWx1ZSA/IDEgOiBNYXRoLm1pbihkdXJhdGlvbiA+IDAgPyBlbGFwc2VkIC8gZHVyYXRpb24gOiAwLCAxKSxcclxuICAgICAgICBlYXNlZFByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb24ocHJvZ3Jlc3MpLFxyXG4gICAgICAgIHZhbCA9IHN0YXJ0UG9zRGVsdGEgKyBzdGFydCArIChmaW5pc2hlZFZhbHVlIC0gc3RhcnQpICogZWFzZWRQcm9ncmVzcyxcclxuICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCxcclxuICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuYWN0dWFsU2Nyb2xsSGVpZ2h0IDogdGhpcy5hY3R1YWxTY3JvbGxXaWR0aCxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWwgPCAwID8gMCA6IHZhbCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogdmFsLFxyXG4gICAgICAgIHQgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgaXNGaW5pc2hlZCA9IChjdXJyZW50VmFsdWUgPT09IHNjcm9sbFNpemUgJiYgTWF0aC5yb3VuZChzY3JvbGxTaXplKSA+PSBNYXRoLnJvdW5kKGFjdHVhbFNjcm9sbFNpemUpKSB8fFxyXG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9PT0gMCB8fCBwcm9ncmVzcyA9PT0gMTtcclxuXHJcbiAgICAgIGRlbHRhID0gY3VycmVudFZhbHVlIC0gc2Nyb2xsRGVsdGEgLSBwcmV2UG9zO1xyXG5cclxuICAgICAgY29uc3QgdHMgPSB0IC0gcHJldlRpbWUsIHRpbWVzdGFtcCA9IHRzIDwgTUlOX1RJTUVTVEFNUCA/IE1JTl9USU1FU1RBTVAgOiB0cztcclxuICAgICAgdGhpcy5fdmVsb2NpdHkgPSB0aW1lc3RhbXAgPiAwID8gZGVsdGEgLyB0aW1lc3RhbXAgOiAwO1xyXG5cclxuICAgICAgcHJldlRpbWUgPSB0O1xyXG4gICAgICBwcmV2UG9zID0gY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgY29uc3Qgc2Nyb2xsQ29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsQ29udGVudCkge1xyXG4gICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICB0aGlzLnkgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICBzY3JvbGxDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAkey1jdXJyZW50VmFsdWV9cHgsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGwubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy54ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHstY3VycmVudFZhbHVlfXB4LCAwLCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbEVuZC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxCYXIoKSB7XHJcbiAgICB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvKHBhcmFtczogSVNjcm9sbFRvUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwb3NYID0gcGFyYW1zLnggfHwgcGFyYW1zLmxlZnQgfHwgMCxcclxuICAgICAgcG9zWSA9IHBhcmFtcy55IHx8IHBhcmFtcy50b3AgfHwgMCxcclxuICAgICAgdXNlckFjdGlvbiA9IHBhcmFtcy51c2VyQWN0aW9uID8/IGZhbHNlLFxyXG4gICAgICB4ID0gcG9zWCxcclxuICAgICAgeSA9IHBvc1ksXHJcbiAgICAgIGJlaGF2aW9yID0gcGFyYW1zLmJlaGF2aW9yID8/IElOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gcGFyYW1zLmJsZW5kaW5nID8/IHRydWUsXHJcbiAgICAgIGZpcmVVcGRhdGUgPSBwYXJhbXMuZmlyZVVwZGF0ZSA/PyB0cnVlLFxyXG4gICAgICBzY3JvbGxDb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSBTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTDtcclxuXHJcbiAgICBpZiAodGhpcy5faXNNb3ZpbmcpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBpZiAoeSA8IDAgfHwgeSA+IHRoaXMuc2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh4IDwgMCB8fCB4ID4gdGhpcy5zY3JvbGxXaWR0aCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHh4ID0geCxcclxuICAgICAgeXkgPSB5LFxyXG4gICAgICBwcmV2WCA9IHRoaXMueCxcclxuICAgICAgcHJldlkgPSB0aGlzLnk7XHJcbiAgICB0aGlzLnggPSB4eDtcclxuICAgIHRoaXMueSA9IHl5O1xyXG4gICAgaWYgKGJlaGF2aW9yID09PSBBVVRPIHx8IGJlaGF2aW9yID09PSBTTU9PVEgpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBpZiAocHJldlkgIT09IHl5KSB7XHJcbiAgICAgICAgICB0aGlzLmFuaW1hdGUocHJldlksIHl5LCBBTklNQVRJT05fRFVSQVRJT04sIGVhc2VMaW5lYXIsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocHJldlggIT09IHh4KSB7XHJcbiAgICAgICAgICB0aGlzLmFuaW1hdGUocHJldlgsIHh4LCBBTklNQVRJT05fRFVSQVRJT04sIGVhc2VMaW5lYXIsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBpZiAocHJldlkgIT09IHl5KSB7XHJcbiAgICAgICAgICBpZiAoIWJsZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHsteXl9cHgsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZmlyZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVTY3JvbGxFdmVudCh1c2VyQWN0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHByZXZYICE9PSB4eCkge1xyXG4gICAgICAgICAgaWYgKCFibGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7LXh4fXB4LCAwLCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGZpcmVVcGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQodXNlckFjdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlyZVNjcm9sbEV2ZW50KHVzZXJBY3Rpb246IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuXyRzY3JvbGwubmV4dCh1c2VyQWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMubW92ZSh0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLCAwKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoZTogYW55KSB7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IGUgYXMgbnVtYmVyO1xyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIHtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVQb3NpdGlvbixcclxuICAgICAgfSA9IHRoaXMuX3Njcm9sbEJveC5nZXRTY3JvbGxQb3NpdGlvbkJ5U2Nyb2xsQmFyKHtcclxuICAgICAgICBzY3JvbGxTaXplOiBpc1ZlcnRpY2FsID8gdGhpcy5hY3R1YWxTY3JvbGxIZWlnaHQgOiB0aGlzLmFjdHVhbFNjcm9sbFdpZHRoLFxyXG4gICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2Nyb2xsVG8oeyBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBhYnNvbHV0ZVBvc2l0aW9uLCBiZWhhdmlvcjogQVVUTywgYmxlbmRpbmc6IHRydWUsIHVzZXJBY3Rpb246IHRydWUgfSk7XHJcbiAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTEJBUl9TQ1JPTExfRVZFTlQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgaWYgKHVwZGF0ZVNjcm9sbEJhcklkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlU2Nyb2xsQmFySWQpO1xyXG4gICAgICB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIGlmICh0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGxvY2FsZVNlbnNpdGl2ZSBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiBbbGlzdERpcl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIiBjbGFzcz1cIm5ndmxfX2NvbnRhaW5lclwiXHJcbiAgICBbbmdDbGFzc109XCIoJGNvbnRhaW5lckNsYXNzZXMgfCBhc3luYykhXCI+XHJcbiAgICA8ZGl2ICNzY3JvbGxWaWV3cG9ydCBjZGtTY3JvbGxhYmxlIHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICAgICAgICA8ZGl2ICNzY3JvbGxDb250ZW50IFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIiRmb2N1c2VkRWxlbWVudCB8IGFzeW5jXCIgdGFiaW5kZXg9XCIwXCIgcGFydD1cImxpc3RcIiBjbGFzcz1cIm5ndmxfX2xpc3RcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCIoJGFjdHVhbENsYXNzZXMgfCBhc3luYykhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXNjcm9sbC1iYXIgI3Njcm9sbEJhciBbaXNWZXJ0aWNhbF09XCIoJGlzVmVydGljYWwgfCBhc3luYykhXCIgW3NpemVdPVwiKCR0aHVtYlNpemUgfCBhc3luYykhXCJcclxuICAgICAgICBbdGhlbWVdPVwiKCRzY3JvbGxiYXJUaGVtZSB8IGFzeW5jKSFcIiBbcG9zaXRpb25dPVwiKCR0aHVtYlBvc2l0aW9uIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgW3RodW1iR3JhZGllbnRQb3NpdGlvbnNdPVwiKCR0aHVtYkdyYWRpZW50UG9zaXRpb25zIHwgYXN5bmMpIVwiIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIlxyXG4gICAgICAgIFtwcmVwYXJlZF09XCIoJHByZXBhcmVkU2lnbmFsIHwgYXN5bmMpIVwiIFtzaG93XT1cIigkdGh1bWJTaG93IHwgYXN5bmMpIVwiXHJcbiAgICAgICAgKG9uRHJhZyk9XCJvblNjcm9sbEJhckRyYWdIYW5kbGVyKCRldmVudClcIj48L25nLXNjcm9sbC1iYXI+XHJcbjwvZGl2PiJdfQ==