ng-virtual-list 17.9.0 → 17.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/scroller/ng-scroller.component.mjs +17 -21
- package/esm2022/lib/ng-virtual-list.component.mjs +4 -4
- package/fesm2022/ng-virtual-list.mjs +20 -24
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/scroller/ng-scroller.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -93,7 +93,6 @@ export class NgScrollerComponent {
|
|
|
93
93
|
this.updateScrollBar();
|
|
94
94
|
}
|
|
95
95
|
get y() { return this._y; }
|
|
96
|
-
_currentAnimation;
|
|
97
96
|
_totalSize = 0;
|
|
98
97
|
set totalSize(v) {
|
|
99
98
|
this._totalSize = v;
|
|
@@ -148,6 +147,8 @@ export class NgScrollerComponent {
|
|
|
148
147
|
}
|
|
149
148
|
};
|
|
150
149
|
_updateScrollBarId;
|
|
150
|
+
_animationId = -1;
|
|
151
|
+
_animationId1 = -1;
|
|
151
152
|
constructor() {
|
|
152
153
|
this.langTextDir = toSignal(this._service.$langTextDir);
|
|
153
154
|
this._viewportResizeObserver = new ResizeObserver(this._onResizeViewportHandler);
|
|
@@ -345,10 +346,8 @@ export class NgScrollerComponent {
|
|
|
345
346
|
return { a0 };
|
|
346
347
|
}
|
|
347
348
|
stopScrolling() {
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
this._currentAnimation = undefined;
|
|
351
|
-
}
|
|
349
|
+
cancelAnimationFrame(this._animationId);
|
|
350
|
+
cancelAnimationFrame(this._animationId1);
|
|
352
351
|
}
|
|
353
352
|
move(isVertical, position, blending = false, userAction = false) {
|
|
354
353
|
this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction });
|
|
@@ -379,7 +378,7 @@ export class NgScrollerComponent {
|
|
|
379
378
|
this.x = start;
|
|
380
379
|
}
|
|
381
380
|
}
|
|
382
|
-
let finishedValue = endValue, isFinished = false
|
|
381
|
+
let finishedValue = endValue, isFinished = false;
|
|
383
382
|
const step = (currentTime) => {
|
|
384
383
|
if (!!isCanceled) {
|
|
385
384
|
return;
|
|
@@ -400,6 +399,7 @@ export class NgScrollerComponent {
|
|
|
400
399
|
prevPos = currentValue;
|
|
401
400
|
const scrollContent = this.scrollContent()?.nativeElement;
|
|
402
401
|
if (scrollContent) {
|
|
402
|
+
cancelAnimationFrame(this._animationId1);
|
|
403
403
|
if (isVertical) {
|
|
404
404
|
this.y = currentValue;
|
|
405
405
|
scrollContent.style.transform = `translate3d(0, ${-currentValue}px, 0)`;
|
|
@@ -422,20 +422,10 @@ export class NgScrollerComponent {
|
|
|
422
422
|
this._$scrollEnd.next(userAction);
|
|
423
423
|
}
|
|
424
424
|
else {
|
|
425
|
-
|
|
425
|
+
this._animationId = requestAnimationFrame(step);
|
|
426
426
|
}
|
|
427
|
-
}, cancel = () => {
|
|
428
|
-
cancelAnimationFrame(animationId);
|
|
429
|
-
isCanceled = true;
|
|
430
|
-
}, to = (value) => {
|
|
431
|
-
finishedValue = value;
|
|
432
|
-
}, finished = () => { return isFinished; };
|
|
433
|
-
animationId = requestAnimationFrame(step);
|
|
434
|
-
this._currentAnimation = {
|
|
435
|
-
cancel,
|
|
436
|
-
to,
|
|
437
|
-
finished,
|
|
438
427
|
};
|
|
428
|
+
this._animationId = requestAnimationFrame(step);
|
|
439
429
|
}
|
|
440
430
|
updateScrollBar() {
|
|
441
431
|
this._$updateScrollBar.next();
|
|
@@ -479,7 +469,7 @@ export class NgScrollerComponent {
|
|
|
479
469
|
if (this.cdkScrollable) {
|
|
480
470
|
this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);
|
|
481
471
|
}
|
|
482
|
-
this.
|
|
472
|
+
this.fireScrollEvent(userAction);
|
|
483
473
|
}
|
|
484
474
|
}
|
|
485
475
|
else {
|
|
@@ -491,11 +481,17 @@ export class NgScrollerComponent {
|
|
|
491
481
|
if (this.cdkScrollable) {
|
|
492
482
|
this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);
|
|
493
483
|
}
|
|
494
|
-
this.
|
|
484
|
+
this.fireScrollEvent(userAction);
|
|
495
485
|
}
|
|
496
486
|
}
|
|
497
487
|
}
|
|
498
488
|
}
|
|
489
|
+
fireScrollEvent(userAction) {
|
|
490
|
+
cancelAnimationFrame(this._animationId1);
|
|
491
|
+
this._animationId1 = requestAnimationFrame(() => {
|
|
492
|
+
this._$scroll.next(userAction);
|
|
493
|
+
});
|
|
494
|
+
}
|
|
499
495
|
reset() {
|
|
500
496
|
if (this.scrollBar) {
|
|
501
497
|
this.scrollBar.stopScrolling();
|
|
@@ -541,4 +537,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
541
537
|
type: ViewChild,
|
|
542
538
|
args: ['scrollBar', { read: NgScrollBarComponent }]
|
|
543
539
|
}] } });
|
|
544
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1SSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUs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QUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ3pCLFFBQVEsR0FBRyxRQUFRLEVBQUUsV0FBVyxHQUFHLFlBQVksRUFDL0MsV0FBVyxHQUFHLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQ3pHLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLEdBQUcsUUFBUSxHQUFHLFFBQVEsRUFDL0YsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQzNELFNBQVMsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFDL0MsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJ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IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgU2lnbmFsLCBzaWduYWwsIFZpZXdDaGlsZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsIG9mLCByYWNlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbGVyRGlyZWN0aW9uIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IFNjcm9sbEJveCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBTY3JvbGxlckRpcmVjdGlvbnMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgSWQsIElTaXplLCBTY3JvbGxCYXJUaGVtZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcclxuaW1wb3J0IHsgRWFzaW5nIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIsIGVhc2VPdXRRdWFkIH0gZnJvbSAnLi91dGlscy9lYXNlJztcclxuaW1wb3J0IHsgTmdTY3JvbGxCYXJDb21wb25lbnQgfSBmcm9tIFwiLi4vbmctc2Nyb2xsLWJhci9uZy1zY3JvbGwtYmFyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHcmFkaWVudENvbG9yUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvZ3JhZGllbnQtY29sb3ItcG9zaXRpb25zJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSxcclxuICBJTlRFUkFDVElWRSwgTU9VU0VfRE9XTiwgTU9VU0VfTU9WRSwgTU9VU0VfVVAsIFNDUk9MTEVSX1NDUk9MTCwgU0NST0xMRVJfU0NST0xMQkFSX1NDUk9MTCwgU0NST0xMRVJfV0hFRUwsIFRPVUNIX0VORCwgVE9VQ0hfTU9WRSxcclxuICBUT1VDSF9TVEFSVCwgV0hFRUwsXHJcbn0gZnJvbSAnLi4vLi4vY29uc3QnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aW9uLCBUZXh0RGlyZWN0aW9ucyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcblxyXG5jb25zdCBUT1AgPSAndG9wJyxcclxuICBMRUZUID0gJ2xlZnQnLFxyXG4gIElOU1RBTlQgPSAnaW5zdGFudCcsXHJcbiAgQVVUTyA9ICdhdXRvJyxcclxuICBTTU9PVEggPSAnc21vb3RoJyxcclxuICBWRVJUSUNBTCA9ICd2ZXJ0aWNhbCcsXHJcbiAgRFVSQVRJT04gPSAyMDAwLFxyXG4gIEZSSUNUSU9OX0ZPUkNFID0gLjAzNSxcclxuICBNQVhfRFVSQVRJT04gPSA0MDAwLFxyXG4gIEFOSU1BVElPTl9EVVJBVElPTiA9IDIwMCxcclxuICBNQVNTID0gLjAwNSxcclxuICBNQVhfRElTVCA9IDEyNTAwLFxyXG4gIE1JTl9USU1FU1RBTVAgPSAyMCxcclxuICBNQVhfVkVMT0NJVFlfVElNRVNUQU1QID0gMTAwLFxyXG4gIE1JTl9BTklNQVRFRF9WQUxVRSA9IDEwLFxyXG4gIFNQRUVEX1NDQUxFID0gNTtcclxuXHJcbmNvbnN0IGdldFN0YXJ0VGltZSA9ICgpID0+IHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9XHJcblxyXG5jb25zdCBjYWxjdWxhdGVEaXJlY3Rpb24gPSAoYnVmZmVyOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPikgPT4ge1xyXG4gIGZvciAobGV0IGkgPSBidWZmZXIubGVuZ3RoIC0gMSwgbCA9IDA7IGkgPj0gbDsgaS0tKSB7XHJcbiAgICBjb25zdCB2ID0gYnVmZmVyW2ldO1xyXG4gICAgaWYgKHZbMF0gPT09IDApIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5zaWduKHZbMF0pO1xyXG4gIH1cclxuICByZXR1cm4gMTtcclxufVxyXG5cclxuaW50ZXJmYWNlIElBbmltYXRpb24ge1xyXG4gIGZpbmlzaGVkOiAoKSA9PiBib29sZWFuO1xyXG4gIHRvOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcclxuICBjYW5jZWw6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICB4PzogbnVtYmVyO1xyXG4gIHk/OiBudW1iZXI7XHJcbiAgbGVmdD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgYmxlbmRpbmc/OiBib29sZWFuO1xyXG4gIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3I7XHJcbiAgdXNlckFjdGlvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKSxcclxuICBXSEVFTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9XSEVFTCksXHJcbiAgU0NST0xMQkFSX1NDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2Nyb2xsZXIgZm9yIHRoZSBOZ1ZpcnR1YWxMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE3LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXNjcm9sbGVyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9uZy1zY3JvbGxlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nU2Nyb2xsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHNjcm9sbENvbnRlbnQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdzY3JvbGxDb250ZW50Jyk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pXHJcbiAgY2RrU2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQmFyJywgeyByZWFkOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB9KVxyXG4gIHNjcm9sbEJhcjogTmdTY3JvbGxCYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHNjcm9sbFZpZXdwb3J0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+Pignc2Nyb2xsVmlld3BvcnQnKTtcclxuXHJcbiAgZGlyZWN0aW9uID0gaW5wdXQ8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcblxyXG4gIGZvY3VzZWRFbGVtZW50ID0gaW5wdXQ8SWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gIGNvbnRlbnQgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcclxuXHJcbiAgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY2xhc3NlcyA9IGlucHV0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuXHJcbiAgc3RhcnRPZmZzZXQgPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICBlbmRPZmZzZXQgPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICBzY3JvbGxiYXJUaGVtZSA9IGlucHV0PFNjcm9sbEJhclRoZW1lIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBzY3JvbGxiYXJNaW5TaXplID0gaW5wdXQ8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSk7XHJcblxyXG4gIGFjdHVhbENsYXNzZXM6IFNpZ25hbDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9PjtcclxuXHJcbiAgY29udGFpbmVyQ2xhc3NlczogU2lnbmFsPHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+O1xyXG5cclxuICBpc1ZlcnRpY2FsOiBTaWduYWw8Ym9vbGVhbj47XHJcblxyXG4gIHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSBzaWduYWw8R3JhZGllbnRDb2xvclBvc2l0aW9ucz4oWzAsIDBdKTtcclxuXHJcbiAgdGh1bWJTaXplID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblxyXG4gIHRodW1iUG9zaXRpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHJcbiAgdGh1bWJTaG93ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJlcGFyZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBncmFiYmluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3NlcnZpY2UgPSBpbmplY3QoTmdWaXJ0dWFsTGlzdFNlcnZpY2UpO1xyXG5cclxuICBsYW5nVGV4dERpcjogU2lnbmFsPFRleHREaXJlY3Rpb24gfCB1bmRlZmluZWQ+O1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuXyR1cGRhdGVTY3JvbGxCYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsRW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsRW5kID0gdGhpcy5fJHNjcm9sbEVuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQm94ID0gbmV3IFNjcm9sbEJveCgpO1xyXG5cclxuICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCksXHJcbiAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplO1xyXG4gICAgcmV0dXJuIHRvdGFsU2l6ZSA+IHZpZXdwb3J0U2l6ZTtcclxuICB9XHJcblxyXG4gIGdldCBob3N0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsVmlld3BvcnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMucHJlcGFyZWRTaWduYWwuc2V0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfeDogbnVtYmVyID0gMDtcclxuICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3ggPSB0aGlzLl9hY3R1YWxYID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgcHJpdmF0ZSBfeTogbnVtYmVyID0gMDtcclxuICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudEFuaW1hdGlvbjogSUFuaW1hdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCB0b3RhbFNpemUodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90b3RhbFNpemUgPSB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemUsXHJcbiAgICAgIGlzVmVydGljYWwgPSB0aGlzLmRpcmVjdGlvbigpID09PSBWRVJUSUNBTDtcclxuICAgIHJldHVybiBpc1ZlcnRpY2FsID8gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQgOiB0aGlzLnNjcm9sbEhlaWdodDtcclxuICB9XHJcblxyXG4gIGdldCBhY3R1YWxTY3JvbGxXaWR0aCgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMudmlld3BvcnRCb3VuZHMoKSxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gVkVSVElDQUw7XHJcbiAgICByZXR1cm4gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsV2lkdGggOiB0b3RhbFNpemUgPCB2aWV3cG9ydFdpZHRoID8gMCA6IHRvdGFsU2l6ZSAtIHZpZXdwb3J0V2lkdGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hY3R1YWxYOiBudW1iZXIgPSAwO1xyXG4gIGdldCBhY3R1YWxTY3JvbGxMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdHVhbFg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hY3R1YWxZOiBudW1iZXIgPSAwO1xyXG4gIGdldCBhY3R1YWxTY3JvbGxUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0dWFsWTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3g7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsVG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsV2lkdGgoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoOiB2aWV3cG9ydFdpZHRoIH0gPSB0aGlzLnZpZXdwb3J0Qm91bmRzKCksXHJcbiAgICAgIGFjdHVhbFZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoLFxyXG4gICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuY29udGVudEJvdW5kcygpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCA8IGFjdHVhbFZpZXdwb3J0V2lkdGggPyAwIDogKGNvbnRlbnRXaWR0aCAtIGFjdHVhbFZpZXdwb3J0V2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICBhY3R1YWxWaWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0LFxyXG4gICAgICB7IGhlaWdodDogY29udGVudEhlaWdodCB9ID0gdGhpcy5jb250ZW50Qm91bmRzKCk7XHJcbiAgICByZXR1cm4gY29udGVudEhlaWdodCA8IGFjdHVhbFZpZXdwb3J0SGVpZ2h0ID8gMCA6IChjb250ZW50SGVpZ2h0IC0gYWN0dWFsVmlld3BvcnRIZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmVsb2NpdHk6IG51bWJlciA9IDA7XHJcblxyXG4gIHJlYWRvbmx5IHZpZXdwb3J0Qm91bmRzID0gc2lnbmFsPElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGNvbnRlbnRCb3VuZHMgPSBzaWduYWw8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuXHJcbiAgcHJpdmF0ZSBfdmlld3BvcnRSZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XHJcblxyXG4gIHByaXZhdGUgX29uUmVzaXplVmlld3BvcnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnNjcm9sbFZpZXdwb3J0KCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgdGhpcy52aWV3cG9ydEJvdW5kcy5zZXQoeyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udGVudFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVDb250ZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIHRoaXMuY29udGVudEJvdW5kcy5zZXQoeyB3aWR0aDogY29udGVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBjb250ZW50Lm9mZnNldEhlaWdodCB9KTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNjcm9sbEJhcklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5sYW5nVGV4dERpciA9IHRvU2lnbmFsKHRoaXMuX3NlcnZpY2UuJGxhbmdUZXh0RGlyKTtcclxuXHJcbiAgICB0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX29uUmVzaXplVmlld3BvcnRIYW5kbGVyKTtcclxuICAgIHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZUNvbnRlbnRIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLmlzVmVydGljYWwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbigpID09PSBTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTDtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0ICR2aWV3cG9ydCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNjcm9sbFZpZXdwb3J0KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgbWFwKHYgPT4gdiEubmF0aXZlRWxlbWVudCksXHJcbiAgICApLFxyXG4gICAgICAkY29udGVudCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNjcm9sbENvbnRlbnQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgKSxcclxuICAgICAgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuJHVwZGF0ZVNjcm9sbEJhcjtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbigpLFxyXG4gICAgICAgIGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKSxcclxuICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldCgpLFxyXG4gICAgICAgIHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCxcclxuICAgICAgICBzY3JvbGxWaWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aHVtYlNpemUsXHJcbiAgICAgICAgICB0aHVtYlBvc2l0aW9uLFxyXG4gICAgICAgICAgdGh1bWJHcmFkaWVudFBvc2l0aW9ucyxcclxuICAgICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmNhbGN1bGF0ZVNjcm9sbCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgICB2aWV3cG9ydFdpZHRoOiBzY3JvbGxWaWV3cG9ydC5vZmZzZXRXaWR0aCwgdmlld3BvcnRIZWlnaHQ6IHNjcm9sbFZpZXdwb3J0Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgIGNvbnRlbnRXaWR0aDogc2Nyb2xsQ29udGVudC5vZmZzZXRXaWR0aCwgY29udGVudEhlaWdodDogc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICBzdGFydE9mZnNldCxcclxuICAgICAgICAgIGVuZE9mZnNldCxcclxuICAgICAgICAgIHBvc2l0aW9uWDogdGhpcy5feCxcclxuICAgICAgICAgIHBvc2l0aW9uWTogdGhpcy5feSxcclxuICAgICAgICAgIG1pblNpemU6IHRoaXMuc2Nyb2xsYmFyTWluU2l6ZSgpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50aHVtYkdyYWRpZW50UG9zaXRpb25zLnNldCh0aHVtYkdyYWRpZW50UG9zaXRpb25zKTtcclxuICAgICAgdGhpcy50aHVtYlNpemUuc2V0KHRodW1iU2l6ZSk7XHJcbiAgICAgIHRoaXMudGh1bWJQb3NpdGlvbi5zZXQodGh1bWJQb3NpdGlvbik7XHJcbiAgICAgIHRoaXMudGh1bWJTaG93LnNldChpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgPiAwIDogdGhpcy5zY3JvbGxXaWR0aCA+IDApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJSQUZIYW5kbGVyID0gKHRpbWU6IERPTUhpZ2hSZXNUaW1lU3RhbXApID0+IHtcclxuICAgICAgdXBkYXRlU2Nyb2xsQmFySGFuZGxlcigpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkdXBkYXRlU2Nyb2xsQmFyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlU2Nyb2xsQmFySWQgPSB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZDtcclxuICAgICAgICBpZiAodXBkYXRlU2Nyb2xsQmFySWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlU2Nyb2xsQmFySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJSQUZIYW5kbGVyKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR2aWV3cG9ydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHZpZXdwb3J0ID0+IHtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyLm9ic2VydmUodmlld3BvcnQpO1xyXG4gICAgICAgIHRoaXMuX29uUmVzaXplVmlld3BvcnRIYW5kbGVyKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuX29uUmVzaXplQ29udGVudEhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxXaGVlbEV2ZW50Pihjb250ZW50LCBXSEVFTCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChXSEVFTF9FVkVOVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5feSA+PSAwICYmIHRoaXMuX3kgPD0gdGhpcy5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl94ID49IDAgJiYgdGhpcy5feCA8PSB0aGlzLnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgICAgICAgc3RhcnRQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54LFxyXG4gICAgICAgICAgICAgIGRlbHRhID0gaXNWZXJ0aWNhbCA/IGUuZGVsdGFZIDogZS5kZWx0YVgsIGRwID0gc3RhcnRQb3MgKyBkZWx0YSwgcG9zaXRpb24gPSBkcCA8IDAgPyAwIDogZHAgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IGRwO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHsgW2lzVmVydGljYWwgPyBUT1AgOiBMRUZUXTogcG9zaXRpb24sIGJlaGF2aW9yOiBJTlNUQU5ULCB1c2VyQWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRtb3VzZVVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHdpbmRvdywgTU9VU0VfVVAsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICApLFxyXG4gICAgICAkbW91c2VEcmFnQ2FuY2VsID0gJG1vdXNlVXAucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ3JhYmJpbmcuc2V0KGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29udGVudCwgTU9VU0VfRE9XTiwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxCYXIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNjcm9sbEJhci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhJTlRFUkFDVElWRSkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ncmFiYmluZy5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgbGV0IHByZXZQb3MgPSBzdGFydFBvcywgcHJldkNsaWVudFBvc2l0aW9uID0gMCwgc3RhcnRQb3NEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2xpZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUuY2xpZW50WSA6IGUuY2xpZW50WCxcclxuICAgICAgICAgICAgICBvZmZzZXRzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCksIHZlbG9jaXRpZXMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9NT1ZFLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCgkbW91c2VEcmFnQ2FuY2VsKSxcclxuICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoY1BvcyAhPT0gcHJldlBvcykge1xyXG4gICAgICAgICAgICAgICAgICBzdGFydFBvc0RlbHRhICs9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvcyA9IGlzVmVydGljYWwgPyBlLmNsaWVudFkgOiBlLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLCBkZWx0YSA9IHN0YXJ0Q2xpZW50UG9zIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgZHAgPSBzdGFydFBvcyArIHN0YXJ0UG9zRGVsdGEgKyBkZWx0YSwgcG9zaXRpb24gPSBNYXRoLnJvdW5kKGRwIDwgMCA/IDAgOiBkcCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogZHApLCBlbmRUaW1lID0gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSwgc2Nyb2xsRGVsdGEgPSBwcmV2Q2xpZW50UG9zaXRpb24gPT09IDAgPyAwIDogcHJldkNsaWVudFBvc2l0aW9uIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgcHJldkNsaWVudFBvc2l0aW9uID0gY3VycmVudFBvcztcclxuICAgICAgICAgICAgICAgIHByZXZQb3MgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZShpc1ZlcnRpY2FsLCBwb3NpdGlvbiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByYWNlKFtmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiBmYWxzZSB9KSwgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGNvbnRlbnQsIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pXSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgdjAgfSA9IHRoaXMuY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0cywgc2Nyb2xsRGVsdGEsIHRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGEwIH0gPSB0aGlzLmNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzLCB2MCwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhYmJpbmcuc2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWwsIHBvc2l0aW9uLCAwLCB2MCwgYTApO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdG91Y2hVcCA9IGZyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICksXHJcbiAgICAgICR0b3VjaENhbmNlbGVyID0gJHRvdWNoVXAucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmdyYWJiaW5nLnNldChmYWxzZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KGNvbnRlbnQsIFRPVUNIX1NUQVJULCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbEJhcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKElOVEVSQUNUSVZFKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdyYWJiaW5nLnNldCh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICBsZXQgcHJldlBvcyA9IHN0YXJ0UG9zLCBwcmV2Q2xpZW50UG9zaXRpb24gPSAwLCBzdGFydFBvc0RlbHRhID0gMDtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRDbGllbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRZIDogZS50b3VjaGVzW2UudG91Y2hlcy5sZW5ndGggLSAxXS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgIG9mZnNldHMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKSwgdmVsb2NpdGllcyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX01PVkUsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKCR0b3VjaENhbmNlbGVyKSxcclxuICAgICAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoY1BvcyAhPT0gcHJldlBvcykge1xyXG4gICAgICAgICAgICAgICAgICBzdGFydFBvc0RlbHRhICs9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvcyA9IGlzVmVydGljYWwgPyBlLnRvdWNoZXNbZS50b3VjaGVzLmxlbmd0aCAtIDFdLmNsaWVudFkgOiBlLnRvdWNoZXNbZS50b3VjaGVzLmxlbmd0aCAtIDFdLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLCBkZWx0YSA9IHN0YXJ0Q2xpZW50UG9zIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgZHAgPSBzdGFydFBvcyArIHN0YXJ0UG9zRGVsdGEgKyBkZWx0YSwgcG9zaXRpb24gPSBNYXRoLnJvdW5kKGRwIDwgMCA/IDAgOiBkcCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogZHApLCBlbmRUaW1lID0gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gZW5kVGltZSAtIHN0YXJ0VGltZSwgc2Nyb2xsRGVsdGEgPSBwcmV2Q2xpZW50UG9zaXRpb24gPT09IDAgPyAwIDogcHJldkNsaWVudFBvc2l0aW9uIC0gY3VycmVudFBvcyxcclxuICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgcHJldkNsaWVudFBvc2l0aW9uID0gY3VycmVudFBvcztcclxuICAgICAgICAgICAgICAgIHByZXZQb3MgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZShpc1ZlcnRpY2FsLCBwb3NpdGlvbiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByYWNlKFtmcm9tRXZlbnQ8VG91Y2hFdmVudD4od2luZG93LCBUT1VDSF9FTkQsIHsgcGFzc2l2ZTogZmFsc2UgfSksIGZyb21FdmVudDxUb3VjaEV2ZW50Pihjb250ZW50LCBUT1VDSF9FTkQsIHsgcGFzc2l2ZTogZmFsc2UgfSldKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgYTAgfSA9IHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFiYmluZy5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVdpdGhBY2NlbGVyYXRpb24oaXNWZXJ0aWNhbCwgcG9zaXRpb24sIHRoaXMuX3ZlbG9jaXR5LCB2MCwgYTApO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLmFjdHVhbENsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmNsYXNzZXMoKSwgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb24oKTtcclxuICAgICAgcmV0dXJuIHsgLi4uY2xhc3NlcywgW2RpcmVjdGlvbl06IHRydWUsIGdyYWJiaW5nOiB0aGlzLmdyYWJiaW5nKCkgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29udGFpbmVyQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHsgW3RoaXMuZGlyZWN0aW9uKCldOiB0cnVlLCBncmFiYmluZzogdGhpcy5ncmFiYmluZygpIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVmVsb2NpdHkob2Zmc2V0czogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGRlbHRhOiBudW1iZXIsIHRpbWVzdGFtcDogbnVtYmVyLCBpbmRleE9mZnNldDogbnVtYmVyID0gMTApIHtcclxuICAgIG9mZnNldHMucHVzaChbZGVsdGEsIHRpbWVzdGFtcCA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdGltZXN0YW1wXSk7XHJcblxyXG4gICAgY29uc3QgbGVuID0gb2Zmc2V0cy5sZW5ndGgsIHN0YXJ0SW5kZXggPSBsZW4gPiBpbmRleE9mZnNldCA/IGxlbiAtIGluZGV4T2Zmc2V0IDogMCwgbGFzdFZTaWduID0gY2FsY3VsYXRlRGlyZWN0aW9uKG9mZnNldHMpO1xyXG4gICAgbGV0IHZTdW0gPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGwgPSBvZmZzZXRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBwMCA9IG9mZnNldHNbaV07XHJcbiAgICAgIGlmIChsYXN0VlNpZ24gIT09IE1hdGguc2lnbihwMFswXSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdjAgPSAocDBbMV0gIT09IDAgPyBsYXN0VlNpZ24gKiBNYXRoLmFicyhwMFswXSAvIHAwWzFdKSAqIFNQRUVEX1NDQUxFIDogMCk7XHJcbiAgICAgIHZTdW0gKz0gTWF0aC5zaWduKHYwKSAqIE1hdGgucG93KHYwLCA0KSAqIC4wMDM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbCA9IE1hdGgubWluKG9mZnNldHMubGVuZ3RoLCBpbmRleE9mZnNldCksIHYwID0gbCA+IDAgPyAodlN1bSAvIGwpIDogMDtcclxuICAgIHJldHVybiB7IHYwIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZUFjY2VsZXJhdGlvbih2ZWxvY2l0aWVzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiwgZGVsdGE6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXIsIGluZGV4T2Zmc2V0OiBudW1iZXIgPSAxMCkge1xyXG4gICAgdmVsb2NpdGllcy5wdXNoKFtkZWx0YSwgdGltZXN0YW1wIDwgTUlOX1RJTUVTVEFNUCA/IE1JTl9USU1FU1RBTVAgOiB0aW1lc3RhbXBdKTtcclxuICAgIGNvbnN0IGxlbiA9IHZlbG9jaXRpZXMubGVuZ3RoLCBzdGFydEluZGV4ID0gbGVuID4gaW5kZXhPZmZzZXQgPyBsZW4gLSBpbmRleE9mZnNldCA6IDA7XHJcbiAgICBsZXQgYVN1bSA9IDAsIHByZXZWMDogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgaXRlcmF0aW9uID0gMCwgbGFzdFZTaWduID0gY2FsY3VsYXRlRGlyZWN0aW9uKHZlbG9jaXRpZXMpO1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGwgPSB2ZWxvY2l0aWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCB2MDAgPSBwcmV2VjAsIHYwMSA9IHZlbG9jaXRpZXNbaV07XHJcbiAgICAgIGlmIChsYXN0VlNpZ24gIT09IE1hdGguc2lnbih2MDFbMF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHYwMCkge1xyXG4gICAgICAgIGNvbnN0IGEwID0gdGltZXN0YW1wIDwgTUFYX1ZFTE9DSVRZX1RJTUVTVEFNUCA/ICh2MDBbMV0gIT09IDAgPyAobGFzdFZTaWduICogTWF0aC5hYnMoTWF0aC5hYnModjAxWzBdKSAtIE1hdGguYWJzKHYwMFswXSkpKSAvIE1hdGguYWJzKHYwMFsxXSkgOiAwKSA6IDA7XHJcbiAgICAgICAgYVN1bSArPSBhMDtcclxuICAgICAgICBwcmV2VjAgPSB2MDE7XHJcbiAgICAgIH1cclxuICAgICAgcHJldlYwID0gdjAxO1xyXG4gICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhMCA9IGFTdW0gKiBGUklDVElPTl9GT1JDRTtcclxuICAgIHJldHVybiB7IGEwIH07XHJcbiAgfVxyXG5cclxuICBzdG9wU2Nyb2xsaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBbmltYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50QW5pbWF0aW9uLmNhbmNlbCgpO1xyXG4gICAgICB0aGlzLl9jdXJyZW50QW5pbWF0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlKGlzVmVydGljYWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBudW1iZXIsIGJsZW5kaW5nOiBib29sZWFuID0gZmFsc2UsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IHBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCwgYmxlbmRpbmcsIHVzZXJBY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBudW1iZXIsIHYwOiBudW1iZXIsIHY6IG51bWJlciwgYTA6IG51bWJlcikge1xyXG4gICAgaWYgKGEwICE9PSAwKSB7XHJcbiAgICAgIGNvbnN0IGR2U2lnbiA9IE1hdGguc2lnbih2KSxcclxuICAgICAgICBkdXJhdGlvbiA9IERVUkFUSU9OLCBtYXhEdXJhdGlvbiA9IE1BWF9EVVJBVElPTixcclxuICAgICAgICBtYXhEaXN0YW5jZSA9IGR2U2lnbiAqIE1BWF9ESVNULCBzID0gKGR2U2lnbiAqIE1hdGguYWJzKChhMCAqIE1hdGgucG93KGR1cmF0aW9uLCAyKSkgKiAuNSkgLyAxMDAwKSAvIE1BU1MsXHJcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhzKSA8IE1BWF9ESVNUID8gcyA6IG1heERpc3RhbmNlLCBwb3NpdGlvbldpdGhWZWxvY2l0eSA9IHBvc2l0aW9uICsgZGlzdGFuY2UsXHJcbiAgICAgICAgdm1heCA9IE1hdGgubWF4KE1hdGguYWJzKHYwKSwgTWF0aC5hYnModikpLFxyXG4gICAgICAgIGFkID0gTWF0aC5hYnModm1heCAhPT0gMCA/IE1hdGguc3FydCh2bWF4KSA6IDApICogMTAgLyBNQVNTLFxyXG4gICAgICAgIGFEdXJhdGlvbiA9IGFkIDwgbWF4RHVyYXRpb24gPyBhZCA6IG1heER1cmF0aW9uLFxyXG4gICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICB0aGlzLmFuaW1hdGUoc3RhcnRQb3NpdGlvbiwgTWF0aC5yb3VuZChwb3NpdGlvbldpdGhWZWxvY2l0eSksIGFEdXJhdGlvbiwgZWFzZU91dFF1YWQsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZShzdGFydFZhbHVlOiBudW1iZXIsIGVuZFZhbHVlOiBudW1iZXIsIGR1cmF0aW9uID0gQU5JTUFUSU9OX0RVUkFUSU9OLCBlYXNpbmdGdW5jdGlvbjogRWFzaW5nID0gZWFzZUxpbmVhciwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGdldFN0YXJ0VGltZSgpLCBpc1ZlcnRpY2FsID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUw7XHJcbiAgICBsZXQgaXNDYW5jZWxlZCA9IGZhbHNlLCBwcmV2UG9zID0gc3RhcnRWYWx1ZSwgc3RhcnQgPSBzdGFydFZhbHVlLCBzdGFydFBvc0RlbHRhID0gMCwgZGVsdGEgPSAwLCBwcmV2VGltZSA9IHN0YXJ0VGltZSxcclxuICAgICAgZGlmZiA9IE1hdGguYWJzKE1hdGguYWJzKGVuZFZhbHVlKSAtIE1hdGguYWJzKHN0YXJ0KSk7XHJcblxyXG4gICAgaWYgKGRpZmYgPCBNSU5fQU5JTUFURURfVkFMVUUpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBzdGFydDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBzdGFydDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaW5pc2hlZFZhbHVlID0gZW5kVmFsdWUsXHJcbiAgICAgIGlzRmluaXNoZWQgPSBmYWxzZSwgYW5pbWF0aW9uSWQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdCBzdGVwID0gKGN1cnJlbnRUaW1lOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKCEhaXNDYW5jZWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgIGxldCBzY3JvbGxEZWx0YSA9IDA7XHJcbiAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgc2Nyb2xsRGVsdGEgPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICBzdGFydFBvc0RlbHRhICs9IHNjcm9sbERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSBzdGFydFBvc0RlbHRhICsgc3RhcnQgKyAoZmluaXNoZWRWYWx1ZSAtIHN0YXJ0KSAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLmFjdHVhbFNjcm9sbEhlaWdodCA6IHRoaXMuYWN0dWFsU2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsIDwgMCA/IDAgOiB2YWwgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IHZhbCxcclxuICAgICAgICB0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSAoY3VycmVudFZhbHVlID09PSBzY3JvbGxTaXplICYmIE1hdGgucm91bmQoc2Nyb2xsU2l6ZSkgPj0gTWF0aC5yb3VuZChhY3R1YWxTY3JvbGxTaXplKSkgfHxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPT09IDAgfHwgcHJvZ3Jlc3MgPT09IDE7XHJcblxyXG4gICAgICBkZWx0YSA9IGN1cnJlbnRWYWx1ZSAtIHNjcm9sbERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdHM7XHJcbiAgICAgIHRoaXMuX3ZlbG9jaXR5ID0gdGltZXN0YW1wID4gMCA/IGRlbHRhIC8gdGltZXN0YW1wIDogMDtcclxuXHJcbiAgICAgIHByZXZUaW1lID0gdDtcclxuICAgICAgcHJldlBvcyA9IGN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGNvbnN0IHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgaWYgKHNjcm9sbENvbnRlbnQpIHtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgdGhpcy55ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHstY3VycmVudFZhbHVlfXB4LCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMueCA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgIHNjcm9sbENvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7LWN1cnJlbnRWYWx1ZX1weCwgMCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxFbmQubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgfVxyXG4gICAgfSwgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25JZCk7XHJcbiAgICAgIGlzQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgfSwgdG8gPSAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICBmaW5pc2hlZFZhbHVlID0gdmFsdWU7XHJcbiAgICB9LCBmaW5pc2hlZCA9ICgpID0+IHsgcmV0dXJuIGlzRmluaXNoZWQ7IH07XHJcblxyXG4gICAgYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgdGhpcy5fY3VycmVudEFuaW1hdGlvbiA9IHtcclxuICAgICAgY2FuY2VsLFxyXG4gICAgICB0byxcclxuICAgICAgZmluaXNoZWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxCYXIoKSB7XHJcbiAgICB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvKHBhcmFtczogSVNjcm9sbFRvUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwb3NYID0gcGFyYW1zLnggfHwgcGFyYW1zLmxlZnQgfHwgMCxcclxuICAgICAgcG9zWSA9IHBhcmFtcy55IHx8IHBhcmFtcy50b3AgfHwgMCxcclxuICAgICAgdXNlckFjdGlvbiA9IHBhcmFtcy51c2VyQWN0aW9uID8/IGZhbHNlLFxyXG4gICAgICB4ID0gcG9zWCxcclxuICAgICAgeSA9IHBvc1ksXHJcbiAgICAgIGJlaGF2aW9yID0gcGFyYW1zLmJlaGF2aW9yID8/IElOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gcGFyYW1zLmJsZW5kaW5nID8/IHRydWUsXHJcbiAgICAgIHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuZGlyZWN0aW9uKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc01vdmluZykge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmICh5IDwgMCB8fCB5ID4gdGhpcy5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHggPCAwIHx8IHggPiB0aGlzLnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeHggPSB4LFxyXG4gICAgICB5eSA9IHksXHJcbiAgICAgIHByZXZYID0gdGhpcy54LFxyXG4gICAgICBwcmV2WSA9IHRoaXMueTtcclxuICAgIHRoaXMueCA9IHh4O1xyXG4gICAgdGhpcy55ID0geXk7XHJcbiAgICBpZiAoYmVoYXZpb3IgPT09IEFVVE8gfHwgYmVoYXZpb3IgPT09IFNNT09USCkge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmIChwcmV2WSAhPT0geXkpIHtcclxuICAgICAgICAgIHRoaXMuYW5pbWF0ZShwcmV2WSwgeXksIEFOSU1BVElPTl9EVVJBVElPTiwgZWFzZUxpbmVhciwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2WCAhPT0geHgpIHtcclxuICAgICAgICAgIHRoaXMuYW5pbWF0ZShwcmV2WCwgeHgsIEFOSU1BVElPTl9EVVJBVElPTiwgZWFzZUxpbmVhciwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmIChwcmV2WSAhPT0geXkpIHtcclxuICAgICAgICAgIGlmICghYmxlbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzY3JvbGxDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAkey15eX1weCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocHJldlggIT09IHh4KSB7XHJcbiAgICAgICAgICBpZiAoIWJsZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHsteHh9cHgsIDAsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGwubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMubW92ZSh0aGlzLmlzVmVydGljYWwoKSwgMCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbEJhckRyYWdIYW5kbGVyKHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2lzTW92aW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKSxcclxuICAgICAge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVBvc2l0aW9uLFxyXG4gICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmdldFNjcm9sbFBvc2l0aW9uQnlTY3JvbGxCYXIoe1xyXG4gICAgICAgIHNjcm9sbFNpemU6IGlzVmVydGljYWwgPyB0aGlzLmFjdHVhbFNjcm9sbEhlaWdodCA6IHRoaXMuYWN0dWFsU2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IGFic29sdXRlUG9zaXRpb24sIGJlaGF2aW9yOiBBVVRPLCBibGVuZGluZzogdHJ1ZSwgdXNlckFjdGlvbjogdHJ1ZSB9KTtcclxuICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMQkFSX1NDUk9MTF9FVkVOVCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgaWYgKHVwZGF0ZVNjcm9sbEJhcklkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlU2Nyb2xsQmFySWQpO1xyXG4gICAgICB0aGlzLl91cGRhdGVTY3JvbGxCYXJJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIGlmICh0aGlzLl92aWV3cG9ydFJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb250ZW50UmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGxvY2FsZVNlbnNpdGl2ZSBbbGFuZ1RleHREaXJdPVwibGFuZ1RleHREaXIoKVwiIFtsaXN0RGlyXT1cImRpcmVjdGlvbigpXCIgY2xhc3M9XCJuZ3ZsX19jb250YWluZXJcIiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzc2VzKClcIj5cclxuICAgIDxkaXYgI3Njcm9sbFZpZXdwb3J0IGNka1Njcm9sbGFibGUgcGFydD1cInNjcm9sbGVyXCIgY2xhc3M9XCJuZ3ZsX19zY3JvbGxlclwiPlxyXG4gICAgICAgIDxkaXYgI3Njcm9sbENvbnRlbnQgW2F0dHIuYXJpYS1vcmllbnRhdGlvbl09XCJkaXJlY3Rpb24oKVwiIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJmb2N1c2VkRWxlbWVudCgpXCJcclxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCIgcGFydD1cImxpc3RcIiBjbGFzcz1cIm5ndmxfX2xpc3RcIiBbbmdDbGFzc109XCJhY3R1YWxDbGFzc2VzKClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctc2Nyb2xsLWJhciAjc2Nyb2xsQmFyIFtpc1ZlcnRpY2FsXT1cImlzVmVydGljYWwoKVwiIFtzaXplXT1cInRodW1iU2l6ZSgpXCIgW3RoZW1lXT1cInNjcm9sbGJhclRoZW1lKClcIiBbcG9zaXRpb25dPVwidGh1bWJQb3NpdGlvbigpXCJcclxuICAgICAgICBbdGh1bWJHcmFkaWVudFBvc2l0aW9uc109XCJ0aHVtYkdyYWRpZW50UG9zaXRpb25zKClcIiBbbG9hZGluZ109XCJsb2FkaW5nKClcIiBbcHJlcGFyZWRdPVwicHJlcGFyZWRTaWduYWwoKVwiIFtzaG93XT1cInRodW1iU2hvdygpXCJcclxuICAgICAgICAob25EcmFnKT1cIm9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoJGV2ZW50KVwiPjwvbmctc2Nyb2xsLWJhcj5cclxuPC9kaXY+Il19
|
|
540
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1SSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUs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LElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxJQUFJLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzt3R0FqdEJVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDBrREFHTyxhQUFhLGlHQUdsQixvQkFBb0IsNkJDckZ0RCx3M0JBVU07OzRGRHFFTyxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLEtBQUs7d0RBUWpCLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBSXBELFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIFNpZ25hbCwgc2lnbmFsLCBWaWV3Q2hpbGQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBvZiwgcmFjZSwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxlckRpcmVjdGlvbiB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxCb3ggfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgU2Nyb2xsZXJEaXJlY3Rpb25zIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IElkLCBJU2l6ZSwgU2Nyb2xsQmFyVGhlbWUgfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IEVhc2luZyB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBlYXNlTGluZWFyLCBlYXNlT3V0UXVhZCB9IGZyb20gJy4vdXRpbHMvZWFzZSc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL25nLXNjcm9sbC1iYXIvbmctc2Nyb2xsLWJhci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3JhZGllbnRDb2xvclBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2dyYWRpZW50LWNvbG9yLXBvc2l0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUsXHJcbiAgSU5URVJBQ1RJVkUsIE1PVVNFX0RPV04sIE1PVVNFX01PVkUsIE1PVVNFX1VQLCBTQ1JPTExFUl9TQ1JPTEwsIFNDUk9MTEVSX1NDUk9MTEJBUl9TQ1JPTEwsIFNDUk9MTEVSX1dIRUVMLCBUT1VDSF9FTkQsIFRPVUNIX01PVkUsXHJcbiAgVE9VQ0hfU1RBUlQsIFdIRUVMLFxyXG59IGZyb20gJy4uLy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5cclxuY29uc3QgVE9QID0gJ3RvcCcsXHJcbiAgTEVGVCA9ICdsZWZ0JyxcclxuICBJTlNUQU5UID0gJ2luc3RhbnQnLFxyXG4gIEFVVE8gPSAnYXV0bycsXHJcbiAgU01PT1RIID0gJ3Ntb290aCcsXHJcbiAgVkVSVElDQUwgPSAndmVydGljYWwnLFxyXG4gIERVUkFUSU9OID0gMjAwMCxcclxuICBGUklDVElPTl9GT1JDRSA9IC4wMzUsXHJcbiAgTUFYX0RVUkFUSU9OID0gNDAwMCxcclxuICBBTklNQVRJT05fRFVSQVRJT04gPSAyMDAsXHJcbiAgTUFTUyA9IC4wMDUsXHJcbiAgTUFYX0RJU1QgPSAxMjUwMCxcclxuICBNSU5fVElNRVNUQU1QID0gMjAsXHJcbiAgTUFYX1ZFTE9DSVRZX1RJTUVTVEFNUCA9IDEwMCxcclxuICBNSU5fQU5JTUFURURfVkFMVUUgPSAxMCxcclxuICBTUEVFRF9TQ0FMRSA9IDU7XHJcblxyXG5jb25zdCBnZXRTdGFydFRpbWUgPSAoKSA9PiB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfVxyXG5cclxuY29uc3QgY2FsY3VsYXRlRGlyZWN0aW9uID0gKGJ1ZmZlcjogQXJyYXk8W251bWJlciwgbnVtYmVyXT4pID0+IHtcclxuICBmb3IgKGxldCBpID0gYnVmZmVyLmxlbmd0aCAtIDEsIGwgPSAwOyBpID49IGw7IGktLSkge1xyXG4gICAgY29uc3QgdiA9IGJ1ZmZlcltpXTtcclxuICAgIGlmICh2WzBdID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGguc2lnbih2WzBdKTtcclxuICB9XHJcbiAgcmV0dXJuIDE7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICB4PzogbnVtYmVyO1xyXG4gIHk/OiBudW1iZXI7XHJcbiAgbGVmdD86IG51bWJlcjtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgYmxlbmRpbmc/OiBib29sZWFuO1xyXG4gIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3I7XHJcbiAgdXNlckFjdGlvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlQgPSBuZXcgRXZlbnQoU0NST0xMRVJfU0NST0xMKSxcclxuICBXSEVFTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9XSEVFTCksXHJcbiAgU0NST0xMQkFSX1NDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTExCQVJfU0NST0xMKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2Nyb2xsZXIgZm9yIHRoZSBOZ1ZpcnR1YWxMaXN0IGl0ZW0gY29tcG9uZW50XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE3LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXNjcm9sbGVyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9uZy1zY3JvbGxlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nU2Nyb2xsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHNjcm9sbENvbnRlbnQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdzY3JvbGxDb250ZW50Jyk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pXHJcbiAgY2RrU2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQmFyJywgeyByZWFkOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB9KVxyXG4gIHNjcm9sbEJhcjogTmdTY3JvbGxCYXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHNjcm9sbFZpZXdwb3J0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+Pignc2Nyb2xsVmlld3BvcnQnKTtcclxuXHJcbiAgZGlyZWN0aW9uID0gaW5wdXQ8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcblxyXG4gIGZvY3VzZWRFbGVtZW50ID0gaW5wdXQ8SWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gIGNvbnRlbnQgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcclxuXHJcbiAgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY2xhc3NlcyA9IGlucHV0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuXHJcbiAgc3RhcnRPZmZzZXQgPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICBlbmRPZmZzZXQgPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICBzY3JvbGxiYXJUaGVtZSA9IGlucHV0PFNjcm9sbEJhclRoZW1lIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBzY3JvbGxiYXJNaW5TaXplID0gaW5wdXQ8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSk7XHJcblxyXG4gIGFjdHVhbENsYXNzZXM6IFNpZ25hbDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9PjtcclxuXHJcbiAgY29udGFpbmVyQ2xhc3NlczogU2lnbmFsPHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+O1xyXG5cclxuICBpc1ZlcnRpY2FsOiBTaWduYWw8Ym9vbGVhbj47XHJcblxyXG4gIHRodW1iR3JhZGllbnRQb3NpdGlvbnMgPSBzaWduYWw8R3JhZGllbnRDb2xvclBvc2l0aW9ucz4oWzAsIDBdKTtcclxuXHJcbiAgdGh1bWJTaXplID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblxyXG4gIHRodW1iUG9zaXRpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHJcbiAgdGh1bWJTaG93ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJlcGFyZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBncmFiYmluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3NlcnZpY2UgPSBpbmplY3QoTmdWaXJ0dWFsTGlzdFNlcnZpY2UpO1xyXG5cclxuICBsYW5nVGV4dERpcjogU2lnbmFsPFRleHREaXJlY3Rpb24gfCB1bmRlZmluZWQ+O1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuXyR1cGRhdGVTY3JvbGxCYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsRW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsRW5kID0gdGhpcy5fJHNjcm9sbEVuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQm94ID0gbmV3IFNjcm9sbEJveCgpO1xyXG5cclxuICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCksXHJcbiAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplO1xyXG4gICAgcmV0dXJuIHRvdGFsU2l6ZSA+IHZpZXdwb3J0U2l6ZTtcclxuICB9XHJcblxyXG4gIGdldCBob3N0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsVmlld3BvcnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMucHJlcGFyZWRTaWduYWwuc2V0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfeDogbnVtYmVyID0gMDtcclxuICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3ggPSB0aGlzLl9hY3R1YWxYID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgcHJpdmF0ZSBfeTogbnVtYmVyID0gMDtcclxuICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCB0b3RhbFNpemUodjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90b3RhbFNpemUgPSB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemUsXHJcbiAgICAgIGlzVmVydGljYWwgPSB0aGlzLmRpcmVjdGlvbigpID09PSBWRVJUSUNBTDtcclxuICAgIHJldHVybiBpc1ZlcnRpY2FsID8gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQgOiB0aGlzLnNjcm9sbEhlaWdodDtcclxuICB9XHJcblxyXG4gIGdldCBhY3R1YWxTY3JvbGxXaWR0aCgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMudmlld3BvcnRCb3VuZHMoKSxcclxuICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gVkVSVElDQUw7XHJcbiAgICByZXR1cm4gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsV2lkdGggOiB0b3RhbFNpemUgPCB2aWV3cG9ydFdpZHRoID8gMCA6IHRvdGFsU2l6ZSAtIHZpZXdwb3J0V2lkdGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hY3R1YWxYOiBudW1iZXIgPSAwO1xyXG4gIGdldCBhY3R1YWxTY3JvbGxMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdHVhbFg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hY3R1YWxZOiBudW1iZXIgPSAwO1xyXG4gIGdldCBhY3R1YWxTY3JvbGxUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0dWFsWTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3g7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsVG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsV2lkdGgoKSB7XHJcbiAgICBjb25zdCB7IHdpZHRoOiB2aWV3cG9ydFdpZHRoIH0gPSB0aGlzLnZpZXdwb3J0Qm91bmRzKCksXHJcbiAgICAgIGFjdHVhbFZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoLFxyXG4gICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuY29udGVudEJvdW5kcygpO1xyXG4gICAgcmV0dXJuIGNvbnRlbnRXaWR0aCA8IGFjdHVhbFZpZXdwb3J0V2lkdGggPyAwIDogKGNvbnRlbnRXaWR0aCAtIGFjdHVhbFZpZXdwb3J0V2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEhlaWdodCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICBhY3R1YWxWaWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0LFxyXG4gICAgICB7IGhlaWdodDogY29udGVudEhlaWdodCB9ID0gdGhpcy5jb250ZW50Qm91bmRzKCk7XHJcbiAgICByZXR1cm4gY29udGVudEhlaWdodCA8IGFjdHVhbFZpZXdwb3J0SGVpZ2h0ID8gMCA6IChjb250ZW50SGVpZ2h0IC0gYWN0dWFsVmlld3BvcnRIZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmVsb2NpdHk6IG51bWJlciA9IDA7XHJcblxyXG4gIHJlYWRvbmx5IHZpZXdwb3J0Qm91bmRzID0gc2lnbmFsPElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGNvbnRlbnRCb3VuZHMgPSBzaWduYWw8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuXHJcbiAgcHJpdmF0ZSBfdmlld3BvcnRSZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XHJcblxyXG4gIHByaXZhdGUgX29uUmVzaXplVmlld3BvcnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnNjcm9sbFZpZXdwb3J0KCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgdGhpcy52aWV3cG9ydEJvdW5kcy5zZXQoeyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udGVudFJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVDb250ZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIHRoaXMuY29udGVudEJvdW5kcy5zZXQoeyB3aWR0aDogY29udGVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBjb250ZW50Lm9mZnNldEhlaWdodCB9KTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNjcm9sbEJhcklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0aW9uSWQxOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxhbmdUZXh0RGlyID0gdG9TaWduYWwodGhpcy5fc2VydmljZS4kbGFuZ1RleHREaXIpO1xyXG5cclxuICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fb25SZXNpemVWaWV3cG9ydEhhbmRsZXIpO1xyXG4gICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX29uUmVzaXplQ29udGVudEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuaXNWZXJ0aWNhbCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdwb3J0ID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Nyb2xsVmlld3BvcnQpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICksXHJcbiAgICAgICRjb250ZW50ID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Nyb2xsQ29udGVudCkucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICApLFxyXG4gICAgICAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy4kdXBkYXRlU2Nyb2xsQmFyO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhckhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uKCksXHJcbiAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldCgpLFxyXG4gICAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0KCksXHJcbiAgICAgICAgc2Nyb2xsQ29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudCgpPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICAgIHNjcm9sbFZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydCgpPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRodW1iU2l6ZSxcclxuICAgICAgICAgIHRodW1iUG9zaXRpb24sXHJcbiAgICAgICAgICB0aHVtYkdyYWRpZW50UG9zaXRpb25zLFxyXG4gICAgICAgIH0gPSB0aGlzLl9zY3JvbGxCb3guY2FsY3VsYXRlU2Nyb2xsKHtcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIHZpZXdwb3J0V2lkdGg6IHNjcm9sbFZpZXdwb3J0Lm9mZnNldFdpZHRoLCB2aWV3cG9ydEhlaWdodDogc2Nyb2xsVmlld3BvcnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgY29udGVudFdpZHRoOiBzY3JvbGxDb250ZW50Lm9mZnNldFdpZHRoLCBjb250ZW50SGVpZ2h0OiBzY3JvbGxDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgIHN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgICAgZW5kT2Zmc2V0LFxyXG4gICAgICAgICAgcG9zaXRpb25YOiB0aGlzLl94LFxyXG4gICAgICAgICAgcG9zaXRpb25ZOiB0aGlzLl95LFxyXG4gICAgICAgICAgbWluU2l6ZTogdGhpcy5zY3JvbGxiYXJNaW5TaXplKCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnRodW1iR3JhZGllbnRQb3NpdGlvbnMuc2V0KHRodW1iR3JhZGllbnRQb3NpdGlvbnMpO1xyXG4gICAgICB0aGlzLnRodW1iU2l6ZS5zZXQodGh1bWJTaXplKTtcclxuICAgICAgdGhpcy50aHVtYlBvc2l0aW9uLnNldCh0aHVtYlBvc2l0aW9uKTtcclxuICAgICAgdGhpcy50aHVtYlNob3cuc2V0KGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA+IDAgOiB0aGlzLnNjcm9sbFdpZHRoID4gMCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIgPSAodGltZTogRE9NSGlnaFJlc1RpbWVTdGFtcCkgPT4ge1xyXG4gICAgICB1cGRhdGVTY3JvbGxCYXJIYW5kbGVyKCk7XHJcbiAgICB9O1xyXG5cclxuICAgICR1cGRhdGVTY3JvbGxCYXIucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVTY3JvbGxCYXJJZCA9IHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkO1xyXG4gICAgICAgIGlmICh1cGRhdGVTY3JvbGxCYXJJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVNjcm9sbEJhclJBRkhhbmRsZXIpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodmlld3BvcnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh2aWV3cG9ydCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVWaWV3cG9ydEhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5fb25SZXNpemVDb250ZW50SGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KGNvbnRlbnQsIFdIRUVMLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFdIRUVMX0VWRU5UKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl95ID49IDAgJiYgdGhpcy5feSA8PSB0aGlzLnNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3ggPj0gMCAmJiB0aGlzLl94IDw9IHRoaXMuc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCxcclxuICAgICAgICAgICAgICBzdGFydFBvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLngsXHJcbiAgICAgICAgICAgICAgZGVsdGEgPSBpc1ZlcnRpY2FsID8gZS5kZWx0YVkgOiBlLmRlbHRhWCwgZHAgPSBzdGFydFBvcyArIGRlbHRhLCBwb3NpdGlvbiA9IGRwIDwgMCA/IDAgOiBkcCA+IHNjcm9sbFNpemUgPyBzY3JvbGxTaXplIDogZHA7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oeyBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBwb3NpdGlvbiwgYmVoYXZpb3I6IElOU1RBTlQsIHVzZXJBY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJG1vdXNlVXAgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4od2luZG93LCBNT1VTRV9VUCwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICksXHJcbiAgICAgICRtb3VzZURyYWdDYW5jZWwgPSAkbW91c2VVcC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ncmFiYmluZy5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG5cclxuICAgICRjb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoY29udGVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxNb3VzZUV2ZW50Pihjb250ZW50LCBNT1VTRV9ET1dOLCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbEJhcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKElOVEVSQUNUSVZFKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdyYWJiaW5nLnNldCh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICAgICAgICBsZXQgcHJldlBvcyA9IHN0YXJ0UG9zLCBwcmV2Q2xpZW50UG9zaXRpb24gPSAwLCBzdGFydFBvc0RlbHRhID0gMDtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRDbGllbnRQb3MgPSBpc1ZlcnRpY2FsID8gZS5jbGllbnRZIDogZS5jbGllbnRYLFxyXG4gICAgICAgICAgICAgIG9mZnNldHMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKSwgdmVsb2NpdGllcyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudDxNb3VzZUV2ZW50Pih3aW5kb3csIE1PVVNFX01PVkUsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKCRtb3VzZURyYWdDYW5jZWwpLFxyXG4gICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjUG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zRGVsdGEgKz0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUuY2xpZW50WSA6IGUuY2xpZW50WCxcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsIGRlbHRhID0gc3RhcnRDbGllbnRQb3MgLSBjdXJyZW50UG9zLFxyXG4gICAgICAgICAgICAgICAgICBkcCA9IHN0YXJ0UG9zICsgc3RhcnRQb3NEZWx0YSArIGRlbHRhLCBwb3NpdGlvbiA9IE1hdGgucm91bmQoZHAgPCAwID8gMCA6IGRwID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiBkcCksIGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLCBzY3JvbGxEZWx0YSA9IHByZXZDbGllbnRQb3NpdGlvbiA9PT0gMCA/IDAgOiBwcmV2Q2xpZW50UG9zaXRpb24gLSBjdXJyZW50UG9zLFxyXG4gICAgICAgICAgICAgICAgICB7IHYwIH0gPSB0aGlzLmNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHMsIHNjcm9sbERlbHRhLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllcywgdjAsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICBwcmV2Q2xpZW50UG9zaXRpb24gPSBjdXJyZW50UG9zO1xyXG4gICAgICAgICAgICAgICAgcHJldlBvcyA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlKGlzVmVydGljYWwsIHBvc2l0aW9uLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhY2UoW2Zyb21FdmVudDxNb3VzZUV2ZW50Pih3aW5kb3csIE1PVVNFX1VQLCB7IHBhc3NpdmU6IGZhbHNlIH0pLCBmcm9tRXZlbnQ8TW91c2VFdmVudD4oY29udGVudCwgTU9VU0VfVVAsIHsgcGFzc2l2ZTogZmFsc2UgfSldKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXHJcbiAgICAgICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyB2MCB9ID0gdGhpcy5jYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzLCBzY3JvbGxEZWx0YSwgdGltZXN0YW1wKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgYTAgfSA9IHRoaXMuY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXMsIHYwLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFiYmluZy5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVdpdGhBY2NlbGVyYXRpb24oaXNWZXJ0aWNhbCwgcG9zaXRpb24sIDAsIHYwLCBhMCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR0b3VjaFVwID0gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfRU5ELCB7IHBhc3NpdmU6IGZhbHNlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgKSxcclxuICAgICAgJHRvdWNoQ2FuY2VsZXIgPSAkdG91Y2hVcC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ3JhYmJpbmcuc2V0KGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkY29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oY29udGVudCwgVE9VQ0hfU1RBUlQsIHsgcGFzc2l2ZTogZmFsc2UgfSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoSU5URVJBQ1RJVkUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc01vdmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JhYmJpbmcuc2V0KHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFBvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgICAgICAgIGxldCBwcmV2UG9zID0gc3RhcnRQb3MsIHByZXZDbGllbnRQb3NpdGlvbiA9IDAsIHN0YXJ0UG9zRGVsdGEgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydENsaWVudFBvcyA9IGlzVmVydGljYWwgPyBlLnRvdWNoZXNbZS50b3VjaGVzLmxlbmd0aCAtIDFdLmNsaWVudFkgOiBlLnRvdWNoZXNbZS50b3VjaGVzLmxlbmd0aCAtIDFdLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgb2Zmc2V0cyA9IG5ldyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPigpLCB2ZWxvY2l0aWVzID0gbmV3IEFycmF5PFtudW1iZXIsIG51bWJlcl0+KCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHdpbmRvdywgVE9VQ0hfTU9WRSwgeyBwYXNzaXZlOiBmYWxzZSB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgICAgICB0YWtlVW50aWwoJHRvdWNoQ2FuY2VsZXIpLFxyXG4gICAgICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjUG9zID0gaXNWZXJ0aWNhbCA/IHRoaXMueSA6IHRoaXMueDtcclxuICAgICAgICAgICAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zRGVsdGEgKz0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gaXNWZXJ0aWNhbCA/IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WSA6IGUudG91Y2hlc1tlLnRvdWNoZXMubGVuZ3RoIC0gMV0uY2xpZW50WCxcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsIGRlbHRhID0gc3RhcnRDbGllbnRQb3MgLSBjdXJyZW50UG9zLFxyXG4gICAgICAgICAgICAgICAgICBkcCA9IHN0YXJ0UG9zICsgc3RhcnRQb3NEZWx0YSArIGRlbHRhLCBwb3NpdGlvbiA9IE1hdGgucm91bmQoZHAgPCAwID8gMCA6IGRwID4gc2Nyb2xsU2l6ZSA/IHNjcm9sbFNpemUgOiBkcCksIGVuZFRpbWUgPSBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBlbmRUaW1lIC0gc3RhcnRUaW1lLCBzY3JvbGxEZWx0YSA9IHByZXZDbGllbnRQb3NpdGlvbiA9PT0gMCA/IDAgOiBwcmV2Q2xpZW50UG9zaXRpb24gLSBjdXJyZW50UG9zLFxyXG4gICAgICAgICAgICAgICAgICB7IHYwIH0gPSB0aGlzLmNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHMsIHNjcm9sbERlbHRhLCB0aW1lc3RhbXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllcywgdjAsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICBwcmV2Q2xpZW50UG9zaXRpb24gPSBjdXJyZW50UG9zO1xyXG4gICAgICAgICAgICAgICAgcHJldlBvcyA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlKGlzVmVydGljYWwsIHBvc2l0aW9uLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhY2UoW2Zyb21FdmVudDxUb3VjaEV2ZW50Pih3aW5kb3csIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KSwgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KGNvbnRlbnQsIFRPVUNIX0VORCwgeyBwYXNzaXZlOiBmYWxzZSB9KV0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcclxuICAgICAgICAgICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IGVuZFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IHYwIH0gPSB0aGlzLmNhbGN1bGF0ZVZlbG9jaXR5KG9mZnNldHMsIHNjcm9sbERlbHRhLCB0aW1lc3RhbXApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBhMCB9ID0gdGhpcy5jYWxjdWxhdGVBY2NlbGVyYXRpb24odmVsb2NpdGllcywgdjAsIHRpbWVzdGFtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYWJiaW5nLnNldChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlV2l0aEFjY2VsZXJhdGlvbihpc1ZlcnRpY2FsLCBwb3NpdGlvbiwgdGhpcy5fdmVsb2NpdHksIHYwLCBhMCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuYWN0dWFsQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgY29uc3QgY2xhc3NlcyA9IHRoaXMuY2xhc3NlcygpLCBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbigpO1xyXG4gICAgICByZXR1cm4geyAuLi5jbGFzc2VzLCBbZGlyZWN0aW9uXTogdHJ1ZSwgZ3JhYmJpbmc6IHRoaXMuZ3JhYmJpbmcoKSB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJDbGFzc2VzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICByZXR1cm4geyBbdGhpcy5kaXJlY3Rpb24oKV06IHRydWUsIGdyYWJiaW5nOiB0aGlzLmdyYWJiaW5nKCkgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVWZWxvY2l0eShvZmZzZXRzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiwgZGVsdGE6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXIsIGluZGV4T2Zmc2V0OiBudW1iZXIgPSAxMCkge1xyXG4gICAgb2Zmc2V0cy5wdXNoKFtkZWx0YSwgdGltZXN0YW1wIDwgTUlOX1RJTUVTVEFNUCA/IE1JTl9USU1FU1RBTVAgOiB0aW1lc3RhbXBdKTtcclxuXHJcbiAgICBjb25zdCBsZW4gPSBvZmZzZXRzLmxlbmd0aCwgc3RhcnRJbmRleCA9IGxlbiA+IGluZGV4T2Zmc2V0ID8gbGVuIC0gaW5kZXhPZmZzZXQgOiAwLCBsYXN0VlNpZ24gPSBjYWxjdWxhdGVEaXJlY3Rpb24ob2Zmc2V0cyk7XHJcbiAgICBsZXQgdlN1bSA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleCwgbCA9IG9mZnNldHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHAwID0gb2Zmc2V0c1tpXTtcclxuICAgICAgaWYgKGxhc3RWU2lnbiAhPT0gTWF0aC5zaWduKHAwWzBdKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB2MCA9IChwMFsxXSAhPT0gMCA/IGxhc3RWU2lnbiAqIE1hdGguYWJzKHAwWzBdIC8gcDBbMV0pICogU1BFRURfU0NBTEUgOiAwKTtcclxuICAgICAgdlN1bSArPSBNYXRoLnNpZ24odjApICogTWF0aC5wb3codjAsIDQpICogLjAwMztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsID0gTWF0aC5taW4ob2Zmc2V0cy5sZW5ndGgsIGluZGV4T2Zmc2V0KSwgdjAgPSBsID4gMCA/ICh2U3VtIC8gbCkgOiAwO1xyXG4gICAgcmV0dXJuIHsgdjAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlQWNjZWxlcmF0aW9uKHZlbG9jaXRpZXM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBkZWx0YTogbnVtYmVyLCB0aW1lc3RhbXA6IG51bWJlciwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDEwKSB7XHJcbiAgICB2ZWxvY2l0aWVzLnB1c2goW2RlbHRhLCB0aW1lc3RhbXAgPCBNSU5fVElNRVNUQU1QID8gTUlOX1RJTUVTVEFNUCA6IHRpbWVzdGFtcF0pO1xyXG4gICAgY29uc3QgbGVuID0gdmVsb2NpdGllcy5sZW5ndGgsIHN0YXJ0SW5kZXggPSBsZW4gPiBpbmRleE9mZnNldCA/IGxlbiAtIGluZGV4T2Zmc2V0IDogMDtcclxuICAgIGxldCBhU3VtID0gMCwgcHJldlYwOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBpdGVyYXRpb24gPSAwLCBsYXN0VlNpZ24gPSBjYWxjdWxhdGVEaXJlY3Rpb24odmVsb2NpdGllcyk7XHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleCwgbCA9IHZlbG9jaXRpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHYwMCA9IHByZXZWMCwgdjAxID0gdmVsb2NpdGllc1tpXTtcclxuICAgICAgaWYgKGxhc3RWU2lnbiAhPT0gTWF0aC5zaWduKHYwMVswXSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodjAwKSB7XHJcbiAgICAgICAgY29uc3QgYTAgPSB0aW1lc3RhbXAgPCBNQVhfVkVMT0NJVFlfVElNRVNUQU1QID8gKHYwMFsxXSAhPT0gMCA/IChsYXN0VlNpZ24gKiBNYXRoLmFicyhNYXRoLmFicyh2MDFbMF0pIC0gTWF0aC5hYnModjAwWzBdKSkpIC8gTWF0aC5hYnModjAwWzFdKSA6IDApIDogMDtcclxuICAgICAgICBhU3VtICs9IGEwO1xyXG4gICAgICAgIHByZXZWMCA9IHYwMTtcclxuICAgICAgfVxyXG4gICAgICBwcmV2VjAgPSB2MDE7XHJcbiAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGEwID0gYVN1bSAqIEZSSUNUSU9OX0ZPUkNFO1xyXG4gICAgcmV0dXJuIHsgYTAgfTtcclxuICB9XHJcblxyXG4gIHN0b3BTY3JvbGxpbmcoKSB7XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25JZDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlKGlzVmVydGljYWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBudW1iZXIsIGJsZW5kaW5nOiBib29sZWFuID0gZmFsc2UsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zY3JvbGxUbyh7IFtpc1ZlcnRpY2FsID8gVE9QIDogTEVGVF06IHBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCwgYmxlbmRpbmcsIHVzZXJBY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVXaXRoQWNjZWxlcmF0aW9uKGlzVmVydGljYWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBudW1iZXIsIHYwOiBudW1iZXIsIHY6IG51bWJlciwgYTA6IG51bWJlcikge1xyXG4gICAgaWYgKGEwICE9PSAwKSB7XHJcbiAgICAgIGNvbnN0IGR2U2lnbiA9IE1hdGguc2lnbih2KSxcclxuICAgICAgICBkdXJhdGlvbiA9IERVUkFUSU9OLCBtYXhEdXJhdGlvbiA9IE1BWF9EVVJBVElPTixcclxuICAgICAgICBtYXhEaXN0YW5jZSA9IGR2U2lnbiAqIE1BWF9ESVNULCBzID0gKGR2U2lnbiAqIE1hdGguYWJzKChhMCAqIE1hdGgucG93KGR1cmF0aW9uLCAyKSkgKiAuNSkgLyAxMDAwKSAvIE1BU1MsXHJcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhzKSA8IE1BWF9ESVNUID8gcyA6IG1heERpc3RhbmNlLCBwb3NpdGlvbldpdGhWZWxvY2l0eSA9IHBvc2l0aW9uICsgZGlzdGFuY2UsXHJcbiAgICAgICAgdm1heCA9IE1hdGgubWF4KE1hdGguYWJzKHYwKSwgTWF0aC5hYnModikpLFxyXG4gICAgICAgIGFkID0gTWF0aC5hYnModm1heCAhPT0gMCA/IE1hdGguc3FydCh2bWF4KSA6IDApICogMTAgLyBNQVNTLFxyXG4gICAgICAgIGFEdXJhdGlvbiA9IGFkIDwgbWF4RHVyYXRpb24gPyBhZCA6IG1heER1cmF0aW9uLFxyXG4gICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpc1ZlcnRpY2FsID8gdGhpcy55IDogdGhpcy54O1xyXG4gICAgICB0aGlzLmFuaW1hdGUoc3RhcnRQb3NpdGlvbiwgTWF0aC5yb3VuZChwb3NpdGlvbldpdGhWZWxvY2l0eSksIGFEdXJhdGlvbiwgZWFzZU91dFF1YWQsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZShzdGFydFZhbHVlOiBudW1iZXIsIGVuZFZhbHVlOiBudW1iZXIsIGR1cmF0aW9uID0gQU5JTUFUSU9OX0RVUkFUSU9OLCBlYXNpbmdGdW5jdGlvbjogRWFzaW5nID0gZWFzZUxpbmVhciwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGdldFN0YXJ0VGltZSgpLCBpc1ZlcnRpY2FsID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gU2Nyb2xsZXJEaXJlY3Rpb24uVkVSVElDQUw7XHJcbiAgICBsZXQgaXNDYW5jZWxlZCA9IGZhbHNlLCBwcmV2UG9zID0gc3RhcnRWYWx1ZSwgc3RhcnQgPSBzdGFydFZhbHVlLCBzdGFydFBvc0RlbHRhID0gMCwgZGVsdGEgPSAwLCBwcmV2VGltZSA9IHN0YXJ0VGltZSxcclxuICAgICAgZGlmZiA9IE1hdGguYWJzKE1hdGguYWJzKGVuZFZhbHVlKSAtIE1hdGguYWJzKHN0YXJ0KSk7XHJcblxyXG4gICAgaWYgKGRpZmYgPCBNSU5fQU5JTUFURURfVkFMVUUpIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBwcmV2UG9zID0gc3RhcnQgPSBlbmRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICB0aGlzLnkgPSBzdGFydDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnggPSBzdGFydDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaW5pc2hlZFZhbHVlID0gZW5kVmFsdWUsXHJcbiAgICAgIGlzRmluaXNoZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBzdGVwID0gKGN1cnJlbnRUaW1lOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKCEhaXNDYW5jZWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY1BvcyA9IGlzVmVydGljYWwgPyB0aGlzLnkgOiB0aGlzLng7XHJcbiAgICAgIGxldCBzY3JvbGxEZWx0YSA9IDA7XHJcbiAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgc2Nyb2xsRGVsdGEgPSBjUG9zIC0gcHJldlBvcztcclxuICAgICAgICBzdGFydFBvc0RlbHRhICs9IHNjcm9sbERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSBzdGFydFBvc0RlbHRhICsgc3RhcnQgKyAoZmluaXNoZWRWYWx1ZSAtIHN0YXJ0KSAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyB0aGlzLmFjdHVhbFNjcm9sbEhlaWdodCA6IHRoaXMuYWN0dWFsU2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsIDwgMCA/IDAgOiB2YWwgPiBzY3JvbGxTaXplID8gc2Nyb2xsU2l6ZSA6IHZhbCxcclxuICAgICAgICB0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSAoY3VycmVudFZhbHVlID09PSBzY3JvbGxTaXplICYmIE1hdGgucm91bmQoc2Nyb2xsU2l6ZSkgPj0gTWF0aC5yb3VuZChhY3R1YWxTY3JvbGxTaXplKSkgfHxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPT09IDAgfHwgcHJvZ3Jlc3MgPT09IDE7XHJcblxyXG4gICAgICBkZWx0YSA9IGN1cnJlbnRWYWx1ZSAtIHNjcm9sbERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IE1JTl9USU1FU1RBTVAgPyBNSU5fVElNRVNUQU1QIDogdHM7XHJcbiAgICAgIHRoaXMuX3ZlbG9jaXR5ID0gdGltZXN0YW1wID4gMCA/IGRlbHRhIC8gdGltZXN0YW1wIDogMDtcclxuXHJcbiAgICAgIHByZXZUaW1lID0gdDtcclxuICAgICAgcHJldlBvcyA9IGN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGNvbnN0IHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgaWYgKHNjcm9sbENvbnRlbnQpIHtcclxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25JZDEpO1xyXG4gICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICB0aGlzLnkgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICBzY3JvbGxDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAkey1jdXJyZW50VmFsdWV9cHgsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGwubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy54ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHstY3VycmVudFZhbHVlfXB4LCAwLCAwKWA7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZGtTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrU2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFNDUk9MTF9FVkVOVCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbEVuZC5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxCYXIoKSB7XHJcbiAgICB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvKHBhcmFtczogSVNjcm9sbFRvUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwb3NYID0gcGFyYW1zLnggfHwgcGFyYW1zLmxlZnQgfHwgMCxcclxuICAgICAgcG9zWSA9IHBhcmFtcy55IHx8IHBhcmFtcy50b3AgfHwgMCxcclxuICAgICAgdXNlckFjdGlvbiA9IHBhcmFtcy51c2VyQWN0aW9uID8/IGZhbHNlLFxyXG4gICAgICB4ID0gcG9zWCxcclxuICAgICAgeSA9IHBvc1ksXHJcbiAgICAgIGJlaGF2aW9yID0gcGFyYW1zLmJlaGF2aW9yID8/IElOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gcGFyYW1zLmJsZW5kaW5nID8/IHRydWUsXHJcbiAgICAgIHNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuZGlyZWN0aW9uKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc01vdmluZykge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmICh5IDwgMCB8fCB5ID4gdGhpcy5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHggPCAwIHx8IHggPiB0aGlzLnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeHggPSB4LFxyXG4gICAgICB5eSA9IHksXHJcbiAgICAgIHByZXZYID0gdGhpcy54LFxyXG4gICAgICBwcmV2WSA9IHRoaXMueTtcclxuICAgIHRoaXMueCA9IHh4O1xyXG4gICAgdGhpcy55ID0geXk7XHJcbiAgICBpZiAoYmVoYXZpb3IgPT09IEFVVE8gfHwgYmVoYXZpb3IgPT09IFNNT09USCkge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmIChwcmV2WSAhPT0geXkpIHtcclxuICAgICAgICAgIHRoaXMuYW5pbWF0ZShwcmV2WSwgeXksIEFOSU1BVElPTl9EVVJBVElPTiwgZWFzZUxpbmVhciwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2WCAhPT0geHgpIHtcclxuICAgICAgICAgIHRoaXMuYW5pbWF0ZShwcmV2WCwgeHgsIEFOSU1BVElPTl9EVVJBVElPTiwgZWFzZUxpbmVhciwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGlmIChwcmV2WSAhPT0geXkpIHtcclxuICAgICAgICAgIGlmICghYmxlbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzY3JvbGxDb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAkey15eX1weCwgMClgO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExfRVZFTlQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocHJldlggIT09IHh4KSB7XHJcbiAgICAgICAgICBpZiAoIWJsZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2Nyb2xsQ29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHsteHh9cHgsIDAsIDApYDtcclxuICAgICAgICAgIGlmICh0aGlzLmNka1Njcm9sbGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoU0NST0xMX0VWRU5UKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmZpcmVTY3JvbGxFdmVudCh1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaXJlU2Nyb2xsRXZlbnQodXNlckFjdGlvbjogYm9vbGVhbikge1xyXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uSWQxKTtcclxuICAgIHRoaXMuX2FuaW1hdGlvbklkMSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuXyRzY3JvbGwubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBpZiAodGhpcy5zY3JvbGxCYXIpIHtcclxuICAgICAgdGhpcy5zY3JvbGxCYXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb3ZlKHRoaXMuaXNWZXJ0aWNhbCgpLCAwKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgdGhpcy5faXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICB7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlUG9zaXRpb24sXHJcbiAgICAgIH0gPSB0aGlzLl9zY3JvbGxCb3guZ2V0U2Nyb2xsUG9zaXRpb25CeVNjcm9sbEJhcih7XHJcbiAgICAgICAgc2Nyb2xsU2l6ZTogaXNWZXJ0aWNhbCA/IHRoaXMuYWN0dWFsU2Nyb2xsSGVpZ2h0IDogdGhpcy5hY3R1YWxTY3JvbGxXaWR0aCxcclxuICAgICAgICBwb3NpdGlvbixcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNjcm9sbFRvKHsgW2lzVmVydGljYWwgPyBUT1AgOiBMRUZUXTogYWJzb2x1dGVQb3NpdGlvbiwgYmVoYXZpb3I6IEFVVE8sIGJsZW5kaW5nOiB0cnVlLCB1c2VyQWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgaWYgKHRoaXMuY2RrU2Nyb2xsYWJsZSkge1xyXG4gICAgICB0aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChTQ1JPTExCQVJfU0NST0xMX0VWRU5UKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzTW92aW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEJhcklkID0gdGhpcy5fdXBkYXRlU2Nyb2xsQmFySWQ7XHJcbiAgICBpZiAodXBkYXRlU2Nyb2xsQmFySWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGVTY3JvbGxCYXJJZCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbEJhcklkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgaWYgKHRoaXMuX3ZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fdmlld3BvcnRSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fY29udGVudFJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRlbnRSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgbG9jYWxlU2Vuc2l0aXZlIFtsYW5nVGV4dERpcl09XCJsYW5nVGV4dERpcigpXCIgW2xpc3REaXJdPVwiZGlyZWN0aW9uKClcIiBjbGFzcz1cIm5ndmxfX2NvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImNvbnRhaW5lckNsYXNzZXMoKVwiPlxyXG4gICAgPGRpdiAjc2Nyb2xsVmlld3BvcnQgY2RrU2Nyb2xsYWJsZSBwYXJ0PVwic2Nyb2xsZXJcIiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyXCI+XHJcbiAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGVudCBbYXR0ci5hcmlhLW9yaWVudGF0aW9uXT1cImRpcmVjdGlvbigpXCIgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImZvY3VzZWRFbGVtZW50KClcIlxyXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIiBwYXJ0PVwibGlzdFwiIGNsYXNzPVwibmd2bF9fbGlzdFwiIFtuZ0NsYXNzXT1cImFjdHVhbENsYXNzZXMoKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1zY3JvbGwtYmFyICNzY3JvbGxCYXIgW2lzVmVydGljYWxdPVwiaXNWZXJ0aWNhbCgpXCIgW3NpemVdPVwidGh1bWJTaXplKClcIiBbdGhlbWVdPVwic2Nyb2xsYmFyVGhlbWUoKVwiIFtwb3NpdGlvbl09XCJ0aHVtYlBvc2l0aW9uKClcIlxyXG4gICAgICAgIFt0aHVtYkdyYWRpZW50UG9zaXRpb25zXT1cInRodW1iR3JhZGllbnRQb3NpdGlvbnMoKVwiIFtsb2FkaW5nXT1cImxvYWRpbmcoKVwiIFtwcmVwYXJlZF09XCJwcmVwYXJlZFNpZ25hbCgpXCIgW3Nob3ddPVwidGh1bWJTaG93KClcIlxyXG4gICAgICAgIChvbkRyYWcpPVwib25TY3JvbGxCYXJEcmFnSGFuZGxlcigkZXZlbnQpXCI+PC9uZy1zY3JvbGwtYmFyPlxyXG48L2Rpdj4iXX0=
|