ng-virtual-list 16.12.0 → 16.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -11
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +3 -3
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +3 -3
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +6 -6
- package/esm2022/lib/components/ng-scroll-view/const/index.mjs +2 -2
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +9 -11
- package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-metrics.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-params.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-position-params.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/scroll-box.mjs +1 -1
- package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
- package/esm2022/lib/core/track-box.mjs +24 -19
- package/esm2022/lib/core/tracker.mjs +12 -9
- package/esm2022/lib/ng-virtual-list.component.mjs +49 -35
- package/esm2022/lib/utils/animator/animator.mjs +2 -2
- package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
- package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
- package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
- package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
- package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
- package/fesm2022/ng-virtual-list.mjs +100 -81
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-scroll-view/const/index.d.ts +1 -1
- package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-metrics.d.ts +11 -0
- package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-params.d.ts +19 -0
- package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-position-params.d.ts +10 -0
- package/lib/components/ng-scroller/utils/interfaces/index.d.ts +4 -0
- package/lib/components/ng-scroller/utils/scroll-box.d.ts +1 -18
- package/lib/core/interfaces/recalculate-metrics-options.d.ts +2 -1
- package/lib/ng-virtual-list.component.d.ts +1 -0
- package/lib/utils/animator/animator.d.ts +1 -1
- package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
- package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
- package/lib/utils/animator/types/easing.d.ts +1 -1
- package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
- package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
- package/package.json +1 -1
|
@@ -2275,7 +2275,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2275
2275
|
this._isLoading = false;
|
|
2276
2276
|
})).subscribe();
|
|
2277
2277
|
const update = (params) => {
|
|
2278
|
-
const { alignment,
|
|
2278
|
+
const { alignment, snapScrollToStart, snapScrollToEnd, bounds, items, itemConfigMap, scrollSize, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, enabledBufferOptimization, snapToItem, snapToItemAlign, userAction, collapsedIds, itemTransform, } = params;
|
|
2279
2279
|
const scroller = this._scrollerComponent;
|
|
2280
2280
|
let totalSize = 0;
|
|
2281
2281
|
if (!!scroller) {
|
|
@@ -2285,7 +2285,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2285
2285
|
let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight : scroller.scrollWidth) :
|
|
2286
2286
|
(isVertical ? scroller.scrollTop : scroller.scrollLeft), leftLayoutOffset = 0, displayItems;
|
|
2287
2287
|
const { width, height } = bounds, viewportSize = (isVertical ? height : width), opts = {
|
|
2288
|
-
bounds: { width, height }, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize,
|
|
2288
|
+
alignment, bounds: { width, height }, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize,
|
|
2289
2289
|
scrollSize: actualScrollSize, stickyEnabled, enabledBufferOptimization, snapToItem, snapToItemAlign, itemTransform,
|
|
2290
2290
|
};
|
|
2291
2291
|
if (snapScrollToEnd && !this._readyForShow) {
|
|
@@ -2293,12 +2293,24 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2293
2293
|
displayItems = calculatedDisplayItems;
|
|
2294
2294
|
totalSize = calculatedTotalSize1;
|
|
2295
2295
|
leftLayoutOffset = leftLayoutOffset1;
|
|
2296
|
+
if (!!itemTransform && dynamicSize && this._trackBox.delta !== 0) {
|
|
2297
|
+
const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize + this._trackBox.delta });
|
|
2298
|
+
displayItems = calculatedDisplayItems;
|
|
2299
|
+
totalSize = calculatedTotalSize1;
|
|
2300
|
+
leftLayoutOffset = leftLayoutOffset1;
|
|
2301
|
+
}
|
|
2296
2302
|
}
|
|
2297
2303
|
else {
|
|
2298
2304
|
const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, opts);
|
|
2299
2305
|
displayItems = calculatedDisplayItems;
|
|
2300
2306
|
totalSize = calculatedTotalSize;
|
|
2301
2307
|
leftLayoutOffset = leftLayoutOffset1;
|
|
2308
|
+
if (!!itemTransform && dynamicSize && this._trackBox.delta !== 0) {
|
|
2309
|
+
const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize + this._trackBox.delta });
|
|
2310
|
+
displayItems = calculatedDisplayItems;
|
|
2311
|
+
totalSize = calculatedTotalSize;
|
|
2312
|
+
leftLayoutOffset = leftLayoutOffset1;
|
|
2313
|
+
}
|
|
2302
2314
|
}
|
|
2303
2315
|
scroller.totalSize = totalSize;
|
|
2304
2316
|
scroller.startLayoutOffset = leftLayoutOffset;
|
|
@@ -2315,23 +2327,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2315
2327
|
if (this._isSnappingMethodAdvanced) {
|
|
2316
2328
|
this.updateRegularRenderer();
|
|
2317
2329
|
}
|
|
2318
|
-
|
|
2319
|
-
case Alignments.NONE: {
|
|
2320
|
-
this._$actualScrollStartOffset.next(precalculatedScrollStartOffset);
|
|
2321
|
-
this._$actualScrollEndOffset.next(precalculatedScrollEndOffset);
|
|
2322
|
-
break;
|
|
2323
|
-
}
|
|
2324
|
-
case Alignments.CENTER: {
|
|
2325
|
-
const firstItemId = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null, endItemId = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null, alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :
|
|
2326
|
-
(this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5), alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :
|
|
2327
|
-
(this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);
|
|
2328
|
-
this._$alignmentScrollStartOffset.next(alignmentStartOffset);
|
|
2329
|
-
this._$alignmentScrollEndOffset.next(alignmentEndOffset);
|
|
2330
|
-
this._$actualScrollStartOffset.next(precalculatedScrollStartOffset + alignmentStartOffset);
|
|
2331
|
-
this._$actualScrollEndOffset.next(precalculatedScrollEndOffset + alignmentEndOffset);
|
|
2332
|
-
break;
|
|
2333
|
-
}
|
|
2334
|
-
}
|
|
2330
|
+
this.updateOffsetsByAllignment();
|
|
2335
2331
|
scroller.delta = delta;
|
|
2336
2332
|
if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||
|
|
2337
2333
|
(snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
|
|
@@ -2510,6 +2506,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2510
2506
|
const dynamicSize = this.dynamicSize, itemSize = this.actualItemSize, minItemSize = this.actualMinItemSize, maxItemSize = this.actualMaxItemSize, snapScrollToEnd = this.snapScrollToEnd;
|
|
2511
2507
|
if (dynamicSize) {
|
|
2512
2508
|
const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, isVertical = this._isVertical, currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft, opts = {
|
|
2509
|
+
alignment: this._$actualAlignment.getValue(),
|
|
2513
2510
|
bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,
|
|
2514
2511
|
bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,
|
|
2515
2512
|
scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),
|
|
@@ -2535,21 +2532,8 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2535
2532
|
this.createDisplayComponentsIfNeed(displayItems);
|
|
2536
2533
|
this.tracking();
|
|
2537
2534
|
this.snappingHandler();
|
|
2535
|
+
this.updateOffsetsByAllignment();
|
|
2538
2536
|
scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });
|
|
2539
|
-
if (this.isInfinity) {
|
|
2540
|
-
if (this.snapToItem) {
|
|
2541
|
-
const itemBounds = this._trackBox.getItemBounds(id);
|
|
2542
|
-
if (!!itemBounds) {
|
|
2543
|
-
const itemSize = isVertical ? itemBounds.height : itemBounds.width;
|
|
2544
|
-
switch (this.snapToItemAlign) {
|
|
2545
|
-
case SnapToItemAligns.CENTER: {
|
|
2546
|
-
scrollSize += itemSize * .5;
|
|
2547
|
-
break;
|
|
2548
|
-
}
|
|
2549
|
-
}
|
|
2550
|
-
}
|
|
2551
|
-
}
|
|
2552
|
-
}
|
|
2553
2537
|
if (scrollSize === -1) {
|
|
2554
2538
|
return of([finished, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));
|
|
2555
2539
|
}
|
|
@@ -2587,6 +2571,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2587
2571
|
}
|
|
2588
2572
|
}
|
|
2589
2573
|
const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(), opts = {
|
|
2574
|
+
alignment: this._$actualAlignment.getValue(),
|
|
2590
2575
|
bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,
|
|
2591
2576
|
bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,
|
|
2592
2577
|
scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),
|
|
@@ -2606,6 +2591,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2606
2591
|
this.createDisplayComponentsIfNeed(displayItems);
|
|
2607
2592
|
this.tracking();
|
|
2608
2593
|
this.snappingHandler();
|
|
2594
|
+
this.updateOffsetsByAllignment();
|
|
2609
2595
|
this._$preventScrollSnapping.next(true);
|
|
2610
2596
|
const params = {
|
|
2611
2597
|
[this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate: false,
|
|
@@ -2632,7 +2618,7 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2632
2618
|
this.emitScrollEvent(true, false, true);
|
|
2633
2619
|
const scrollParams = params;
|
|
2634
2620
|
scrollParams?.cb?.();
|
|
2635
|
-
}), delay(
|
|
2621
|
+
}), delay(0), tap(([finished]) => {
|
|
2636
2622
|
if (finished) {
|
|
2637
2623
|
this._scrollerComponent?.snapIfNeed();
|
|
2638
2624
|
}
|
|
@@ -2673,6 +2659,14 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2673
2659
|
}
|
|
2674
2660
|
}));
|
|
2675
2661
|
})).subscribe();
|
|
2662
|
+
combineLatest([$itemConfigMap, $dynamicSize, $divides]).pipe(takeUntil(this._$unsubscribe), filter(([itemConfigMap, dynamicSize, divides]) => !!itemConfigMap && !dynamicSize && divides > 1), tap(([itemConfigMap]) => {
|
|
2663
|
+
for (const id in itemConfigMap) {
|
|
2664
|
+
const metaData = itemConfigMap[id];
|
|
2665
|
+
if (metaData?.fullSize || metaData?.sticky === 1 || metaData?.sticky === 2) {
|
|
2666
|
+
throw Error('The accelerated rendering algorithm `[dynamicSize]="false"` cannot correctly handle non-uniform lists (the itemConfigMap specifies full-size elements). For correct rendering, specify `[dynamicSize]="true"`.');
|
|
2667
|
+
}
|
|
2668
|
+
}
|
|
2669
|
+
})).subscribe();
|
|
2676
2670
|
combineLatest([$collapsingMode, $items, $itemConfigMap, $trackBy]).pipe(takeUntil(this._$unsubscribe), tap(([collapsingMode, items, itemConfigMap, trackBy]) => {
|
|
2677
2671
|
const isAccordion = isCollapseMode(collapsingMode, CollapsingModes.ACCORDION);
|
|
2678
2672
|
if (isAccordion) {
|
|
@@ -2874,6 +2868,26 @@ export class NgVirtualListComponent extends DisposableComponent {
|
|
|
2874
2868
|
this._trackBox.setDisplayObjectIndexMapById(doMap);
|
|
2875
2869
|
}
|
|
2876
2870
|
}
|
|
2871
|
+
updateOffsetsByAllignment() {
|
|
2872
|
+
const alignment = this._$actualAlignment.getValue(), items = this._$actualItems.getValue(), trackBy = this.trackBy, isInfinity = this.isInfinity, isVertical = this._isVertical, { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, viewportSize = isVertical ? height : width, precalculatedScrollStartOffset = this._$precalculatedScrollStartOffset.getValue(), precalculatedScrollEndOffset = this._$precalculatedScrollEndOffset.getValue();
|
|
2873
|
+
switch (alignment) {
|
|
2874
|
+
case Alignments.NONE: {
|
|
2875
|
+
this._$actualScrollStartOffset.next(precalculatedScrollStartOffset);
|
|
2876
|
+
this._$actualScrollEndOffset.next(precalculatedScrollEndOffset);
|
|
2877
|
+
break;
|
|
2878
|
+
}
|
|
2879
|
+
case Alignments.CENTER: {
|
|
2880
|
+
const firstItemId = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null, endItemId = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null, alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :
|
|
2881
|
+
(this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5), alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :
|
|
2882
|
+
(this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);
|
|
2883
|
+
this._$alignmentScrollStartOffset.next(alignmentStartOffset);
|
|
2884
|
+
this._$alignmentScrollEndOffset.next(alignmentEndOffset);
|
|
2885
|
+
this._$actualScrollStartOffset.next(precalculatedScrollStartOffset + alignmentStartOffset);
|
|
2886
|
+
this._$actualScrollEndOffset.next(precalculatedScrollEndOffset + alignmentEndOffset);
|
|
2887
|
+
break;
|
|
2888
|
+
}
|
|
2889
|
+
}
|
|
2890
|
+
}
|
|
2877
2891
|
updateRegularRenderer() {
|
|
2878
2892
|
this._resizeSnappedComponentHandler();
|
|
2879
2893
|
}
|
|
@@ -3243,4 +3257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
3243
3257
|
}], langTextDir: [{
|
|
3244
3258
|
type: Input
|
|
3245
3259
|
}] } });
|
|
3246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUM5RSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUVqRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQ25ELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNyRyxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFDL0ksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFDN0gsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUseUJB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O2dCQTZCRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBaUNGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNkJGLE9BQU87c0JBRFYsS0FBSztnQkE2QkYsVUFBVTtzQkFEYixLQUFLO2dCQTZCRixhQUFhO3NCQURoQixLQUFLO2dCQTZCRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBK0NGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBNkJGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFnQ0YseUJBQXlCO3NCQUQ1QixLQUFLO2dCQStCRixZQUFZO3NCQURmLEtBQUs7Z0JBb0RGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBK0JGLFFBQVE7c0JBRFgsS0FBSztnQkE2QkYsV0FBVztzQkFEZCxLQUFLO2dCQTZCRixXQUFXO3NCQURkLEtBQUs7Z0JBOEJGLFdBQVc7c0JBRGQsS0FBSztnQkE0QkYsU0FBUztzQkFEWixLQUFLO2dCQTRCRixjQUFjO3NCQURqQixLQUFLO2dCQTRCRixVQUFVO3NCQURiLEtBQUs7Z0JBb0NGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNkJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBZ0NGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBaUJGLGtCQUFrQjtzQkFEckIsS0FBSztnQkF3QkYsYUFBYTtzQkFEaEIsS0FBSztnQkE0QkYsT0FBTztzQkFEVixLQUFLO2dCQStCUSxtQkFBbUI7c0JBRGhDLEtBQUs7Z0JBZ0NGLFdBQVc7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsXHJcbiAgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBvZiwgc2tpcCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfSU5TVEFOVCwgQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCBDTEFTU19MSVNUX1ZFUlRJQ0FMLCBERUZBVUxUX0RJUkVDVElPTiwgREVGQVVMVF9EWU5BTUlDX1NJWkUsXHJcbiAgREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04sIERFRkFVTFRfSVRFTV9TSVpFLCBERUZBVUxUX0JVRkZFUl9TSVpFLCBERUZBVUxUX0xJU1RfU0laRSwgREVGQVVMVF9TVElDS1lfRU5BQkxFRCwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QsXHJcbiAgSEVJR0hUX1BST1BfTkFNRSwgTEVGVF9QUk9QX05BTUUsIE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgUFgsIEZPQ1VTLCBUT1BfUFJPUF9OQU1FLCBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUsIERFRkFVTFRfU0VMRUNUSU5HX01PREVTLCBERUZBVUxUX1NFTEVDVF9CWV9DTElDSywgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSywgREVGQVVMVF9DT0xMRUNUSU9OX01PREUsXHJcbiAgREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UsIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX0VORCwgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORyxcclxuICBNT1VTRV9ET1dOLCBUT1VDSF9TVEFSVCwgREVGQVVMVF9MQU5HX1RFWFRfRElSLCBERUZBVUxUX0NMSUNLX0RJU1RBTkNFLCBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OLCBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MsXHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUsIEtFWV9ET1dOLCBCRUhBVklPUl9BVVRPLCBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVELCBERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSwgREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQsXHJcbiAgREVGQVVMVF9BTklNQVRJT05fUEFSQU1TLCBERUZBVUxUX1NDUk9MTF9CRUhBVklPUiwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJULCBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTiwgTUFYX1JFR1VMQVJfU05BUEVEX0NPTVBPTkVOVFMsXHJcbiAgUFJFUEFSRV9JVEVSQVRJT05TLCBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEgsIFJPTEVfTElTVF9CT1gsIFJPTEVfTElTVCwgS0VZX1RBQiwgTUFYX1ZFTE9DSVRZX0ZPUl9TQ1JPTExfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSxcclxuICBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUywgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsIFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfQ09MTEFQU0VfSVRFTVMsXHJcbiAgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9DT0xMQVBTRV9JVEVNUywgTUFYX05VTUJFUlNfT0ZfU0tJUFNfRk9SX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEsIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLFxyXG4gIERFRkFVTFRfU05BUF9UT19JVEVNLCBERUZBVUxUX1NOQVBfVE9fSVRFTV9BTElHTiwgVklFV1BPUlQsIERFRkFVTFRfTU9USU9OX0JMVVIsIERFRkFVTFRfTUFYX01PVElPTl9CTFVSLCBERUZBVUxUX1NDUk9MTElOR19PTkVfQllfT05FLFxyXG4gIERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCwgREVGQVVMVF9ESVZJREVTLCBERUZBVUxUX1NOQVBQSU5HX0RJU1RBTkNFLCBERUZBVUxUX01BWF9JVEVNX1NJWkUsIERFRkFVTFRfTUlOX0lURU1fU0laRSxcclxuICBERUZBVUxUX0FMSUdOTUVOVCwgREVGQVVMVF9DT0xMQVBTSU5HX01PREVTLCBERUZBVUxUX1NQUkVBRElOR19NT0RFLCBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORyxcclxuICBERUZBVUxUX09WRVJMQVBQSU5HX1NDUk9MTEJBUixcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHtcclxuICBJUmVuZGVyVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uLCBJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG59IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBJU2Nyb2xsRXZlbnQsIElTY3JvbGxPcHRpb25zLCBJQW5pbWF0aW9uUGFyYW1zLCBJU2l6ZSwgSVJlbmRlclN0YWJpbGl6ZXJPcHRpb25zLCBJU2Nyb2xsaW5nU2V0dGluZ3MsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBBbGlnbm1lbnQsIEFyaXRobWV0aWNFeHByZXNzaW9uLCBGb2N1c0FsaWdubWVudCwgSWQsIEl0ZW1UcmFuc2Zvcm0sIFNuYXBwaW5nRGlzdGFuY2UsIENvbGxlY3Rpb25Nb2RlLCBEaXJlY3Rpb24sIFNlbGVjdGluZ01vZGUsXHJcbiAgU25hcHBpbmdNZXRob2QsIFNuYXBUb0l0ZW1BbGlnbiwgVGV4dERpcmVjdGlvbiwgQ29sbGFwc2luZ01vZGUsXHJcbiAgU3ByZWFkaW5nTW9kZSxcclxufSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBbGlnbm1lbnRzLCBDb2xsZWN0aW9uTW9kZXMsIERpcmVjdGlvbnMsIEZvY3VzQWxpZ25tZW50cywgU2VsZWN0aW5nTW9kZXMsIFNuYXBwaW5nTWV0aG9kcywgU25hcFRvSXRlbUFsaWducywgU3ByZWFkaW5nTW9kZXMsIFRleHREaXJlY3Rpb25zLFxyXG59IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSwgU2Nyb2xsRXZlbnQsIHRvZ2dsZUNsYXNzTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vY29yZS90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQgfSBmcm9tICcuL3V0aWxzL3NuYXBwaW5nLW1ldGhvZCc7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL2Jhc2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQkMSB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IGlzRGlyZWN0aW9uIH0gZnJvbSAnLi91dGlscy9pcy1kaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB9IGZyb20gJy4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc1NlbGVjdE1vZGUgfSBmcm9tICcuL3V0aWxzL2lzLXNlbGVjdC1tb2RlJztcclxuaW1wb3J0IHsgaXNDb2xsYXBzZU1vZGUgfSBmcm9tICcuL3V0aWxzL2lzLWNvbGxhcHNlLW1vZGUnO1xyXG5pbXBvcnQgeyBTZWxlY3RpbmdNb2Rlc1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3RpbmctbW9kZXMtdHlwZXMnO1xyXG5pbXBvcnQgeyBDTWFwIH0gZnJvbSAnLi91dGlscy9jbWFwJztcclxuaW1wb3J0IHtcclxuICB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUJvb2xlYW4sIHZhbGlkYXRlRmxvYXQsIHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50LCB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcsXHJcbn0gZnJvbSAnLi91dGlscy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgY29weVZhbHVlQXNSZWFkb25seSwgb2JqZWN0QXNSZWFkb25seSB9IGZyb20gJy4vdXRpbHMvb2JqZWN0JztcclxuaW1wb3J0IHsgaXNDb2xsZWN0aW9uTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtY29sbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgTmdTY3JvbGxlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcnO1xyXG5pbXBvcnQgeyBOZ1ByZXJlbmRlckNvbnRhaW5lciB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1wcmVyZW5kZXItY29udGFpbmVyL25nLXByZXJlbmRlci1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVNjcm9sbFBhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGZvcm1hdEFjdHVhbERpc3BsYXlJdGVtcywgZm9ybWF0U2NyZWVuUmVhZGVyTWVzc2FnZSB9IGZyb20gJy4vdXRpbHMvc2NyZWVuLXJlYWRlci1mb3JtYXR0ZXInO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUlkLCB2YWxpZGF0ZUl0ZXJhdGlvbiwgdmFsaWRhdGVTY3JvbGxCZWhhdmlvciwgdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24gfSBmcm9tICcuL3V0aWxzL2xpc3QtdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IEVWRU5UX0tFWV9ET1dOLCBLRVlfQVJSX0RPV04sIEtFWV9BUlJfTEVGVCwgS0VZX0FSUl9SSUdIVCwgS0VZX0FSUl9VUCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vY29uc3QnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0UHVibGljU2VydmljZSB9IGZyb20gJy4vbmctdmlydHVhbC1saXN0LXB1YmxpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNQZXJjZW50YWdlVmFsdWUgfSBmcm9tICcuL3V0aWxzL2lzLXBlcnNlbnRhZ2UtdmFsdWUnO1xyXG5pbXBvcnQgeyBwYXJzZUFyaXRobWV0aWNFeHByZXNzaW9uIH0gZnJvbSAnLi91dGlscy9wYXJzZS1hcml0aG1ldGljLWV4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBub3JtYWxpemVDb2xsZWN0aW9uIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IENvbGxhcHNpbmdNb2RlcyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBpc1NwcmVhZGluZ01vZGUgfSBmcm9tICcuL3V0aWxzL2lzLXNwcmVhZGluZy1tb2RlJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uIH0gZnJvbSAnLi91dGlscy9nZXQtc2Nyb2xsLXN0YXRlLXZlcnNpb24nO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdzdHlsZSc6ICdwb3NpdGlvbjogcmVsYXRpdmU7J1xyXG4gIH0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG4gIHByb3ZpZGVyczogW05nVmlydHVhbExpc3RTZXJ2aWNlLCBOZ1ZpcnR1YWxMaXN0UHVibGljU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX19uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG5cclxuICAvKipcclxuICAgKiBSZWFkb25seS4gUmV0dXJucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKi9cclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBwcml2YXRlIF9zZXJ2aWNlID0gaW5qZWN0KE5nVmlydHVhbExpc3RTZXJ2aWNlKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncHJlcmVuZGVyJywgeyByZWFkOiBOZ1ByZXJlbmRlckNvbnRhaW5lciB9KVxyXG4gIHByaXZhdGUgX3ByZXJlbmRlcjogTmdQcmVyZW5kZXJDb250YWluZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX2xpc3RDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbGVyJywgeyByZWFkOiBOZ1Njcm9sbGVyQ29tcG9uZW50IH0pXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsZXJDb21wb25lbnQ6IE5nU2Nyb2xsZXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxlciA9IHRoaXMuXyRzY3JvbGxlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbGlzdCA9IHRoaXMuXyRsaXN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgdmlld3BvcnQgc2l6ZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uVmlld3BvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTaXplPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHRoZSBjb21wb25lbnQgSUQgd2hlbiBhbiBlbGVtZW50IGNyb3NzZXMgdGhlIGFsaWdubWVudCBsaW5lIHNwZWNpZmllZCBieSB0aGUgc25hcFRvSXRlbUFsaWduIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU25hcEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPElkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgbnVsbD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBlbGVtZW50cyBhcmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElkPiB8IElkIHwgbnVsbD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBlbGVtZW50cyBhcmUgY29sbGFwc2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElkPj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgc2Nyb2xsIHJlYWNoZXMgdGhlIHN0YXJ0LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsUmVhY2hTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgc2Nyb2xsIHJlYWNoZXMgdGhlIGVuZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF8kc2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRzaG93ID0gdGhpcy5fJHNob3cuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRpbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRpbml0aWFsaXplZCA9IHRoaXMuXyRpbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRoaWNrbmVzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGhpY2tuZXNzVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhclRoaWNrbmVzc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxiYXIgdGhpY2tuZXNzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRoaWNrbmVzcyh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJUaGlja25lc3NUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRoaWNrbmVzcygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyTWluU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhck1pblNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyTWluU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1pbmltdW0gc2Nyb2xsYmFyIHNpemUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyTWluU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyTWluU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpIGFzIG51bWJlcjsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJUaHVtYlJlbmRlcmVyVHJhbnNmb3JtID0gKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyVGh1bWJSZW5kZXJlclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsYmFyIGN1c3RvbWl6YXRpb24gdGVtcGxhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcih2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJUaHVtYlJlbmRlcmVyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsPih7fSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJUaHVtYlBhcmFtcyA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGh1bWJQYXJhbXNUcmFuc2Zvcm0gPSAodjogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhclRodW1iUGFyYW1zXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBzY3JvbGxiYXIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGh1bWJQYXJhbXModjogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGh1bWJQYXJhbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJQYXJhbXMoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nID0ge1xyXG4gICAgdHJhbnNmb3JtOiAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsb2FkaW5nXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2O1xyXG4gICAgfSxcclxuICB9IGFzIGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxvYWRpbmcgPSB0aGlzLl8kbG9hZGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZ1RyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImxvYWRpbmdcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYHRydWVgLCB0aGUgc2Nyb2xsQmFyIGdvZXMgaW50byBsb2FkaW5nIHN0YXRlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRsb2FkaW5nLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9sb2FkaW5nVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRsb2FkaW5nLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbG9hZGluZygpIHsgcmV0dXJuIHRoaXMuXyRsb2FkaW5nLmdldFZhbHVlKCkgYXMgYm9vbGVhbjsgfVxyXG5cclxuICBwcml2YXRlIF8kd2FpdEZvclByZXBhcmF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3dhaXRGb3JQcmVwYXJhdGlvblRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwid2FpdEZvclByZXBhcmF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSwgaXQgd2lsbCB3YWl0IHVudGlsIHRoZSBsaXN0IGl0ZW1zIGFyZSBmdWxseSBwcmVwYXJlZCBiZWZvcmUgZGlzcGxheWluZyB0aGVtLi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHdhaXRGb3JQcmVwYXJhdGlvbih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fd2FpdEZvclByZXBhcmF0aW9uVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB3YWl0Rm9yUHJlcGFyYXRpb24oKSB7IHJldHVybiB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmdldFZhbHVlKCkgYXMgYm9vbGVhbjsgfVxyXG5cclxuICBwcml2YXRlIF8kY2xpY2tEaXN0YW5jZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0NMSUNLX0RJU1RBTkNFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNsaWNrRGlzdGFuY2UgPSB0aGlzLl8kY2xpY2tEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY2xpY2tEaXN0YW5jZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjbGlja0Rpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBzY3JvbGwgZGlzdGFuY2UgYXQgd2hpY2ggYSBjbGljayBldmVudCBpcyB0cmlnZ2VyZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xpY2tEaXN0YW5jZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kY2xpY2tEaXN0YW5jZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY2xpY2tEaXN0YW5jZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tEaXN0YW5jZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNsaWNrRGlzdGFuY2UoKSB7IHJldHVybiB0aGlzLl8kY2xpY2tEaXN0YW5jZS5nZXRWYWx1ZSgpIGFzIG51bWJlcjsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGl0ZW1zID0gdGhpcy5fJGl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtc1RyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUFycmF5KHYsIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpXTtcclxuICAgICAgICAgIHZhbGlkID0gdmFsaWRhdGVPYmplY3QoaXRlbSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgISh2YWxpZGF0ZUZsb2F0KGl0ZW0/Llt0cmFja0J5XSBhcyBudW1iZXIsIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKGl0ZW0/Llt0cmFja0J5XSBhcyBzdHJpbmcsIHRydWUsIHRydWUpKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1zXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbmAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbXMoKSB7IHJldHVybiB0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSBhcyBJVmlydHVhbExpc3RDb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZElkc1RyYW5zZm9ybSA9ICh2OiBBcnJheTxJZD4gfCBJZCB8IG51bGwpID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiBhcyBhbnksIHRydWUsIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKHYgYXMgYW55LCB0cnVlLCB0cnVlKSB8fCB2YWxpZGF0ZUZsb2F0KHYgYXMgYW55LCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodiAmJiBBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKGl0ZW0gYXMgYW55KSB8fCB2YWxpZGF0ZUZsb2F0KGl0ZW0gYXMgYW55KTtcclxuICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RlZElkc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEFycmF5PElkPiB8IElkYCBvciBgbnVsbGAuJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0aW9uID8gW10gOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0ZWRJZHModjogQXJyYXk8SWQ+IHwgSWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RlZElkc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzZWxlY3RlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkZWZhdWx0SXRlbVZhbHVlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RJdGVtIHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkZWZhdWx0SXRlbVZhbHVlID0gdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRlZmF1bHRJdGVtVmFsdWUodjogSVZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IGRlZmF1bHRJdGVtVmFsdWUoKSB7IHJldHVybiB0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VkSWRzVHJhbnNmb3JtID0gKHY6IEFycmF5PElkPikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2IGFzIGFueSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYgJiYgQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpdGVtIGFzIGFueSkgfHwgdmFsaWRhdGVGbG9hdChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VkSWRzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgQXJyYXk8SWQ+YC4nKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sbGFwc2VkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlZElkcyh2OiBBcnJheTxJZD4pIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzZWRJZHNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxhcHNlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0QnlDbGljayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0spO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0QnlDbGljayA9IHRoaXMuXyRzZWxlY3RCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0QnlDbGlja1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnLmFwaSBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0QnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlQnlDbGljayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZUJ5Q2xpY2tUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZUJ5Q2xpY2tcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIGNvbmZpZy5jb2xsYXBzZSBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzZUJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxhcHNlQnlDbGlja1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGFwc2VCeUNsaWNrKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlQnlDbGljay5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVXNlIHRoZSBgc3RpY2t5RW5hYmxlZGAgcHJvcGVydHkgaW5zdGVhZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIHRocm93IEVycm9yKGBQcm9wZXJ0eSBzbmFwIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgXFxgc3RpY2t5RW5hYmxlZFxcYCBwcm9wZXJ0eSBpbnN0ZWFkLmApO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgXyRzdGlja3lFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NUSUNLWV9FTkFCTEVEKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHN0aWNreUVuYWJsZWQgPSB0aGlzLl8kc3RpY2t5RW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc3RpY2t5RW5hYmxlZFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInN0aWNreUVuYWJsZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU1RJQ0tZX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgaXRlbXMgd2l0aCB0aGUgZ2l2ZW4gYHN0aWNreWAgaW4gYGl0ZW1Db25maWdNYXBgIHdpbGwgc3RpY2sgdG8gdGhlIGVkZ2VzLiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0aWNreUVuYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzdGlja3lFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zdGlja3lFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzdGlja3lFbmFibGVkLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc3RpY2t5RW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRzdGlja3lFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBvZmZzZXQgdmFsdWU7IGlmIHRoZSBzY3JvbGwgYXJlYSB2YWx1ZSBpcyBleGNlZWRlZCwgdGhlIHNjcm9sbCBhbmltYXRpb24gd2lsbCBiZSBkaXNhYmxlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcml0aG1ldGljRXhwcmVzc2lvbj4oMCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsU3RhcnRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodiwgdHJ1ZSkgfHwgaXNQZXJjZW50YWdlVmFsdWUodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxTdGFydE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiB0eXBlIGBudW1iZXJgIG9yIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNjcm9sbCBzdGFydCBvZmZzZXQgdmFsdWUuIENhbiBiZSBzcGVjaWZpZWQgaW4gYWJzb2x1dGUgb3IgcGVyY2VudGFnZSB2YWx1ZXMuXHJcbiAgICogU3VwcG9ydHMgYXJpdGhtZXRpYyBleHByZXNzaW9ucyBvZiBhZGRpdGlvbiBgNTAlICsgMjVgIG9yIHN1YnRyYWN0aW9uIGA1MCUgLSAyNWAuIERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsU3RhcnRPZmZzZXQodjogQXJpdGhtZXRpY0V4cHJlc3Npb24pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0VHJhbnNmb3JtKHYgYXMgYW55KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxTdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFyaXRobWV0aWNFeHByZXNzaW9uPigwKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEVuZE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2LCB0cnVlKSB8fCBpc1BlcmNlbnRhZ2VWYWx1ZSh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbEVuZE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiB0eXBlIGBudW1iZXJgIG9yIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNjcm9sbCBlbmQgb2Zmc2V0IHZhbHVlLiBDYW4gYmUgc3BlY2lmaWVkIGluIGFic29sdXRlIG9yIHBlcmNlbnRhZ2UgdmFsdWVzLlxyXG4gICAqIFN1cHBvcnRzIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgb2YgYWRkaXRpb24gYDUwJSArIDI1YCBvciBzdWJ0cmFjdGlvbiBgNTAlIC0gMjVgLiBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEVuZE9mZnNldCh2OiBBcml0aG1ldGljRXhwcmVzc2lvbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbEVuZE9mZnNldFRyYW5zZm9ybSh2IGFzIGFueSk7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbEVuZE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFNjcm9sbFRvU3RhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUF9TQ1JPTExUT19TVEFSVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFNjcm9sbFRvU3RhcnRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwU2Nyb2xsVG9TdGFydFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJUO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGwgd2lsbCBiZSBhbmNob3JlZCB0byB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICogVGhpcyBwcm9wZXJ0eSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS5cclxuICAgKiBUaGF0IGlzLCBpZiBzbmFwU2Nyb2xsVG9TdGFydCBhbmQgc25hcFNjcm9sbFRvRW5kIGFyZSBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIGluaXRpYWxseSBzbmFwIFxyXG4gICAqIHRvIHRoZSBiZWdpbm5pbmc7IGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBlbmQsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgZW5kLiBcclxuICAgKiBJZiBzbmFwU2Nyb2xsVG9TdGFydCBpcyBkaXNhYmxlZCBhbmQgc25hcFNjcm9sbFRvRW5kIGlzIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgZW5kOyBcclxuICAgKiBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgYmVnaW5uaW5nLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGJlZ2lubmluZy4gXHJcbiAgICogSWYgYm90aCBzbmFwU2Nyb2xsVG9TdGFydCBhbmQgc25hcFNjcm9sbFRvRW5kIGFyZSBkaXNhYmxlZCwgdGhlIGxpc3Qgd2lsbCBuZXZlciBzbmFwIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kLlxyXG4gICAqIEluIHRoZSBgc3ByZWFkaW5nTW9kZT1TcHJlYWRpbmdNb2Rlcy5JTkZJTklUWWAgbW9kZSwgdGhlIGBzbmFwU2Nyb2xsVG9TdGFydGAgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCwgc2luY2UgdGhlIGxpc3QgaGFzIG5vIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvU3RhcnQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFNjcm9sbFRvU3RhcnRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFNjcm9sbFRvU3RhcnQoKSB7IHJldHVybiB0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFNjcm9sbFRvRW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NOQVBfU0NST0xMVE9fRU5EKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBTY3JvbGxUb0VuZFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBTY3JvbGxUb0VuZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1NDUk9MTFRPX0VORDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsIHdpbGwgYmUgYW5jaG9yZWQgdG8gdGhlINGD0YLQsiBvZiB0aGUgbGlzdC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKiBUaGF0IGlzLCBpZiBzbmFwU2Nyb2xsVG9TdGFydCBhbmQgc25hcFNjcm9sbFRvRW5kIGFyZSBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIGluaXRpYWxseSBzbmFwIFxyXG4gICAqIHRvIHRoZSBiZWdpbm5pbmc7IGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBlbmQsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgZW5kLiBcclxuICAgKiBJZiBzbmFwU2Nyb2xsVG9TdGFydCBpcyBkaXNhYmxlZCBhbmQgc25hcFNjcm9sbFRvRW5kIGlzIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgZW5kOyBcclxuICAgKiBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgYmVnaW5uaW5nLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGJlZ2lubmluZy4gXHJcbiAgICogSWYgYm90aCBzbmFwU2Nyb2xsVG9TdGFydCBhbmQgc25hcFNjcm9sbFRvRW5kIGFyZSBkaXNhYmxlZCwgdGhlIGxpc3Qgd2lsbCBuZXZlciBzbmFwIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kLlxyXG4gICAqIEluIHRoZSBgc3ByZWFkaW5nTW9kZT1TcHJlYWRpbmdNb2Rlcy5JTkZJTklUWWAgbW9kZSwgdGhlIGBzbmFwU2Nyb2xsVG9FbmRgIHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQsIHNpbmNlIHRoZSBsaXN0IGhhcyBubyBiZWdpbm5pbmcgb3IgZW5kLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBTY3JvbGxUb0VuZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFNjcm9sbFRvRW5kVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwU2Nyb2xsVG9FbmQoKSB7IHJldHVybiB0aGlzLl8kc25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBUaGUgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzbmFwU2Nyb2xsVG9FbmQgcHJvcGVydHkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvQm90dG9tKHY6IGJvb2xlYW4pIHtcclxuICAgIHRocm93IEVycm9yKCdUaGUgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzbmFwU2Nyb2xsVG9FbmQgcHJvcGVydHkuJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyRW5hYmxlZCA9IHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJFbmFibGVkVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsYmFyIGlzIHNob3duIG9yIG5vdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhckVuYWJsZWRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFySW50ZXJhY3RpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0NST0xMQkFSX0lOVEVSQUNUSVZFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhckludGVyYWN0aXZlID0gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJJbnRlcmFjdGl2ZVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhckludGVyYWN0aXZlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciBzY3JvbGxpbmcgdXNpbmcgdGhlIHNjcm9sbGJhciB3aWxsIGJlIHBvc3NpYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJJbnRlcmFjdGl2ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRvdmVybGFwcGluZ1Njcm9sbGJhciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX292ZXJsYXBwaW5nU2Nyb2xsYmFyVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwib3ZlcmxhcHBpbmdTY3JvbGxiYXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGwgYmFyIHdpbGwgb3ZlcmxhcCB0aGUgbGlzdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJmYWxzZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX292ZXJsYXBwaW5nU2Nyb2xsYmFyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEJlaGF2aW9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxCZWhhdmlvcj4oREVGQVVMVF9TQ1JPTExfQkVIQVZJT1IpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsQmVoYXZpb3IgPSB0aGlzLl8kc2Nyb2xsQmVoYXZpb3IuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJlaGF2aW9yVHJhbnNmb3JtID0gKHY6IFNjcm9sbEJlaGF2aW9yKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsQmVoYXZpb3JcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMX0JFSEFWSU9SO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgc2Nyb2xsaW5nIGJlaGF2aW9yIGZvciBhbnkgZWxlbWVudCBvbiB0aGUgcGFnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxCZWhhdmlvcih2OiBTY3JvbGxCZWhhdmlvcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxCZWhhdmlvci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsQmVoYXZpb3JUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEJlaGF2aW9yLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsQmVoYXZpb3IoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsQmVoYXZpb3IuZ2V0VmFsdWUoKTsgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdTZXR0aW5ncyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNjcm9sbGluZ1NldHRpbmdzPihERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxpbmdTZXR0aW5ncyA9IHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsaW5nU2V0dGluZ3NUcmFuc2Zvcm0gPSAodjogSVNjcm9sbGluZ1NldHRpbmdzKTogSVNjcm9sbGluZ1NldHRpbmdzID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkICYmICEhdikge1xyXG4gICAgICBjb25zdCB7IGZyaWN0aW9uYWxGb3JjZSwgbWFzcywgbWF4RGlzdGFuY2UsIG1heER1cmF0aW9uLCBzcGVlZFNjYWxlLCBvcHRpbWl6YXRpb24gfSA9IHY7XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChmcmljdGlvbmFsRm9yY2UsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZnJpY3Rpb25hbEZvcmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1hc3MsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWFzc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChtYXhEaXN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChtYXhEdXJhdGlvbiwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhEdXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChzcGVlZFNjYWxlLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNwZWVkU2NhbGVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbihvcHRpbWl6YXRpb24sIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwib3B0aW1pemF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGluZ1NldHRpbmdzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YCBvciBudWxsLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmcmljdGlvbmFsRm9yY2U6IHYuZnJpY3Rpb25hbEZvcmNlICE9PSB1bmRlZmluZWQgJiYgdi5mcmljdGlvbmFsRm9yY2UgPiAwID8gdi5mcmljdGlvbmFsRm9yY2UgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5mcmljdGlvbmFsRm9yY2UsXHJcbiAgICAgIG1hc3M6IHYubWFzcyAhPT0gdW5kZWZpbmVkICYmIHYubWFzcyA+IDAgPyB2Lm1hc3MgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5tYXNzLFxyXG4gICAgICBtYXhEaXN0YW5jZTogdi5tYXhEaXN0YW5jZSAhPT0gdW5kZWZpbmVkICYmIHYubWF4RGlzdGFuY2UgPiAwID8gdi5tYXhEaXN0YW5jZSA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1heERpc3RhbmNlLFxyXG4gICAgICBtYXhEdXJhdGlvbjogdi5tYXhEdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHYubWF4RHVyYXRpb24gPiAwID8gdi5tYXhEdXJhdGlvbiA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1heER1cmF0aW9uLFxyXG4gICAgICBzcGVlZFNjYWxlOiB2LnNwZWVkU2NhbGUgIT09IHVuZGVmaW5lZCAmJiB2LnNwZWVkU2NhbGUgPiAwID8gdi5zcGVlZFNjYWxlIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1Muc3BlZWRTY2FsZSxcclxuICAgICAgb3B0aW1pemF0aW9uOiB2Lm9wdGltaXphdGlvbiA/PyBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5vcHRpbWl6YXRpb24sXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGluZyBzZXR0aW5ncy5cclxuICAgKiAtIGZyaWN0aW9uYWxGb3JjZSAtIEZyaWN0aW9uYWwgZm9yY2UuIERlZmF1bHQgdmFsdWUgaXMgMC4wMzUuXHJcbiAgICogLSBtYXNzIC0gTWFzcy4gRGVmYXVsdCB2YWx1ZSBpcyAwLjAwNS5cclxuICAgKiAtIG1heERpc3RhbmNlIC0gTWF4aW11bSBzY3JvbGxpbmcgZGlzdGFuY2UuIERlZmF1bHQgdmFsdWUgaXMgMTAwMDAwLlxyXG4gICAqIC0gbWF4RHVyYXRpb24gLSBNYXhpbXVtIGFuaW1hdGlvbiBkdXJhdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyA0MDAwLlxyXG4gICAqIC0gc3BlZWRTY2FsZSAtIFNwZWVkIHNjYWxlLiBEZWZhdWx0IHZhbHVlIGlzIDEwLlxyXG4gICAqIC0gb3B0aW1pemF0aW9uIC0gRW5hYmxlcyBzY3JvbGxpbmcgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxpbmdTZXR0aW5ncyh2OiBJU2Nyb2xsaW5nU2V0dGluZ3MpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGluZ1NldHRpbmdzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGluZ1NldHRpbmdzKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1UcmFuc2Zvcm0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEl0ZW1UcmFuc2Zvcm0gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGl0ZW1UcmFuc2Zvcm0gPSB0aGlzLl8kaXRlbVRyYW5zZm9ybS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVRyYW5zZm9ybVRyYW5zZm9ybSA9ICh2OiBhbnkpID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlRnVuY3Rpb24odiwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1UcmFuc2Zvcm1cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJdGVtVHJhbnNmb3JtYCBvciBgbnVsbGAuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIHRyYW5zZm9ybWF0aW9uIG9mIGVsZW1lbnQncyBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlLCBvcGFjaXR5IGFuZCB6SW5kZXguIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBudWxsYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtVHJhbnNmb3JtKHY6IEl0ZW1UcmFuc2Zvcm0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1UcmFuc2Zvcm0uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1UcmFuc2Zvcm1UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1UcmFuc2Zvcm0ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtVHJhbnNmb3JtKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1UcmFuc2Zvcm0uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFRvSXRlbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1RPX0lURU0pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFRvSXRlbSA9IHRoaXMuXyRzbmFwVG9JdGVtLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVG9JdGVtVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFRvSXRlbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1RPX0lURU07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTbmFwIHRvIGFuIGl0ZW0uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFRvSXRlbSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBUb0l0ZW0uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBUb0l0ZW1UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBUb0l0ZW0ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwVG9JdGVtKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBUb0l0ZW0uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFRvSXRlbUFsaWduID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwVG9JdGVtQWxpZ24+KERFRkFVTFRfU05BUF9UT19JVEVNX0FMSUdOKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBUb0l0ZW1BbGlnbiA9IHRoaXMuXyRzbmFwVG9JdGVtQWxpZ24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBUb0l0ZW1BbGlnblRyYW5zZm9ybSA9ICh2OiBTbmFwVG9JdGVtQWxpZ24pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdzdGFydCcgfHwgdiA9PT0gJ2NlbnRlcicgfHwgdiA9PT0gJ2VuZCcpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFRvSXRlbUFsaWduXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBzdGFydGAsIGBjZW50ZXJgIG9yIGBlbmRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1RPX0lURU1fQUxJR047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBbGlnbm1lbnQgZm9yIHNuYXBUb0l0ZW0uIEF2YWlsYWJsZSB2YWx1ZXMg4oCL4oCLYXJlIGBzdGFydGAsIGBjZW50ZXJgLCBhbmQgYGVuZGAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBjZW50ZXJgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBUb0l0ZW1BbGlnbih2OiBTbmFwVG9JdGVtQWxpZ24pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFRvSXRlbUFsaWduLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwVG9JdGVtQWxpZ25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBUb0l0ZW1BbGlnbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBUb0l0ZW1BbGlnbigpIHsgcmV0dXJuIHRoaXMuXyRzbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcHBpbmdEaXN0YW5jZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcHBpbmdEaXN0YW5jZT4oREVGQVVMVF9TTkFQUElOR19ESVNUQU5DRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwcGluZ0Rpc3RhbmNlID0gdGhpcy5fJHNuYXBwaW5nRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwaW5nRGlzdGFuY2VUcmFuc2Zvcm0gPSAodjogU25hcHBpbmdEaXN0YW5jZSB8IGFueSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSB8fCB2YWxpZGF0ZUZsb2F0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcHBpbmdEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBQSU5HX0RJU1RBTkNFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgYWN0aXZhdGlvbiBkaXN0YW5jZS4gQ2FuIGJlIHNwZWNpZmllZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGVsZW1lbnQgc2l6ZSBvciBpbiBhYnNvbHV0ZSB2YWx1ZXMuXHJcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDI1JWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdEaXN0YW5jZSh2OiBTbmFwcGluZ0Rpc3RhbmNlKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nRGlzdGFuY2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBwaW5nRGlzdGFuY2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBwaW5nRGlzdGFuY2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwcGluZ0Rpc3RhbmNlKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nRGlzdGFuY2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsaW5nT25lQnlPbmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0NST0xMSU5HX09ORV9CWV9PTkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsaW5nT25lQnlPbmUgPSB0aGlzLl8kc2Nyb2xsaW5nT25lQnlPbmUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGluZ09uZUJ5T25lVHJhbnNmb3JtID0gKHY6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxpbmdPbmVCeU9uZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfT05FX0JZX09ORTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHNjcm9sbCBvbmUgaXRlbSBhdCBhIHRpbWUgaWYgdHJ1ZSBhbmQgdGhlIHNjcm9sbFRvSXRlbSBwcm9wZXJ0eSBpcyBzZXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsaW5nT25lQnlPbmUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxpbmdPbmVCeU9uZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsaW5nT25lQnlPbmVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGluZ09uZUJ5T25lLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsaW5nT25lQnlPbmUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsaW5nT25lQnlPbmUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kYWxpZ25tZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbGlnbm1lbnQ+KERFRkFVTFRfQUxJR05NRU5UKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGFsaWdubWVudCA9IHRoaXMuXyRhbGlnbm1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2FsaWdubWVudFRyYW5zZm9ybSA9ICh2OiBBbGlnbm1lbnQpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub25lJyB8fCB2ID09PSAnY2VudGVyJyk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJhbGlnbm1lbnRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vbmVgIG9yIGBjZW50ZXJ0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQUxJR05NRU5UO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBsaXN0LiBUd28gbW9kZXMgYXJlIGF2YWlsYWJsZTogYG5vbmVgIGFuZCBgY2VudGVyYC4gVGhlIGBjZW50ZXJgIG1vZGUgYWxpZ25zIHRoZSBsaXN0IGl0ZW1zIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0LCBpZGVhbCBmb3IgdXNlIHdpdGggdGhlIGBpdGVtVHJhbnNmb3JtYCBwcm9wZXJ0eS5cclxuICAgKiBUaGUgYG5vbmVgIG1vZGUgbWVhbnMgbm8gYWxpZ25tZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbm9uZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYWxpZ25tZW50KHY6IEFsaWdubWVudCkge1xyXG4gICAgaWYgKHRoaXMuXyRhbGlnbm1lbnQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2FsaWdubWVudFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYWxpZ25tZW50Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgYWxpZ25tZW50KCkgeyByZXR1cm4gdGhpcy5fJGFsaWdubWVudC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyR6SW5kZXhXaGVuU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICR6SW5kZXhXaGVuU2VsZWN0aW5nID0gdGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3pJbmRleFdoZW5TZWxlY3RpbmdUcmFuc2Zvcm0gPSAodjogc3RyaW5nIHwgbnVsbCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInpJbmRleFdoZW5TZWxlY3RpbmdcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHYgPz8gbnVsbDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSB6SW5kZXggd2hlbiBhIGxpc3QgaXRlbSBpcyBzZWxlY3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHpJbmRleFdoZW5TZWxlY3Rpbmcodjogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyR6SW5kZXhXaGVuU2VsZWN0aW5nLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl96SW5kZXhXaGVuU2VsZWN0aW5nVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyR6SW5kZXhXaGVuU2VsZWN0aW5nLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgekluZGV4V2hlblNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuXyR6SW5kZXhXaGVuU2VsZWN0aW5nLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNwcmVhZGluZ01vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwcmVhZGluZ01vZGU+KERFRkFVTFRfU1BSRUFESU5HX01PREUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc3ByZWFkaW5nTW9kZSA9IHRoaXMuXyRzcHJlYWRpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zcHJlYWRpbmdNb2RlVHJhbnNmb3JtID0gKHY6IFNwcmVhZGluZ01vZGUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub3JtYWwnIHx8IHYgPT09ICdpbmZpbml0eScpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic3ByZWFkaW5nTW9kZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgbm9ybWFsYCBvciBgaW5maW5pdHlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TUFJFQURJTkdfTU9ERTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBvcmRlciBvZiBsaXN0IGVsZW1lbnRzLiBBdmFpbGFibGUgdmFsdWVzIOKAi+KAi2FyZSBgc3RhbmRhcmRgIGFuZCBgaW5maW5pdHlgLlxyXG4gICAqIGBub3JtYWxgIOKAlCBsaXN0IGVsZW1lbnRzIGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byB0aGUgY29sbGVjdGlvbiBzZXF1ZW5jZS5cclxuICAgKiBgaW5maW5pdHlgIOKAlCBsaXN0IGVsZW1lbnRzIGFyZSBvcmRlcmVkIGN5Y2xpY2FsbHksIGZvcm1pbmcgYW4gaW5maW5pdGUgbGlzdC5cclxuICAgKiBXaGVuIHNldCB0byBgaW5maW5pdHlgLCB0aGUgYGFsaWdubWVudGAgcHJvcGVydHkgaXMgZm9yY2VkIHRvIHRoZSB2YWx1ZSBgQWxpZ25tZW50cy5DRU5URVJgLCB0aGUgYHNjcm9sbGJhckVuYWJsZWRgIHByb3BlcnR5IGlzIGZvcmNlZCB0byB0aGUgYGZhbHNlYFxyXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzdGFuZGFyZGAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc3ByZWFkaW5nTW9kZSh2OiBTcHJlYWRpbmdNb2RlKSB7XHJcbiAgICBpZiAodGhpcy5fJHNwcmVhZGluZ01vZGUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NwcmVhZGluZ01vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNwcmVhZGluZ01vZGUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzcHJlYWRpbmdNb2RlKCkgeyByZXR1cm4gdGhpcy5fJHNwcmVhZGluZ01vZGUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZGl2aWRlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0RJVklERVMpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGl2aWRlcyA9IHRoaXMuXyRkaXZpZGVzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9kaXZpZGVzVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZGl2aWRlc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RJVklERVM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdiA8PSAwID8gREVGQVVMVF9ESVZJREVTIDogdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2x1bW4gb3Igcm93IG51bWJlcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAxYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXZpZGVzKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXZpZGVzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9kaXZpZGVzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkaXZpZGVzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgZGl2aWRlcygpIHsgcmV0dXJuIHRoaXMuXyRkaXZpZGVzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1vdGlvbkJsdXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9NT1RJT05fQkxVUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtb3Rpb25CbHVyID0gdGhpcy5fJG1vdGlvbkJsdXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21vdGlvbkJsdXJUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtb3Rpb25CbHVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRElWSURFUztcclxuICAgIH1cclxuICAgIHJldHVybiB2IDw9IDAgPyBERUZBVUxUX0RJVklERVMgOiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdGlvbiBibHVyIGVmZmVjdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDAuMTVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXIodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJG1vdGlvbkJsdXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21vdGlvbkJsdXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1vdGlvbkJsdXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtb3Rpb25CbHVyKCkgeyByZXR1cm4gdGhpcy5fJG1vdGlvbkJsdXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbWF4TW90aW9uQmx1ciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01BWF9NT1RJT05fQkxVUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtYXhNb3Rpb25CbHVyID0gdGhpcy5fJG1heE1vdGlvbkJsdXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21heE1vdGlvbkJsdXJUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhNb3Rpb25CbHVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfTUFYX01PVElPTl9CTFVSO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHYgPD0gMCA/IERFRkFVTFRfTUFYX01PVElPTl9CTFVSIDogdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNYXhpbXVtIG1vdGlvbiBibHVyIGVmZmVjdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDAuNWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4TW90aW9uQmx1cih2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kbWF4TW90aW9uQmx1ci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbWF4TW90aW9uQmx1clRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbWF4TW90aW9uQmx1ci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1heE1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbWF4TW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtb3Rpb25CbHVyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVEKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1vdGlvbkJsdXJFbmFibGVkID0gdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tb3Rpb25CbHVyRW5hYmxlZFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1vdGlvbkJsdXJFbmFibGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX01PVElPTl9CTFVSX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXBwbHkgbW90aW9uIGJsdXIgb3Igbm90LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21vdGlvbkJsdXJFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1vdGlvbkJsdXJFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcblxyXG5cclxuICBwcml2YXRlIF8kYW5pbWF0aW9uUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQW5pbWF0aW9uUGFyYW1zPihERUZBVUxUX0FOSU1BVElPTl9QQVJBTVMpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkYW5pbWF0aW9uUGFyYW1zID0gdGhpcy5fJGFuaW1hdGlvblBhcmFtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0aW9uUGFyYW1zVHJhbnNmb3JtID0gKHY6IElBbmltYXRpb25QYXJhbXMpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZGF0ZUZsb2F0KHYuc2Nyb2xsVG9JdGVtKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxUb0l0ZW1cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZGF0ZUZsb2F0KHYuc25hcFRvSXRlbSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFRvSXRlbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkYXRlRmxvYXQodi5uYXZpZ2F0ZUJ5S2V5Ym9hcmQpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm5hdmlnYXRlQnlLZXlib2FyZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkYXRlRmxvYXQodi5uYXZpZ2F0ZVRvSXRlbSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibmF2aWdhdGVUb0l0ZW1cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJhbmltYXRpb25QYXJhbXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0aW9uIHBhcmFtZXRlcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwieyBzY3JvbGxUb0l0ZW06IDUwLCBzbmFwVG9JdGVtOiAxNTAsIG5hdmlnYXRlVG9JdGVtOiAxNTAsIG5hdmlnYXRlQnlLZXlib2FyZDogNTAgfVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFuaW1hdGlvblBhcmFtcyh2OiBJQW5pbWF0aW9uUGFyYW1zKSB7XHJcbiAgICBpZiAodGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYW5pbWF0aW9uUGFyYW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRhbmltYXRpb25QYXJhbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBhbmltYXRpb25QYXJhbXMoKSB7IHJldHVybiB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJzY3JvbGxFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRvdmVyc2Nyb2xsRW5hYmxlZCA9IHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcnNjcm9sbEVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvdmVyc2Nyb2xsRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG92ZXJzY3JvbGwgKHJlLXNjcm9sbCkgZmVhdHVyZSB3aWxsIHdvcmsuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJzY3JvbGxFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX292ZXJzY3JvbGxFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG92ZXJzY3JvbGxFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJzY3JvbGxFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtUmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtUmVuZGVyZXJUcmFuc2Zvcm0gPSAodjogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcbiAgICBpZiAodiAmJiAhKHR5cGVvZiB2LmVsZW1lbnRSZWYgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2LmNyZWF0ZUVtYmVkZGVkVmlldyA9PT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgXCJpdGVtUmVuZGVyZXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBUZW1wbGF0ZVJlZmAuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXJpbmcgZWxlbWVudCB0ZW1wbGF0ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1SZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVJlbmRlcmVyKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpIGFzIFRlbXBsYXRlUmVmPGFueT47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1Db25maWdNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA+KHt9KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGl0ZW1Db25maWdNYXAgPSB0aGlzLl8kaXRlbUNvbmZpZ01hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbmZpZ01hcFRyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGlkIGluIHYpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2lkXTtcclxuICAgICAgICAgIGlmICghaXRlbSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uY29sbGFwc2FibGUsIHRydWUpIHx8XHJcbiAgICAgICAgICAgICF2YWxpZGF0ZUJvb2xlYW4oaXRlbS5zZWxlY3RhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhKGl0ZW0uc3RpY2t5ID09PSB1bmRlZmluZWQgfHwgaXRlbS5zdGlja3kgPT09IDAgfHwgaXRlbS5zdGlja3kgPT09IDEgfHwgaXRlbS5zdGlja3kgPT09IDIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1Db25maWdNYXBcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwYC4nKTtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBgc3RpY2t5YCBwb3NpdGlvbiwgYGZ1bGxTaXplYCwgYGNvbGxhcHNhYmxlYCBhbmQgYHNlbGVjdGFibGVgIGZvciB0aGUgbGlzdCBpdGVtIGVsZW1lbnQuIElmIGBzdGlja3lgIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gYHN0aWNreWAgcG9zaXRpb24gaXMgYXBwbGllZC4gXHJcbiAgICogSWYgdGhlIGBzdGlja3lgIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gdGhlIGBzdGlja3lgIHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuXHJcbiAgICogIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIGBzZWxlY3RhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgb3Igbm90LiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKiBgY29sbGFwc2FibGVgIGRldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IHdpdGggYSBgc3RpY2t5YCBwcm9wZXJ0eSBncmVhdGVyIHRoYW4gemVybyBjYW4gY29sbGFwc2UgYW5kXHJcbiAgICogIGNvbGxhcHNlIGVsZW1lbnRzIGluIGZyb250IHRoYXQgZG8gbm90IGhhdmUgYSBgc3RpY2t5YCBwcm9wZXJ0eS5cclxuICAgKiBgZnVsbFNpemVgIGRldGVybWluZXMgdGhlIHNpemUgb2YgYW4gZWxlbWVudCB3aGVuIHJlbmRlcmluZyBsaXN0cyB3aXRoIGNlbGwgZGl2aXNpb25zLiBJZiBzdGlja3kgaXMgMSBvciAyLCBmdWxsU2l6ZSBhdXRvbWF0aWNhbGx5IGJlY29tZXMgdHJ1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtQ29uZmlnTWFwKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbUNvbmZpZ01hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbUNvbmZpZ01hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1Db25maWdNYXAoKSB7IHJldHVybiB0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBkaXJlY3Rpb24gPSAndmVydGljYWwnLCB0aGVuIHRoZSBoZWlnaHQgb2YgYSB0eXBpY2FsIGVsZW1lbnQuIElmIGRpcmVjdGlvbiA9ICdob3Jpem9udGFsJywgdGhlbiB0aGUgd2lkdGggb2YgYSB0eXBpY2FsIGVsZW1lbnQuXHJcbiAgICogSWYgdGhlIGBkeW5hbWljU2l6ZWAgcHJvcGVydHkgaXMgdHJ1ZSwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGBpdGVtU2l6ZWAgcHJvcGVydHkgXHJcbiAgICogdG8gYWRqdXN0IHRoZSBzaXplcyBvZiB0aGUgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgdGhlIHZhbHVlIGlzICd2aWV3cG9ydCcsIHRoZSBzaXplcyBvZiBlbGVtZW50cyBhcmUgYXV0b21hdGljYWxseSByZXNpemVkIHRvIGZpdCB0aGUgdmlld3BvcnQgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtU2l6ZSh2OiBudW1iZXIgfCAndmlld3BvcnQnKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtaW5JdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtaW5JdGVtU2l6ZSA9IHRoaXMuXyRtaW5JdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1pbkl0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYGR5bmFtaWNTaXplYCBwcm9wZXJ0eSBpcyBlbmFibGVkLCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBlbGVtZW50IGlzIHNldC5cclxuICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3ZpZXdwb3J0JywgdGhlIHNpemVzIG9mIGVsZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gZml0IHRoZSB2aWV3cG9ydCBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1pbkl0ZW1TaXplKHY6IG51bWJlciB8ICd2aWV3cG9ydCcpIHtcclxuICAgIGlmICh0aGlzLl8kbWluSXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21pbkl0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtaW5JdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1pbkl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJG1pbkl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1heEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtYXhJdGVtU2l6ZSA9IHRoaXMuXyRtYXhJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4SXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heEl0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYGR5bmFtaWNTaXplYCBwcm9wZXJ0eSBpcyBlbmFibGVkLCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBlbGVtZW50IGlzIHNldC5cclxuICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3ZpZXdwb3J0JywgdGhlIHNpemVzIG9mIGVsZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gZml0IHRoZSB2aWV3cG9ydCBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heEl0ZW1TaXplKHY6IG51bWJlciB8ICd2aWV3cG9ydCcpIHtcclxuICAgIGlmICh0aGlzLl8kbWF4SXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21heEl0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtYXhJdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1heEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJG1heEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkeW5hbWljU2l6ZSA9IHRoaXMuXyRkeW5hbWljU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZHluYW1pY1NpemVUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImR5bmFtaWNTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RZTkFNSUNfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0ZW1zIGluIHRoZSBsaXN0IG1heSBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCB0byBhZGp1c3RcclxuICAgKiB0aGUgc2l6ZXMgb2YgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkeW5hbWljU2l6ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9keW5hbWljU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlyZWN0aW9uVHJhbnNmb3JtID0gKHY6IERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ2hvcml6b250YWwnIHx8IHYgPT09ICd2ZXJ0aWNhbCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYGhvcml6b250YWxgIG9yIGB2ZXJ0aWNhbGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RJUkVDVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBlbGVtZW50cyBhcmUgcGxhY2VkLiBEZWZhdWx0IHZhbHVlIGlzIFwidmVydGljYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXJlY3Rpb24odjogRGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZGlyZWN0aW9uVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsZWN0aW9uTW9kZT4oREVGQVVMVF9DT0xMRUNUSU9OX01PREUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGVjdGlvbk1vZGUgPSB0aGlzLl8kY29sbGVjdGlvbk1vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb25Nb2RlVHJhbnNmb3JtID0gKHY6IENvbGxlY3Rpb25Nb2RlKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9ybWFsJyB8fCB2ID09PSAnbGF6eScpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vcm1hbGAgb3IgYGxhenlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMRUNUSU9OX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gbW9kZXMgZm9yIGNvbGxlY3Rpb24gZWxlbWVudHMuIERlZmF1bHQgdmFsdWUgaXMgXCJub3JtYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsZWN0aW9uTW9kZSh2OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGVjdGlvbk1vZGUoKSB7IHJldHVybiB0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kYnVmZmVyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhCdWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1heEJ1ZmZlclNpemUgPSB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4QnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGxldCB2YWwgPSB2O1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2LCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4QnVmZmVyU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHZhbCA9IERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlclNpemUgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsIDw9IGJ1ZmZlclNpemUpIHtcclxuICAgICAgcmV0dXJuIGJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwaW5nTWV0aG9kVHJhbnNmb3JtID0gKHY6IFNuYXBwaW5nTWV0aG9kKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSBTbmFwcGluZ01ldGhvZHMuQURWQU5DRUQgfHwgdiA9PT0gU25hcHBpbmdNZXRob2RzLlNUQU5EQVJUKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIFwic25hcHBpbmdNZXRob2RcIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSAnJHtTbmFwcGluZ01ldGhvZHMuQURWQU5DRUR9JyBvciAnJHtTbmFwcGluZ01ldGhvZHMuU1RBTkRBUlR9Jy5gKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUFBJTkdfTUVUSE9EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgbWV0aG9kLiBEZWZhdWx0IHZhbHVlIGlzICdzdGFuZGFydCcuXHJcbiAgICogJ3N0YW5kYXJ0JyAtIENsYXNzaWMgZ3JvdXAgdmlzdWFsaXphdGlvbi5cclxuICAgKiAnYWR2YW5jZWQnIC0gQSBtYXNrIGlzIGFwcGxpZWQgdG8gdGhlIHZpZXdwb3J0IGFyZWEgc28gdGhhdCB0aGUgYmFja2dyb3VuZCBpcyBkaXNwbGF5ZWQgdW5kZXJuZWF0aCB0aGUgYXR0YWNoZWQgZ3JvdXAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdNZXRob2QodjogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBwaW5nTWV0aG9kVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNpbmdNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsYXBzaW5nTW9kZT4oREVGQVVMVF9DT0xMQVBTSU5HX01PREVTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNpbmdNb2RlID0gdGhpcy5fJGNvbGxhcHNpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzaW5nTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsYXBzaW5nTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gQ29sbGFwc2luZ01vZGVzLk5PTkUgfHwgdiA9PT0gQ29sbGFwc2luZ01vZGVzLk1VTFRJX0NPTExBUFNFIHx8IHYgPT09IENvbGxhcHNpbmdNb2Rlcy5BQ0NPUkRJT04pO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgXCJjb2xsYXBzaW5nTW9kZVwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlICcke1NuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRH0nIG9yICcke1NuYXBwaW5nTWV0aG9kcy5TVEFOREFSVH0nLmApO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMQVBTSU5HX01PREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW9kZSBmb3IgY29sbGFwc2luZyBsaXN0IGl0ZW1zLiBcclxuICAgKiBgbm9uZWAgLSBMaXN0IGl0ZW1zIGFyZSBub3Qgc2VsZWN0YWJsZS5cclxuICAgKiBgbXVsdGktY29sbGFwc2VgIC0gTGlzdCBpdGVtcyBhcmUgY29sbGFwc2VkIG9uZSBieSBvbmUuXHJcbiAgICogJ2FjY29yZGlvbicgLSBBY2NvcmRpb24gY29sbGFwc2libGUgbGlzdCBpdGVtcy5cclxuICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBtdWx0aS1jb2xsYXBzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNpbmdNb2RlKHY6IENvbGxhcHNpbmdNb2RlKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzaW5nTW9kZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2luZ01vZGUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzaW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzaW5nTW9kZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIFwibWV0aG9kRm9yU2VsZWN0aW5nXCIgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBcInNlbGVjdE1vZGVcIiBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtZXRob2RGb3JTZWxlY3RpbmcodjogYW55KSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIm1ldGhvZEZvclNlbGVjdGluZ1wiIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgXCJzZWxlY3RNb2RlXCIgcHJvcGVydHkgaW5zdGVhZC4nKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0aW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW5nTW9kZT4oREVGQVVMVF9TRUxFQ1RJTkdfTU9ERVMpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuXyRzZWxlY3RpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RpbmdNb2RlVHJhbnNmb3JtID0gKHY6IFNlbGVjdGluZ01vZGUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub25lJyB8fCB2ID09PSAnc2VsZWN0JyB8fCB2ID09PSAnbXVsdGktc2VsZWN0Jyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGluZ01vZGVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vbmVgLCBgc2VsZWN0YCBvciBgbXVsdGktc2VsZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUSU5HX01PREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuIERlZmF1bHQgdmFsdWUgaXMgJ25vbmUnLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGluZ01vZGUodjogU2VsZWN0aW5nTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RpbmdNb2RlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0aW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRyYWNrQnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICR0cmFja0J5ID0gdGhpcy5fJHRyYWNrQnkuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQnlUcmFuc2Zvcm0gPSAodjogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJ0cmFja0J5XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYnkgd2hpY2ggdHJhY2tpbmcgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdHJhY2tCeSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fdHJhY2tCeVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kdHJhY2tCeS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JlZW5SZWFkZXJNZXNzYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSA9ICh2OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcmVlblJlYWRlck1lc3NhZ2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdlIGZvciBzY3JlZW4gcmVhZGVyLlxyXG4gICAqIFRoZSBtZXNzYWdlIGZvcm1hdCBpczogXCJzb21lIHRleHQgJDEgc29tZSB0ZXh0ICQyXCIsXHJcbiAgICogd2hlcmUgJDEgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24sXHJcbiAgICogJDIgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzY3JlZW4gY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHByb3RlY3RlZCBzZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGdldCBzY3JlZW5SZWFkZXJNZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcHJvdGVjdGVkICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsYW5nVGV4dERpciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dERpcmVjdGlvbj4oREVGQVVMVF9MQU5HX1RFWFRfRElSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sYW5nVGV4dERpclRyYW5zZm9ybSA9ICh2OiBUZXh0RGlyZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsYW5nVGV4dERpclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0xBTkdfVEVYVF9ESVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmb3IgdGhlIGxvY2FsZS5cclxuICAgKiBDYW4gYmUgZWl0aGVyIFwibHRyXCIgKGxlZnQtdG8tcmlnaHQpIG9yIFwicnRsXCIgKHJpZ2h0LXRvLWxlZnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2xhbmdUZXh0RGlyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3Rpb24gPSB0aGlzLmdldElzU2luZ2xlU2VsZWN0aW9uKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzTXVsdGlTZWxlY3Rpb24gPSB0aGlzLmdldElzTXVsdGlTZWxlY3Rpb24oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5nZXRJc011bHRpcGxlQ29sbGFwc2UoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuZ2V0SXNBY2NvcmRpb25Db2xsYXBzZSgpO1xyXG5cclxuICBwcml2YXRlIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRpc0luZmluaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRpc0luZmluaXR5ID0gdGhpcy5fJGlzSW5maW5pdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBpc0luZmluaXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuXyRpc0luZmluaXR5LmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBpc1ZlcnRpY2FsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5pc1ZlcnRpY2FsKTtcclxuICBwcm90ZWN0ZWQgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRFbGVtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkZm9jdXNlZEVsZW1lbnQgPSB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcHJvdGVjdGVkICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmVyZW5kZXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRwcmVyZW5kZXJFbmFibGVkID0gdGhpcy5fJHByZXJlbmRlckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSXRlbUlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF8kYm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkYm91bmRzOiBPYnNlcnZhYmxlPElTaXplIHwgbnVsbD4gPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5zY3JvbGxiYXJFbmFibGVkKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbEFsaWdubWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxpZ25tZW50Pih0aGlzLmFsaWdubWVudCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxBbGlnbm1lbnQ6IE9ic2VydmFibGU8QWxpZ25tZW50PiA9IHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBhY3R1YWxBbGlnbm1lbnQoKSB7IHJldHVybiB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsSXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbE1pbkl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsTWluSXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxNaW5JdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbE1pbkl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbE1pbkl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbE1heEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsTWF4SXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbE1heEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbE1heEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRvdGFsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3RCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxTdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbEVuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF8kcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl8kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxTY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTbmFwU2Nyb2xsVG9TdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU25hcFNjcm9sbFRvRW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgXyRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSwgc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKSwgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpLCBzbmFwcGVkQ29tcG9uZW50cyA9IHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cztcclxuICAgIGlmICghIWxpc3QgJiYgISFzY3JvbGxlciAmJiBzbmFwcGVkQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBsaXN0Qm91bmRzID0gbGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBjb21wIG9mIHNuYXBwZWRDb21wb25lbnRzKSB7XHJcbiAgICAgICAgaWYgKCEhY29tcCkge1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyTGVuZ3RoID0gYCR7aXNWZXJ0aWNhbCA/IGxpc3RCb3VuZHMud2lkdGggOiBsaXN0Qm91bmRzLmhlaWdodH0ke1BYfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzbmFwcGluZ01ldGhvZCA9IHRoaXMuc25hcHBpbmdNZXRob2Q7XHJcbiAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcHBlZENvbXBvbmVudCA9IHNuYXBwZWRDb21wb25lbnRzPy5bMF0/Lmluc3RhbmNlO1xyXG4gICAgICAgIGlmICghIXNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LCBsYW5nVGV4dERpciA9IHRoaXMubGFuZ1RleHREaXI7XHJcblxyXG4gICAgICAgICAgc25hcHBlZENvbXBvbmVudC5lbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgMCBMIDAgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRofSAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGh9IDAgWlwiKWA7XHJcblxyXG4gICAgICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudCA9IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQsIGRlbHRhID0gc25hcHBlZENvbXBvbmVudC5pdGVtPy5tZWFzdXJlcy5kZWx0YSA/PyAwLFxyXG4gICAgICAgICAgICBzY3JvbGxCYXJTaXplID0gdGhpcy5zY3JvbGxiYXJUaGlja25lc3M7XHJcblxyXG4gICAgICAgICAgbGV0IHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gd2lkdGggLSBzY3JvbGxCYXJTaXplICsgMjtcclxuICAgICAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAobGFuZ1RleHREaXIgPT09IFRleHREaXJlY3Rpb25zLlJUTCkge1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAke3RvcCArIGRlbHRhfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBMICR7cmlnaHR9IDAgTCAke3JpZ2h0fSAke3RvcCArIGRlbHRhfSBaXCIpYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmlnaHQgPSB3aWR0aDtcclxuICAgICAgICAgICAgdG9wID0gMDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7d2lkdGh9IDAgTCAke3dpZHRofSAke2JvdHRvbX0gTCAwICR7Ym90dG9tfSBMIDAgMCBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zaXRpb246IG51bWJlciwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUixcclxuICAgIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pID0+IHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSEsIHsgd2lkdGg6IGVsZW1lbnRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50SGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxyXG4gICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICBlbGVtZW50U2l6ZSA9IGlzVmVydGljYWwgPyBlbGVtZW50SGVpZ2h0IDogZWxlbWVudFdpZHRoO1xyXG4gICAgICBsZXQgcG9zOiBudW1iZXIgPSBOdW1iZXIuTmFOO1xyXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuU1RBUlQ6IHtcclxuICAgICAgICAgIHBvcyA9IHBvc2l0aW9uICsgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICBwb3MgPSBwb3NpdGlvbiAtICh2aWV3cG9ydFNpemUgLSBlbGVtZW50U2l6ZSkgKiAuNSArIHNjcm9sbGVyLnN0YXJ0TGF5b3V0T2Zmc2V0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLkVORDoge1xyXG4gICAgICAgICAgcG9zID0gcG9zaXRpb24gLSAodmlld3BvcnRTaXplIC0gZWxlbWVudFNpemUpICsgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocG9zKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogcG9zLCBiZWhhdmlvciwgc25hcDogZmFsc2UsIG5vcm1hbGl6ZTogdHJ1ZSxcclxuICAgICAgICAgIGZpcmVVcGRhdGU6IGZhbHNlLCBibGVuZGluZzogZmFsc2UsIHVzZXJBY3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgZHVyYXRpb246IHRoaXMuc25hcFRvSXRlbSA/IE1hdGgubWF4KHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSwgdGhpcy5hbmltYXRpb25QYXJhbXMubmF2aWdhdGVUb0l0ZW0pIDogdGhpcy5hbmltYXRpb25QYXJhbXMubmF2aWdhdGVUb0l0ZW0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcbiAgcHJvdGVjdGVkIGdldCBpdGVtQ29tcG9uZW50Q2xhc3MoKSB7IHJldHVybiB0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3M7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyB0cmFja0JveFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94Q2xhc3M6IENvbXBvbmVudCQxPFRyYWNrQm94PiA9IFRyYWNrQm94O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLnRyYWNrQnkpO1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkdXBkYXRlID0gdGhpcy5fJHVwZGF0ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFBhcmFtcz4oKTtcclxuICBwcm90ZWN0ZWQgJHNjcm9sbFRvID0gdGhpcy5fJHNjcm9sbFRvLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FeGVjdXRvciA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxUb0V4ZWN1dG9yID0gdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdUbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8SVNjcm9sbEV2ZW50PigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZpcmVVcGRhdGUgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZmlyZVVwZGF0ZSA9IHRoaXMuXyRmaXJlVXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kZmlyZVVwZGF0ZU5leHRGcmFtZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRmaXJlVXBkYXRlTmV4dEZyYW1lID0gdGhpcy5fJGZpcmVVcGRhdGVOZXh0RnJhbWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHByZXZlbnRTY3JvbGxTbmFwcGluZyA9IHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3JlYWR5Rm9yU2hvdyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgY2FjaGFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJlcmVuZGVyPy5hY3RpdmUgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHByZXJlbmRlcmFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5keW5hbWljU2l6ZSAmJiAodGhpcy5fdHJhY2tCb3g/LmlzU25hcHBlZFRvRW5kID8/IGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyR2aWV3SW5pdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgJHZpZXdJbml0ID0gdGhpcy5fJHZpZXdJbml0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSAkZGVzdHJveSA9IHRoaXMuXyRkZXN0cm95LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDEgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxO1xyXG4gICAgdGhpcy5faWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLl9pZCwgdGhpcy5fdHJhY2tCb3gpO1xyXG5cclxuICAgIGNvbnN0ICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy4kc25hcFNjcm9sbFRvRW5kO1xyXG4gICAgY29tYmluZUxhdGVzdChbJGR5bmFtaWNTaXplLCAkc25hcFNjcm9sbFRvRW5kXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2R5bmFtaWNTaXplLCBzbmFwU2Nyb2xsVG9FbmRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHByZXJlbmRlckVuYWJsZWQubmV4dChkeW5hbWljU2l6ZSAmJiBzbmFwU2Nyb2xsVG9FbmQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kYW5pbWF0aW9uUGFyYW1zLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5hbmltYXRpb25QYXJhbXMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kc3ByZWFkaW5nTW9kZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc0luZmluaXR5Lm5leHQoaXNTcHJlYWRpbmdNb2RlKHYsIFNwcmVhZGluZ01vZGVzLklORklOSVRZKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHN0YXJ0T2Zmc2V0Lm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRhY3R1YWxTY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRlbmRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRpc0luZmluaXR5ID0gdGhpcy4kaXNJbmZpbml0eTtcclxuICAgICRpc0luZmluaXR5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNJbmZpbml0eSA9IHRoaXMuX3NlcnZpY2UuaXNJbmZpbml0eSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkekluZGV4V2hlblNlbGVjdGluZyA9IHRoaXMuJHpJbmRleFdoZW5TZWxlY3Rpbmc7XHJcbiAgICAkekluZGV4V2hlblNlbGVjdGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuekluZGV4V2hlblNlbGVjdGluZyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkYm91bmRzID0gdGhpcy5fJGJvdW5kcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgKSxcclxuICAgICAgJHJhd1Njcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy4kc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICRyYXdTY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRzY3JvbGxFbmRPZmZzZXQ7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGJvdW5kcywgJHJhd1Njcm9sbFN0YXJ0T2Zmc2V0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW3ZdKSA9PiAhIXYpLFxyXG4gICAgICB0YXAoKFtib3VuZHMsIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlQXJpdGhtZXRpY0V4cHJlc3Npb24odmFsdWUsIHRoaXMuaXNWZXJ0aWNhbCA/IGJvdW5kcyEuaGVpZ2h0IDogYm91bmRzIS53aWR0aCk7XHJcbiAgICAgICAgdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldC5uZXh0KHZhbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskYm91bmRzLCAkcmF3U2Nyb2xsRW5kT2Zmc2V0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW3ZdKSA9PiAhIXYpLFxyXG4gICAgICB0YXAoKFtib3VuZHMsIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlQXJpdGhtZXRpY0V4cHJlc3Npb24odmFsdWUsIHRoaXMuaXNWZXJ0aWNhbCA/IGJvdW5kcyEuaGVpZ2h0IDogYm91bmRzIS53aWR0aCk7XHJcbiAgICAgICAgdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQubmV4dCh2YWwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiB2ICE9PSBudWxsKSxcclxuICAgICAgdGFwKGlkID0+IHtcclxuICAgICAgICB0aGlzLm9uU25hcEl0ZW0uZW1pdChpZCEpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kdGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8udGljaygpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kdGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZHluYW1pY1NpemUgPT09IHRydWUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnRpY2soKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgY29uc3QgXyRjcmVhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXHJcbiAgICAgICRjcmVhdGVkID0gXyRjcmVhdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRjcmVhdGVkLCB0aGlzLiRzaG93XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW2NyZWF0ZWQsIHNob3duXSkgPT4gY3JlYXRlZCAmJiBzaG93biksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGVyLm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFZpZXdwb3J0KTtcclxuICAgIHRoaXMuXyRsaXN0Lm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbENvbnRlbnQpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJDb21wb25lbnQgPSBvZih0aGlzLl9zY3JvbGxlckNvbXBvbmVudCksXHJcbiAgICAgICRyZXNpemVWaWV3cG9ydCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kcmVzaXplVmlld3BvcnQpLFxyXG4gICAgICApLFxyXG4gICAgICAkcmVzaXplQ29udGVudCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kcmVzaXplQ29udGVudCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxEaXJlY3Rpb24pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRyZXNpemVWaWV3cG9ydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh2KTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZXNpemUodHJ1ZSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkcmVzaXplQ29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRsaXN0Qm91bmRzLm5leHQodik7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVzaXplKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnk7XHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UudHJhY2tCeSA9IHRoaXMuX3RyYWNrQm94LnRyYWNrQnkgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guZGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBsZXQgaGFzVXNlckFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiB2IDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHYpLFxyXG4gICAgKSxcclxuICAgICAgJG1pbkl0ZW1TaXplID0gdGhpcy4kbWluSXRlbVNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgdiA8PSAwID8gREVGQVVMVF9NSU5fSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRtYXhJdGVtU2l6ZSA9IHRoaXMuJG1heEl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIHYgPD0gMCA/IERFRkFVTFRfTUFYX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLiRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICksXHJcbiAgICAgICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRhY3R1YWxTY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRtaW5JdGVtU2l6ZSwgJGJvdW5kcywgJHNjcm9sbFN0YXJ0T2Zmc2V0LCAkc2Nyb2xsRW5kT2Zmc2V0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcCgoW3YsIGJvdW5kcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0pID0+IHtcclxuICAgICAgICBpZiAoKHYgYXMgYW55KSA9PT0gVklFV1BPUlQpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsIHZpZXdwb3J0Qm91bmRzID0gYm91bmRzLFxyXG4gICAgICAgICAgICByZXN1bHQgPSAoaXNWZXJ0aWNhbCA/ICh2aWV3cG9ydEJvdW5kcz8uaGVpZ2h0ID8/IDApIDogKHZpZXdwb3J0Qm91bmRzPy53aWR0aCA/PyAwKSkgLSBzdGFydE9mZnNldCAtIGVuZE9mZnNldDtcclxuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQgPD0gMCA/IDEgOiByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Yodik7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbE1pbkl0ZW1TaXplLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskbWF4SXRlbVNpemUsICRib3VuZHMsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXRdKSA9PiB7XHJcbiAgICAgICAgaWYgKCh2IGFzIGFueSkgPT09IFZJRVdQT1JUKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLCB2aWV3cG9ydEJvdW5kcyA9IGJvdW5kcyxcclxuICAgICAgICAgICAgcmVzdWx0ID0gKGlzVmVydGljYWwgPyAodmlld3BvcnRCb3VuZHM/LmhlaWdodCA/PyAwKSA6ICh2aWV3cG9ydEJvdW5kcz8ud2lkdGggPz8gMCkpIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQ7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzdWx0IDw9IDAgPyAxIDogcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGFjdHVhbE1pbkl0ZW1TaXplID0gdGhpcy4kYWN0dWFsTWluSXRlbVNpemUsXHJcbiAgICAgICRhY3R1YWxNYXhJdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbE1heEl0ZW1TaXplO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtU2l6ZSwgJGJvdW5kcywgJGFjdHVhbE1pbkl0ZW1TaXplLCAkYWN0dWFsTWF4SXRlbVNpemUsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIG1pbiwgbWF4LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSkgPT4ge1xyXG4gICAgICAgIGlmICgodiBhcyBhbnkpID09PSBWSUVXUE9SVCkge1xyXG4gICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCwgdmlld3BvcnRCb3VuZHMgPSBib3VuZHMsXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IChpc1ZlcnRpY2FsID8gKHZpZXdwb3J0Qm91bmRzPy5oZWlnaHQgPz8gMCkgOiAodmlld3BvcnRCb3VuZHM/LndpZHRoID8/IDApKSAtIHN0YXJ0T2Zmc2V0IC0gZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCA8IG1pbiA/IG1pbiA6IChyZXN1bHQgPiBtYXggPyBtYXggOiByZXN1bHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYgPCBtaW4gPyBtaW4gOiAodiA+IG1heCA/IG1heCA6IHYpKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsSXRlbVNpemUubmV4dCh2KTtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1TaXplID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRhY3R1YWxJdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbEl0ZW1TaXplLFxyXG4gICAgICAkYWN0dWFsSXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzSXRlbS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbGlzdCA9IHRoaXMuJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwcmV2ZW50S2V5Ym9hcmRFdmVudCA9IChldmVudDogS2V5Ym9hcmRFdmVudCwgaXNWZXJ0aWNhbDogYm9vbGVhbikgPT4ge1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksIHNjcm9sbGFibGUgPSBzY3JvbGxlci5zY3JvbGxhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgc2Nyb2xsV2VpZ2h0ID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoO1xyXG4gICAgICAgIGlmIChzY3JvbGxhYmxlIHx8IHNjcm9sbFNpemUgPD0gc2Nyb2xsU3RhcnRPZmZzZXQgfHwgc2Nyb2xsU2l6ZSA+PSBzY3JvbGxXZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghIWV2ZW50ICYmIGV2ZW50LmNhbmNlbGFibGUpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRsaXN0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoZWxlbWVudCA9PiAhIWVsZW1lbnQpLFxyXG4gICAgICBzd2l0Y2hNYXAoZWxlbWVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCBFVkVOVF9LRVlfRE9XTikucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0xFRlQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1VQOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1JJR0hUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9ET1dOOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLiRzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAkc2Nyb2xsYmFyVGhpY2tuZXNzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoc2Nyb2xsYmFyVGhpY2tuZXNzID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNjcm9sbEJhclNpemUgPSBzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRmaXJlVXBkYXRlTmV4dEZyYW1lLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvSXRlbSA9IHRoaXMuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgKSxcclxuICAgICAgJG1vdXNlRG93biA9IGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIE1PVVNFX0RPV04pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICksXHJcbiAgICAgICR0b3VjaFN0YXJ0ID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgVE9VQ0hfU1RBUlQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCBLRVlfRE9XTikucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlID0+IGUua2V5ID09PSBLRVlfVEFCKSxcclxuICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVUykucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVsYXkoMCksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHNjcm9sbFRvSXRlbSksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJG1vdXNlRG93biksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHRvdWNoU3RhcnQpLFxyXG4gICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzRmlyc3RFbGVtZW50KCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2Nyb2xsVG9TdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TdGFydChudWxsLCBvcHRpb25zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAocGFyYW1zID0+IHtcclxuICAgICAgICBjb25zdCB7IGlkLCBjYiwgb3B0aW9ucyB9ID0gcGFyYW1zITtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvKGlkLCBjYiwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzY3JvbGxUb0VuZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9FbmQobnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRsYW5nVGV4dERpci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGFuZ1RleHREaXIgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kY2xpY2tEaXN0YW5jZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY2xpY2tEaXN0YW5jZSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzbmFwU2Nyb2xsVG9TdGFydCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtzbmFwU2Nyb2xsVG9TdGFydCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzbmFwU2Nyb2xsVG9TdGFydCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzbmFwU2Nyb2xsVG9FbmQsIHRoaXMuJGlzSW5maW5pdHldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbc25hcFNjcm9sbFRvRW5kLCBpc0luZmluaXR5XSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9FbmQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzbmFwU2Nyb2xsVG9FbmQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdJbml0ID0gdGhpcy4kdmlld0luaXQsXHJcbiAgICAgICRwcmVyZW5kZXJDb250YWluZXIgPSBvZih0aGlzLl9wcmVyZW5kZXIpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVyZW5kZXIgPSAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlckNvbnRhaW5lci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHYgPT4gdiEuJHJlbmRlciksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0ICRmaXJlVXBkYXRlID0gdGhpcy4kZmlyZVVwZGF0ZTtcclxuICAgICRmaXJlVXBkYXRlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdXBkYXRlID0gdGhpcy4kdXBkYXRlLFxyXG4gICAgICByZW5kZXJTdGFiaWxpemVyID0gKG9wdGlvbnM/OiBJUmVuZGVyU3RhYmlsaXplck9wdGlvbnMpID0+IHtcclxuICAgICAgICBsZXQgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTixcclxuICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICBjb25zdCBwcmVwYXJlSXRlcmF0aW9ucyA9IG9wdGlvbnM/LnByZXBhcmVJdGVyYXRpb25zID8/IFBSRVBBUkVfSVRFUkFUSU9OUyxcclxuICAgICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aCA9IG9wdGlvbnM/LnByZXBhcmVSZXVwZGF0ZUxlbmd0aCA/PyBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEg7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT047XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiAkdXBkYXRlLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgoKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID09PSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTikgfHwgKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uICE9PSB2KSkgJiZcclxuICAgICAgICAgICAgICAgICAgKHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zIDwgcHJlcGFyZUl0ZXJhdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gdjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9PT0gdikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMgPCBwcmVwYXJlUmV1cGRhdGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucysrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gdjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIClcclxuICAgICAgfTtcclxuICAgIGNvbnN0ICRpbml0aWFsUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TLFxyXG4gICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSCxcclxuICAgIH0pLFxyXG4gICAgICAkdXBkYXRlSXRlbXNSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgIH0pLFxyXG4gICAgICAkY2h1bmtMb2FkaW5nUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGNvbGxhcHNlSXRlbXNSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfQ09MTEFQU0VfSVRFTVMsXHJcbiAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX0NPTExBUFNFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGl0ZW1Db25maWdNYXAgPSB0aGlzLiRpdGVtQ29uZmlnTWFwLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gIXYgPyB7fSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkZGl2aWRlcyA9IHRoaXMuJGRpdmlkZXMsXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy4kd2FpdEZvclByZXBhcmF0aW9uLFxyXG4gICAgICAkaXRlbXMgPSB0aGlzLiRpdGVtcztcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskdmlld0luaXQsICRwcmVyZW5kZXJDb250YWluZXIsICRkaXZpZGVzLCAkZHluYW1pY1NpemUsICRzbmFwU2Nyb2xsVG9TdGFydCwgJHNuYXBTY3JvbGxUb0VuZCwgJHdhaXRGb3JQcmVwYXJhdGlvbl0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0LCBwcmVyZW5kZXJDb250YWluZXJdKSA9PiAhIWluaXQgJiYgISFwcmVyZW5kZXJDb250YWluZXIpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHN3aXRjaE1hcCgoWywgcHJlcmVuZGVyQ29udGFpbmVyLCBkaXZpZGVzLCBkeW5hbWljU2l6ZSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgd2FpdEZvclByZXBhcmF0aW9uXSkgPT4ge1xyXG4gICAgICAgIGlmICghIWR5bmFtaWNTaXplICYmICFzbmFwU2Nyb2xsVG9TdGFydCAmJiAhIXNuYXBTY3JvbGxUb0VuZCAmJiAhIXdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgJGNvbGxlY3Rpb24gPSAoZGl2aWRlcyA+IDEgPyAkYWN0dWFsSXRlbXMgOiAkaXRlbXMpO1xyXG4gICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBMZW5ndGggPSBwPy5sZW5ndGggPz8gMCwgY0xlbmd0aCA9IGM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgICAgICAgICAgIHJldHVybiAhKChjTGVuZ3RoID4gMCkgfHwgKHBMZW5ndGggIT09IGNMZW5ndGggJiYgKHBMZW5ndGggPT09IDAgfHwgY0xlbmd0aCA9PT0gMCkpKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRhcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLmFjdHVhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMud2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKHdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vbih0aGlzLml0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMud2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJGluaXRpYWxSZW5kZXJTdGFiaWxpemVyLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9mZigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgIGNvbnN0ICRjb2xsZWN0aW9uID0gKGRpdmlkZXMgPiAxID8gJGFjdHVhbEl0ZW1zIDogJGl0ZW1zKTtcclxuICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgdGFwKGl0ZW1zID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUNsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLmFjdHVhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXRlbXMucGlwZShcclxuICAgICAgbWFwKHYgPT4gdj8ubGVuZ3RoID4gMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKGNhY2hlID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZWZyZXNoQ2FjaGUoY2FjaGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzZWRJZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYgPz8gbnVsbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKGVsZW1lbnQgPT4gISFlbGVtZW50KSxcclxuICAgICAgdGFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGRlZmF1bHRJdGVtVmFsdWUgPSB0aGlzLiRkZWZhdWx0SXRlbVZhbHVlLFxyXG4gICAgICAkc2VsZWN0QnlDbGljayA9IHRoaXMuJHNlbGVjdEJ5Q2xpY2ssXHJcbiAgICAgICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLiRjb2xsYXBzZUJ5Q2xpY2ssXHJcbiAgICAgICRpc1Njcm9sbFN0YXJ0ID0gdGhpcy5fJGlzU2Nyb2xsU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpc1Njcm9sbEZpbmlzaGVkID0gdGhpcy5fJGlzU2Nyb2xsRW5kLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNWZXJ0aWNhbCh2IHx8IERFRkFVTFRfRElSRUNUSU9OKSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNuYXBTY3JvbGxUb1N0YXJ0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9TdGFydCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcFNjcm9sbFRvRW5kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9FbmQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzVmVydGljYWwgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5keW5hbWljID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkZWZhdWx0SXRlbVZhbHVlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5kZWZhdWx0SXRlbVZhbHVlID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxTdGFydE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsRW5kT2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxFbmRPZmZzZXQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hTdGFydC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsRmluaXNoZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaEVuZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdEJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2sgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlQnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGRpdmlkZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5kaXZpZGVzID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGFsaWdubWVudCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFthbGlnbm1lbnQsIGlzSW5maW5pdHldKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEFsaWdubWVudC5uZXh0KGlzSW5maW5pdHkgPyBBbGlnbm1lbnRzLkNFTlRFUiA6IGFsaWdubWVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzY3JvbGxiYXJFbmFibGVkLCB0aGlzLiRpc0luZmluaXR5XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbc2Nyb2xsYmFyRW5hYmxlZCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZC5uZXh0KGlzSW5maW5pdHkgPyBmYWxzZSA6IHNjcm9sbGJhckVuYWJsZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGFsaWdubWVudCA9IHRoaXMuJGFjdHVhbEFsaWdubWVudCxcclxuICAgICAgJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkYnVmZmVyU2l6ZSA9IHRoaXMuJGJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0aGlzLiRtYXhCdWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwVG9JdGVtID0gdGhpcy4kc25hcFRvSXRlbSxcclxuICAgICAgJHNuYXBUb0l0ZW1BbGlnbiA9IHRoaXMuJHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgJHN0aWNreUVuYWJsZWQgPSB0aGlzLiRzdGlja3lFbmFibGVkLFxyXG4gICAgICAkaXNMYXp5ID0gdGhpcy4kY29sbGVjdGlvbk1vZGUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzTGF6eSh2IHx8IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKSksXHJcbiAgICAgICksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzaW5nTW9kZSA9IHRoaXMuJGNvbGxhcHNpbmdNb2RlLFxyXG4gICAgICAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuJHNlbGVjdGluZ01vZGUsXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRoaXMuJHNlbGVjdGVkSWRzLFxyXG4gICAgICAkY29sbGFwc2VkSWRzID0gdGhpcy4kY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICBtYXAodiA9PiBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdKSxcclxuICAgICAgKSxcclxuICAgICAgJGNvbGxhcHNlZEl0ZW1JZHMgPSB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtVHJhbnNmb3JtID0gdGhpcy4kaXRlbVRyYW5zZm9ybSxcclxuICAgICAgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLiRzY3JlZW5SZWFkZXJNZXNzYWdlLFxyXG4gICAgICAkZGlzcGxheUl0ZW1zID0gdGhpcy5fc2VydmljZS4kZGlzcGxheUl0ZW1zLFxyXG4gICAgICAkY2FjaGVWZXJzaW9uID0gdGhpcy5fc2VydmljZS4kY2FjaGVWZXJzaW9uO1xyXG5cclxuICAgICRzbmFwVG9JdGVtLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwVG9JdGVtID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRhY3R1YWxJdGVtcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuaXRlbXMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGFjdHVhbEl0ZW1zLCAkdmlld0luaXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbLCBpbml0XSkgPT4gaW5pdCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc25hcElmTmVlZCgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGl0ZW1Db25maWdNYXAucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1Db25maWdNYXAgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VkSWRzID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRkaXNwbGF5SXRlbXMsICRzY3JlZW5SZWFkZXJNZXNzYWdlLCAkaXNWZXJ0aWNhbCwgJHNjcm9sbFNpemUsICRib3VuZHNdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgaXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSwgYm91bmRzXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlLm5leHQoXHJcbiAgICAgICAgICBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlKGl0ZW1zLCBzY3JlZW5SZWFkZXJNZXNzYWdlLCBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMhKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNMYXp5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNMYXp5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtc0NvbXBvc2l0aW9uID0gJGl0ZW1zLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoaXRlbXMgPT4ge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFskY29sbGFwc2VkSXRlbUlkcywgJGl0ZW1Db25maWdNYXAsICR0cmFja0J5LCAkZGl2aWRlc10pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoW2NvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlc10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICAkaXRlbXNDb21wb3NpdGlvbi5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKCh7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCAhKHRoaXMuY2FjaGFibGUgJiYgIXRoaXMuX2NhY2hlZCAmJlxyXG4gICAgICAgICAgIXRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoeyBpdGVtcywgY29sbGFwc2VkSWRzLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5LCBkaXZpZGVzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJHVwZGF0ZUl0ZW1zUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGlkZGVuSXRlbXMgPSBuZXcgQ01hcDxJZCwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICAgICAgbGV0IGlzQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtPy5bdHJhY2tCeV07XHJcbiAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gKGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCkgPiAwLCBjb2xsYXBzZWQgPSBjb2xsYXBzZWRJZHMuaW5jbHVkZXMoaWQpO1xyXG4gICAgICAgICAgICBpZiAoISFncm91cCkge1xyXG4gICAgICAgICAgICAgIGlzQ29sbGFwc2VkID0gY29sbGFwc2VkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgaGlkZGVuSXRlbXMuc2V0KGlkLCB0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbEl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtPy5bdHJhY2tCeV07XHJcbiAgICAgICAgICBpZiAoISFpdGVtICYmIGhpZGRlbkl0ZW1zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY3R1YWxJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZENvbGxlY3Rpb24gPSBub3JtYWxpemVDb2xsZWN0aW9uKGFjdHVhbEl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5LCBkaXZpZGVzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEl0ZW1zLm5leHQobm9ybWFsaXplZENvbGxlY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdG9nZ2xlQ2xhc3NOYW1lKGVsLCB2ID8gQ0xBU1NfTElTVF9WRVJUSUNBTCA6IENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgdiA/IENMQVNTX0xJU1RfSE9SSVpPTlRBTCA6IENMQVNTX0xJU1RfVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdGhpcy5fdHJhY2tCb3guaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmdldElzTXVsdGlTZWxlY3Rpb24odiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgICAgIChlbCBhcyBhbnkpLnJvbGUgPSBST0xFX0xJU1RfQk9YO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RpbmdNb2RlID0gU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzU2luZ2xlU2VsZWN0aW9uKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc011bHRpU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICAoZWwgYXMgYW55KS5yb2xlID0gUk9MRV9MSVNUX0JPWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0aW5nTW9kZSA9IFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc05vbmVTZWxlY3Rpb24odiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uID0gdGhpcy5faXNNdWx0aVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgKGVsIGFzIGFueSkucm9sZSA9IFJPTEVfTElTVDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0aW5nTW9kZSA9IFNlbGVjdGluZ01vZGVzVHlwZXMuTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2luZ01vZGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRJc05vbmVDb2xsYXBzZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzTm9uZUNvbGxhcHNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuX3NlcnZpY2UuaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc011bHRpcGxlQ29sbGFwc2UoKSkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc011bHRpcGxlQ29sbGFwc2UgPSB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc0FjY29yZGlvbkNvbGxhcHNlID0gdGhpcy5fc2VydmljZS5pc05vbmVDb2xsYXBzZSA9IHRoaXMuX2lzQWNjb3JkaW9uQ29sbGFwc2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNBY2NvcmRpb25Db2xsYXBzZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5fc2VydmljZS5pc05vbmVDb2xsYXBzZSA9IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSB0aGlzLiRwcmV2ZW50U2Nyb2xsU25hcHBpbmc7XHJcblxyXG4gICAgJHByZXZlbnRTY3JvbGxTbmFwcGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSXRlbUlkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRjb2xsYXBzZUl0ZW1zUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNDaHVua0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIGNvbnN0ICRsb2FkaW5nID0gdGhpcy4kbG9hZGluZztcclxuICAgICRsb2FkaW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhdiksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgaXNDaHVua0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGJhciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICghIXNjcm9sbGJhcikge1xyXG4gICAgICAgICAgc2Nyb2xsYmFyLnN0b3BTY3JvbGxiYXIoKTtcclxuICAgICAgICAgIHNjcm9sbGJhci5yZWZyZXNoU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAkYWN0dWFsSXRlbXMucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlTmV4dEZyYW1lLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiAkY2h1bmtMb2FkaW5nUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICBpc0NodW5rTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q2FjaGVDaHVua0luZm8oKTtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxiYXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICBpZiAoISFzY3JvbGxiYXIpIHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGJhci5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxiYXIucmVmcmVzaFNjcm9sbGJhcigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICApKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGxvYWRpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlID0gKHBhcmFtczoge1xyXG4gICAgICBhbGlnbm1lbnQ6IEFsaWdubWVudDsgcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0OiBudW1iZXI7IHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQ6IG51bWJlcjsgdHJhY2tCeTogc3RyaW5nOyBpc0luZmluaXR5OiBib29sZWFuO1xyXG4gICAgICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiwgc25hcFNjcm9sbFRvRW5kOiBib29sZWFuOyBib3VuZHM6IElTaXplOyBsaXN0Qm91bmRzOiBJU2l6ZTsgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7XHJcbiAgICAgIGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uPE9iamVjdD47IGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA7IHNjcm9sbFNpemU6IG51bWJlcjsgaXRlbVNpemU6IG51bWJlcjtcclxuICAgICAgbWluSXRlbVNpemU6IG51bWJlcjsgbWF4SXRlbVNpemU6IG51bWJlcjsgYnVmZmVyU2l6ZTogbnVtYmVyOyBtYXhCdWZmZXJTaXplOiBudW1iZXI7IHN0aWNreUVuYWJsZWQ6IGJvb2xlYW47IGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICAgIGR5bmFtaWNTaXplOiBib29sZWFuOyBkaXZpZGVzOiBudW1iZXI7IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IGJvb2xlYW47IGNhY2hlVmVyc2lvbjogbnVtYmVyOyB1c2VyQWN0aW9uOiBib29sZWFuO1xyXG4gICAgICBzbmFwVG9JdGVtOiBib29sZWFuLCBzbmFwVG9JdGVtQWxpZ246IFNuYXBUb0l0ZW1BbGlnbiwgY29sbGFwc2VkSWRzOiBBcnJheTxJZD47IGl0ZW1UcmFuc2Zvcm06IEl0ZW1UcmFuc2Zvcm0gfCBudWxsO1xyXG4gICAgfSkgPT4ge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgYWxpZ25tZW50LCBwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQsIHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsIHRyYWNrQnksIGlzSW5maW5pdHksXHJcbiAgICAgICAgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsXHJcbiAgICAgICAgbWF4SXRlbVNpemUsIGRpdmlkZXMsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHN0aWNreUVuYWJsZWQsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBzbmFwVG9JdGVtLFxyXG4gICAgICAgIHNuYXBUb0l0ZW1BbGlnbiwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uLCBjb2xsYXBzZWRJZHMsIGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgIH0gPSBwYXJhbXM7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IGlzSW5maW5pdHkgPSB0aGlzLmlzSW5maW5pdHksIGNvbGxhcHNhYmxlID0gY29sbGFwc2VkSWRzLmxlbmd0aCA+IDAsIGNhY2hhYmxlID0gdGhpcy5jYWNoYWJsZSwgY2FjaGVkID0gdGhpcy5fY2FjaGVkLCB3YWl0aW5nQ2FjaGUgPSBjYWNoYWJsZSAmJiAhY2FjaGVkLFxyXG4gICAgICAgICAgZW1pdFVwZGF0ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgd2FpdGluZ0NhY2hlIHx8IGNvbGxhcHNhYmxlIHx8IGlzQ2h1bmtMb2FkaW5nLFxyXG4gICAgICAgICAgZmlyZVVwZGF0ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCksXHJcbiAgICAgICAgICBmaXJlVXBkYXRlQXRFZGdlcyA9IGZpcmVVcGRhdGUgfHwgIWlzSW5maW5pdHk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyB8fCAoY2FjaGFibGUgJiYgY2FjaGVkKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpO1xyXG4gICAgICAgICAgbGV0IGFjdHVhbFNjcm9sbFNpemUgPSAhdGhpcy5fcmVhZHlGb3JTaG93ICYmIHNuYXBTY3JvbGxUb0VuZCA/IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGgpIDpcclxuICAgICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IDAsXHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcywgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCksXHJcbiAgICAgICAgICAgIG9wdHM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSwgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSxcclxuICAgICAgICAgICAgICBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBzdGlja3lFbmFibGVkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBzbmFwVG9JdGVtLCBzbmFwVG9JdGVtQWxpZ24sIGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKHNuYXBTY3JvbGxUb0VuZCAmJiAhdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUxLCBsZWZ0TGF5b3V0T2Zmc2V0OiBsZWZ0TGF5b3V0T2Zmc2V0MSB9ID1cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUgfSk7XHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemUxO1xyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplLCBsZWZ0TGF5b3V0T2Zmc2V0OiBsZWZ0TGF5b3V0T2Zmc2V0MSB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgb3B0cyk7XHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemU7XHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0MTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzY3JvbGxlci50b3RhbFNpemUgPSB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0O1xyXG5cclxuICAgICAgICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCh0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICBpZiAoIV8kY3JlYXRlZC5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIF8kY3JlYXRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBhY3R1YWxTY3JvbGxTaXplICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID0gc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGg7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7XHJcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50cy5OT05FOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQocHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0Lm5leHQocHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnRzLkNFTlRFUjoge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbUlkOiBJZCB8IG51bGwgPSBpdGVtcy5sZW5ndGggPiAwID8gKGl0ZW1zWzBdPy5bdHJhY2tCeV0gPz8gbnVsbCkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZW5kSXRlbUlkOiBJZCB8IG51bGwgPSBpdGVtcy5sZW5ndGggPiAwID8gKGl0ZW1zPy5baXRlbXMubGVuZ3RoIC0gMV0/Llt0cmFja0J5XSA/PyBudWxsKSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRTdGFydE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41IC0gKGZpcnN0SXRlbUlkICE9PSBudWxsID8gKGlzVmVydGljYWwgPyAodGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGZpcnN0SXRlbUlkKT8uaGVpZ2h0ID8/IDApIDpcclxuICAgICAgICAgICAgICAgICAgKHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhmaXJzdEl0ZW1JZCk/LndpZHRoID8/IDApKSA6IDApICogKGlzSW5maW5pdHkgPyAwIDogLjUpLFxyXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50RW5kT2Zmc2V0ID0gdmlld3BvcnRTaXplICogLjUgLSAoZW5kSXRlbUlkICE9PSBudWxsID8gKGlzVmVydGljYWwgPyAodGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGVuZEl0ZW1JZCk/LmhlaWdodCA/PyAwKSA6XHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9zZXJ2aWNlLmdldEl0ZW1Cb3VuZHMoZW5kSXRlbUlkKT8ud2lkdGggPz8gMCkpIDogMCkgKiAoaXNJbmZpbml0eSA/IDAgOiAuNSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuXyRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldC5uZXh0KGFsaWdubWVudFN0YXJ0T2Zmc2V0KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0Lm5leHQoYWxpZ25tZW50RW5kT2Zmc2V0KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQubmV4dChwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQgKyBhbGlnbm1lbnRTdGFydE9mZnNldCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5uZXh0KHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQgKyBhbGlnbm1lbnRFbmRPZmZzZXQpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIuZGVsdGEgPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICBpZiAoKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQgJiYgc2Nyb2xsZXIuc2Nyb2xsYWJsZSkgfHxcclxuICAgICAgICAgICAgKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIGN1cnJlbnRTY3JvbGxTaXplIDw9IE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2Nyb2xsU2l6ZSAhPT0gcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCB1c2VyQWN0aW9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IDAsIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBmaXJlVXBkYXRlOiBmaXJlVXBkYXRlQXRFZGdlcywgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQoZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICgoc25hcFNjcm9sbFRvRW5kICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB8fCAoc25hcFNjcm9sbFRvRW5kICYmICFzY3JvbGxlci5zY3JvbGxhYmxlKSB8fFxyXG4gICAgICAgICAgICAoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSArIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcgPj0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUpIHx8XHJcbiAgICAgICAgICAgIChyb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICsgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUsXHJcbiAgICAgICAgICAgICAgZmlyZVVwZGF0ZTogZmlyZVVwZGF0ZUF0RWRnZXMsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULCB1c2VyQWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzY3JvbGxTaXplICE9PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICYmXHJcbiAgICAgICAgICAgICgoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSAwICYmIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPCByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSkgfHxcclxuICAgICAgICAgICAgICAoc2Nyb2xsU2l6ZSAhPT0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgfHwgY3VycmVudFNjcm9sbFNpemUgIT09IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSwgYmxlbmRpbmc6IHRydWUsIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgICAgICAgZmlyZVVwZGF0ZSwgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW1pdFVwZGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBwcmV2SXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICAgIGNvbnN0IGRlYm91bmNlZFVwZGF0ZSA9IGRlYm91bmNlKHVwZGF0ZSwgMCwgTUFYX05VTUJFUlNfT0ZfU0tJUFNfRk9SX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEpO1xyXG4gICAgJHZpZXdJbml0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFskdHJhY2tCeSwgdGhpcy4kaXNJbmZpbml0eSwgJHNuYXBTY3JvbGxUb1N0YXJ0LCAkc25hcFNjcm9sbFRvRW5kLCAkYm91bmRzLCAkbGlzdEJvdW5kcywgJHNjcm9sbEVuZE9mZnNldCwgJGFjdHVhbEl0ZW1zLCAkaXRlbUNvbmZpZ01hcCwgJHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAkYWN0dWFsSXRlbVNpemUsICRhY3R1YWxNaW5JdGVtU2l6ZSwgJGFjdHVhbE1heEl0ZW1TaXplLCAkY29sbGFwc2VkSXRlbUlkcywgJGJ1ZmZlclNpemUsICRtYXhCdWZmZXJTaXplLCAkc3RpY2t5RW5hYmxlZCwgJGlzVmVydGljYWwsXHJcbiAgICAgICAgICAkZHluYW1pY1NpemUsICRkaXZpZGVzLCAkc25hcFRvSXRlbSwgJHNuYXBUb0l0ZW1BbGlnbiwgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sICRpdGVtVHJhbnNmb3JtLCAkYWxpZ25tZW50LFxyXG4gICAgICAgICAgJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsICRjYWNoZVZlcnNpb24sIHRoaXMuJGZpcmVVcGRhdGUsXHJcbiAgICAgICAgXSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFwKChbXHJcbiAgICAgICAgICAgIHRyYWNrQnksIGlzSW5maW5pdHksIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kcywgbGlzdEJvdW5kcywgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtYXhJdGVtU2l6ZSwgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZGl2aWRlcywgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBpdGVtVHJhbnNmb3JtLCBhbGlnbm1lbnQsIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICAgICAgXSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChwcmV2SXRlbXMgIT09IGl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgaXRlbXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwcmV2SXRlbXMgPSBpdGVtcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbmFibGVkT3B0aW1pemF0aW9uID0gdGhpcy5zY3JvbGxpbmdTZXR0aW5ncz8ub3B0aW1pemF0aW9uID8/IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgICB2ZWxvY2l0eSA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5hdmVyYWdlVmVsb2NpdHkgPz8gMCxcclxuICAgICAgICAgICAgICBpc1Njcm9sbGluZyA9IHRoaXMuXyRzY3JvbGxpbmdUby5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgIHVzZURlYm91bmNlZFVwZGF0ZSA9IChkeW5hbWljU2l6ZSAmJiAhaXRlbVRyYW5zZm9ybSkgJiYgIShzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpICYmICFpdGVtc0NoYW5nZWQgJiYgaGFzVXNlckFjdGlvbiAmJiAhaXNTY3JvbGxpbmcgJiZcclxuICAgICAgICAgICAgICAgICh2ZWxvY2l0eSA+IDAgJiYgdmVsb2NpdHkgPCBNQVhfVkVMT0NJVFlfRk9SX1NDUk9MTF9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwxKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWRPcHRpbWl6YXRpb24pIHtcclxuICAgICAgICAgICAgICBpZiAodXNlRGVib3VuY2VkVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZXhlY3V0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnksIGlzSW5maW5pdHksIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kczogYm91bmRzISwgbGlzdEJvdW5kczogbGlzdEJvdW5kcyEsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgbWF4SXRlbVNpemUsIGNvbGxhcHNlZElkcywgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc3RpY2t5RW5hYmxlZCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGRpdmlkZXMsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbiwgYWxpZ25tZW50LCBwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQsIHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsIGNhY2hlVmVyc2lvbiwgdXNlckFjdGlvbjogaGFzVXNlckFjdGlvbixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VkVXBkYXRlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1Njcm9sbGluZykge1xyXG4gICAgICAgICAgICAgIHVwZGF0ZSh7XHJcbiAgICAgICAgICAgICAgICB0cmFja0J5LCBpc0luZmluaXR5LCBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCBib3VuZHM6IGJvdW5kcyEsIGxpc3RCb3VuZHM6IGxpc3RCb3VuZHMhLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICBtYXhJdGVtU2l6ZSwgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZGl2aWRlcywgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbiwgYWxpZ25tZW50LCBwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQsIHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsIGNhY2hlVmVyc2lvbiwgdXNlckFjdGlvbjogaGFzVXNlckFjdGlvbixcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxlciA9IHRoaXMuJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgdGFrZSgxKSxcclxuICAgICksXHJcbiAgICAgICRzY3JvbGxlclNjcm9sbCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGwpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJTY3JvbGxFbmQgPSAkc2Nyb2xsZXJDb21wb25lbnQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kc2Nyb2xsRW5kKSxcclxuICAgICAgKSxcclxuICAgICAgJHNjcm9sbGJhclNjcm9sbCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxiYXJTY3JvbGwpLFxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IHNjcm9sbEhhbmRsZXIgPSAodXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICBpZiAodXNlckFjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGJhclNjcm9sbC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJFbCAmJiAhIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgaGFzVXNlckFjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGhhc1VzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoISFzY3JvbGxlckVsICYmICEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KGZhbHNlLCB0aGlzLl9yZWFkeUZvclNob3csIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY3JvbGxIYW5kbGVyKHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGxFbmQucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICghIXNjcm9sbGVyRWwgJiYgISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgdGhpcy5fcmVhZHlGb3JTaG93LCB1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Nyb2xsSGFuZGxlcih1c2VyQWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxUbyA9IHRoaXMuJHNjcm9sbFRvLFxyXG4gICAgICAkc2Nyb2xsVG9FeGVjdXRvciA9IHRoaXMuJHNjcm9sbFRvRXhlY3V0b3I7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHNjcm9sbGVyLCAkdHJhY2tCeSwgJHNjcm9sbFRvXSkucGlwZShcclxuICAgICAgZmlsdGVyKChbc2Nyb2xsZXIsICwgZXZlbnRdKSA9PiAhIXNjcm9sbGVyICYmICEhZXZlbnQpLFxyXG4gICAgICBtYXAoKFtzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnRdKSA9PiAoeyBzY3JvbGxlcjogc2Nyb2xsZXIsIHRyYWNrQnksIGV2ZW50IH0pKSxcclxuICAgICAgc3dpdGNoTWFwKCh7IGV2ZW50IH0pID0+IHtcclxuICAgICAgICBjb25zdCBkID0gZXZlbnQ/LmRlbGF5ID8/IDA7XHJcbiAgICAgICAgaWYgKGQgPiAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoZXZlbnQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkZWxheShkKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihldmVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoZXZlbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxpbmdUby5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLm5leHQoZXZlbnQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFRvRXhlY3V0b3IucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcChldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCxcclxuICAgICAgICAgIHsgaWQsIGl0ZXJhdGlvbiA9IDAsIGJsZW5kaW5nID0gZmFsc2UsIGlzTGFzdEl0ZXJhdGlvbiA9IGZhbHNlLCBjYiB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgbmV4dEl0ZXJhdGlvbiA9IGl0ZXJhdGlvbiArIDEsIGZpbmlzaGVkID0gbmV4dEl0ZXJhdGlvbiA+PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGZpcmVVcGRhdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBpZiAoISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RhcnRTY3JvbGxUbygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBpZiAoISFpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZHluYW1pY1NpemUgPSB0aGlzLmR5bmFtaWNTaXplLCBpdGVtU2l6ZSA9IHRoaXMuYWN0dWFsSXRlbVNpemUsIG1pbkl0ZW1TaXplID0gdGhpcy5hY3R1YWxNaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICBtYXhJdGVtU2l6ZSA9IHRoaXMuYWN0dWFsTWF4SXRlbVNpemUsIHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuc25hcFNjcm9sbFRvRW5kO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSxcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXAgPSB0aGlzLml0ZW1Db25maWdNYXAsIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCxcclxuICAgICAgICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSwgbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5tYXhCdWZmZXJTaXplLCBpdGVtVHJhbnNmb3JtOiB0aGlzLml0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemU6IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW06IHRoaXMuc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduOiB0aGlzLnNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgc3RpY2t5RW5hYmxlZDogdGhpcy5zdGlja3lFbmFibGVkLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5lbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHNjcm9sbFNpemUgPSBzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQgP1xyXG4gICAgICAgICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxXaWR0aCkgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IChpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgeyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZSwgbGVmdExheW91dE9mZnNldCB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwge1xyXG4gICAgICAgICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgICAgICAgIH0pLCBkZWx0YTEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRvdGFsU2l6ZSA9IHRvdGFsU2l6ZSA8IHZpZXdwb3J0U2l6ZSA/IHZpZXdwb3J0U2l6ZSA6IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RhcnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC50b3RhbFNpemUgPSBub3JtYWxpemVkVG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSArIGRlbHRhMTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgbm9ybWFsaXplZFRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgICAgICAgICAgICBzY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlkIH0pO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbmFwVG9JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Cb3VuZHMgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCEhaXRlbUJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TaXplID0gaXNWZXJ0aWNhbCA/IGl0ZW1Cb3VuZHMuaGVpZ2h0IDogaXRlbUJvdW5kcy53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc25hcFRvSXRlbUFsaWduKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNuYXBUb0l0ZW1BbGlnbnMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgKz0gaXRlbVNpemUgKiAuNTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IHNjcm9sbFNpemUgPT09IGN1cnJlbnRTY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgIGlmICghbm90Q2hhbmdlZCAmJiBpdGVyYXRpb24gPCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLFxyXG4gICAgICAgICAgICAgICAgICBmaXJlVXBkYXRlLCBibGVuZGluZywgZm9yY2U6IHRydWUsIHNuYXA6IGZhbHNlLCBub3JtYWxpemU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7XHJcbiAgICAgICAgICAgICAgICAgIGlkLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIGJsZW5kaW5nLFxyXG4gICAgICAgICAgICAgICAgICBpc0xhc3RJdGVyYXRpb246IG5leHRJdGVyYXRpb24gPCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiXHJcbiAgICAgICAgICAgICAgICB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtW3RyYWNrQnldID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSA9IHRoaXMuYWN0dWFsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2Nyb2xsU2l6ZSA9IGluZGV4ICogaXRlbVNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5zbmFwVG9JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNuYXBUb0l0ZW1BbGlnbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBTbmFwVG9JdGVtQWxpZ25zLkNFTlRFUjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxTaXplICs9IGl0ZW1TaXplICogLjU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0sXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXAgPSB0aGlzLml0ZW1Db25maWdNYXAsIGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGNvbGxlY3Rpb246IGl0ZW1zLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemU6IHRoaXMubWF4QnVmZmVyU2l6ZSwgaXRlbVRyYW5zZm9ybTogdGhpcy5pdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemU6IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbTogdGhpcy5zbmFwVG9JdGVtLCBzbmFwVG9JdGVtQWxpZ246IHRoaXMuc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUVuYWJsZWQ6IHRoaXMuc3RpY2t5RW5hYmxlZCwgZnJvbUl0ZW1JZDogaWQsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IHRoaXMuZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCksXHJcbiAgICAgICAgICAgICAgICAgIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUsIGxlZnRMYXlvdXRPZmZzZXQgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVG90YWxTaXplID0gdGhpcy5pc0luZmluaXR5ID8gKHRvdGFsU2l6ZSArIHZpZXdwb3J0U2l6ZSkgOiB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRvdGFsU2l6ZSA9IGFjdHVhbFRvdGFsU2l6ZSA8IHZpZXdwb3J0U2l6ZSA/IHZpZXdwb3J0U2l6ZSA6IGFjdHVhbFRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdGFydExheW91dE9mZnNldCA9IGxlZnRMYXlvdXRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQudG90YWxTaXplID0gbm9ybWFsaXplZFRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgbm9ybWFsaXplZFRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBmaXJlVXBkYXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsIGJsZW5kaW5nLCBmb3JjZTogdHJ1ZSwgc25hcDogZmFsc2UsIG5vcm1hbGl6ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgY2IgfV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIGJsZW5kaW5nLCBjYiB9XSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbZmluaXNoZWQsIHBhcmFtc10pID0+IHtcclxuICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XHJcbiAgICAgICAgICB0aGlzLl8kc2Nyb2xsVG9FeGVjdXRvci5uZXh0KHBhcmFtcyBhcyBJU2Nyb2xsUGFyYW1zKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxpbmdUby5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uZmluaXNoZWRTY3JvbGxUbygpO1xyXG4gICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFBhcmFtcyA9IHBhcmFtcyBhcyBJU2Nyb2xsUGFyYW1zICYgeyBzY3JvbGxDYWxsZWQ6IGJvb2xlYW47IH07XHJcbiAgICAgICAgc2Nyb2xsUGFyYW1zPy5jYj8uKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWxheSgxMDApLFxyXG4gICAgICB0YXAoKFtmaW5pc2hlZF0pID0+IHtcclxuICAgICAgICBpZiAoZmluaXNoZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zbmFwSWZOZWVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRoaXMuJGl0ZW1SZW5kZXJlcjtcclxuXHJcbiAgICAkaXRlbVJlbmRlcmVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGJvdW5kcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICBjb25zdCBzaXplOiBJU2l6ZSA9IHsgd2lkdGg6IHZhbHVlIS53aWR0aCwgaGVpZ2h0OiB2YWx1ZSEuaGVpZ2h0IH07XHJcbiAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLmVtaXQob2JqZWN0QXNSZWFkb25seShzaXplKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR2aXJ0dWFsQ2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQob2JqZWN0QXNSZWFkb25seSh2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9IDA7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gfHwgKHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgICBpZiAoKHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHxcclxuICAgICAgICAgICAgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0ZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdJbml0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSB8fCB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UpICYmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMubmV4dCh2KTtcclxuICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2UuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRjb2xsYXBzaW5nTW9kZSwgJGl0ZW1zLCAkaXRlbUNvbmZpZ01hcCwgJHRyYWNrQnldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbY29sbGFwc2luZ01vZGUsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5XSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gaXNDb2xsYXBzZU1vZGUoY29sbGFwc2luZ01vZGUsIENvbGxhcHNpbmdNb2Rlcy5BQ0NPUkRJT04pO1xyXG4gICAgICAgIGlmIChpc0FjY29yZGlvbikge1xyXG4gICAgICAgICAgY29uc3QgYWxsR3JvdXBzOiBBcnJheTxJZD4gPSBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldLCBpZCA9IGl0ZW1bdHJhY2tCeV0sIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcD8uW2lkXT8uY29sbGFwc2FibGUgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFsbEdyb3Vwcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlIHx8IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSkgJiYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShhbGxHcm91cHMpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KGFsbEdyb3Vwcyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Db2xsYXBzZS5lbWl0KGNvcHlWYWx1ZUFzUmVhZG9ubHkoYWxsR3JvdXBzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZEl0ZW1JZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlZElkcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRkZXN0cm95LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZS5kaXNwb3NlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kdmlld0luaXQubmV4dCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BZnRlclJlc2l6ZSh1cGRhdGUgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyAmJiB1cGRhdGUpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCB1cGRhdGViYWxlID0gdGhpcy5fcmVhZHlGb3JTaG93O1xyXG4gICAgICAgIGlmICh1cGRhdGViYWxlKSB7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Nyb2xsZXIucmVmcmVzaCh1cGRhdGViYWxlLCB1cGRhdGViYWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0JvdW5kc09mRWxlbWVudHMoKSB7XHJcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fdHJhY2tCb3guY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk7XHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICBjb25zdCByZWFkeUZvclNob3cgPSB0aGlzLl9yZWFkeUZvclNob3csXHJcbiAgICAgICAgaXNTY3JvbGxpbmcgPSB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcyh0cnVlLCByZWFkeUZvclNob3cgJiYgIWlzU2Nyb2xsaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc25hcHBpbmdIYW5kbGVyKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsXHJcbiAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IE1hdGgucm91bmQoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA/PyAwIDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPz8gMCksXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbExlZnQgPz8gMCxcclxuICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gTWF0aC5yb3VuZChzY3JvbGxTaXplKTtcclxuICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyAmJiAhdGhpcy5faXNMb2FkaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXNTY3JvbGxFbmQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA+PSAobWF4U2Nyb2xsU2l6ZSAtIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB8fCAhc2Nyb2xsZXIuc2Nyb2xsYWJsZSB8fCB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICBpZiAoaXNTY3JvbGxFbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsU3RhcnQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA8PSBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoaXNTY3JvbGxTdGFydCk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gaXNTY3JvbGxTdGFydDtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICBjb25zdCBzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpLCBzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKCFzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGVtaXRTY3JvbGxFdmVudChpc1Njcm9sbEVuZDogYm9vbGVhbiA9IGZhbHNlLCB1cGRhdGU6IGJvb2xlYW4gPSB0cnVlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICBtYXhTY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxXaWR0aCksXHJcbiAgICAgICAgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH07XHJcbiAgICAgIGNvbnN0IGl0ZW1zUmFuZ2UgPSBmb3JtYXRBY3R1YWxEaXNwbGF5SXRlbXModGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXMsIHRoaXMuXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLCB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSwgaXNWZXJ0aWNhbCwgYm91bmRzKSxcclxuICAgICAgICBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxEaXJlY3Rpb24gPz8gMCwgY29udGFpbmVyOiBzY3JvbGxlckVsLFxyXG4gICAgICAgICAgbGlzdDogdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiB0aGlzLl90cmFja0JveC5kZWx0YU9mTmV3SXRlbXMsIGlzVmVydGljYWwsXHJcbiAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgaXRlbXNSYW5nZSxcclxuICAgICAgICAgIGlzRW5kOiAhc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsYWJsZSB8fCB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCB8fCAoTWF0aC5yb3VuZChzY3JvbGxTaXplKSA9PT0gTWF0aC5yb3VuZChtYXhTY3JvbGxTaXplKSksXHJcbiAgICAgICAgICB1c2VyQWN0aW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU2Nyb2xsRW5kKSB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5zbmFwcGluZ01ldGhvZDtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb25lU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NpbmdsZVNlbGVjdGlvbihtPzogU2VsZWN0aW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5zZWxlY3RpbmdNb2RlO1xyXG4gICAgcmV0dXJuIGlzU2VsZWN0TW9kZShtb2RlLCBTZWxlY3RpbmdNb2Rlcy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLk1VTFRJX1NFTEVDVCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTm9uZUNvbGxhcHNlKG0/OiBDb2xsYXBzaW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsYXBzaW5nTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxhcHNlTW9kZShtb2RlLCBDb2xsYXBzaW5nTW9kZXMuTk9ORSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTXVsdGlwbGVDb2xsYXBzZShtPzogQ29sbGFwc2luZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGFwc2luZ01vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsYXBzZU1vZGUobW9kZSwgQ29sbGFwc2luZ01vZGVzLk1VTFRJX0NPTExBUFNFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNBY2NvcmRpb25Db2xsYXBzZShtPzogQ29sbGFwc2luZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGFwc2luZ01vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsYXBzZU1vZGUobW9kZSwgQ29sbGFwc2luZ01vZGVzLkFDQ09SRElPTik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc0xhenkobT86IENvbGxlY3Rpb25Nb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLmNvbGxlY3Rpb25Nb2RlO1xyXG4gICAgcmV0dXJuIGlzQ29sbGVjdGlvbk1vZGUobW9kZSwgQ29sbGVjdGlvbk1vZGVzLkxBWlkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zdGlja3lFbmFibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMubGVuZ3RoIDwgTUFYX1JFR1VMQVJfU05BUEVEX0NPTVBPTkVOVFMgJiYgISF0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPCBNQVhfUkVHVUxBUl9TTkFQRURfQ09NUE9ORU5UUykge1xyXG4gICAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5wdXNoKGNvbXApO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzO1xyXG4gICAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgbGlzdENvbnRhaW5lclJlZiA9IHRoaXMuX2xpc3RDb250YWluZXJSZWY7XHJcblxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gZGlzcGxheUl0ZW1zLmxlbmd0aCwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIGlmICghIWxpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgZG9NYXA6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIGZvciAobGV0IGwgPSBjb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnRzW2ldO1xyXG4gICAgICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbS5pbnN0YW5jZS5pZDtcclxuICAgICAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gbGlzdENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICBjb25zdCBpZCA9IGNvbXAuaW5zdGFuY2UuaWQ7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZW5kZXJlciA9IHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpLCBwcm9wID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsXHJcbiAgICAgIHNpemUgPSB0b3RhbFNpemU7XHJcbiAgICBpZiAoISFsICYmIHBhcnNlSW50KGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSkgIT09IHNpemUpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW3Byb3BdID0gYCR7c2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIGFuIGxpc3QgaXRlbSBieSBhIGdpdmVuIGlkLlxyXG4gICAqL1xyXG4gIGZvY3VzKGlkOiBJZCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLk5PTkUpIHtcclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgdGhpcy5fc2VydmljZS5mb2N1c0J5SWQoaWQsIGFsaWduLCB0aGlzLnNjcm9sbEJlaGF2aW9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBgaWRgIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsZWQgYXJlYS5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IG9wdGlvbnM/LmJsZW5kaW5nID8/IGZhbHNlLFxyXG4gICAgICBmb2N1c2VkID0gb3B0aW9ucz8uZm9jdXNlZCA/PyB0cnVlLFxyXG4gICAgICBkZWxheSA9IG9wdGlvbnM/LmRlbGF5ID8/IDAsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICBpZiAoIXRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlICYmICF0aGlzLmlzSW5maW5pdHkpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgZGVsYXksIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvU3RhcnQoY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsLCBvcHRpb25zOiBJU2Nyb2xsT3B0aW9ucyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IHRoaXMuaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQ7XHJcbiAgICAgIGlmIChzY3JvbGxTaXplID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNjcm9sbGVyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmcgPSBvcHRpb25zPy5ibGVuZGluZyA/PyBmYWxzZSxcclxuICAgICAgZm9jdXNlZCA9IG9wdGlvbnM/LmZvY3VzZWQgPz8gdHJ1ZSxcclxuICAgICAgZGVsYXkgPSBvcHRpb25zPy5kZWxheSA/PyAwLFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCksIGZpcnN0SXRlbSA9IGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1swXSA/PyBudWxsIDogbnVsbCwgaWQgPSBmaXJzdEl0ZW0/Llt0cmFja0J5XSA/PyBudWxsLFxyXG4gICAgICBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgaWYgKCEhZmlyc3RJdGVtKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgZGVsYXksIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBUaGUgc2Nyb2xsVG9FbmRJdGVtIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNjcm9sbFRvRW5kIG1ldGhvZC5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZEl0ZW0oY2I/OiAoKSA9PiB2b2lkLCBvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRocm93IEVycm9yKCdUaGUgc2Nyb2xsVG9FbmRJdGVtIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNjcm9sbFRvRW5kIG1ldGhvZC4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBzaXplLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LFxyXG4gICAgICAgIG1heFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsVG9wO1xyXG4gICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gbWF4U2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiZWhhdmlvciA9IG9wdGlvbnM/LmJlaGF2aW9yID8/IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gb3B0aW9ucz8uYmxlbmRpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGZvY3VzZWQgPSBvcHRpb25zPy5mb2N1c2VkID8/IHRydWUsXHJcbiAgICAgIGRlbGF5ID0gb3B0aW9ucz8uZGVsYXkgPz8gMCxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXSwgaWQgPSBsYXRJdGVtPy5bdHJhY2tCeV0gPz8gbnVsbCxcclxuICAgICAgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGlmIChsYXRJdGVtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICBpZCwgYmVoYXZpb3IsIGJsZW5kaW5nLCBkZWxheSwgaXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24sIGlzTGFzdEl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uID09PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9GaW5hbGl6ZShpZDogSWQsIGZvY3VzZWQ6IGJvb2xlYW4sIGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsKSB7XHJcbiAgICBpZiAoZm9jdXNlZCkge1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UuZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkKTtcclxuICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzKGVsLCBGb2N1c0FsaWdubWVudHMuTk9ORSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2I/LigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNsZWFudXAoKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuICAgIHRoaXMudHJhY2tpbmcoKTtcclxuICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBjbGVhcmluZyB0aGUgY2FjaGUuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNhY2hlQ2xlYW4oKSB7XHJcbiAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmR5bmFtaWNTaXplKSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmNhY2hlQ2xlYW4oKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZXJlbmRlckNvbnRhaW5lciA9IHRoaXMuX3ByZXJlbmRlcjtcclxuICAgIGlmICghIXByZXJlbmRlckNvbnRhaW5lcikge1xyXG4gICAgICBwcmVyZW5kZXJDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgcHJlcmVuZGVyQ29udGFpbmVyLm9mZigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMubmV4dChbXSk7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fJHRvdGFsU2l6ZS5uZXh0KDApO1xyXG4gICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dCgwKTtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBUaGUgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcHJldmVudFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKi9cclxuICBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCgpIHtcclxuICAgIHRocm93IEVycm9yKCdUaGUgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcHJldmVudFNuYXBwaW5nIG1ldGhvZC4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnRzIHRoZSBsaXN0IGZyb20gc25hcHBpbmcgdG8gaXRzIHN0YXJ0IG9yIGVuZCBlZGdlLlxyXG4gICAqL1xyXG4gIHByZXZlbnRTbmFwcGluZygpIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuXyRkZXN0cm95Lm5leHQoKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVJZCA9IHRoaXMuX3VwZGF0ZUlkO1xyXG4gICAgaWYgKHVwZGF0ZUlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlSWQpO1xyXG4gICAgICB0aGlzLl91cGRhdGVJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc2VydmljZSkge1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgd2hpbGUgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIiBjbGFzcz1cIm5ndmxfX3NjcmVlbi1yZWFkZXJcIj5cclxuICB7eyAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSB8IGFzeW5jIH19XHJcbjwvZGl2PlxyXG5cclxuPG5nLXByZXJlbmRlci1jb250YWluZXIgI3ByZXJlbmRlciBbYm91bmRzXT1cIigkYm91bmRzIHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZHluYW1pY109XCIoJGR5bmFtaWNTaXplIHwgYXN5bmMpIVwiIFtkaXZpZGVzXT1cIigkZGl2aWRlcyB8IGFzeW5jKSFcIiBbaXNWZXJ0aWNhbF09XCIoJGlzVmVydGljYWwgfCBhc3luYykhXCJcclxuICBbaXRlbVNpemVdPVwiKCRhY3R1YWxJdGVtU2l6ZSB8IGFzeW5jKSFcIiBbdHJhY2tCeV09XCIoJHRyYWNrQnkgfCBhc3luYykhXCIgW2l0ZW1SZW5kZXJlcl09XCIoJGl0ZW1SZW5kZXJlciB8IGFzeW5jKSFcIlxyXG4gIFtzdGFydE9mZnNldF09XCIoJHN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtlbmRPZmZzZXRdPVwiKCRlbmRPZmZzZXQgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyRW5hYmxlZF09XCIoc2Nyb2xsZXIuJHNjcm9sbGJhclNob3cgfCBhc3luYykhXCJcclxuICBbZW5hYmxlZF09XCIoJHByZXJlbmRlckVuYWJsZWQgfCBhc3luYykhXCI+PC9uZy1wcmVyZW5kZXItY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIigkc3RpY2t5RW5hYmxlZCB8IGFzeW5jKSFcIj5cclxuICA8ZGl2IGxvY2FsZVNlbnNpdGl2ZSBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiAjc25hcHBlZENvbnRhaW5lciBjbGFzcz1cIm5ndmxfX3NuYXBwZWQtY29udGFpbmVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIigkY2xhc3NlcyB8IGFzeW5jKVwiPlxyXG4gICAgPGRpdiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAjc25hcFJlbmRlcmVyQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXNjcm9sbGVyICNzY3JvbGxlciBjbGFzcz1cIm5ndmxfX2xpc3Qtc2Nyb2xsZXJcIiBbY2xhc3Nlc109XCIoJGNsYXNzZXMgfCBhc3luYykhXCJcclxuICBbc3RhcnRPZmZzZXRdPVwiKCRzdGFydE9mZnNldCB8IGFzeW5jKSFcIiBbZW5kT2Zmc2V0XT1cIigkZW5kT2Zmc2V0IHwgYXN5bmMpIVwiXHJcbiAgW2FsaWdubWVudFN0YXJ0T2Zmc2V0XT1cIigkYWxpZ25tZW50U2Nyb2xsU3RhcnRPZmZzZXQgfCBhc3luYykhXCJcclxuICBbYWxpZ25tZW50RW5kT2Zmc2V0XT1cIigkYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0IHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcl09XCIoJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgfCBhc3luYykhXCIgW2lzSW5maW5pdHldPVwiKCRpc0luZmluaXR5IHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhclRoaWNrbmVzc109XCIoJHNjcm9sbGJhclRoaWNrbmVzcyB8IGFzeW5jKSFcIiBbc2Nyb2xsYmFyVGh1bWJQYXJhbXNdPVwiKCRzY3JvbGxiYXJUaHVtYlBhcmFtcyB8IGFzeW5jKSFcIlxyXG4gIFthbmltYXRpb25QYXJhbXNdPVwiKCRhbmltYXRpb25QYXJhbXMgfCBhc3luYykhXCIgW2ZvY3VzZWRFbGVtZW50XT1cIigkZm9jdXNlZEVsZW1lbnQgfCBhc3luYykhXCJcclxuICBbbG9hZGluZ109XCIoJGxvYWRpbmcgfCBhc3luYykhXCIgW292ZXJzY3JvbGxFbmFibGVkXT1cIigkb3ZlcnNjcm9sbEVuYWJsZWQgfCBhc3luYykhXCJcclxuICBbc25hcHBpbmdEaXN0YW5jZV09XCIoJHNuYXBwaW5nRGlzdGFuY2UgfCBhc3luYykhXCIgW292ZXJsYXBwaW5nU2Nyb2xsYmFyXT1cIigkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyRW5hYmxlZF09XCIoJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQgfCBhc3luYykhXCIgW3Njcm9sbGJhckludGVyYWN0aXZlXT1cIigkc2Nyb2xsYmFySW50ZXJhY3RpdmUgfCBhc3luYykhXCJcclxuICBbc25hcFRvSXRlbV09XCIoJHNuYXBUb0l0ZW0gfCBhc3luYykhXCIgW3NuYXBUb0l0ZW1BbGlnbl09XCIoJHNuYXBUb0l0ZW1BbGlnbiB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJNaW5TaXplXT1cIigkc2Nyb2xsYmFyTWluU2l6ZSB8IGFzeW5jKSFcIiBbc2Nyb2xsQmVoYXZpb3JdPVwiKCRzY3JvbGxCZWhhdmlvciB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxpbmdTZXR0aW5nc109XCIoJHNjcm9sbGluZ1NldHRpbmdzIHwgYXN5bmMpIVwiIFtzY3JvbGxpbmdPbmVCeU9uZV09XCIoJHNjcm9sbGluZ09uZUJ5T25lIHwgYXN5bmMpIVwiXHJcbiAgW21vdGlvbkJsdXJdPVwiKCRtb3Rpb25CbHVyIHwgYXN5bmMpIVwiIFttYXhNb3Rpb25CbHVyXT1cIigkbWF4TW90aW9uQmx1ciB8IGFzeW5jKSFcIlxyXG4gIFttb3Rpb25CbHVyRW5hYmxlZF09XCIoJG1vdGlvbkJsdXJFbmFibGVkIHwgYXN5bmMpIVwiPlxyXG4gIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9uZy1zY3JvbGxlcj4iXX0=
|
|
3260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUM5RSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUVqRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQ25ELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNyRyxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFDL0ksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFDN0gsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUseUJB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O2dCQW9ERixhQUFhO3NCQURoQixLQUFLO2dCQStCRixRQUFRO3NCQURYLEtBQUs7Z0JBNkJGLFdBQVc7c0JBRGQsS0FBSztnQkE2QkYsV0FBVztzQkFEZCxLQUFLO2dCQThCRixXQUFXO3NCQURkLEtBQUs7Z0JBNEJGLFNBQVM7c0JBRFosS0FBSztnQkE0QkYsY0FBYztzQkFEakIsS0FBSztnQkE0QkYsVUFBVTtzQkFEYixLQUFLO2dCQW9DRixhQUFhO3NCQURoQixLQUFLO2dCQTZCRixjQUFjO3NCQURqQixLQUFLO2dCQWdDRixjQUFjO3NCQURqQixLQUFLO2dCQWlCRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBd0JGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNEJGLE9BQU87c0JBRFYsS0FBSztnQkErQlEsbUJBQW1CO3NCQURoQyxLQUFLO2dCQWdDRixXQUFXO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LFxyXG4gIE9uRGVzdHJveSwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLFxyXG4gIE9ic2VydmFibGUsXHJcbiAgb2YsIHNraXAsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0lOU1RBTlQsIENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgQ0xBU1NfTElTVF9WRVJUSUNBTCwgREVGQVVMVF9ESVJFQ1RJT04sIERFRkFVTFRfRFlOQU1JQ19TSVpFLFxyXG4gIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OLCBERUZBVUxUX0lURU1fU0laRSwgREVGQVVMVF9CVUZGRVJfU0laRSwgREVGQVVMVF9MSVNUX1NJWkUsIERFRkFVTFRfU1RJQ0tZX0VOQUJMRUQsIERFRkFVTFRfU05BUFBJTkdfTUVUSE9ELFxyXG4gIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBGT0NVUywgVE9QX1BST1BfTkFNRSwgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSwgV0lEVEhfUFJPUF9OQU1FLFxyXG4gIERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFLCBERUZBVUxUX1NFTEVDVElOR19NT0RFUywgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEVDVElPTl9NT0RFLFxyXG4gIERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFLCBERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQsIERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQsIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcsXHJcbiAgTU9VU0VfRE9XTiwgVE9VQ0hfU1RBUlQsIERFRkFVTFRfTEFOR19URVhUX0RJUiwgREVGQVVMVF9DTElDS19ESVNUQU5DRSwgREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTiwgREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTLFxyXG4gIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFLCBLRVlfRE9XTiwgQkVIQVZJT1JfQVVUTywgREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCwgREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUsIERFRkFVTFRfT1ZFUlNDUk9MTF9FTkFCTEVELFxyXG4gIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUywgREVGQVVMVF9TQ1JPTExfQkVIQVZJT1IsIERFRkFVTFRfU05BUF9TQ1JPTExUT19TVEFSVCwgRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04sIE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTLFxyXG4gIFBSRVBBUkVfSVRFUkFUSU9OUywgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RILCBST0xFX0xJU1RfQk9YLCBST0xFX0xJU1QsIEtFWV9UQUIsIE1BWF9WRUxPQ0lUWV9GT1JfU0NST0xMX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEsXHJcbiAgUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9VUERBVEVfSVRFTVMsIFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLCBQUkVQQVJFX0lURVJBVElPTlNfRk9SX0NPTExBUFNFX0lURU1TLFxyXG4gIFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfQ09MTEFQU0VfSVRFTVMsIE1BWF9OVU1CRVJTX09GX1NLSVBTX0ZPUl9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwxLCBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUyxcclxuICBERUZBVUxUX1NOQVBfVE9fSVRFTSwgREVGQVVMVF9TTkFQX1RPX0lURU1fQUxJR04sIFZJRVdQT1JULCBERUZBVUxUX01PVElPTl9CTFVSLCBERUZBVUxUX01BWF9NT1RJT05fQkxVUiwgREVGQVVMVF9TQ1JPTExJTkdfT05FX0JZX09ORSxcclxuICBERUZBVUxUX01PVElPTl9CTFVSX0VOQUJMRUQsIERFRkFVTFRfRElWSURFUywgREVGQVVMVF9TTkFQUElOR19ESVNUQU5DRSwgREVGQVVMVF9NQVhfSVRFTV9TSVpFLCBERUZBVUxUX01JTl9JVEVNX1NJWkUsXHJcbiAgREVGQVVMVF9BTElHTk1FTlQsIERFRkFVTFRfQ09MTEFQU0lOR19NT0RFUywgREVGQVVMVF9TUFJFQURJTkdfTU9ERSwgREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkcsXHJcbiAgREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVIsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7XHJcbiAgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxufSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgSVNjcm9sbEV2ZW50LCBJU2Nyb2xsT3B0aW9ucywgSUFuaW1hdGlvblBhcmFtcywgSVNpemUsIElSZW5kZXJTdGFiaWxpemVyT3B0aW9ucywgSVNjcm9sbGluZ1NldHRpbmdzLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWxpZ25tZW50LCBBcml0aG1ldGljRXhwcmVzc2lvbiwgRm9jdXNBbGlnbm1lbnQsIElkLCBJdGVtVHJhbnNmb3JtLCBTbmFwcGluZ0Rpc3RhbmNlLCBDb2xsZWN0aW9uTW9kZSwgRGlyZWN0aW9uLCBTZWxlY3RpbmdNb2RlLFxyXG4gIFNuYXBwaW5nTWV0aG9kLCBTbmFwVG9JdGVtQWxpZ24sIFRleHREaXJlY3Rpb24sIENvbGxhcHNpbmdNb2RlLFxyXG4gIFNwcmVhZGluZ01vZGUsXHJcbn0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQWxpZ25tZW50cywgQ29sbGVjdGlvbk1vZGVzLCBEaXJlY3Rpb25zLCBGb2N1c0FsaWdubWVudHMsIFNlbGVjdGluZ01vZGVzLCBTbmFwcGluZ01ldGhvZHMsIFNuYXBUb0l0ZW1BbGlnbnMsIFNwcmVhZGluZ01vZGVzLCBUZXh0RGlyZWN0aW9ucyxcclxufSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgZGVib3VuY2UsIFNjcm9sbEV2ZW50LCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgVHJhY2tCb3ggfSBmcm9tICcuL2NvcmUvdHJhY2stYm94JztcclxuaW1wb3J0IHsgaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkIH0gZnJvbSAnLi91dGlscy9zbmFwcGluZy1tZXRob2QnO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9iYXNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50JDEgfSBmcm9tICcuL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0RpcmVjdGlvbiB9IGZyb20gJy4vdXRpbHMvaXMtZGlyZWN0aW9uJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdFNlcnZpY2UgfSBmcm9tICcuL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNTZWxlY3RNb2RlIH0gZnJvbSAnLi91dGlscy9pcy1zZWxlY3QtbW9kZSc7XHJcbmltcG9ydCB7IGlzQ29sbGFwc2VNb2RlIH0gZnJvbSAnLi91dGlscy9pcy1jb2xsYXBzZS1tb2RlJztcclxuaW1wb3J0IHsgU2VsZWN0aW5nTW9kZXNUeXBlcyB9IGZyb20gJy4vZW51bXMvc2VsZWN0aW5nLW1vZGVzLXR5cGVzJztcclxuaW1wb3J0IHsgQ01hcCB9IGZyb20gJy4vdXRpbHMvY21hcCc7XHJcbmltcG9ydCB7XHJcbiAgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVCb29sZWFuLCB2YWxpZGF0ZUZsb2F0LCB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludCwgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nLFxyXG59IGZyb20gJy4vdXRpbHMvdmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IGNvcHlWYWx1ZUFzUmVhZG9ubHksIG9iamVjdEFzUmVhZG9ubHkgfSBmcm9tICcuL3V0aWxzL29iamVjdCc7XHJcbmltcG9ydCB7IGlzQ29sbGVjdGlvbk1vZGUgfSBmcm9tICcuL3V0aWxzL2lzLWNvbGxlY3Rpb24tbW9kZSc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctc2Nyb2xsZXIvbmctc2Nyb2xsZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVNjcm9sbFRvUGFyYW1zIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3JztcclxuaW1wb3J0IHsgTmdQcmVyZW5kZXJDb250YWluZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctcHJlcmVuZGVyLWNvbnRhaW5lci9uZy1wcmVyZW5kZXItY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElTY3JvbGxQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBmb3JtYXRBY3R1YWxEaXNwbGF5SXRlbXMsIGZvcm1hdFNjcmVlblJlYWRlck1lc3NhZ2UgfSBmcm9tICcuL3V0aWxzL3NjcmVlbi1yZWFkZXItZm9ybWF0dGVyJztcclxuaW1wb3J0IHsgdmFsaWRhdGVJZCwgdmFsaWRhdGVJdGVyYXRpb24sIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IsIHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uIH0gZnJvbSAnLi91dGlscy9saXN0LXZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBFVkVOVF9LRVlfRE9XTiwgS0VZX0FSUl9ET1dOLCBLRVlfQVJSX0xFRlQsIEtFWV9BUlJfUklHSFQsIEtFWV9BUlJfVVAgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL2NvbnN0JztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdFB1YmxpY1NlcnZpY2UgfSBmcm9tICcuL25nLXZpcnR1YWwtbGlzdC1wdWJsaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IGlzUGVyY2VudGFnZVZhbHVlIH0gZnJvbSAnLi91dGlscy9pcy1wZXJzZW50YWdlLXZhbHVlJztcclxuaW1wb3J0IHsgcGFyc2VBcml0aG1ldGljRXhwcmVzc2lvbiB9IGZyb20gJy4vdXRpbHMvcGFyc2UtYXJpdGhtZXRpYy1leHByZXNzaW9uJztcclxuaW1wb3J0IHsgbm9ybWFsaXplQ29sbGVjdGlvbiB9IGZyb20gJy4vdXRpbHMvbm9ybWFsaXplLWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb2xsYXBzaW5nTW9kZXMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgaXNTcHJlYWRpbmdNb2RlIH0gZnJvbSAnLi91dGlscy9pcy1zcHJlYWRpbmctbW9kZSc7XHJcbmltcG9ydCB7IElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGdldFNjcm9sbFN0YXRlVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMvZ2V0LXNjcm9sbC1zdGF0ZS12ZXJzaW9uJztcclxuaW1wb3J0IHsgRGlzcG9zYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFZpcnR1YWwgbGlzdCBjb21wb25lbnQuXHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnc3R5bGUnOiAncG9zaXRpb246IHJlbGF0aXZlOydcclxuICB9LFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcclxuICBwcm92aWRlcnM6IFtOZ1ZpcnR1YWxMaXN0U2VydmljZSwgTmdWaXJ0dWFsTGlzdFB1YmxpY1NlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdENvbXBvbmVudCBleHRlbmRzIERpc3Bvc2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIF9fbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZSA9IGluamVjdChOZ1ZpcnR1YWxMaXN0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ByZXJlbmRlcicsIHsgcmVhZDogTmdQcmVyZW5kZXJDb250YWluZXIgfSlcclxuICBwcml2YXRlIF9wcmVyZW5kZXI6IE5nUHJlcmVuZGVyQ29udGFpbmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdyZW5kZXJlcnNDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIF9saXN0Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzbmFwUmVuZGVyZXJDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIF9zbmFwQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzY3JvbGxlcicsIHsgcmVhZDogTmdTY3JvbGxlckNvbXBvbmVudCB9KVxyXG4gIHByaXZhdGUgX3Njcm9sbGVyQ29tcG9uZW50OiBOZ1Njcm9sbGVyQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxpc3QgPSB0aGlzLl8kbGlzdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgYmVlbiBzY3JvbGxlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBjb21wbGV0ZWQgc2Nyb2xsaW5nLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHZpZXdwb3J0IHNpemUgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblZpZXdwb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU2l6ZT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCB0aGUgY29tcG9uZW50IElEIHdoZW4gYW4gZWxlbWVudCBjcm9zc2VzIHRoZSBhbGlnbm1lbnQgbGluZSBzcGVjaWZpZWQgYnkgdGhlIHNuYXBUb0l0ZW1BbGlnbiBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNuYXBJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxJZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25JdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IG51bGw+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gZWxlbWVudHMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4gfCBJZCB8IG51bGw+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gZWxlbWVudHMgYXJlIGNvbGxhcHNlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBzdGFydC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxSZWFjaEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNob3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkc2hvdyA9IHRoaXMuXyRzaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkaW5pdGlhbGl6ZWQgPSB0aGlzLl8kaW5pdGlhbGl6ZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGlja25lc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhclRoaWNrbmVzc1RyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaGlja25lc3NcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsYmFyIHRoaWNrbmVzcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGlja25lc3ModjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGhpY2tuZXNzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJUaGlja25lc3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhck1pblNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJNaW5TaXplVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhck1pblNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNaW5pbXVtIHNjcm9sbGJhciBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhck1pblNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhck1pblNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJNaW5TaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKSBhcyBudW1iZXI7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGh1bWJSZW5kZXJlclRyYW5zZm9ybSA9ICh2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhclRodW1iUmVuZGVyZXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgLicpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGJhciBjdXN0b21pemF0aW9uIHRlbXBsYXRlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGh1bWJSZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaHVtYlBhcmFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbD4oe30pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhclRodW1iUGFyYW1zVHJhbnNmb3JtID0gKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaHVtYlBhcmFtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgc2Nyb2xsYmFyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhclRodW1iUGFyYW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IHtcclxuICAgIHRyYW5zZm9ybTogKHY6IGJvb2xlYW4pID0+IHtcclxuICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibG9hZGluZ1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdjtcclxuICAgIH0sXHJcbiAgfSBhcyBhbnk7XHJcblxyXG4gIHByaXZhdGUgXyRsb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2FkaW5nID0gdGhpcy5fJGxvYWRpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmdUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsb2FkaW5nXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHNjcm9sbEJhciBnb2VzIGludG8gbG9hZGluZyBzdGF0ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbG9hZGluZ1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbG9hZGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpIGFzIGJvb2xlYW47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHdhaXRGb3JQcmVwYXJhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICR3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF93YWl0Rm9yUHJlcGFyYXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIndhaXRGb3JQcmVwYXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0IHdpbGwgd2FpdCB1bnRpbCB0aGUgbGlzdCBpdGVtcyBhcmUgZnVsbHkgcHJlcGFyZWQgYmVmb3JlIGRpc3BsYXlpbmcgdGhlbS4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB3YWl0Rm9yUHJlcGFyYXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3dhaXRGb3JQcmVwYXJhdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgd2FpdEZvclByZXBhcmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5nZXRWYWx1ZSgpIGFzIGJvb2xlYW47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNsaWNrRGlzdGFuY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9DTElDS19ESVNUQU5DRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjbGlja0Rpc3RhbmNlID0gdGhpcy5fJGNsaWNrRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY2xpY2tEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gc2Nyb2xsIGRpc3RhbmNlIGF0IHdoaWNoIGEgY2xpY2sgZXZlbnQgaXMgdHJpZ2dlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsaWNrRGlzdGFuY2UodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjbGlja0Rpc3RhbmNlKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKSBhcyBudW1iZXI7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RDb2xsZWN0aW9uPihbXSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtcyA9IHRoaXMuXyRpdGVtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KGl0ZW0sIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtICYmICEodmFsaWRhdGVGbG9hdChpdGVtPy5bdHJhY2tCeV0gYXMgbnVtYmVyLCB0cnVlKSB8fCB2YWxpZGF0ZVN0cmluZyhpdGVtPy5bdHJhY2tCeV0gYXMgc3RyaW5nLCB0cnVlLCB0cnVlKSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYElWaXJ0dWFsTGlzdENvbGxlY3Rpb25gIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRpdGVtcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgYXMgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJZHNUcmFuc2Zvcm0gPSAodjogQXJyYXk8SWQ+IHwgSWQgfCBudWxsKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUFycmF5KHYgYXMgYW55LCB0cnVlLCB0cnVlKSB8fCB2YWxpZGF0ZVN0cmluZyh2IGFzIGFueSwgdHJ1ZSwgdHJ1ZSkgfHwgdmFsaWRhdGVGbG9hdCh2IGFzIGFueSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYgJiYgQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpdGVtIGFzIGFueSkgfHwgdmFsaWRhdGVGbG9hdChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0ZWRJZHNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBBcnJheTxJZD4gfCBJZGAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gdGhpcy5faXNNdWx0aVNlbGVjdGlvbiA/IFtdIDogbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGVkSWRzKHY6IEFycmF5PElkPiB8IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2VsZWN0ZWRJZHNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZGVmYXVsdEl0ZW1WYWx1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0SXRlbSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGVmYXVsdEl0ZW1WYWx1ZSA9IHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWZhdWx0SXRlbVZhbHVlKHY6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUubmV4dCh2KTtcclxuICB9O1xyXG4gIGdldCBkZWZhdWx0SXRlbVZhbHVlKCkgeyByZXR1cm4gdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNlZElkcyA9IHRoaXMuXyRjb2xsYXBzZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxhcHNlZElkc1RyYW5zZm9ybSA9ICh2OiBBcnJheTxJZD4pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiBhcyBhbnksIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2ICYmIEFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpXTtcclxuICAgICAgICAgIHZhbGlkID0gdmFsaWRhdGVTdHJpbmcoaXRlbSBhcyBhbnkpIHx8IHZhbGlkYXRlRmxvYXQoaXRlbSBhcyBhbnkpO1xyXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNvbGxhcHNlZElkc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEFycmF5PElkPmAuJyk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbGxhcHNlZCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzZWRJZHModjogQXJyYXk8SWQ+KSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGFwc2VkSWRzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdEJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNlbGVjdEJ5Q2xpY2sgPSB0aGlzLl8kc2VsZWN0QnlDbGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0QnlDbGlja1RyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdEJ5Q2xpY2tcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYGZhbHNlYCwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGNvbmZpZy5hcGkgbWV0aG9kIHBhc3NlZCB0byB0aGUgdGVtcGxhdGU7IFxyXG4gICAqIGlmIGB0cnVlYCwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RCeUNsaWNrKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2VsZWN0QnlDbGljay5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2VsZWN0QnlDbGlja1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0QnlDbGljay5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdEJ5Q2xpY2soKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0QnlDbGljay5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZUJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0spO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGFwc2VCeUNsaWNrID0gdGhpcy5fJGNvbGxhcHNlQnlDbGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VCeUNsaWNrVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VCeUNsaWNrXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYGZhbHNlYCwgdGhlIGVsZW1lbnQgaXMgY29sbGFwc2VkIHVzaW5nIHRoZSBjb25maWcuY29sbGFwc2UgbWV0aG9kIHBhc3NlZCB0byB0aGUgdGVtcGxhdGU7IFxyXG4gICAqIGlmIGB0cnVlYCwgdGhlIGVsZW1lbnQgaXMgY29sbGFwc2VkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sbGFwc2VCeUNsaWNrKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzZUJ5Q2xpY2tUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNlQnlDbGljay5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxhcHNlQnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFVzZSB0aGUgYHN0aWNreUVuYWJsZWRgIHByb3BlcnR5IGluc3RlYWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcCh2OiBib29sZWFuKSB7XHJcbiAgICB0aHJvdyBFcnJvcihgUHJvcGVydHkgc25hcCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIFxcYHN0aWNreUVuYWJsZWRcXGAgcHJvcGVydHkgaW5zdGVhZC5gKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF8kc3RpY2t5RW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TVElDS1lfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzdGlja3lFbmFibGVkID0gdGhpcy5fJHN0aWNreUVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3N0aWNreUVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzdGlja3lFbmFibGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NUSUNLWV9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW1zIHdpdGggdGhlIGdpdmVuIGBzdGlja3lgIGluIGBpdGVtQ29uZmlnTWFwYCB3aWxsIHN0aWNrIHRvIHRoZSBlZGdlcy4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzdGlja3lFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc3RpY2t5RW5hYmxlZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc3RpY2t5RW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc3RpY2t5RW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHN0aWNreUVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl8kc3RpY2t5RW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQgPSB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0VHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VUO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgb2Zmc2V0IHZhbHVlOyBpZiB0aGUgc2Nyb2xsIGFyZWEgdmFsdWUgaXMgZXhjZWVkZWQsIHRoZSBzY3JvbGwgYW5pbWF0aW9uIHdpbGwgYmUgZGlzYWJsZWQuIERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJpdGhtZXRpY0V4cHJlc3Npb24+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbFN0YXJ0T2Zmc2V0VHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYsIHRydWUpIHx8IGlzUGVyY2VudGFnZVZhbHVlKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsU3RhcnRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzY3JvbGwgc3RhcnQgb2Zmc2V0IHZhbHVlLiBDYW4gYmUgc3BlY2lmaWVkIGluIGFic29sdXRlIG9yIHBlcmNlbnRhZ2UgdmFsdWVzLlxyXG4gICAqIFN1cHBvcnRzIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgb2YgYWRkaXRpb24gYDUwJSArIDI1YCBvciBzdWJ0cmFjdGlvbiBgNTAlIC0gMjVgLiBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KHY6IEFyaXRobWV0aWNFeHByZXNzaW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSh2IGFzIGFueSk7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsU3RhcnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsRW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcml0aG1ldGljRXhwcmVzc2lvbj4oMCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxFbmRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodiwgdHJ1ZSkgfHwgaXNQZXJjZW50YWdlVmFsdWUodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxFbmRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzY3JvbGwgZW5kIG9mZnNldCB2YWx1ZS4gQ2FuIGJlIHNwZWNpZmllZCBpbiBhYnNvbHV0ZSBvciBwZXJjZW50YWdlIHZhbHVlcy5cclxuICAgKiBTdXBwb3J0cyBhcml0aG1ldGljIGV4cHJlc3Npb25zIG9mIGFkZGl0aW9uIGA1MCUgKyAyNWAgb3Igc3VidHJhY3Rpb24gYDUwJSAtIDI1YC4gRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxFbmRPZmZzZXQodjogQXJpdGhtZXRpY0V4cHJlc3Npb24pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxFbmRPZmZzZXRUcmFuc2Zvcm0odiBhcyBhbnkpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBTY3JvbGxUb1N0YXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NOQVBfU0NST0xMVE9fU1RBUlQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBTY3JvbGxUb1N0YXJ0VHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFNjcm9sbFRvU3RhcnRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9TQ1JPTExUT19TVEFSVDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsIHdpbGwgYmUgYW5jaG9yZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqIFRoaXMgcHJvcGVydHkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBzbmFwU2Nyb2xsVG9FbmQgcHJvcGVydHkuXHJcbiAgICogVGhhdCBpcywgaWYgc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBpbml0aWFsbHkgc25hcCBcclxuICAgKiB0byB0aGUgYmVnaW5uaW5nOyBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgZW5kLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZC4gXHJcbiAgICogSWYgc25hcFNjcm9sbFRvU3RhcnQgaXMgZGlzYWJsZWQgYW5kIHNuYXBTY3JvbGxUb0VuZCBpcyBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZDsgXHJcbiAgICogaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGJlZ2lubmluZywgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBiZWdpbm5pbmcuIFxyXG4gICAqIElmIGJvdGggc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZGlzYWJsZWQsIHRoZSBsaXN0IHdpbGwgbmV2ZXIgc25hcCB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKiBJbiB0aGUgYHNwcmVhZGluZ01vZGU9U3ByZWFkaW5nTW9kZXMuSU5GSU5JVFlgIG1vZGUsIHRoZSBgc25hcFNjcm9sbFRvU3RhcnRgIHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQsIHNpbmNlIHRoZSBsaXN0IGhhcyBubyBiZWdpbm5pbmcgb3IgZW5kLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBTY3JvbGxUb1N0YXJ0KHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBTY3JvbGxUb1N0YXJ0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBTY3JvbGxUb1N0YXJ0KCkgeyByZXR1cm4gdGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBTY3JvbGxUb0VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1NDUk9MTFRPX0VORCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kc25hcFNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwU2Nyb2xsVG9FbmRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwU2Nyb2xsVG9FbmRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbCB3aWxsIGJlIGFuY2hvcmVkIHRvIHRoZSDRg9GC0LIgb2YgdGhlIGxpc3QuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICogVGhhdCBpcywgaWYgc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBpbml0aWFsbHkgc25hcCBcclxuICAgKiB0byB0aGUgYmVnaW5uaW5nOyBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgZW5kLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZC4gXHJcbiAgICogSWYgc25hcFNjcm9sbFRvU3RhcnQgaXMgZGlzYWJsZWQgYW5kIHNuYXBTY3JvbGxUb0VuZCBpcyBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZDsgXHJcbiAgICogaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGJlZ2lubmluZywgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBiZWdpbm5pbmcuIFxyXG4gICAqIElmIGJvdGggc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZGlzYWJsZWQsIHRoZSBsaXN0IHdpbGwgbmV2ZXIgc25hcCB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKiBJbiB0aGUgYHNwcmVhZGluZ01vZGU9U3ByZWFkaW5nTW9kZXMuSU5GSU5JVFlgIG1vZGUsIHRoZSBgc25hcFNjcm9sbFRvRW5kYCBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLCBzaW5jZSB0aGUgbGlzdCBoYXMgbm8gYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9FbmQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBTY3JvbGxUb0VuZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFNjcm9sbFRvRW5kLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFNjcm9sbFRvRW5kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgc25hcFNjcm9sbFRvRW5kIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBTY3JvbGxUb0JvdHRvbSh2OiBib29sZWFuKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgc25hcFNjcm9sbFRvRW5kIHByb3BlcnR5LicpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVEKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyRW5hYmxlZFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhckVuYWJsZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbGJhciBpcyBzaG93biBvciBub3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhckVuYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckludGVyYWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFySW50ZXJhY3RpdmVUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJJbnRlcmFjdGl2ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgc2Nyb2xsaW5nIHVzaW5nIHRoZSBzY3JvbGxiYXIgd2lsbCBiZSBwb3NzaWJsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFySW50ZXJhY3RpdmUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFySW50ZXJhY3RpdmVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFySW50ZXJhY3RpdmUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG92ZXJsYXBwaW5nU2Nyb2xsYmFyID0gdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9vdmVybGFwcGluZ1Njcm9sbGJhclRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm92ZXJsYXBwaW5nU2Nyb2xsYmFyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX09WRVJMQVBQSU5HX1NDUk9MTEJBUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsIGJhciB3aWxsIG92ZXJsYXAgdGhlIGxpc3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwiZmFsc2VcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBvdmVybGFwcGluZ1Njcm9sbGJhcih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9vdmVybGFwcGluZ1Njcm9sbGJhclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBvdmVybGFwcGluZ1Njcm9sbGJhcigpIHsgcmV0dXJuIHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxCZWhhdmlvciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsQmVoYXZpb3I+KERFRkFVTFRfU0NST0xMX0JFSEFWSU9SKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbEJlaGF2aW9yID0gdGhpcy5fJHNjcm9sbEJlaGF2aW9yLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxCZWhhdmlvclRyYW5zZm9ybSA9ICh2OiBTY3JvbGxCZWhhdmlvcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbEJlaGF2aW9yXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTF9CRUhBVklPUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIHNjcm9sbGluZyBiZWhhdmlvciBmb3IgYW55IGVsZW1lbnQgb24gdGhlIHBhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwic21vb3RoXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsQmVoYXZpb3IodjogU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsQmVoYXZpb3IuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbEJlaGF2aW9yVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxCZWhhdmlvci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbEJlaGF2aW9yKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbEJlaGF2aW9yLmdldFZhbHVlKCk7IH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsaW5nU2V0dGluZ3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTY3JvbGxpbmdTZXR0aW5ncz4oREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsaW5nU2V0dGluZ3MgPSB0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGluZ1NldHRpbmdzVHJhbnNmb3JtID0gKHY6IElTY3JvbGxpbmdTZXR0aW5ncyk6IElTY3JvbGxpbmdTZXR0aW5ncyA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCAmJiAhIXYpIHtcclxuICAgICAgY29uc3QgeyBmcmljdGlvbmFsRm9yY2UsIG1hc3MsIG1heERpc3RhbmNlLCBtYXhEdXJhdGlvbiwgc3BlZWRTY2FsZSwgb3B0aW1pemF0aW9uIH0gPSB2O1xyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQoZnJpY3Rpb25hbEZvcmNlLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImZyaWN0aW9uYWxGb3JjZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChtYXNzLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1hc3NcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQobWF4RGlzdGFuY2UsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4RGlzdGFuY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQobWF4RHVyYXRpb24sIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4RHVyYXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQoc3BlZWRTY2FsZSwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzcGVlZFNjYWxlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4ob3B0aW1pemF0aW9uLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm9wdGltaXphdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxpbmdTZXR0aW5nc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAgb3IgbnVsbC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZnJpY3Rpb25hbEZvcmNlOiB2LmZyaWN0aW9uYWxGb3JjZSAhPT0gdW5kZWZpbmVkICYmIHYuZnJpY3Rpb25hbEZvcmNlID4gMCA/IHYuZnJpY3Rpb25hbEZvcmNlIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MuZnJpY3Rpb25hbEZvcmNlLFxyXG4gICAgICBtYXNzOiB2Lm1hc3MgIT09IHVuZGVmaW5lZCAmJiB2Lm1hc3MgPiAwID8gdi5tYXNzIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWFzcyxcclxuICAgICAgbWF4RGlzdGFuY2U6IHYubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCAmJiB2Lm1heERpc3RhbmNlID4gMCA/IHYubWF4RGlzdGFuY2UgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5tYXhEaXN0YW5jZSxcclxuICAgICAgbWF4RHVyYXRpb246IHYubWF4RHVyYXRpb24gIT09IHVuZGVmaW5lZCAmJiB2Lm1heER1cmF0aW9uID4gMCA/IHYubWF4RHVyYXRpb24gOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5tYXhEdXJhdGlvbixcclxuICAgICAgc3BlZWRTY2FsZTogdi5zcGVlZFNjYWxlICE9PSB1bmRlZmluZWQgJiYgdi5zcGVlZFNjYWxlID4gMCA/IHYuc3BlZWRTY2FsZSA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLnNwZWVkU2NhbGUsXHJcbiAgICAgIG9wdGltaXphdGlvbjogdi5vcHRpbWl6YXRpb24gPz8gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1Mub3B0aW1pemF0aW9uLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxpbmcgc2V0dGluZ3MuXHJcbiAgICogLSBmcmljdGlvbmFsRm9yY2UgLSBGcmljdGlvbmFsIGZvcmNlLiBEZWZhdWx0IHZhbHVlIGlzIDAuMDM1LlxyXG4gICAqIC0gbWFzcyAtIE1hc3MuIERlZmF1bHQgdmFsdWUgaXMgMC4wMDUuXHJcbiAgICogLSBtYXhEaXN0YW5jZSAtIE1heGltdW0gc2Nyb2xsaW5nIGRpc3RhbmNlLiBEZWZhdWx0IHZhbHVlIGlzIDEwMDAwMC5cclxuICAgKiAtIG1heER1cmF0aW9uIC0gTWF4aW11bSBhbmltYXRpb24gZHVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgNDAwMC5cclxuICAgKiAtIHNwZWVkU2NhbGUgLSBTcGVlZCBzY2FsZS4gRGVmYXVsdCB2YWx1ZSBpcyAxMC5cclxuICAgKiAtIG9wdGltaXphdGlvbiAtIEVuYWJsZXMgc2Nyb2xsaW5nIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsaW5nU2V0dGluZ3ModjogSVNjcm9sbGluZ1NldHRpbmdzKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxpbmdTZXR0aW5nc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxpbmdTZXR0aW5ncygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtVHJhbnNmb3JtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJdGVtVHJhbnNmb3JtIHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtVHJhbnNmb3JtID0gdGhpcy5fJGl0ZW1UcmFuc2Zvcm0uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1UcmFuc2Zvcm1UcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUZ1bmN0aW9uKHYsIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtVHJhbnNmb3JtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSXRlbVRyYW5zZm9ybWAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSB0cmFuc2Zvcm1hdGlvbiBvZiBlbGVtZW50J3MgcG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsZSwgb3BhY2l0eSBhbmQgekluZGV4LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVRyYW5zZm9ybSh2OiBJdGVtVHJhbnNmb3JtIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtVHJhbnNmb3JtLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtVHJhbnNmb3JtVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRpdGVtVHJhbnNmb3JtLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVRyYW5zZm9ybSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtVHJhbnNmb3JtLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBUb0l0ZW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUF9UT19JVEVNKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBUb0l0ZW0gPSB0aGlzLl8kc25hcFRvSXRlbS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvSXRlbVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBUb0l0ZW1cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9UT19JVEVNO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcCB0byBhbiBpdGVtLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBUb0l0ZW0odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwVG9JdGVtLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwVG9JdGVtVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwVG9JdGVtLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvSXRlbSgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwVG9JdGVtLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBUb0l0ZW1BbGlnbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcFRvSXRlbUFsaWduPihERUZBVUxUX1NOQVBfVE9fSVRFTV9BTElHTik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwVG9JdGVtQWxpZ24gPSB0aGlzLl8kc25hcFRvSXRlbUFsaWduLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVG9JdGVtQWxpZ25UcmFuc2Zvcm0gPSAodjogU25hcFRvSXRlbUFsaWduKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnc3RhcnQnIHx8IHYgPT09ICdjZW50ZXInIHx8IHYgPT09ICdlbmQnKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBUb0l0ZW1BbGlnblwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgc3RhcnRgLCBgY2VudGVyYCBvciBgZW5kYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9UT19JVEVNX0FMSUdOO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWxpZ25tZW50IGZvciBzbmFwVG9JdGVtLiBBdmFpbGFibGUgdmFsdWVzIOKAi+KAi2FyZSBgc3RhcnRgLCBgY2VudGVyYCwgYW5kIGBlbmRgLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgY2VudGVyYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwVG9JdGVtQWxpZ24odjogU25hcFRvSXRlbUFsaWduKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBUb0l0ZW1BbGlnbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRvSXRlbUFsaWduVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwVG9JdGVtQWxpZ24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwVG9JdGVtQWxpZ24oKSB7IHJldHVybiB0aGlzLl8kc25hcFRvSXRlbUFsaWduLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nRGlzdGFuY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNuYXBwaW5nRGlzdGFuY2U+KERFRkFVTFRfU05BUFBJTkdfRElTVEFOQ0UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcHBpbmdEaXN0YW5jZSA9IHRoaXMuXyRzbmFwcGluZ0Rpc3RhbmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwcGluZ0Rpc3RhbmNlVHJhbnNmb3JtID0gKHY6IFNuYXBwaW5nRGlzdGFuY2UgfCBhbnkpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgfHwgdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBwaW5nRGlzdGFuY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQUElOR19ESVNUQU5DRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIGFjdGl2YXRpb24gZGlzdGFuY2UuIENhbiBiZSBzcGVjaWZpZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBlbGVtZW50IHNpemUgb3IgaW4gYWJzb2x1dGUgdmFsdWVzLlxyXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAyNSVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nRGlzdGFuY2UodjogU25hcHBpbmdEaXN0YW5jZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwcGluZ0Rpc3RhbmNlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwcGluZ0Rpc3RhbmNlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ0Rpc3RhbmNlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcHBpbmdEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwcGluZ0Rpc3RhbmNlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGluZ09uZUJ5T25lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTElOR19PTkVfQllfT05FKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGluZ09uZUJ5T25lID0gdGhpcy5fJHNjcm9sbGluZ09uZUJ5T25lLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxpbmdPbmVCeU9uZVRyYW5zZm9ybSA9ICh2OiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsaW5nT25lQnlPbmVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX09ORV9CWV9PTkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBzY3JvbGwgb25lIGl0ZW0gYXQgYSB0aW1lIGlmIHRydWUgYW5kIHRoZSBzY3JvbGxUb0l0ZW0gcHJvcGVydHkgaXMgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGluZ09uZUJ5T25lKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsaW5nT25lQnlPbmUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGluZ09uZUJ5T25lVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxpbmdPbmVCeU9uZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGluZ09uZUJ5T25lKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGluZ09uZUJ5T25lLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFsaWdubWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxpZ25tZW50PihERUZBVUxUX0FMSUdOTUVOVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRhbGlnbm1lbnQgPSB0aGlzLl8kYWxpZ25tZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9hbGlnbm1lbnRUcmFuc2Zvcm0gPSAodjogQWxpZ25tZW50KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9uZScgfHwgdiA9PT0gJ2NlbnRlcicpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiYWxpZ25tZW50XCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBub25lYCBvciBgY2VudGVydGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FMSUdOTUVOVDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgbGlzdC4gVHdvIG1vZGVzIGFyZSBhdmFpbGFibGU6IGBub25lYCBhbmQgYGNlbnRlcmAuIFRoZSBgY2VudGVyYCBtb2RlIGFsaWducyB0aGUgbGlzdCBpdGVtcyB0byB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydCwgaWRlYWwgZm9yIHVzZSB3aXRoIHRoZSBgaXRlbVRyYW5zZm9ybWAgcHJvcGVydHkuXHJcbiAgICogVGhlIGBub25lYCBtb2RlIG1lYW5zIG5vIGFsaWdubWVudC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG5vbmVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFsaWdubWVudCh2OiBBbGlnbm1lbnQpIHtcclxuICAgIGlmICh0aGlzLl8kYWxpZ25tZW50LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9hbGlnbm1lbnRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGFsaWdubWVudC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGFsaWdubWVudCgpIHsgcmV0dXJuIHRoaXMuXyRhbGlnbm1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kekluZGV4V2hlblNlbGVjdGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkcpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkekluZGV4V2hlblNlbGVjdGluZyA9IHRoaXMuXyR6SW5kZXhXaGVuU2VsZWN0aW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF96SW5kZXhXaGVuU2VsZWN0aW5nVHJhbnNmb3JtID0gKHY6IHN0cmluZyB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJ6SW5kZXhXaGVuU2VsZWN0aW5nXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgbnVsbGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORztcclxuICAgIH1cclxuICAgIHJldHVybiB2ID8/IG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgekluZGV4IHdoZW4gYSBsaXN0IGl0ZW0gaXMgc2VsZWN0ZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBudWxsYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB6SW5kZXhXaGVuU2VsZWN0aW5nKHY6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kekluZGV4V2hlblNlbGVjdGluZy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fekluZGV4V2hlblNlbGVjdGluZ1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kekluZGV4V2hlblNlbGVjdGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHpJbmRleFdoZW5TZWxlY3RpbmcoKSB7IHJldHVybiB0aGlzLl8kekluZGV4V2hlblNlbGVjdGluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzcHJlYWRpbmdNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTcHJlYWRpbmdNb2RlPihERUZBVUxUX1NQUkVBRElOR19NT0RFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNwcmVhZGluZ01vZGUgPSB0aGlzLl8kc3ByZWFkaW5nTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ByZWFkaW5nTW9kZVRyYW5zZm9ybSA9ICh2OiBTcHJlYWRpbmdNb2RlKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9ybWFsJyB8fCB2ID09PSAnaW5maW5pdHknKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNwcmVhZGluZ01vZGVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vcm1hbGAgb3IgYGluZmluaXR5YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU1BSRUFESU5HX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgb3JkZXIgb2YgbGlzdCBlbGVtZW50cy4gQXZhaWxhYmxlIHZhbHVlcyDigIvigIthcmUgYHN0YW5kYXJkYCBhbmQgYGluZmluaXR5YC5cclxuICAgKiBgbm9ybWFsYCDigJQgbGlzdCBlbGVtZW50cyBhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbGxlY3Rpb24gc2VxdWVuY2UuXHJcbiAgICogYGluZmluaXR5YCDigJQgbGlzdCBlbGVtZW50cyBhcmUgb3JkZXJlZCBjeWNsaWNhbGx5LCBmb3JtaW5nIGFuIGluZmluaXRlIGxpc3QuXHJcbiAgICogV2hlbiBzZXQgdG8gYGluZmluaXR5YCwgdGhlIGBhbGlnbm1lbnRgIHByb3BlcnR5IGlzIGZvcmNlZCB0byB0aGUgdmFsdWUgYEFsaWdubWVudHMuQ0VOVEVSYCwgdGhlIGBzY3JvbGxiYXJFbmFibGVkYCBwcm9wZXJ0eSBpcyBmb3JjZWQgdG8gdGhlIGBmYWxzZWBcclxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgc3RhbmRhcmRgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNwcmVhZGluZ01vZGUodjogU3ByZWFkaW5nTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzcHJlYWRpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zcHJlYWRpbmdNb2RlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzcHJlYWRpbmdNb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc3ByZWFkaW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRzcHJlYWRpbmdNb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRpdmlkZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9ESVZJREVTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGRpdmlkZXMgPSB0aGlzLl8kZGl2aWRlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGl2aWRlc1RyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImRpdmlkZXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9ESVZJREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHYgPD0gMCA/IERFRkFVTFRfRElWSURFUyA6IHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29sdW1uIG9yIHJvdyBudW1iZXJzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGl2aWRlcyh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kZGl2aWRlcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZGl2aWRlc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZGl2aWRlcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGRpdmlkZXMoKSB7IHJldHVybiB0aGlzLl8kZGl2aWRlcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtb3Rpb25CbHVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTU9USU9OX0JMVVIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbW90aW9uQmx1ciA9IHRoaXMuXyRtb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tb3Rpb25CbHVyVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibW90aW9uQmx1clwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RJVklERVM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdiA8PSAwID8gREVGQVVMVF9ESVZJREVTIDogdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNb3Rpb24gYmx1ciBlZmZlY3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwLjE1YC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtb3Rpb25CbHVyKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tb3Rpb25CbHVyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtb3Rpb25CbHVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbW90aW9uQmx1cigpIHsgcmV0dXJuIHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1heE1vdGlvbkJsdXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9NQVhfTU9USU9OX0JMVVIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbWF4TW90aW9uQmx1ciA9IHRoaXMuXyRtYXhNb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tYXhNb3Rpb25CbHVyVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4TW90aW9uQmx1clwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX01BWF9NT1RJT05fQkxVUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2IDw9IDAgPyBERUZBVUxUX01BWF9NT1RJT05fQkxVUiA6IHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4aW11bSBtb3Rpb24gYmx1ciBlZmZlY3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwLjVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heE1vdGlvbkJsdXIodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJG1heE1vdGlvbkJsdXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21heE1vdGlvbkJsdXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1heE1vdGlvbkJsdXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtYXhNb3Rpb25CbHVyKCkgeyByZXR1cm4gdGhpcy5fJG1heE1vdGlvbkJsdXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbW90aW9uQmx1ckVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtb3Rpb25CbHVyRW5hYmxlZCA9IHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbW90aW9uQmx1ckVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtb3Rpb25CbHVyRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFwcGx5IG1vdGlvbiBibHVyIG9yIG5vdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtb3Rpb25CbHVyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tb3Rpb25CbHVyRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtb3Rpb25CbHVyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJGFuaW1hdGlvblBhcmFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUFuaW1hdGlvblBhcmFtcz4oREVGQVVMVF9BTklNQVRJT05fUEFSQU1TKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGFuaW1hdGlvblBhcmFtcyA9IHRoaXMuXyRhbmltYXRpb25QYXJhbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvblBhcmFtc1RyYW5zZm9ybSA9ICh2OiBJQW5pbWF0aW9uUGFyYW1zKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWRhdGVGbG9hdCh2LnNjcm9sbFRvSXRlbSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsVG9JdGVtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIGlmICghdmFsaWRhdGVGbG9hdCh2LnNuYXBUb0l0ZW0pKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBUb0l0ZW1cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZGF0ZUZsb2F0KHYubmF2aWdhdGVCeUtleWJvYXJkKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJuYXZpZ2F0ZUJ5S2V5Ym9hcmRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZGF0ZUZsb2F0KHYubmF2aWdhdGVUb0l0ZW0pKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm5hdmlnYXRlVG9JdGVtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiYW5pbWF0aW9uUGFyYW1zXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGlvbiBwYXJhbWV0ZXJzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInsgc2Nyb2xsVG9JdGVtOiA1MCwgc25hcFRvSXRlbTogMTUwLCBuYXZpZ2F0ZVRvSXRlbTogMTUwLCBuYXZpZ2F0ZUJ5S2V5Ym9hcmQ6IDUwIH1cIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBhbmltYXRpb25QYXJhbXModjogSUFuaW1hdGlvblBhcmFtcykge1xyXG4gICAgaWYgKHRoaXMuXyRhbmltYXRpb25QYXJhbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2FuaW1hdGlvblBhcmFtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgYW5pbWF0aW9uUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRvdmVyc2Nyb2xsRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkb3ZlcnNjcm9sbEVuYWJsZWQgPSB0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX292ZXJzY3JvbGxFbmFibGVkVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwib3ZlcnNjcm9sbEVuYWJsZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfT1ZFUlNDUk9MTF9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBvdmVyc2Nyb2xsIChyZS1zY3JvbGwpIGZlYXR1cmUgd2lsbCB3b3JrLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBvdmVyc2Nyb2xsRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG92ZXJzY3JvbGxFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9vdmVyc2Nyb2xsRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBvdmVyc2Nyb2xsRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGVyaW1lbnRhbCFcclxuICAgKiBFbmFibGVzIGJ1ZmZlciBvcHRpbWl6YXRpb24uXHJcbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBpZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiBhcmUgbm90IGFkZGVkIG9yIHVwZGF0ZWQuIE90aGVyd2lzZSwgYXJ0aWZhY3RzIGluIHRoZSBmb3JtIG9mIHR3aXRjaGluZyBvZiB0aGUgc2Nyb2xsIGFyZWEgYXJlIHBvc3NpYmxlLlxyXG4gICAqIFdvcmtzIG9ubHkgaWYgdGhlIHByb3BlcnR5IGR5bmFtaWMgPSB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVJlbmRlcmVyVHJhbnNmb3JtID0gKHY6IFRlbXBsYXRlUmVmPGFueT4pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG4gICAgaWYgKHYgJiYgISh0eXBlb2Ygdi5lbGVtZW50UmVmID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygdi5jcmVhdGVFbWJlZGRlZFZpZXcgPT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIFwiaXRlbVJlbmRlcmVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgVGVtcGxhdGVSZWZgLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtUmVuZGVyZXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1SZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSBhcyBUZW1wbGF0ZVJlZjxhbnk+OyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtQ29uZmlnTWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwPih7fSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtQ29uZmlnTWFwID0gdGhpcy5fJGl0ZW1Db25maWdNYXAuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1Db25maWdNYXBUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICBmb3IgKGxldCBpZCBpbiB2KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpZF07XHJcbiAgICAgICAgICBpZiAoIWl0ZW0gfHxcclxuICAgICAgICAgICAgIXZhbGlkYXRlQm9vbGVhbihpdGVtLmNvbGxhcHNhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uc2VsZWN0YWJsZSwgdHJ1ZSkgfHxcclxuICAgICAgICAgICAgIShpdGVtLnN0aWNreSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0uc3RpY2t5ID09PSAwIHx8IGl0ZW0uc3RpY2t5ID09PSAxIHx8IGl0ZW0uc3RpY2t5ID09PSAyKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtQ29uZmlnTWFwXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcGAuJyk7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgYHN0aWNreWAgcG9zaXRpb24sIGBmdWxsU2l6ZWAsIGBjb2xsYXBzYWJsZWAgYW5kIGBzZWxlY3RhYmxlYCBmb3IgdGhlIGxpc3QgaXRlbSBlbGVtZW50LiBJZiBgc3RpY2t5YCBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gYDBgLCB0aGVuIGBzdGlja3lgIHBvc2l0aW9uIGlzIGFwcGxpZWQuIFxyXG4gICAqIElmIHRoZSBgc3RpY2t5YCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gYDBgLCB0aGVuIHRoZSBgc3RpY2t5YCBwb3NpdGlvbiBtb2RlIGlzIGVuYWJsZWQgZm9yIHRoZSBlbGVtZW50LiBgMWAgLSBwb3NpdGlvbiBzdGFydCwgYDJgIC0gcG9zaXRpb24gZW5kLlxyXG4gICAqICBEZWZhdWx0IHZhbHVlIGlzIGAwYC5cclxuICAgKiBgc2VsZWN0YWJsZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgY2FuIGJlIHNlbGVjdGVkIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICogYGNvbGxhcHNhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIGEgYHN0aWNreWAgcHJvcGVydHkgZ3JlYXRlciB0aGFuIHplcm8gY2FuIGNvbGxhcHNlIGFuZFxyXG4gICAqICBjb2xsYXBzZSBlbGVtZW50cyBpbiBmcm9udCB0aGF0IGRvIG5vdCBoYXZlIGEgYHN0aWNreWAgcHJvcGVydHkuXHJcbiAgICogYGZ1bGxTaXplYCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGFuIGVsZW1lbnQgd2hlbiByZW5kZXJpbmcgbGlzdHMgd2l0aCBjZWxsIGRpdmlzaW9ucy4gSWYgc3RpY2t5IGlzIDEgb3IgMiwgZnVsbFNpemUgYXV0b21hdGljYWxseSBiZWNvbWVzIHRydWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxyXG4gICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbW9kZWxzL2l0ZW0tY29uZmlnLW1hcC5tb2RlbC50c1xyXG4gICAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAgICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbUNvbmZpZ01hcCh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1Db25maWdNYXBUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1Db25maWdNYXAubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtQ29uZmlnTWFwKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbVNpemUgPSB0aGlzLl8kaXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1TaXplVHJhbnNmb3JtID0gKHY6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpIHx8IHYgPT09IFZJRVdQT1JUO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgbnVtYmVyYCwgYHZpZXdwb3J0YCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJywgdGhlbiB0aGUgaGVpZ2h0IG9mIGEgdHlwaWNhbCBlbGVtZW50LiBJZiBkaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcsIHRoZW4gdGhlIHdpZHRoIG9mIGEgdHlwaWNhbCBlbGVtZW50LlxyXG4gICAqIElmIHRoZSBgZHluYW1pY1NpemVgIHByb3BlcnR5IGlzIHRydWUsIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBgaXRlbVNpemVgIHByb3BlcnR5IFxyXG4gICAqIHRvIGFkanVzdCB0aGUgc2l6ZXMgb2YgdGhlIGl0ZW1zIGluIHRoZSB1bmFsbG9jYXRlZCBhcmVhLlxyXG4gICAqIElmIHRoZSB2YWx1ZSBpcyAndmlld3BvcnQnLCB0aGUgc2l6ZXMgb2YgZWxlbWVudHMgYXJlIGF1dG9tYXRpY2FsbHkgcmVzaXplZCB0byBmaXQgdGhlIHZpZXdwb3J0IHNpemUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVNpemUodjogbnVtYmVyIHwgJ3ZpZXdwb3J0Jykge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1TaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVNpemUoKSB7IHJldHVybiB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbWluSXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbWluSXRlbVNpemUgPSB0aGlzLl8kbWluSXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21pbkl0ZW1TaXplVHJhbnNmb3JtID0gKHY6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpIHx8IHYgPT09IFZJRVdQT1JUO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtaW5JdGVtU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgbnVtYmVyYCwgYHZpZXdwb3J0YCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGBkeW5hbWljU2l6ZWAgcHJvcGVydHkgaXMgZW5hYmxlZCwgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZWxlbWVudCBpcyBzZXQuXHJcbiAgICogSWYgdGhlIHZhbHVlIGlzICd2aWV3cG9ydCcsIHRoZSBzaXplcyBvZiBlbGVtZW50cyBhcmUgYXV0b21hdGljYWxseSByZXNpemVkIHRvIGZpdCB0aGUgdmlld3BvcnQgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtaW5JdGVtU2l6ZSh2OiBudW1iZXIgfCAndmlld3BvcnQnKSB7XHJcbiAgICBpZiAodGhpcy5fJG1pbkl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9taW5JdGVtU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbWluSXRlbVNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtaW5JdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtaW5JdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhJdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01BWF9JVEVNX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbWF4SXRlbVNpemUgPSB0aGlzLl8kbWF4SXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21heEl0ZW1TaXplVHJhbnNmb3JtID0gKHY6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpIHx8IHYgPT09IFZJRVdQT1JUO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhJdGVtU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgbnVtYmVyYCwgYHZpZXdwb3J0YCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGBkeW5hbWljU2l6ZWAgcHJvcGVydHkgaXMgZW5hYmxlZCwgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZWxlbWVudCBpcyBzZXQuXHJcbiAgICogSWYgdGhlIHZhbHVlIGlzICd2aWV3cG9ydCcsIHRoZSBzaXplcyBvZiBlbGVtZW50cyBhcmUgYXV0b21hdGljYWxseSByZXNpemVkIHRvIGZpdCB0aGUgdmlld3BvcnQgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtYXhJdGVtU2l6ZSh2OiBudW1iZXIgfCAndmlld3BvcnQnKSB7XHJcbiAgICBpZiAodGhpcy5fJG1heEl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tYXhJdGVtU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbWF4SXRlbVNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtYXhJdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhJdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkeW5hbWljU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9EWU5BTUlDX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZHluYW1pY1NpemUgPSB0aGlzLl8kZHluYW1pY1NpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2R5bmFtaWNTaXplVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkeW5hbWljU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9EWU5BTUlDX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0cnVlLCBpdGVtcyBpbiB0aGUgbGlzdCBtYXkgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCB0aGUgaXRlbVNpemUgcHJvcGVydHkgbXVzdCBiZSBzcGVjaWZpZWQgdG8gYWRqdXN0XHJcbiAgICogdGhlIHNpemVzIG9mIGl0ZW1zIGluIHRoZSB1bmFsbG9jYXRlZCBhcmVhLlxyXG4gICAqIElmIGZhbHNlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYSBmaXhlZCBzaXplIHNwZWNpZmllZCBieSB0aGUgaXRlbVNpemUgcHJvcGVydHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZHluYW1pY1NpemUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZHluYW1pY1NpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGR5bmFtaWNTaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgZHluYW1pY1NpemUoKSB7IHJldHVybiB0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZGlyZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaXJlY3Rpb24+KERFRkFVTFRfRElSRUNUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2RpcmVjdGlvblRyYW5zZm9ybSA9ICh2OiBEaXJlY3Rpb24pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdob3Jpem9udGFsJyB8fCB2ID09PSAndmVydGljYWwnKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZGlyZWN0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9ESVJFQ1RJT047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2RpcmVjdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZGlyZWN0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgZGlyZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsZWN0aW9uTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sbGVjdGlvbk1vZGU+KERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxlY3Rpb25Nb2RlID0gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsZWN0aW9uTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vcm1hbCcgfHwgdiA9PT0gJ2xhenknKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZGlyZWN0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBub3JtYWxgIG9yIGBsYXp5YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEVDVElPTl9NT0RFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgYWN0aW9uIG1vZGVzIGZvciBjb2xsZWN0aW9uIGVsZW1lbnRzLiBEZWZhdWx0IHZhbHVlIGlzIFwibm9ybWFsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sbGVjdGlvbk1vZGUodjogQ29sbGVjdGlvbk1vZGUpIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxlY3Rpb25Nb2RlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxlY3Rpb25Nb2RlKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGJ1ZmZlclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9CVUZGRVJfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2J1ZmZlclNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJidWZmZXJTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQlVGRkVSX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlzaWJpbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyAyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGJ1ZmZlclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2J1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGJ1ZmZlclNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBidWZmZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbWF4QnVmZmVyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01BWF9CVUZGRVJfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtYXhCdWZmZXJTaXplID0gdGhpcy5fJG1heEJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgdmFsID0gdjtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodiwgdHJ1ZSk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heEJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICB2YWwgPSBERUZBVUxUX01BWF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXJTaXplID0gdGhpcy5idWZmZXJTaXplO1xyXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA8PSBidWZmZXJTaXplKSB7XHJcbiAgICAgIHJldHVybiBidWZmZXJTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDEwMC5cclxuICAgKiBJZiBtYXhCdWZmZXJTaXplIGlzIHNldCB0byBiZSBncmVhdGVyIHRoYW4gYnVmZmVyU2l6ZSwgdGhlbiBhZGFwdGl2ZSBidWZmZXIgbW9kZSBpcyBlbmFibGVkLlxyXG4gICAqIFRoZSBncmVhdGVyIHRoZSBzY3JvbGwgc2l6ZSwgdGhlIG1vcmUgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCBmb3IgcmVuZGVyaW5nLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heEJ1ZmZlclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLl9tYXhCdWZmZXJTaXplVHJhbnNmb3JtKHYpO1xyXG4gICAgaWYgKHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCkgPT09IHZhbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJG1heEJ1ZmZlclNpemUubmV4dCh2YWwpO1xyXG4gIH07XHJcbiAgZ2V0IG1heEJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ01ldGhvZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcHBpbmdNZXRob2Q+KERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwcGluZ01ldGhvZFRyYW5zZm9ybSA9ICh2OiBTbmFwcGluZ01ldGhvZCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEIHx8IHYgPT09IFNuYXBwaW5nTWV0aG9kcy5TVEFOREFSVCk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZSBcInNuYXBwaW5nTWV0aG9kXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgJyR7U25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEfScgb3IgJyR7U25hcHBpbmdNZXRob2RzLlNUQU5EQVJUfScuYCk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBQSU5HX01FVEhPRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC4gRGVmYXVsdCB2YWx1ZSBpcyAnc3RhbmRhcnQnLlxyXG4gICAqICdzdGFuZGFydCcgLSBDbGFzc2ljIGdyb3VwIHZpc3VhbGl6YXRpb24uXHJcbiAgICogJ2FkdmFuY2VkJyAtIEEgbWFzayBpcyBhcHBsaWVkIHRvIHRoZSB2aWV3cG9ydCBhcmVhIHNvIHRoYXQgdGhlIGJhY2tncm91bmQgaXMgZGlzcGxheWVkIHVuZGVybmVhdGggdGhlIGF0dGFjaGVkIGdyb3VwLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwcGluZ01ldGhvZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcHBpbmdNZXRob2QubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwcGluZ01ldGhvZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzaW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sbGFwc2luZ01vZGU+KERFRkFVTFRfQ09MTEFQU0lOR19NT0RFUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjb2xsYXBzaW5nTW9kZSA9IHRoaXMuXyRjb2xsYXBzaW5nTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2luZ01vZGVUcmFuc2Zvcm0gPSAodjogQ29sbGFwc2luZ01vZGUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09IENvbGxhcHNpbmdNb2Rlcy5OT05FIHx8IHYgPT09IENvbGxhcHNpbmdNb2Rlcy5NVUxUSV9DT0xMQVBTRSB8fCB2ID09PSBDb2xsYXBzaW5nTW9kZXMuQUNDT1JESU9OKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIFwiY29sbGFwc2luZ01vZGVcIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSAnJHtTbmFwcGluZ01ldGhvZHMuQURWQU5DRUR9JyBvciAnJHtTbmFwcGluZ01ldGhvZHMuU1RBTkRBUlR9Jy5gKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEFQU0lOR19NT0RFUztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vZGUgZm9yIGNvbGxhcHNpbmcgbGlzdCBpdGVtcy4gXHJcbiAgICogYG5vbmVgIC0gTGlzdCBpdGVtcyBhcmUgbm90IHNlbGVjdGFibGUuXHJcbiAgICogYG11bHRpLWNvbGxhcHNlYCAtIExpc3QgaXRlbXMgYXJlIGNvbGxhcHNlZCBvbmUgYnkgb25lLlxyXG4gICAqICdhY2NvcmRpb24nIC0gQWNjb3JkaW9uIGNvbGxhcHNpYmxlIGxpc3QgaXRlbXMuXHJcbiAgICogRGVmYXVsdCB2YWx1ZSBpcyBgbXVsdGktY29sbGFwc2VcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzaW5nTW9kZSh2OiBDb2xsYXBzaW5nTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzaW5nTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGFwc2luZ01vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNpbmdNb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGFwc2luZ01vZGUoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2luZ01vZGUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFRoZSBcIm1ldGhvZEZvclNlbGVjdGluZ1wiIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgXCJzZWxlY3RNb2RlXCIgcHJvcGVydHkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWV0aG9kRm9yU2VsZWN0aW5nKHY6IGFueSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJtZXRob2RGb3JTZWxlY3RpbmdcIiBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIFwic2VsZWN0TW9kZVwiIHByb3BlcnR5IGluc3RlYWQuJyk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGluZ01vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGluZ01vZGU+KERFRkFVTFRfU0VMRUNUSU5HX01PREVTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNlbGVjdGluZ01vZGUgPSB0aGlzLl8kc2VsZWN0aW5nTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW5nTW9kZVRyYW5zZm9ybSA9ICh2OiBTZWxlY3RpbmdNb2RlKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9uZScgfHwgdiA9PT0gJ3NlbGVjdCcgfHwgdiA9PT0gJ211bHRpLXNlbGVjdCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RpbmdNb2RlXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBub25lYCwgYHNlbGVjdGAgb3IgYG11bHRpLXNlbGVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NFTEVDVElOR19NT0RFUztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqICBNZXRob2QgZm9yIHNlbGVjdGluZyBsaXN0IGl0ZW1zLiBEZWZhdWx0IHZhbHVlIGlzICdub25lJy5cclxuICAgKiAnc2VsZWN0JyAtIExpc3QgaXRlbXMgYXJlIHNlbGVjdGVkIG9uZSBieSBvbmUuXHJcbiAgICogJ211bHRpLXNlbGVjdCcgLSBNdWx0aXBsZSBzZWxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKiAnbm9uZScgLSBMaXN0IGl0ZW1zIGFyZSBub3Qgc2VsZWN0YWJsZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RpbmdNb2RlKHY6IFNlbGVjdGluZ01vZGUpIHtcclxuICAgIGlmICh0aGlzLl8kc2VsZWN0aW5nTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2VsZWN0aW5nTW9kZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0aW5nTW9kZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdGluZ01vZGUoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0aW5nTW9kZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyR0cmFja0J5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFRSQUNLX0JZX1BST1BFUlRZX05BTUUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF90cmFja0J5VHJhbnNmb3JtID0gKHY6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwidHJhY2tCeVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBUUkFDS19CWV9QUk9QRVJUWV9OQU1FO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3RyYWNrQnlUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JlZW5SZWFkZXJNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NjcmVlblJlYWRlck1lc3NhZ2VUcmFuc2Zvcm0gPSAodjogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JlZW5SZWFkZXJNZXNzYWdlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZSBmb3Igc2NyZWVuIHJlYWRlci5cclxuICAgKiBUaGUgbWVzc2FnZSBmb3JtYXQgaXM6IFwic29tZSB0ZXh0ICQxIHNvbWUgdGV4dCAkMlwiLFxyXG4gICAqIHdoZXJlICQxIGlzIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHNjcmVlbiBjb2xsZWN0aW9uLFxyXG4gICAqICQyIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwcm90ZWN0ZWQgc2V0IHNjcmVlblJlYWRlck1lc3NhZ2Uodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NjcmVlblJlYWRlck1lc3NhZ2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCBnZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UpO1xyXG4gIHByb3RlY3RlZCAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSA9IHRoaXMuXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KERFRkFVTFRfTEFOR19URVhUX0RJUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXJUcmFuc2Zvcm0gPSAodjogVGV4dERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibGFuZ1RleHREaXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9MQU5HX1RFWFRfRElSO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgZGlyZWN0aW9uIG9mIHRleHQgZm9yIHRoZSBsb2NhbGUuXHJcbiAgICogQ2FuIGJlIGVpdGhlciBcImx0clwiIChsZWZ0LXRvLXJpZ2h0KSBvciBcInJ0bFwiIChyaWdodC10by1sZWZ0KS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBsYW5nVGV4dERpcih2OiBUZXh0RGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9sYW5nVGV4dERpclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbGFuZ1RleHREaXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBsYW5nVGV4dERpcigpIHsgcmV0dXJuIHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2luZ2xlU2VsZWN0aW9uID0gdGhpcy5nZXRJc1NpbmdsZVNlbGVjdGlvbigpO1xyXG5cclxuICBwcml2YXRlIF9pc011bHRpU2VsZWN0aW9uID0gdGhpcy5nZXRJc011bHRpU2VsZWN0aW9uKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzTXVsdGlwbGVDb2xsYXBzZSA9IHRoaXMuZ2V0SXNNdWx0aXBsZUNvbGxhcHNlKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLmdldElzQWNjb3JkaW9uQ29sbGFwc2UoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuXHJcbiAgcHJvdGVjdGVkIF8kaXNJbmZpbml0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCAkaXNJbmZpbml0eSA9IHRoaXMuXyRpc0luZmluaXR5LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByb3RlY3RlZCBnZXQgaXNJbmZpbml0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWZXJ0aWNhbCA9IHRoaXMuZ2V0SXNWZXJ0aWNhbCgpO1xyXG4gIHByb3RlY3RlZCBnZXQgaXNWZXJ0aWNhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1ZlcnRpY2FsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGlzVmVydGljYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuaXNWZXJ0aWNhbCk7XHJcbiAgcHJvdGVjdGVkICRpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkRWxlbWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgJGZvY3VzZWRFbGVtZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHByb3RlY3RlZCAkY2xhc3NlcyA9IHRoaXMuXyRjbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcmVuZGVyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCAkcHJlcmVuZGVyRW5hYmxlZCA9IHRoaXMuXyRwcmVyZW5kZXJFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsSXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlZEl0ZW1JZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG5cclxuICBwcml2YXRlIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50Pj4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgJGJvdW5kczogT2JzZXJ2YWJsZTxJU2l6ZSB8IG51bGw+ID0gdGhpcy5fJGJvdW5kcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuc2Nyb2xsYmFyRW5hYmxlZCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxTY3JvbGxiYXJFbmFibGVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxBbGlnbm1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsaWdubWVudD4odGhpcy5hbGlnbm1lbnQpO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsQWxpZ25tZW50OiBPYnNlcnZhYmxlPEFsaWdubWVudD4gPSB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByb3RlY3RlZCBnZXQgYWN0dWFsQWxpZ25tZW50KCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbEFsaWdubWVudC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbEl0ZW1TaXplOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLl8kYWN0dWFsSXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBhY3R1YWxJdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRhY3R1YWxJdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxNaW5JdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbE1pbkl0ZW1TaXplOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLl8kYWN0dWFsTWluSXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBhY3R1YWxNaW5JdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRhY3R1YWxNaW5JdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxNYXhJdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbE1heEl0ZW1TaXplOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLl8kYWN0dWFsTWF4SXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBhY3R1YWxNYXhJdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyR0b3RhbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0Qm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbFNpemUgPSB0aGlzLl8kc2Nyb2xsU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGlzU2Nyb2xsU3RhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxFbmQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRlbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbFNuYXBTY3JvbGxUb0VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kYWxpZ25tZW50U2Nyb2xsU3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRhbGlnbm1lbnRTY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCksIHNjcm9sbGVyID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCksIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSwgc25hcHBlZENvbXBvbmVudHMgPSB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHM7XHJcbiAgICBpZiAoISFsaXN0ICYmICEhc2Nyb2xsZXIgJiYgc25hcHBlZENvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29tcCBvZiBzbmFwcGVkQ29tcG9uZW50cykge1xyXG4gICAgICAgIGlmICghIWNvbXApIHtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVndWxhckxlbmd0aCA9IGAke2lzVmVydGljYWwgPyBsaXN0Qm91bmRzLndpZHRoIDogbGlzdEJvdW5kcy5oZWlnaHR9JHtQWH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc25hcHBpbmdNZXRob2QgPSB0aGlzLnNuYXBwaW5nTWV0aG9kO1xyXG4gICAgICBpZiAoc25hcHBpbmdNZXRob2QgPT09IFNuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXBwZWRDb21wb25lbnQgPSBzbmFwcGVkQ29tcG9uZW50cz8uWzBdPy5pbnN0YW5jZTtcclxuICAgICAgICBpZiAoISFzbmFwcGVkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcyA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgbGFuZ1RleHREaXIgPSB0aGlzLmxhbmdUZXh0RGlyO1xyXG5cclxuICAgICAgICAgIHNuYXBwZWRDb21wb25lbnQuZWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aH0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRofSAwIFpcIilgO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IHNXaWR0aCwgaGVpZ2h0OiBzSGVpZ2h0IH0gPSBzbmFwcGVkQ29tcG9uZW50LmdldEJvdW5kcygpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQgPSBzY3JvbGxlci5uYXRpdmVFbGVtZW50LCBkZWx0YSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMuZGVsdGEgPz8gMCxcclxuICAgICAgICAgICAgc2Nyb2xsQmFyU2l6ZSA9IHRoaXMuc2Nyb2xsYmFyVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAgIGxldCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXI7XHJcbiAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICByaWdodCA9IHdpZHRoIC0gc2Nyb2xsQmFyU2l6ZSArIDI7XHJcbiAgICAgICAgICAgIHRvcCA9IHNIZWlnaHQ7XHJcbiAgICAgICAgICAgIGJvdHRvbSA9IGhlaWdodDtcclxuICAgICAgICAgICAgaWYgKGxhbmdUZXh0RGlyID09PSBUZXh0RGlyZWN0aW9ucy5SVEwpIHtcclxuICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gJHt0b3AgKyBkZWx0YX0gTCAke3Njcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgJHt0b3AgKyBkZWx0YX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgTCAke3JpZ2h0fSAwIEwgJHtyaWdodH0gJHt0b3AgKyBkZWx0YX0gWlwiKWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRvcCA9IDA7XHJcbiAgICAgICAgICAgIGJvdHRvbSA9IGhlaWdodCAtIHNjcm9sbEJhclNpemU7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAke3dpZHRofSAwIEwgJHt3aWR0aH0gJHtib3R0b219IEwgMCAke2JvdHRvbX0gTCAwIDAgTCAke3dpZHRofSAwIFpcIilgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0l0ZW0gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHBvc2l0aW9uOiBudW1iZXIsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5DRU5URVIsXHJcbiAgICBiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSBCRUhBVklPUl9BVVRPKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkhLCB7IHdpZHRoOiBlbGVtZW50V2lkdGgsIGhlaWdodDogZWxlbWVudEhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcclxuICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgICB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsXHJcbiAgICAgICAgZWxlbWVudFNpemUgPSBpc1ZlcnRpY2FsID8gZWxlbWVudEhlaWdodCA6IGVsZW1lbnRXaWR0aDtcclxuICAgICAgbGV0IHBvczogbnVtYmVyID0gTnVtYmVyLk5hTjtcclxuICAgICAgc3dpdGNoIChhbGlnbikge1xyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLlNUQVJUOiB7XHJcbiAgICAgICAgICBwb3MgPSBwb3NpdGlvbiArIHNjcm9sbGVyLnN0YXJ0TGF5b3V0T2Zmc2V0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLkNFTlRFUjoge1xyXG4gICAgICAgICAgcG9zID0gcG9zaXRpb24gLSAodmlld3BvcnRTaXplIC0gZWxlbWVudFNpemUpICogLjUgKyBzY3JvbGxlci5zdGFydExheW91dE9mZnNldDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIEZvY3VzQWxpZ25tZW50cy5FTkQ6IHtcclxuICAgICAgICAgIHBvcyA9IHBvc2l0aW9uIC0gKHZpZXdwb3J0U2l6ZSAtIGVsZW1lbnRTaXplKSArIHNjcm9sbGVyLnN0YXJ0TGF5b3V0T2Zmc2V0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLk5PTkU6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKHBvcykpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHBvcywgYmVoYXZpb3IsIHNuYXA6IGZhbHNlLCBub3JtYWxpemU6IHRydWUsXHJcbiAgICAgICAgICBmaXJlVXBkYXRlOiBmYWxzZSwgYmxlbmRpbmc6IGZhbHNlLCB1c2VyQWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLnNuYXBUb0l0ZW0gPyBNYXRoLm1heCh0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sIHRoaXMuYW5pbWF0aW9uUGFyYW1zLm5hdmlnYXRlVG9JdGVtKSA6IHRoaXMuYW5pbWF0aW9uUGFyYW1zLm5hdmlnYXRlVG9JdGVtLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgY2xhc3Mgb2YgdGhlIGVsZW1lbnQgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbXBvbmVudENsYXNzOiBDb21wb25lbnQkMTxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiA9IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50O1xyXG4gIHByb3RlY3RlZCBnZXQgaXRlbUNvbXBvbmVudENsYXNzKCkgeyByZXR1cm4gdGhpcy5faXRlbUNvbXBvbmVudENsYXNzOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgY2xhc3MgdHJhY2tCb3hcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveENsYXNzOiBDb21wb25lbnQkMTxUcmFja0JveD4gPSBUcmFja0JveDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSBvZiBlbGVtZW50IHNpemVzIGJ5IHRoZWlyIGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3g6IFRyYWNrQm94ID0gbmV3IHRoaXMuX3RyYWNrQm94Q2xhc3ModGhpcy50cmFja0J5KTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVwZGF0ZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHVwZGF0ZSA9IHRoaXMuXyR1cGRhdGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvRXhlY3V0b3IgPSBuZXcgU3ViamVjdDxJU2Nyb2xsUGFyYW1zPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsVG9FeGVjdXRvciA9IHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsaW5nVG8gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbCA9IG5ldyBTdWJqZWN0PElTY3JvbGxFdmVudD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRpY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5ICR0aWNrID0gdGhpcy5fJHRpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRmaXJlVXBkYXRlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGZpcmVVcGRhdGUgPSB0aGlzLl8kZmlyZVVwZGF0ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZpcmVVcGRhdGVOZXh0RnJhbWUgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZmlyZVVwZGF0ZU5leHRGcmFtZSA9IHRoaXMuXyRmaXJlVXBkYXRlTmV4dEZyYW1lLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJldmVudFNjcm9sbFNuYXBwaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF91cGRhdGVJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9yZWFkeUZvclNob3cgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FjaGVkID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGNhY2hhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXJlbmRlcj8uYWN0aXZlID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBwcmVyZW5kZXJhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY1NpemUgJiYgKHRoaXMuX3RyYWNrQm94Py5pc1NuYXBwZWRUb0VuZCA/PyBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kdmlld0luaXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIHJlYWRvbmx5ICR2aWV3SW5pdCA9IHRoaXMuXyR2aWV3SW5pdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgJGRlc3Ryb3kgPSB0aGlzLl8kZGVzdHJveS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLmluaXRpYWxpemUodGhpcy5faWQsIHRoaXMuX3RyYWNrQm94KTtcclxuXHJcbiAgICBjb25zdCAkZHluYW1pY1NpemUgPSB0aGlzLiRkeW5hbWljU2l6ZSxcclxuICAgICAgJHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuJHNuYXBTY3JvbGxUb0VuZDtcclxuICAgIGNvbWJpbmVMYXRlc3QoWyRkeW5hbWljU2l6ZSwgJHNuYXBTY3JvbGxUb0VuZF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtkeW5hbWljU2l6ZSwgc25hcFNjcm9sbFRvRW5kXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRwcmVyZW5kZXJFbmFibGVkLm5leHQoZHluYW1pY1NpemUgJiYgc25hcFNjcm9sbFRvRW5kKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGFuaW1hdGlvblBhcmFtcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuYW5pbWF0aW9uUGFyYW1zID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHNwcmVhZGluZ01vZGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kaXNJbmZpbml0eS5uZXh0KGlzU3ByZWFkaW5nTW9kZSh2LCBTcHJlYWRpbmdNb2Rlcy5JTkZJTklUWSkpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzdGFydE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kZW5kT2Zmc2V0Lm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXNJbmZpbml0eSA9IHRoaXMuJGlzSW5maW5pdHk7XHJcbiAgICAkaXNJbmZpbml0eS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzSW5maW5pdHkgPSB0aGlzLl9zZXJ2aWNlLmlzSW5maW5pdHkgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHpJbmRleFdoZW5TZWxlY3RpbmcgPSB0aGlzLiR6SW5kZXhXaGVuU2VsZWN0aW5nO1xyXG4gICAgJHpJbmRleFdoZW5TZWxlY3RpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnpJbmRleFdoZW5TZWxlY3RpbmcgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksXHJcbiAgICAgICRyYXdTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuJHNjcm9sbFN0YXJ0T2Zmc2V0LFxyXG4gICAgICAkcmF3U2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy4kc2Nyb2xsRW5kT2Zmc2V0O1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRib3VuZHMsICRyYXdTY3JvbGxTdGFydE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoKFt2XSkgPT4gISF2KSxcclxuICAgICAgdGFwKChbYm91bmRzLCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUFyaXRobWV0aWNFeHByZXNzaW9uKHZhbHVlLCB0aGlzLmlzVmVydGljYWwgPyBib3VuZHMhLmhlaWdodCA6IGJvdW5kcyEud2lkdGgpO1xyXG4gICAgICAgIHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQubmV4dCh2YWwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGJvdW5kcywgJHJhd1Njcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoKFt2XSkgPT4gISF2KSxcclxuICAgICAgdGFwKChbYm91bmRzLCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUFyaXRobWV0aWNFeHByZXNzaW9uKHZhbHVlLCB0aGlzLmlzVmVydGljYWwgPyBib3VuZHMhLmhlaWdodCA6IGJvdW5kcyEud2lkdGgpO1xyXG4gICAgICAgIHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0Lm5leHQodmFsKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCksXHJcbiAgICAgIHRhcChpZCA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNuYXBJdGVtLmVtaXQoaWQhKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHRpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnRpY2soKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHRpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmR5bmFtaWNTaXplID09PSB0cnVlKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrQm91bmRzT2ZFbGVtZW50cygpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py50aWNrKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnN0IF8kY3JlYXRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxyXG4gICAgICAkY3JlYXRlZCA9IF8kY3JlYXRlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskY3JlYXRlZCwgdGhpcy4kc2hvd10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoKFtjcmVhdGVkLCBzaG93bl0pID0+IGNyZWF0ZWQgJiYgc2hvd24pLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kaW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxlci5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxWaWV3cG9ydCk7XHJcbiAgICB0aGlzLl8kbGlzdC5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxDb250ZW50KTtcclxuXHJcbiAgICBjb25zdCAkYm91bmRzID0gdGhpcy5fJGJvdW5kcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgKSxcclxuICAgICAgJHNjcm9sbGVyQ29tcG9uZW50ID0gb2YodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQpLFxyXG4gICAgICAkcmVzaXplVmlld3BvcnQgPSAkc2Nyb2xsZXJDb21wb25lbnQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiBzY3JvbGxlciEuJHJlc2l6ZVZpZXdwb3J0KSxcclxuICAgICAgKSxcclxuICAgICAgJHJlc2l6ZUNvbnRlbnQgPSAkc2Nyb2xsZXJDb21wb25lbnQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiBzY3JvbGxlciEuJHJlc2l6ZUNvbnRlbnQpLFxyXG4gICAgICApO1xyXG5cclxuICAgICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kc2Nyb2xsRGlyZWN0aW9uKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkcmVzaXplVmlld3BvcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kYm91bmRzLm5leHQodik7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVzaXplKHRydWUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHJlc2l6ZUNvbnRlbnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kbGlzdEJvdW5kcy5uZXh0KHYpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlc2l6ZSgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHRyYWNrQnkgPSB0aGlzLiR0cmFja0J5O1xyXG4gICAgJHRyYWNrQnkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnRyYWNrQnkgPSB0aGlzLl90cmFja0JveC50cmFja0J5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LmRpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgbGV0IGhhc1VzZXJBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCAkaXRlbVNpemUgPSB0aGlzLiRpdGVtU2l6ZS5waXBlKFxyXG4gICAgICBtYXAodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgdiA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2KSxcclxuICAgICksXHJcbiAgICAgICRtaW5JdGVtU2l6ZSA9IHRoaXMuJG1pbkl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIHYgPD0gMCA/IERFRkFVTFRfTUlOX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkbWF4SXRlbVNpemUgPSB0aGlzLiRtYXhJdGVtU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiB2IDw9IDAgPyBERUZBVUxUX01BWF9JVEVNX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy4kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy4kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskbWluSXRlbVNpemUsICRib3VuZHMsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXRdKSA9PiB7XHJcbiAgICAgICAgaWYgKCh2IGFzIGFueSkgPT09IFZJRVdQT1JUKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLCB2aWV3cG9ydEJvdW5kcyA9IGJvdW5kcyxcclxuICAgICAgICAgICAgcmVzdWx0ID0gKGlzVmVydGljYWwgPyAodmlld3BvcnRCb3VuZHM/LmhlaWdodCA/PyAwKSA6ICh2aWV3cG9ydEJvdW5kcz8ud2lkdGggPz8gMCkpIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQ7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzdWx0IDw9IDAgPyAxIDogcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxNaW5JdGVtU2l6ZS5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJG1heEl0ZW1TaXplLCAkYm91bmRzLCAkc2Nyb2xsU3RhcnRPZmZzZXQsICRzY3JvbGxFbmRPZmZzZXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKChbdiwgYm91bmRzLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSkgPT4ge1xyXG4gICAgICAgIGlmICgodiBhcyBhbnkpID09PSBWSUVXUE9SVCkge1xyXG4gICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCwgdmlld3BvcnRCb3VuZHMgPSBib3VuZHMsXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IChpc1ZlcnRpY2FsID8gKHZpZXdwb3J0Qm91bmRzPy5oZWlnaHQgPz8gMCkgOiAodmlld3BvcnRCb3VuZHM/LndpZHRoID8/IDApKSAtIHN0YXJ0T2Zmc2V0IC0gZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCA8PSAwID8gMSA6IHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih2KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsTWF4SXRlbVNpemUubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRhY3R1YWxNaW5JdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbE1pbkl0ZW1TaXplLFxyXG4gICAgICAkYWN0dWFsTWF4SXRlbVNpemUgPSB0aGlzLiRhY3R1YWxNYXhJdGVtU2l6ZTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskaXRlbVNpemUsICRib3VuZHMsICRhY3R1YWxNaW5JdGVtU2l6ZSwgJGFjdHVhbE1heEl0ZW1TaXplLCAkc2Nyb2xsU3RhcnRPZmZzZXQsICRzY3JvbGxFbmRPZmZzZXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKChbdiwgYm91bmRzLCBtaW4sIG1heCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0pID0+IHtcclxuICAgICAgICBpZiAoKHYgYXMgYW55KSA9PT0gVklFV1BPUlQpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsIHZpZXdwb3J0Qm91bmRzID0gYm91bmRzLFxyXG4gICAgICAgICAgICByZXN1bHQgPSAoaXNWZXJ0aWNhbCA/ICh2aWV3cG9ydEJvdW5kcz8uaGVpZ2h0ID8/IDApIDogKHZpZXdwb3J0Qm91bmRzPy53aWR0aCA/PyAwKSkgLSBzdGFydE9mZnNldCAtIGVuZE9mZnNldDtcclxuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQgPCBtaW4gPyBtaW4gOiAocmVzdWx0ID4gbWF4ID8gbWF4IDogcmVzdWx0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih2IDwgbWluID8gbWluIDogKHYgPiBtYXggPyBtYXggOiB2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEl0ZW1TaXplLm5leHQodik7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5pdGVtU2l6ZSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkYWN0dWFsSXRlbVNpemUgPSB0aGlzLiRhY3R1YWxJdGVtU2l6ZSxcclxuICAgICAgJGFjdHVhbEl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRmb2N1c0l0ZW0ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChwYXJhbXMgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvciB9ID0gcGFyYW1zO1xyXG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGVsZW1lbnQsIHBvc2l0aW9uLCBhbGlnbiwgYmVoYXZpb3IpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGxpc3QgPSB0aGlzLiRsaXN0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgdGFrZSgxKSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcHJldmVudEtleWJvYXJkRXZlbnQgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGlzVmVydGljYWw6IGJvb2xlYW4pID0+IHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCBzY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLCBzY3JvbGxhYmxlID0gc2Nyb2xsZXIuc2Nyb2xsYWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCxcclxuICAgICAgICAgIHNjcm9sbFdlaWdodCA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlci5zY3JvbGxXaWR0aDtcclxuICAgICAgICBpZiAoc2Nyb2xsYWJsZSB8fCBzY3JvbGxTaXplIDw9IHNjcm9sbFN0YXJ0T2Zmc2V0IHx8IHNjcm9sbFNpemUgPj0gc2Nyb2xsV2VpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoISFldmVudCAmJiBldmVudC5jYW5jZWxhYmxlKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKGVsZW1lbnQgPT4gISFlbGVtZW50KSxcclxuICAgICAgc3dpdGNoTWFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZWxlbWVudCwgRVZFTlRfS0VZX0RPV04pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoIChlLmtleSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9MRUZUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9VUDpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9SSUdIVDpcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByZXZlbnRLZXlib2FyZEV2ZW50KGUsIHRoaXMuaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIEtFWV9BUlJfRE9XTjpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy4kc2Nyb2xsYmFyVGhpY2tuZXNzO1xyXG4gICAgJHNjcm9sbGJhclRoaWNrbmVzcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHNjcm9sbGJhclRoaWNrbmVzcyA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zY3JvbGxCYXJTaXplID0gc2Nyb2xsYmFyVGhpY2tuZXNzO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kZmlyZVVwZGF0ZU5leHRGcmFtZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh1c2VyQWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxUb0l0ZW0gPSB0aGlzLiRzY3JvbGxUby5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICksXHJcbiAgICAgICRtb3VzZURvd24gPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBNT1VTRV9ET1dOKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICApLFxyXG4gICAgICAkdG91Y2hTdGFydCA9IGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFRPVUNIX1NUQVJUKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICApO1xyXG5cclxuICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgS0VZX0RPV04pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoZSA9PiBlLmtleSA9PT0gS0VZX1RBQiksXHJcbiAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgRk9DVVMpLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIGRlbGF5KDApLFxyXG4gICAgICAgICAgdGFrZVVudGlsKCRzY3JvbGxUb0l0ZW0pLFxyXG4gICAgICAgICAgdGFrZVVudGlsKCRtb3VzZURvd24pLFxyXG4gICAgICAgICAgdGFrZVVudGlsKCR0b3VjaFN0YXJ0KSxcclxuICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1c0ZpcnN0RWxlbWVudCgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHNjcm9sbFRvU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChvcHRpb25zID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvU3RhcnQobnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzY3JvbGxUby5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBpZCwgY2IsIG9wdGlvbnMgfSA9IHBhcmFtcyE7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUbyhpZCwgY2IsIG9wdGlvbnMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2Nyb2xsVG9FbmQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChvcHRpb25zID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRW5kKG51bGwsIG9wdGlvbnMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kbGFuZ1RleHREaXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmxhbmdUZXh0RGlyID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGNsaWNrRGlzdGFuY2UucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNsaWNrRGlzdGFuY2UgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kc25hcFNjcm9sbFRvU3RhcnQsIHRoaXMuJGlzSW5maW5pdHldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbc25hcFNjcm9sbFRvU3RhcnQsIGlzSW5maW5pdHldKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNuYXBTY3JvbGxUb1N0YXJ0Lm5leHQoaXNJbmZpbml0eSA/IGZhbHNlIDogc25hcFNjcm9sbFRvU3RhcnQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kc25hcFNjcm9sbFRvRW5kLCB0aGlzLiRpc0luZmluaXR5XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW3NuYXBTY3JvbGxUb0VuZCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLm5leHQoaXNJbmZpbml0eSA/IGZhbHNlIDogc25hcFNjcm9sbFRvRW5kKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR2aWV3SW5pdCA9IHRoaXMuJHZpZXdJbml0LFxyXG4gICAgICAkcHJlcmVuZGVyQ29udGFpbmVyID0gb2YodGhpcy5fcHJlcmVuZGVyKTtcclxuXHJcbiAgICBjb25zdCAkcHJlcmVuZGVyID0gJHZpZXdJbml0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRwcmVyZW5kZXJDb250YWluZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHYhLiRyZW5kZXIpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCAkZmlyZVVwZGF0ZSA9IHRoaXMuJGZpcmVVcGRhdGU7XHJcbiAgICAkZmlyZVVwZGF0ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGhhc1VzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHVwZGF0ZSA9IHRoaXMuJHVwZGF0ZSxcclxuICAgICAgcmVuZGVyU3RhYmlsaXplciA9IChvcHRpb25zPzogSVJlbmRlclN0YWJpbGl6ZXJPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04sXHJcbiAgICAgICAgICByZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucyA9IDA7XHJcbiAgICAgICAgY29uc3QgcHJlcGFyZUl0ZXJhdGlvbnMgPSBvcHRpb25zPy5wcmVwYXJlSXRlcmF0aW9ucyA/PyBQUkVQQVJFX0lURVJBVElPTlMsXHJcbiAgICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGggPSBvcHRpb25zPy5wcmVwYXJlUmV1cGRhdGVMZW5ndGggPz8gUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIO1xyXG4gICAgICAgIHJldHVybiBvZihudWxsKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9IEVNUFRZX1NDUk9MTF9TVEFURV9WRVJTSU9OO1xyXG4gICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gJHVwZGF0ZS5waXBlKFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9PT0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04pIHx8IChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiAhPT0gdikpICYmXHJcbiAgICAgICAgICAgICAgICAgIChyZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucyA8IHByZXBhcmVJdGVyYXRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodiAhPT0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04pIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPT09IHYpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zIDwgcHJlcGFyZVJldXBkYXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMrKztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApXHJcbiAgICAgIH07XHJcbiAgICBjb25zdCAkaW5pdGlhbFJlbmRlclN0YWJpbGl6ZXIgPSByZW5kZXJTdGFiaWxpemVyKHtcclxuICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OUyxcclxuICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEgsXHJcbiAgICB9KSxcclxuICAgICAgJHVwZGF0ZUl0ZW1zUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGNodW5rTG9hZGluZ1JlbmRlclN0YWJpbGl6ZXIgPSByZW5kZXJTdGFiaWxpemVyKHtcclxuICAgICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgfSksXHJcbiAgICAgICRjb2xsYXBzZUl0ZW1zUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX0NPTExBUFNFX0lURU1TLFxyXG4gICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9DT0xMQVBTRV9JVEVNUyxcclxuICAgICAgfSksXHJcbiAgICAgICRpdGVtQ29uZmlnTWFwID0gdGhpcy4kaXRlbUNvbmZpZ01hcC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+ICF2ID8ge30gOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJGRpdmlkZXMgPSB0aGlzLiRkaXZpZGVzLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0aGlzLiRkeW5hbWljU2l6ZSxcclxuICAgICAgJHNuYXBTY3JvbGxUb1N0YXJ0ID0gdGhpcy5fJGFjdHVhbFNuYXBTY3JvbGxUb1N0YXJ0LmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy5fJGFjdHVhbFNuYXBTY3JvbGxUb0VuZC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuJHdhaXRGb3JQcmVwYXJhdGlvbixcclxuICAgICAgJGl0ZW1zID0gdGhpcy4kaXRlbXM7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHZpZXdJbml0LCAkcHJlcmVuZGVyQ29udGFpbmVyLCAkZGl2aWRlcywgJGR5bmFtaWNTaXplLCAkc25hcFNjcm9sbFRvU3RhcnQsICRzbmFwU2Nyb2xsVG9FbmQsICR3YWl0Rm9yUHJlcGFyYXRpb25dKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKChbaW5pdCwgcHJlcmVuZGVyQ29udGFpbmVyXSkgPT4gISFpbml0ICYmICEhcHJlcmVuZGVyQ29udGFpbmVyKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICBzd2l0Y2hNYXAoKFssIHByZXJlbmRlckNvbnRhaW5lciwgZGl2aWRlcywgZHluYW1pY1NpemUsIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIHdhaXRGb3JQcmVwYXJhdGlvbl0pID0+IHtcclxuICAgICAgICBpZiAoISFkeW5hbWljU2l6ZSAmJiAhc25hcFNjcm9sbFRvU3RhcnQgJiYgISFzbmFwU2Nyb2xsVG9FbmQgJiYgISF3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgIGNvbnN0ICRjb2xsZWN0aW9uID0gKGRpdmlkZXMgPiAxID8gJGFjdHVhbEl0ZW1zIDogJGl0ZW1zKTtcclxuICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBwTGVuZ3RoID0gcD8ubGVuZ3RoID8/IDAsIGNMZW5ndGggPSBjPy5sZW5ndGggPz8gMDtcclxuICAgICAgICAgICAgICByZXR1cm4gISgoY0xlbmd0aCA+IDApIHx8IChwTGVuZ3RoICE9PSBjTGVuZ3RoICYmIChwTGVuZ3RoID09PSAwIHx8IGNMZW5ndGggPT09IDApKSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0YXAoaXRlbXMgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbihpdGVtcywgdGhpcy5hY3R1YWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaSA9PiBvZigoaSA/PyBbXSkubGVuZ3RoID4gMCkpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCF2KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlQ2xlYW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLndhaXRGb3JQcmVwYXJhdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCF2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub2ZmKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCB3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLndhaXRGb3JQcmVwYXJhdGlvbjtcclxuICAgICAgICAgICAgICBpZiAod2FpdEZvclByZXBhcmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICRpbml0aWFsUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub2ZmKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX3JlYWR5Rm9yU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYgKCFzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICBpZiAoISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNob3cubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub2ZmKCk7XHJcbiAgICAgICAgICBjb25zdCAkY29sbGVjdGlvbiA9IChkaXZpZGVzID4gMSA/ICRhY3R1YWxJdGVtcyA6ICRpdGVtcyk7XHJcbiAgICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb24ucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIHRhcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbihpdGVtcywgdGhpcy5hY3R1YWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaSA9PiBvZigoaSA/PyBbXSkubGVuZ3RoID4gMCkpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlYWR5Rm9yU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYgKHNuYXBTY3JvbGxUb1N0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHY/Lmxlbmd0aCA+IDApLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRwcmVyZW5kZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcChjYWNoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVmcmVzaENhY2hlKGNhY2hlKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jYWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRmb2N1c2VkSWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kZm9jdXNlZEVsZW1lbnQubmV4dCh2ID8/IG51bGwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlbGVtZW50ID0+ICEhZWxlbWVudCksXHJcbiAgICAgIHRhcChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRkZWZhdWx0SXRlbVZhbHVlID0gdGhpcy4kZGVmYXVsdEl0ZW1WYWx1ZSxcclxuICAgICAgJHNlbGVjdEJ5Q2xpY2sgPSB0aGlzLiRzZWxlY3RCeUNsaWNrLFxyXG4gICAgICAkY29sbGFwc2VCeUNsaWNrID0gdGhpcy4kY29sbGFwc2VCeUNsaWNrLFxyXG4gICAgICAkaXNTY3JvbGxTdGFydCA9IHRoaXMuXyRpc1Njcm9sbFN0YXJ0LmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXNTY3JvbGxGaW5pc2hlZCA9IHRoaXMuXyRpc1Njcm9sbEVuZC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJGlzVmVydGljYWwgPSB0aGlzLiRkaXJlY3Rpb24ucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzVmVydGljYWwodiB8fCBERUZBVUxUX0RJUkVDVElPTikpLFxyXG4gICAgICApO1xyXG5cclxuICAgICRzbmFwU2Nyb2xsVG9TdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc25hcFNjcm9sbFRvU3RhcnQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNuYXBTY3JvbGxUb0VuZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc25hcFNjcm9sbFRvRW5kID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc1ZlcnRpY2FsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkeW5hbWljU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZHluYW1pYyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZGVmYXVsdEl0ZW1WYWx1ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZGVmYXVsdEl0ZW1WYWx1ZSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsU3RhcnRPZmZzZXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuX3NlcnZpY2Uuc2Nyb2xsU3RhcnRPZmZzZXQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbEVuZE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNjcm9sbEVuZE9mZnNldCA9IHRoaXMuX3NlcnZpY2Uuc2Nyb2xsRW5kT2Zmc2V0ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc1Njcm9sbFN0YXJ0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiAmJiB0aGlzLl9yZWFkeUZvclNob3cpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5vblNjcm9sbFJlYWNoU3RhcnQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc1Njcm9sbEZpbmlzaGVkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiAmJiB0aGlzLl9yZWFkeUZvclNob3cpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hFbmQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RCeUNsaWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb2xsYXBzZUJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlQnlDbGljayA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnRyYWNraW5nUHJvcGVydHlOYW1lID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkaXZpZGVzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guZGl2aWRlcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRhbGlnbm1lbnQsIHRoaXMuJGlzSW5maW5pdHldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbYWxpZ25tZW50LCBpc0luZmluaXR5XSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQubmV4dChpc0luZmluaXR5ID8gQWxpZ25tZW50cy5DRU5URVIgOiBhbGlnbm1lbnQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kc2Nyb2xsYmFyRW5hYmxlZCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoW3Njcm9sbGJhckVuYWJsZWQsIGlzSW5maW5pdHldKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzY3JvbGxiYXJFbmFibGVkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRhbGlnbm1lbnQgPSB0aGlzLiRhY3R1YWxBbGlnbm1lbnQsXHJcbiAgICAgICRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl8kcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkbGlzdEJvdW5kcyA9IHRoaXMuXyRsaXN0Qm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICAgKSwgJHNjcm9sbFNpemUgPSB0aGlzLl8kc2Nyb2xsU2l6ZS5hc09ic2VydmFibGUoKSxcclxuICAgICAgJGJ1ZmZlclNpemUgPSB0aGlzLiRidWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRtYXhCdWZmZXJTaXplID0gdGhpcy4kbWF4QnVmZmVyU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPCAwID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc25hcFRvSXRlbSA9IHRoaXMuJHNuYXBUb0l0ZW0sXHJcbiAgICAgICRzbmFwVG9JdGVtQWxpZ24gPSB0aGlzLiRzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICRzdGlja3lFbmFibGVkID0gdGhpcy4kc3RpY2t5RW5hYmxlZCxcclxuICAgICAgJGlzTGF6eSA9IHRoaXMuJGNvbGxlY3Rpb25Nb2RlLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc0xhenkodiB8fCBERUZBVUxUX0NPTExFQ1RJT05fTU9ERSkpLFxyXG4gICAgICApLFxyXG4gICAgICAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IHRoaXMuJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpLFxyXG4gICAgICApLFxyXG4gICAgICAkY29sbGFwc2luZ01vZGUgPSB0aGlzLiRjb2xsYXBzaW5nTW9kZSxcclxuICAgICAgJHNlbGVjdGluZ01vZGUgPSB0aGlzLiRzZWxlY3RpbmdNb2RlLFxyXG4gICAgICAkc2VsZWN0ZWRJZHMgPSB0aGlzLiRzZWxlY3RlZElkcyxcclxuICAgICAgJGNvbGxhcHNlZElkcyA9IHRoaXMuJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzZWRJdGVtSWRzID0gdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgIG1hcCh2ID0+IEFycmF5LmlzQXJyYXkodikgPyB2IDogW10pLFxyXG4gICAgICApLFxyXG4gICAgICAkaXRlbVRyYW5zZm9ybSA9IHRoaXMuJGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICRzY3JlZW5SZWFkZXJNZXNzYWdlID0gdGhpcy4kc2NyZWVuUmVhZGVyTWVzc2FnZSxcclxuICAgICAgJGRpc3BsYXlJdGVtcyA9IHRoaXMuX3NlcnZpY2UuJGRpc3BsYXlJdGVtcyxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuX3NlcnZpY2UuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICAkc25hcFRvSXRlbS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc25hcFRvSXRlbSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYWN0dWFsSXRlbXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1zID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRhY3R1YWxJdGVtcywgJHZpZXdJbml0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoWywgaW5pdF0pID0+IGluaXQpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNuYXBJZk5lZWQoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpdGVtQ29uZmlnTWFwLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5pdGVtQ29uZmlnTWFwID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlZElkcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZGlzcGxheUl0ZW1zLCAkc2NyZWVuUmVhZGVyTWVzc2FnZSwgJGlzVmVydGljYWwsICRzY3JvbGxTaXplLCAkYm91bmRzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbaXRlbXMsIHNjcmVlblJlYWRlck1lc3NhZ2UsIGlzVmVydGljYWwsIHNjcm9sbFNpemUsIGJvdW5kc10pID0+IHtcclxuICAgICAgICB0aGlzLl8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZS5uZXh0KFxyXG4gICAgICAgICAgZm9ybWF0U2NyZWVuUmVhZGVyTWVzc2FnZShpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgc2Nyb2xsU2l6ZSwgaXNWZXJ0aWNhbCwgYm91bmRzISlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzTGF6eS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzTGF6eSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXRlbXNDb21wb3NpdGlvbiA9ICRpdGVtcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcclxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbJGNvbGxhcHNlZEl0ZW1JZHMsICRpdGVtQ29uZmlnTWFwLCAkdHJhY2tCeSwgJGRpdmlkZXNdKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKFtjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXNdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcblxyXG4gICAgJGl0ZW1zQ29tcG9zaXRpb24ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcCgoeyBpdGVtcywgY29sbGFwc2VkSWRzLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5LCBkaXZpZGVzIH0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgISh0aGlzLmNhY2hhYmxlICYmICF0aGlzLl9jYWNoZWQgJiZcclxuICAgICAgICAgICF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb1N0YXJ0ICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICR1cGRhdGVJdGVtc1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKCh7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhpZGRlbkl0ZW1zID0gbmV3IENNYXA8SWQsIGJvb2xlYW4+KCk7XHJcblxyXG4gICAgICAgIGxldCBpc0NvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbT8uW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDApID4gMCwgY29sbGFwc2VkID0gY29sbGFwc2VkSWRzLmluY2x1ZGVzKGlkKTtcclxuICAgICAgICAgICAgaWYgKCEhZ3JvdXApIHtcclxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoaXNDb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgIGhpZGRlbkl0ZW1zLnNldChpZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxJdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbT8uW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKCEhaXRlbSAmJiBoaWRkZW5JdGVtcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWN0dWFsSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDb2xsZWN0aW9uID0gbm9ybWFsaXplQ29sbGVjdGlvbihhY3R1YWxJdGVtcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxJdGVtcy5uZXh0KG5vcm1hbGl6ZWRDb2xsZWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc1ZlcnRpY2FsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRvZ2dsZUNsYXNzTmFtZShlbCwgdiA/IENMQVNTX0xJU1RfVkVSVElDQUwgOiBDTEFTU19MSVNUX0hPUklaT05UQUwsIHYgPyBDTEFTU19MSVNUX0hPUklaT05UQUwgOiBDTEFTU19MSVNUX1ZFUlRJQ0FMKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX3RyYWNrQm94LmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2VsZWN0aW5nTW9kZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAodGhpcy5nZXRJc011bHRpU2VsZWN0aW9uKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc011bHRpU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICAoZWwgYXMgYW55KS5yb2xlID0gUk9MRV9MSVNUX0JPWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0aW5nTW9kZSA9IFNlbGVjdGluZ01vZGVzVHlwZXMuTVVMVElfU0VMRUNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc1NpbmdsZVNlbGVjdGlvbih2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgKGVsIGFzIGFueSkucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdGluZ01vZGUgPSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNOb25lU2VsZWN0aW9uKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGlvbiA9IHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgICAgIChlbCBhcyBhbnkpLnJvbGUgPSBST0xFX0xJU1Q7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdGluZ01vZGUgPSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNOb25lQ29sbGFwc2UoKSkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc05vbmVDb2xsYXBzZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLl9zZXJ2aWNlLmlzTXVsdGlwbGVDb2xsYXBzZSA9IHRoaXMuX2lzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNNdWx0aXBsZUNvbGxhcHNlKCkpIHtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5faXNNdWx0aXBsZUNvbGxhcHNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuX3NlcnZpY2UuaXNOb25lQ29sbGFwc2UgPSB0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzQWNjb3JkaW9uQ29sbGFwc2UoKSkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc0FjY29yZGlvbkNvbGxhcHNlID0gdGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzTXVsdGlwbGVDb2xsYXBzZSA9IHRoaXMuX3NlcnZpY2UuaXNOb25lQ29sbGFwc2UgPSB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkcHJldmVudFNjcm9sbFNuYXBwaW5nID0gdGhpcy4kcHJldmVudFNjcm9sbFNuYXBwaW5nO1xyXG5cclxuICAgICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZEl0ZW1JZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9yZWFkeUZvclNob3cpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAkY29sbGFwc2VJdGVtc1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IGlzQ2h1bmtMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCAkbG9hZGluZyA9IHRoaXMuJGxvYWRpbmc7XHJcbiAgICAkbG9hZGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc2tpcCgxKSxcclxuICAgICAgZmlsdGVyKHYgPT4gIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIGlzQ2h1bmtMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBzY3JvbGxiYXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoISFzY3JvbGxiYXIpIHtcclxuICAgICAgICAgIHNjcm9sbGJhci5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgICBzY3JvbGxiYXIucmVmcmVzaFNjcm9sbGJhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJGFjdHVhbEl0ZW1zLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZU5leHRGcmFtZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gJGNodW5rTG9hZGluZ1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaXNDaHVua0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZXNldENhY2hlQ2h1bmtJbmZvKCk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYmFyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxiYXIuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsYmFyLnJlZnJlc2hTY3JvbGxiYXIoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRsb2FkaW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmlsdGVyKHYgPT4gIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZSA9IChwYXJhbXM6IHtcclxuICAgICAgYWxpZ25tZW50OiBBbGlnbm1lbnQ7IHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldDogbnVtYmVyOyBwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7IHRyYWNrQnk6IHN0cmluZzsgaXNJbmZpbml0eTogYm9vbGVhbjtcclxuICAgICAgc25hcFNjcm9sbFRvU3RhcnQ6IGJvb2xlYW4sIHNuYXBTY3JvbGxUb0VuZDogYm9vbGVhbjsgYm91bmRzOiBJU2l6ZTsgbGlzdEJvdW5kczogSVNpemU7IHNjcm9sbEVuZE9mZnNldDogbnVtYmVyO1xyXG4gICAgICBpdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjxPYmplY3Q+OyBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwOyBzY3JvbGxTaXplOiBudW1iZXI7IGl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICAgIG1pbkl0ZW1TaXplOiBudW1iZXI7IG1heEl0ZW1TaXplOiBudW1iZXI7IGJ1ZmZlclNpemU6IG51bWJlcjsgbWF4QnVmZmVyU2l6ZTogbnVtYmVyOyBzdGlja3lFbmFibGVkOiBib29sZWFuOyBpc1ZlcnRpY2FsOiBib29sZWFuO1xyXG4gICAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjsgZGl2aWRlczogbnVtYmVyOyBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuOyBjYWNoZVZlcnNpb246IG51bWJlcjsgdXNlckFjdGlvbjogYm9vbGVhbjtcclxuICAgICAgc25hcFRvSXRlbTogYm9vbGVhbiwgc25hcFRvSXRlbUFsaWduOiBTbmFwVG9JdGVtQWxpZ24sIGNvbGxhcHNlZElkczogQXJyYXk8SWQ+OyBpdGVtVHJhbnNmb3JtOiBJdGVtVHJhbnNmb3JtIHwgbnVsbDtcclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGFsaWdubWVudCwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgIG1heEl0ZW1TaXplLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgc25hcFRvSXRlbSxcclxuICAgICAgICBzbmFwVG9JdGVtQWxpZ24sIHVzZXJBY3Rpb24sIGNvbGxhcHNlZElkcywgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgfSA9IHBhcmFtcztcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgaXNJbmZpbml0eSA9IHRoaXMuaXNJbmZpbml0eSwgY29sbGFwc2FibGUgPSBjb2xsYXBzZWRJZHMubGVuZ3RoID4gMCwgY2FjaGFibGUgPSB0aGlzLmNhY2hhYmxlLCBjYWNoZWQgPSB0aGlzLl9jYWNoZWQsIHdhaXRpbmdDYWNoZSA9IGNhY2hhYmxlICYmICFjYWNoZWQsXHJcbiAgICAgICAgICBlbWl0VXBkYXRlID0gIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCB3YWl0aW5nQ2FjaGUgfHwgY29sbGFwc2FibGUgfHwgaXNDaHVua0xvYWRpbmcsXHJcbiAgICAgICAgICBmaXJlVXBkYXRlID0gIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKSxcclxuICAgICAgICAgIGZpcmVVcGRhdGVBdEVkZ2VzID0gZmlyZVVwZGF0ZSB8fCAhaXNJbmZpbml0eTtcclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93IHx8IChjYWNoYWJsZSAmJiBjYWNoZWQpKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCk7XHJcbiAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgJiYgc25hcFNjcm9sbFRvRW5kID8gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlci5zY3JvbGxXaWR0aCkgOlxyXG4gICAgICAgICAgICAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzLCB2aWV3cG9ydFNpemUgPSAoaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoKSxcclxuICAgICAgICAgICAgb3B0czogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICAgIGFsaWdubWVudCwgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQgfSwgZHluYW1pY1NpemUsIGlzVmVydGljYWwsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSwgbWF4SXRlbVNpemUsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsXHJcbiAgICAgICAgICAgICAgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgc3RpY2t5RW5hYmxlZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLCBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmIChzbmFwU2Nyb2xsVG9FbmQgJiYgIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplMSwgbGVmdExheW91dE9mZnNldDogbGVmdExheW91dE9mZnNldDEgfSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplIH0pO1xyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXMgPSBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplMTtcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IGxlZnRMYXlvdXRPZmZzZXQxO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEhaXRlbVRyYW5zZm9ybSAmJiBkeW5hbWljU2l6ZSAmJiB0aGlzLl90cmFja0JveC5kZWx0YSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUxLCBsZWZ0TGF5b3V0T2Zmc2V0OiBsZWZ0TGF5b3V0T2Zmc2V0MSB9ID1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSArIHRoaXMuX3RyYWNrQm94LmRlbHRhIH0pO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTE7XHJcbiAgICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IGxlZnRMYXlvdXRPZmZzZXQxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplLCBsZWZ0TGF5b3V0T2Zmc2V0OiBsZWZ0TGF5b3V0T2Zmc2V0MSB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgb3B0cyk7XHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemU7XHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0MTtcclxuXHJcbiAgICAgICAgICAgIGlmICghIWl0ZW1UcmFuc2Zvcm0gJiYgZHluYW1pY1NpemUgJiYgdGhpcy5fdHJhY2tCb3guZGVsdGEgIT09IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplLCBsZWZ0TGF5b3V0T2Zmc2V0OiBsZWZ0TGF5b3V0T2Zmc2V0MSB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplICsgdGhpcy5fdHJhY2tCb3guZGVsdGEgfSk7XHJcbiAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplO1xyXG4gICAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0MTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNjcm9sbGVyLnRvdGFsU2l6ZSA9IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICBzY3JvbGxlci5zdGFydExheW91dE9mZnNldCA9IGxlZnRMYXlvdXRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgdGhpcy5fJHRvdGFsU2l6ZS5uZXh0KHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgICAgICAgIGlmICghXyRjcmVhdGVkLmdldFZhbHVlKCkpIHtcclxuICAgICAgICAgICAgXyRjcmVhdGVkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA9IGFjdHVhbFNjcm9sbFNpemUgKyBkZWx0YSxcclxuICAgICAgICAgICAgcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlLFxyXG4gICAgICAgICAgICByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlci5zY3JvbGxXaWR0aDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXRzQnlBbGxpZ25tZW50KCk7XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIuZGVsdGEgPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICBpZiAoKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQgJiYgc2Nyb2xsZXIuc2Nyb2xsYWJsZSkgfHxcclxuICAgICAgICAgICAgKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIGN1cnJlbnRTY3JvbGxTaXplIDw9IE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2Nyb2xsU2l6ZSAhPT0gcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCB1c2VyQWN0aW9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IDAsIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBmaXJlVXBkYXRlOiBmaXJlVXBkYXRlQXRFZGdlcywgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQoZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICgoc25hcFNjcm9sbFRvRW5kICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB8fCAoc25hcFNjcm9sbFRvRW5kICYmICFzY3JvbGxlci5zY3JvbGxhYmxlKSB8fFxyXG4gICAgICAgICAgICAoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSArIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcgPj0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUpIHx8XHJcbiAgICAgICAgICAgIChyb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICsgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUsXHJcbiAgICAgICAgICAgICAgZmlyZVVwZGF0ZTogZmlyZVVwZGF0ZUF0RWRnZXMsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULCB1c2VyQWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzY3JvbGxTaXplICE9PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICYmXHJcbiAgICAgICAgICAgICgoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSAwICYmIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPCByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSkgfHxcclxuICAgICAgICAgICAgICAoc2Nyb2xsU2l6ZSAhPT0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgfHwgY3VycmVudFNjcm9sbFNpemUgIT09IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSwgYmxlbmRpbmc6IHRydWUsIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgICAgICAgZmlyZVVwZGF0ZSwgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW1pdFVwZGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBwcmV2SXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICAgIGNvbnN0IGRlYm91bmNlZFVwZGF0ZSA9IGRlYm91bmNlKHVwZGF0ZSwgMCwgTUFYX05VTUJFUlNfT0ZfU0tJUFNfRk9SX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEpO1xyXG4gICAgJHZpZXdJbml0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFskdHJhY2tCeSwgdGhpcy4kaXNJbmZpbml0eSwgJHNuYXBTY3JvbGxUb1N0YXJ0LCAkc25hcFNjcm9sbFRvRW5kLCAkYm91bmRzLCAkbGlzdEJvdW5kcywgJHNjcm9sbEVuZE9mZnNldCwgJGFjdHVhbEl0ZW1zLCAkaXRlbUNvbmZpZ01hcCwgJHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAkYWN0dWFsSXRlbVNpemUsICRhY3R1YWxNaW5JdGVtU2l6ZSwgJGFjdHVhbE1heEl0ZW1TaXplLCAkY29sbGFwc2VkSXRlbUlkcywgJGJ1ZmZlclNpemUsICRtYXhCdWZmZXJTaXplLCAkc3RpY2t5RW5hYmxlZCwgJGlzVmVydGljYWwsXHJcbiAgICAgICAgICAkZHluYW1pY1NpemUsICRkaXZpZGVzLCAkc25hcFRvSXRlbSwgJHNuYXBUb0l0ZW1BbGlnbiwgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sICRpdGVtVHJhbnNmb3JtLCAkYWxpZ25tZW50LFxyXG4gICAgICAgICAgJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsICRjYWNoZVZlcnNpb24sIHRoaXMuJGZpcmVVcGRhdGUsXHJcbiAgICAgICAgXSkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFwKChbXHJcbiAgICAgICAgICAgIHRyYWNrQnksIGlzSW5maW5pdHksIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kcywgbGlzdEJvdW5kcywgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtYXhJdGVtU2l6ZSwgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZGl2aWRlcywgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBpdGVtVHJhbnNmb3JtLCBhbGlnbm1lbnQsIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICAgICAgXSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChwcmV2SXRlbXMgIT09IGl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgaXRlbXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwcmV2SXRlbXMgPSBpdGVtcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbmFibGVkT3B0aW1pemF0aW9uID0gdGhpcy5zY3JvbGxpbmdTZXR0aW5ncz8ub3B0aW1pemF0aW9uID8/IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgICB2ZWxvY2l0eSA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5hdmVyYWdlVmVsb2NpdHkgPz8gMCxcclxuICAgICAgICAgICAgICBpc1Njcm9sbGluZyA9IHRoaXMuXyRzY3JvbGxpbmdUby5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgIHVzZURlYm91bmNlZFVwZGF0ZSA9IChkeW5hbWljU2l6ZSAmJiAhaXRlbVRyYW5zZm9ybSkgJiYgIShzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpICYmICFpdGVtc0NoYW5nZWQgJiYgaGFzVXNlckFjdGlvbiAmJiAhaXNTY3JvbGxpbmcgJiZcclxuICAgICAgICAgICAgICAgICh2ZWxvY2l0eSA+IDAgJiYgdmVsb2NpdHkgPCBNQVhfVkVMT0NJVFlfRk9SX1NDUk9MTF9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwxKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWRPcHRpbWl6YXRpb24pIHtcclxuICAgICAgICAgICAgICBpZiAodXNlRGVib3VuY2VkVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZXhlY3V0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnksIGlzSW5maW5pdHksIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kczogYm91bmRzISwgbGlzdEJvdW5kczogbGlzdEJvdW5kcyEsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgbWF4SXRlbVNpemUsIGNvbGxhcHNlZElkcywgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc3RpY2t5RW5hYmxlZCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGRpdmlkZXMsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbiwgYWxpZ25tZW50LCBwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQsIHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsIGNhY2hlVmVyc2lvbiwgdXNlckFjdGlvbjogaGFzVXNlckFjdGlvbixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VkVXBkYXRlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1Njcm9sbGluZykge1xyXG4gICAgICAgICAgICAgIHVwZGF0ZSh7XHJcbiAgICAgICAgICAgICAgICB0cmFja0J5LCBpc0luZmluaXR5LCBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCBib3VuZHM6IGJvdW5kcyEsIGxpc3RCb3VuZHM6IGxpc3RCb3VuZHMhLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICBtYXhJdGVtU2l6ZSwgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZGl2aWRlcywgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbiwgYWxpZ25tZW50LCBwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQsIHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQsIGNhY2hlVmVyc2lvbiwgdXNlckFjdGlvbjogaGFzVXNlckFjdGlvbixcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxlciA9IHRoaXMuJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBtYXAodiA9PiB2IS5uYXRpdmVFbGVtZW50KSxcclxuICAgICAgdGFrZSgxKSxcclxuICAgICksXHJcbiAgICAgICRzY3JvbGxlclNjcm9sbCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGwpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJTY3JvbGxFbmQgPSAkc2Nyb2xsZXJDb21wb25lbnQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kc2Nyb2xsRW5kKSxcclxuICAgICAgKSxcclxuICAgICAgJHNjcm9sbGJhclNjcm9sbCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxiYXJTY3JvbGwpLFxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IHNjcm9sbEhhbmRsZXIgPSAodXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICBpZiAodXNlckFjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGJhclNjcm9sbC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJFbCAmJiAhIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgaGFzVXNlckFjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGhhc1VzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoISFzY3JvbGxlckVsICYmICEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KGZhbHNlLCB0aGlzLl9yZWFkeUZvclNob3csIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY3JvbGxIYW5kbGVyKHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGxFbmQucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICghIXNjcm9sbGVyRWwgJiYgISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgdGhpcy5fcmVhZHlGb3JTaG93LCB1c2VyQWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Nyb2xsSGFuZGxlcih1c2VyQWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxUbyA9IHRoaXMuJHNjcm9sbFRvLFxyXG4gICAgICAkc2Nyb2xsVG9FeGVjdXRvciA9IHRoaXMuJHNjcm9sbFRvRXhlY3V0b3I7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHNjcm9sbGVyLCAkdHJhY2tCeSwgJHNjcm9sbFRvXSkucGlwZShcclxuICAgICAgZmlsdGVyKChbc2Nyb2xsZXIsICwgZXZlbnRdKSA9PiAhIXNjcm9sbGVyICYmICEhZXZlbnQpLFxyXG4gICAgICBtYXAoKFtzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnRdKSA9PiAoeyBzY3JvbGxlcjogc2Nyb2xsZXIsIHRyYWNrQnksIGV2ZW50IH0pKSxcclxuICAgICAgc3dpdGNoTWFwKCh7IGV2ZW50IH0pID0+IHtcclxuICAgICAgICBjb25zdCBkID0gZXZlbnQ/LmRlbGF5ID8/IDA7XHJcbiAgICAgICAgaWYgKGQgPiAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoZXZlbnQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkZWxheShkKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihldmVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoZXZlbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxpbmdUby5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLm5leHQoZXZlbnQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFRvRXhlY3V0b3IucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcChldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCxcclxuICAgICAgICAgIHsgaWQsIGl0ZXJhdGlvbiA9IDAsIGJsZW5kaW5nID0gZmFsc2UsIGlzTGFzdEl0ZXJhdGlvbiA9IGZhbHNlLCBjYiB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgbmV4dEl0ZXJhdGlvbiA9IGl0ZXJhdGlvbiArIDEsIGZpbmlzaGVkID0gbmV4dEl0ZXJhdGlvbiA+PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGZpcmVVcGRhdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBpZiAoISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RhcnRTY3JvbGxUbygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBpZiAoISFpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZHluYW1pY1NpemUgPSB0aGlzLmR5bmFtaWNTaXplLCBpdGVtU2l6ZSA9IHRoaXMuYWN0dWFsSXRlbVNpemUsIG1pbkl0ZW1TaXplID0gdGhpcy5hY3R1YWxNaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICBtYXhJdGVtU2l6ZSA9IHRoaXMuYWN0dWFsTWF4SXRlbVNpemUsIHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuc25hcFNjcm9sbFRvRW5kO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSxcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXAgPSB0aGlzLml0ZW1Db25maWdNYXAsIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCxcclxuICAgICAgICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgICAgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQgfSwgY29sbGVjdGlvbjogaXRlbXMsIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsIG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemU6IHRoaXMubWF4QnVmZmVyU2l6ZSwgaXRlbVRyYW5zZm9ybTogdGhpcy5pdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtOiB0aGlzLnNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbjogdGhpcy5zbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgIHN0aWNreUVuYWJsZWQ6IHRoaXMuc3RpY2t5RW5hYmxlZCwgZnJvbUl0ZW1JZDogaWQsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IHRoaXMuZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIGxldCBzY3JvbGxTaXplID0gc25hcFNjcm9sbFRvRW5kICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kID9cclxuICAgICAgICAgICAgICAgIChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsV2lkdGgpIDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgb3B0cyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSAoaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoKSxcclxuICAgICAgICAgICAgICAgIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUsIGxlZnRMYXlvdXRPZmZzZXQgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHtcclxuICAgICAgICAgICAgICAgICAgLi4ub3B0cywgc2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaXNMYXN0SXRlcmF0aW9uID8gdW5kZWZpbmVkIDogaWQsXHJcbiAgICAgICAgICAgICAgICB9KSwgZGVsdGExID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUb3RhbFNpemUgPSB0b3RhbFNpemUgPCB2aWV3cG9ydFNpemUgPyB2aWV3cG9ydFNpemUgOiB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnN0YXJ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQudG90YWxTaXplID0gbm9ybWFsaXplZFRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIG5vcm1hbGl6ZWRUb3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXRzQnlBbGxpZ25tZW50KCk7XHJcblxyXG4gICAgICAgICAgICAgIHNjcm9sbFNpemUgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaWQgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBub3RDaGFuZ2VkID0gc2Nyb2xsU2l6ZSA9PT0gY3VycmVudFNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgaWYgKCFub3RDaGFuZ2VkICYmIGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsU2l6ZSwgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgICAgICAgICAgICAgIGZpcmVVcGRhdGUsIGJsZW5kaW5nLCBmb3JjZTogdHJ1ZSwgc25hcDogZmFsc2UsIG5vcm1hbGl6ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHtcclxuICAgICAgICAgICAgICAgICAgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2JcclxuICAgICAgICAgICAgICAgIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbdHJ1ZSwgeyBpZCwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdHJhY2tCeV0gPT09IGlkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplID0gdGhpcy5hY3R1YWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgIGxldCBzY3JvbGxTaXplID0gaW5kZXggKiBpdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNuYXBUb0l0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc25hcFRvSXRlbUFsaWduKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNuYXBUb0l0ZW1BbGlnbnMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgKz0gaXRlbVNpemUgKiAuNTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSxcclxuICAgICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQgfSwgY29sbGVjdGlvbjogaXRlbXMsIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsIG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5tYXhCdWZmZXJTaXplLCBpdGVtVHJhbnNmb3JtOiB0aGlzLml0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZTogKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtOiB0aGlzLnNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbjogdGhpcy5zbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5RW5hYmxlZDogdGhpcy5zdGlja3lFbmFibGVkLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5lbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSAoaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgeyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZSwgbGVmdExheW91dE9mZnNldCB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxUb3RhbFNpemUgPSB0aGlzLmlzSW5maW5pdHkgPyAodG90YWxTaXplICsgdmlld3BvcnRTaXplKSA6IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVG90YWxTaXplID0gYWN0dWFsVG90YWxTaXplIDwgdmlld3BvcnRTaXplID8gdmlld3BvcnRTaXplIDogYWN0dWFsVG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnN0YXJ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC50b3RhbFNpemUgPSBub3JtYWxpemVkVG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCBub3JtYWxpemVkVG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHBpbmdIYW5kbGVyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXRzQnlBbGxpZ25tZW50KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGZpcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgYmxlbmRpbmcsIGZvcmNlOiB0cnVlLCBzbmFwOiBmYWxzZSwgbm9ybWFsaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsIGNiIH1dKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtmaW5pc2hlZCwgcGFyYW1zXSkgPT4ge1xyXG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLm5leHQocGFyYW1zIGFzIElTY3JvbGxQYXJhbXMpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbGluZ1RvLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5maW5pc2hlZFNjcm9sbFRvKCk7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsUGFyYW1zID0gcGFyYW1zIGFzIElTY3JvbGxQYXJhbXMgJiB7IHNjcm9sbENhbGxlZDogYm9vbGVhbjsgfTtcclxuICAgICAgICBzY3JvbGxQYXJhbXM/LmNiPy4oKTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlbGF5KDApLFxyXG4gICAgICB0YXAoKFtmaW5pc2hlZF0pID0+IHtcclxuICAgICAgICBpZiAoZmluaXNoZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zbmFwSWZOZWVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRoaXMuJGl0ZW1SZW5kZXJlcjtcclxuXHJcbiAgICAkaXRlbVJlbmRlcmVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGJvdW5kcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICBjb25zdCBzaXplOiBJU2l6ZSA9IHsgd2lkdGg6IHZhbHVlIS53aWR0aCwgaGVpZ2h0OiB2YWx1ZSEuaGVpZ2h0IH07XHJcbiAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLmVtaXQob2JqZWN0QXNSZWFkb25seShzaXplKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR2aXJ0dWFsQ2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQob2JqZWN0QXNSZWFkb25seSh2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9IDA7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gfHwgKHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgICBpZiAoKHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHxcclxuICAgICAgICAgICAgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0ZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdJbml0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSB8fCB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UpICYmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMubmV4dCh2KTtcclxuICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2UuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtQ29uZmlnTWFwLCAkZHluYW1pY1NpemUsICRkaXZpZGVzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW2l0ZW1Db25maWdNYXAsIGR5bmFtaWNTaXplLCBkaXZpZGVzXSkgPT4gISFpdGVtQ29uZmlnTWFwICYmICFkeW5hbWljU2l6ZSAmJiBkaXZpZGVzID4gMSksXHJcbiAgICAgIHRhcCgoW2l0ZW1Db25maWdNYXBdKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBpdGVtQ29uZmlnTWFwKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXRhRGF0YSA9IGl0ZW1Db25maWdNYXBbaWRdO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhPy5mdWxsU2l6ZSB8fCBtZXRhRGF0YT8uc3RpY2t5ID09PSAxIHx8IG1ldGFEYXRhPy5zdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBhY2NlbGVyYXRlZCByZW5kZXJpbmcgYWxnb3JpdGhtIGBbZHluYW1pY1NpemVdPVwiZmFsc2VcImAgY2Fubm90IGNvcnJlY3RseSBoYW5kbGUgbm9uLXVuaWZvcm0gbGlzdHMgKHRoZSBpdGVtQ29uZmlnTWFwIHNwZWNpZmllcyBmdWxsLXNpemUgZWxlbWVudHMpLiBGb3IgY29ycmVjdCByZW5kZXJpbmcsIHNwZWNpZnkgYFtkeW5hbWljU2l6ZV09XCJ0cnVlXCJgLicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRjb2xsYXBzaW5nTW9kZSwgJGl0ZW1zLCAkaXRlbUNvbmZpZ01hcCwgJHRyYWNrQnldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbY29sbGFwc2luZ01vZGUsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5XSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gaXNDb2xsYXBzZU1vZGUoY29sbGFwc2luZ01vZGUsIENvbGxhcHNpbmdNb2Rlcy5BQ0NPUkRJT04pO1xyXG4gICAgICAgIGlmIChpc0FjY29yZGlvbikge1xyXG4gICAgICAgICAgY29uc3QgYWxsR3JvdXBzOiBBcnJheTxJZD4gPSBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldLCBpZCA9IGl0ZW1bdHJhY2tCeV0sIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcD8uW2lkXT8uY29sbGFwc2FibGUgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFsbEdyb3Vwcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlIHx8IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSkgJiYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShhbGxHcm91cHMpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KGFsbEdyb3Vwcyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Db2xsYXBzZS5lbWl0KGNvcHlWYWx1ZUFzUmVhZG9ubHkoYWxsR3JvdXBzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZEl0ZW1JZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlZElkcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRkZXN0cm95LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZS5kaXNwb3NlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kdmlld0luaXQubmV4dCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BZnRlclJlc2l6ZSh1cGRhdGUgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyAmJiB1cGRhdGUpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCB1cGRhdGViYWxlID0gdGhpcy5fcmVhZHlGb3JTaG93O1xyXG4gICAgICAgIGlmICh1cGRhdGViYWxlKSB7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Nyb2xsZXIucmVmcmVzaCh1cGRhdGViYWxlLCB1cGRhdGViYWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0JvdW5kc09mRWxlbWVudHMoKSB7XHJcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fdHJhY2tCb3guY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk7XHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICBjb25zdCByZWFkeUZvclNob3cgPSB0aGlzLl9yZWFkeUZvclNob3csXHJcbiAgICAgICAgaXNTY3JvbGxpbmcgPSB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcyh0cnVlLCByZWFkeUZvclNob3cgJiYgIWlzU2Nyb2xsaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc25hcHBpbmdIYW5kbGVyKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsXHJcbiAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IE1hdGgucm91bmQoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA/PyAwIDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPz8gMCksXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbExlZnQgPz8gMCxcclxuICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gTWF0aC5yb3VuZChzY3JvbGxTaXplKTtcclxuICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyAmJiAhdGhpcy5faXNMb2FkaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXNTY3JvbGxFbmQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA+PSAobWF4U2Nyb2xsU2l6ZSAtIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB8fCAhc2Nyb2xsZXIuc2Nyb2xsYWJsZSB8fCB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICBpZiAoaXNTY3JvbGxFbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsU3RhcnQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA8PSBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoaXNTY3JvbGxTdGFydCk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gaXNTY3JvbGxTdGFydDtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICBjb25zdCBzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpLCBzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKCFzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGVtaXRTY3JvbGxFdmVudChpc1Njcm9sbEVuZDogYm9vbGVhbiA9IGZhbHNlLCB1cGRhdGU6IGJvb2xlYW4gPSB0cnVlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICBtYXhTY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxXaWR0aCksXHJcbiAgICAgICAgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH07XHJcbiAgICAgIGNvbnN0IGl0ZW1zUmFuZ2UgPSBmb3JtYXRBY3R1YWxEaXNwbGF5SXRlbXModGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXMsIHRoaXMuXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLCB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSwgaXNWZXJ0aWNhbCwgYm91bmRzKSxcclxuICAgICAgICBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxEaXJlY3Rpb24gPz8gMCwgY29udGFpbmVyOiBzY3JvbGxlckVsLFxyXG4gICAgICAgICAgbGlzdDogdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiB0aGlzLl90cmFja0JveC5kZWx0YU9mTmV3SXRlbXMsIGlzVmVydGljYWwsXHJcbiAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgaXRlbXNSYW5nZSxcclxuICAgICAgICAgIGlzRW5kOiAhc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsYWJsZSB8fCB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCB8fCAoTWF0aC5yb3VuZChzY3JvbGxTaXplKSA9PT0gTWF0aC5yb3VuZChtYXhTY3JvbGxTaXplKSksXHJcbiAgICAgICAgICB1c2VyQWN0aW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU2Nyb2xsRW5kKSB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5zbmFwcGluZ01ldGhvZDtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb25lU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NpbmdsZVNlbGVjdGlvbihtPzogU2VsZWN0aW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5zZWxlY3RpbmdNb2RlO1xyXG4gICAgcmV0dXJuIGlzU2VsZWN0TW9kZShtb2RlLCBTZWxlY3RpbmdNb2Rlcy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLk1VTFRJX1NFTEVDVCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTm9uZUNvbGxhcHNlKG0/OiBDb2xsYXBzaW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsYXBzaW5nTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxhcHNlTW9kZShtb2RlLCBDb2xsYXBzaW5nTW9kZXMuTk9ORSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTXVsdGlwbGVDb2xsYXBzZShtPzogQ29sbGFwc2luZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGFwc2luZ01vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsYXBzZU1vZGUobW9kZSwgQ29sbGFwc2luZ01vZGVzLk1VTFRJX0NPTExBUFNFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNBY2NvcmRpb25Db2xsYXBzZShtPzogQ29sbGFwc2luZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGFwc2luZ01vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsYXBzZU1vZGUobW9kZSwgQ29sbGFwc2luZ01vZGVzLkFDQ09SRElPTik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc0xhenkobT86IENvbGxlY3Rpb25Nb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLmNvbGxlY3Rpb25Nb2RlO1xyXG4gICAgcmV0dXJuIGlzQ29sbGVjdGlvbk1vZGUobW9kZSwgQ29sbGVjdGlvbk1vZGVzLkxBWlkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zdGlja3lFbmFibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMubGVuZ3RoIDwgTUFYX1JFR1VMQVJfU05BUEVEX0NPTVBPTkVOVFMgJiYgISF0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPCBNQVhfUkVHVUxBUl9TTkFQRURfQ09NUE9ORU5UUykge1xyXG4gICAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5wdXNoKGNvbXApO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzO1xyXG4gICAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgbGlzdENvbnRhaW5lclJlZiA9IHRoaXMuX2xpc3RDb250YWluZXJSZWY7XHJcblxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gZGlzcGxheUl0ZW1zLmxlbmd0aCwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIGlmICghIWxpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgZG9NYXA6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIGZvciAobGV0IGwgPSBjb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnRzW2ldO1xyXG4gICAgICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbS5pbnN0YW5jZS5pZDtcclxuICAgICAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gbGlzdENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICBjb25zdCBpZCA9IGNvbXAuaW5zdGFuY2UuaWQ7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZW5kZXJlciA9IHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU9mZnNldHNCeUFsbGlnbm1lbnQoKSB7XHJcbiAgICBjb25zdCBhbGlnbm1lbnQgPSB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmdldFZhbHVlKCksIGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCksIHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksXHJcbiAgICAgIGlzSW5maW5pdHkgPSB0aGlzLmlzSW5maW5pdHksIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsXHJcbiAgICAgIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xyXG4gICAgICBjYXNlIEFsaWdubWVudHMuTk9ORToge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5uZXh0KHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5uZXh0KHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgQWxpZ25tZW50cy5DRU5URVI6IHtcclxuICAgICAgICBjb25zdCBmaXJzdEl0ZW1JZDogSWQgfCBudWxsID0gaXRlbXMubGVuZ3RoID4gMCA/IChpdGVtc1swXT8uW3RyYWNrQnldID8/IG51bGwpIDogbnVsbCxcclxuICAgICAgICAgIGVuZEl0ZW1JZDogSWQgfCBudWxsID0gaXRlbXMubGVuZ3RoID4gMCA/IChpdGVtcz8uW2l0ZW1zLmxlbmd0aCAtIDFdPy5bdHJhY2tCeV0gPz8gbnVsbCkgOiBudWxsLFxyXG4gICAgICAgICAgYWxpZ25tZW50U3RhcnRPZmZzZXQgPSB2aWV3cG9ydFNpemUgKiAuNSAtIChmaXJzdEl0ZW1JZCAhPT0gbnVsbCA/IChpc1ZlcnRpY2FsID8gKHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhmaXJzdEl0ZW1JZCk/LmhlaWdodCA/PyAwKSA6XHJcbiAgICAgICAgICAgICh0aGlzLl9zZXJ2aWNlLmdldEl0ZW1Cb3VuZHMoZmlyc3RJdGVtSWQpPy53aWR0aCA/PyAwKSkgOiAwKSAqIChpc0luZmluaXR5ID8gMCA6IC41KSxcclxuICAgICAgICAgIGFsaWdubWVudEVuZE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41IC0gKGVuZEl0ZW1JZCAhPT0gbnVsbCA/IChpc1ZlcnRpY2FsID8gKHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhlbmRJdGVtSWQpPy5oZWlnaHQgPz8gMCkgOlxyXG4gICAgICAgICAgICAodGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGVuZEl0ZW1JZCk/LndpZHRoID8/IDApKSA6IDApICogKGlzSW5maW5pdHkgPyAwIDogLjUpO1xyXG5cclxuICAgICAgICB0aGlzLl8kYWxpZ25tZW50U2Nyb2xsU3RhcnRPZmZzZXQubmV4dChhbGlnbm1lbnRTdGFydE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldC5uZXh0KGFsaWdubWVudEVuZE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQocHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0ICsgYWxpZ25tZW50U3RhcnRPZmZzZXQpO1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTY3JvbGxFbmRPZmZzZXQubmV4dChwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0ICsgYWxpZ25tZW50RW5kT2Zmc2V0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVSZWd1bGFyUmVuZGVyZXIoKSB7XHJcbiAgICB0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYWNraW5nKCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gudHJhY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWw6IGJvb2xlYW4sIHRvdGFsU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSwgcHJvcCA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICBzaXplID0gdG90YWxTaXplO1xyXG4gICAgaWYgKCEhbCAmJiBwYXJzZUludChsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbcHJvcF0pICE9PSBzaXplKSB7XHJcbiAgICAgIGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSA9IGAke3NpemV9JHtQWH1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1cyhpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNCeUlkKGlkLCBhbGlnbiwgdGhpcy5zY3JvbGxCZWhhdmlvcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmcgPSBvcHRpb25zPy5ibGVuZGluZyA/PyBmYWxzZSxcclxuICAgICAgZm9jdXNlZCA9IG9wdGlvbnM/LmZvY3VzZWQgPz8gdHJ1ZSxcclxuICAgICAgZGVsYXkgPSBvcHRpb25zPy5kZWxheSA/PyAwLFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSAmJiAhdGhpcy5pc0luZmluaXR5KSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgIGlkLCBiZWhhdmlvciwgYmxlbmRpbmcsIGRlbGF5LCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBzY3JvbGwgYXJlYSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBzY3JvbGxUb1N0YXJ0KGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSB0aGlzLmlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0O1xyXG4gICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiZWhhdmlvciA9IG9wdGlvbnM/LmJlaGF2aW9yID8/IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gb3B0aW9ucz8uYmxlbmRpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGZvY3VzZWQgPSBvcHRpb25zPy5mb2N1c2VkID8/IHRydWUsXHJcbiAgICAgIGRlbGF5ID0gb3B0aW9ucz8uZGVsYXkgPz8gMCxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpLCBmaXJzdEl0ZW0gPSBpdGVtcy5sZW5ndGggPiAwID8gaXRlbXNbMF0gPz8gbnVsbCA6IG51bGwsIGlkID0gZmlyc3RJdGVtPy5bdHJhY2tCeV0gPz8gbnVsbCxcclxuICAgICAgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGlmICghIWZpcnN0SXRlbSkge1xyXG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgIGlkLCBiZWhhdmlvciwgYmxlbmRpbmcsIGRlbGF5LCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmRJdGVtKGNiPzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCxcclxuICAgICAgICBtYXhTY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFRvcDtcclxuICAgICAgaWYgKHNjcm9sbFNpemUgPT09IG1heFNjcm9sbFNpemUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IG9wdGlvbnM/LmJsZW5kaW5nID8/IGZhbHNlLFxyXG4gICAgICBmb2N1c2VkID0gb3B0aW9ucz8uZm9jdXNlZCA/PyB0cnVlLFxyXG4gICAgICBkZWxheSA9IG9wdGlvbnM/LmRlbGF5ID8/IDAsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSwgbGF0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMF0sIGlkID0gbGF0SXRlbT8uW3RyYWNrQnldID8/IG51bGwsXHJcbiAgICAgIGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBpZiAobGF0SXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIGlmICghdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgZGVsYXksIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvRmluYWxpemUoaWQ6IElkLCBmb2N1c2VkOiBib29sZWFuLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCkge1xyXG4gICAgaWYgKGZvY3VzZWQpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9zZXJ2aWNlLmdldEZvY3VzZWRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCwgRm9jdXNBbGlnbm1lbnRzLk5PTkUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNiPy4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjbGVhbnVwKCkge1xyXG4gICAgY29uc3QgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcbiAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcbiAgICB0aGlzLnRyYWNraW5nKCk7XHJcbiAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgY2xlYXJpbmcgdGhlIGNhY2hlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjYWNoZUNsZWFuKCkge1xyXG4gICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5keW5hbWljU2l6ZSkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jYWNoZUNsZWFuKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVyZW5kZXJDb250YWluZXIgPSB0aGlzLl9wcmVyZW5kZXI7XHJcbiAgICBpZiAoISFwcmVyZW5kZXJDb250YWluZXIpIHtcclxuICAgICAgcHJlcmVuZGVyQ29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIHByZXJlbmRlckNvbnRhaW5lci5vZmYoKTtcclxuICAgIH1cclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCgwKTtcclxuICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoMCk7XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIucmVzZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHByZXZlbnRTbmFwcGluZyBtZXRob2QuXHJcbiAgICovXHJcbiAgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQoKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHByZXZlbnRTbmFwcGluZyBtZXRob2QuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50cyB0aGUgbGlzdCBmcm9tIHNuYXBwaW5nIHRvIGl0cyBzdGFydCBvciBlbmQgZWRnZS5cclxuICAgKi9cclxuICBwcmV2ZW50U25hcHBpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLl8kZGVzdHJveS5uZXh0KCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlSWQgPSB0aGlzLl91cGRhdGVJZDtcclxuICAgIGlmICh1cGRhdGVJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUlkKTtcclxuICAgICAgdGhpcy5fdXBkYXRlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5fc2VydmljZS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fdHJhY2tCb3gpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgY29tcD8uZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgY29tcD8uZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgY2xhc3M9XCJuZ3ZsX19zY3JlZW4tcmVhZGVyXCI+XHJcbiAge3sgJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UgfCBhc3luYyB9fVxyXG48L2Rpdj5cclxuXHJcbjxuZy1wcmVyZW5kZXItY29udGFpbmVyICNwcmVyZW5kZXIgW2JvdW5kc109XCIoJGJvdW5kcyB8IGFzeW5jKSFcIiBbZGlyZWN0aW9uXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiXHJcbiAgW2R5bmFtaWNdPVwiKCRkeW5hbWljU2l6ZSB8IGFzeW5jKSFcIiBbZGl2aWRlc109XCIoJGRpdmlkZXMgfCBhc3luYykhXCIgW2lzVmVydGljYWxdPVwiKCRpc1ZlcnRpY2FsIHwgYXN5bmMpIVwiXHJcbiAgW2l0ZW1TaXplXT1cIigkYWN0dWFsSXRlbVNpemUgfCBhc3luYykhXCIgW3RyYWNrQnldPVwiKCR0cmFja0J5IHwgYXN5bmMpIVwiIFtpdGVtUmVuZGVyZXJdPVwiKCRpdGVtUmVuZGVyZXIgfCBhc3luYykhXCJcclxuICBbc3RhcnRPZmZzZXRdPVwiKCRzdGFydE9mZnNldCB8IGFzeW5jKSFcIiBbZW5kT2Zmc2V0XT1cIigkZW5kT2Zmc2V0IHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhckVuYWJsZWRdPVwiKHNjcm9sbGVyLiRzY3JvbGxiYXJTaG93IHwgYXN5bmMpIVwiXHJcbiAgW2VuYWJsZWRdPVwiKCRwcmVyZW5kZXJFbmFibGVkIHwgYXN5bmMpIVwiPjwvbmctcHJlcmVuZGVyLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIoJHN0aWNreUVuYWJsZWQgfCBhc3luYykhXCI+XHJcbiAgPGRpdiBsb2NhbGVTZW5zaXRpdmUgW2xhbmdUZXh0RGlyXT1cIigkbGFuZ1RleHREaXIgfCBhc3luYykhXCIgI3NuYXBwZWRDb250YWluZXIgY2xhc3M9XCJuZ3ZsX19zbmFwcGVkLWNvbnRhaW5lclwiXHJcbiAgICBbbmdDbGFzc109XCIoJGNsYXNzZXMgfCBhc3luYylcIj5cclxuICAgIDxkaXYgI3NuYXBwZWQgcGFydD1cInNuYXBwZWQtaXRlbVwiIGNsYXNzPVwibmd2bF9fbGlzdC1zbmFwcGVyXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgI3NuYXBSZW5kZXJlckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1zY3JvbGxlciAjc2Nyb2xsZXIgY2xhc3M9XCJuZ3ZsX19saXN0LXNjcm9sbGVyXCIgW2NsYXNzZXNdPVwiKCRjbGFzc2VzIHwgYXN5bmMpIVwiXHJcbiAgW3N0YXJ0T2Zmc2V0XT1cIigkc3RhcnRPZmZzZXQgfCBhc3luYykhXCIgW2VuZE9mZnNldF09XCIoJGVuZE9mZnNldCB8IGFzeW5jKSFcIlxyXG4gIFthbGlnbm1lbnRTdGFydE9mZnNldF09XCIoJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiXHJcbiAgW2FsaWdubWVudEVuZE9mZnNldF09XCIoJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldCB8IGFzeW5jKSFcIiBbZGlyZWN0aW9uXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhclRodW1iUmVuZGVyZXJdPVwiKCRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyIHwgYXN5bmMpIVwiIFtpc0luZmluaXR5XT1cIigkaXNJbmZpbml0eSB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJUaGlja25lc3NdPVwiKCRzY3JvbGxiYXJUaGlja25lc3MgfCBhc3luYykhXCIgW3Njcm9sbGJhclRodW1iUGFyYW1zXT1cIigkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgfCBhc3luYykhXCJcclxuICBbYW5pbWF0aW9uUGFyYW1zXT1cIigkYW5pbWF0aW9uUGFyYW1zIHwgYXN5bmMpIVwiIFtmb2N1c2VkRWxlbWVudF09XCIoJGZvY3VzZWRFbGVtZW50IHwgYXN5bmMpIVwiXHJcbiAgW2xvYWRpbmddPVwiKCRsb2FkaW5nIHwgYXN5bmMpIVwiIFtvdmVyc2Nyb2xsRW5hYmxlZF09XCIoJG92ZXJzY3JvbGxFbmFibGVkIHwgYXN5bmMpIVwiXHJcbiAgW3NuYXBwaW5nRGlzdGFuY2VdPVwiKCRzbmFwcGluZ0Rpc3RhbmNlIHwgYXN5bmMpIVwiIFtvdmVybGFwcGluZ1Njcm9sbGJhcl09XCIoJG92ZXJsYXBwaW5nU2Nyb2xsYmFyIHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhckVuYWJsZWRdPVwiKCRhY3R1YWxTY3JvbGxiYXJFbmFibGVkIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJJbnRlcmFjdGl2ZV09XCIoJHNjcm9sbGJhckludGVyYWN0aXZlIHwgYXN5bmMpIVwiXHJcbiAgW3NuYXBUb0l0ZW1dPVwiKCRzbmFwVG9JdGVtIHwgYXN5bmMpIVwiIFtzbmFwVG9JdGVtQWxpZ25dPVwiKCRzbmFwVG9JdGVtQWxpZ24gfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyTWluU2l6ZV09XCIoJHNjcm9sbGJhck1pblNpemUgfCBhc3luYykhXCIgW3Njcm9sbEJlaGF2aW9yXT1cIigkc2Nyb2xsQmVoYXZpb3IgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsaW5nU2V0dGluZ3NdPVwiKCRzY3JvbGxpbmdTZXR0aW5ncyB8IGFzeW5jKSFcIiBbc2Nyb2xsaW5nT25lQnlPbmVdPVwiKCRzY3JvbGxpbmdPbmVCeU9uZSB8IGFzeW5jKSFcIlxyXG4gIFttb3Rpb25CbHVyXT1cIigkbW90aW9uQmx1ciB8IGFzeW5jKSFcIiBbbWF4TW90aW9uQmx1cl09XCIoJG1heE1vdGlvbkJsdXIgfCBhc3luYykhXCJcclxuICBbbW90aW9uQmx1ckVuYWJsZWRdPVwiKCRtb3Rpb25CbHVyRW5hYmxlZCB8IGFzeW5jKSFcIj5cclxuICA8bmctY29udGFpbmVyICNyZW5kZXJlcnNDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjwvbmctc2Nyb2xsZXI+Il19
|