fantasy-ngzorro 2.2.35 → 2.2.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/fantasy-ngzorro.umd.js +34 -8
- package/bundles/fantasy-ngzorro.umd.js.map +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js.map +1 -1
- package/esm2015/hd-table/hd-table.component.js +37 -11
- package/esm5/hd-table/hd-table.component.js +36 -10
- package/fantasy-ngzorro.metadata.json +1 -1
- package/fesm2015/fantasy-ngzorro.js +35 -9
- package/fesm2015/fantasy-ngzorro.js.map +1 -1
- package/fesm5/fantasy-ngzorro.js +34 -8
- package/fesm5/fantasy-ngzorro.js.map +1 -1
- package/package.json +2 -2
|
@@ -12,7 +12,7 @@ import { debounceTime, delay } from "rxjs/operators";
|
|
|
12
12
|
import { ColWidth } from "../model/colWidth";
|
|
13
13
|
import { Page } from "../model/common-type";
|
|
14
14
|
import { CommonSessionService } from "../service/common-session.service";
|
|
15
|
-
import { getTableScrollXViewportWidth, getTableViewportWidth,
|
|
15
|
+
import { getTableScrollXViewportWidth, getTableViewportWidth, } from "../utils/hd-table-scroll.util";
|
|
16
16
|
import { TableCacheOption, TreeGrid, } from "./hd-table.service";
|
|
17
17
|
export class HdTableComponent {
|
|
18
18
|
/**
|
|
@@ -719,12 +719,19 @@ export class HdTableComponent {
|
|
|
719
719
|
return;
|
|
720
720
|
}
|
|
721
721
|
/** @type {?} */
|
|
722
|
+
const prevHasX = !!(this.scroll && this.scroll.x);
|
|
723
|
+
/** @type {?} */
|
|
722
724
|
const prevHasY = !!(this.scroll && this.scroll.y);
|
|
723
725
|
this.dealScroll();
|
|
724
726
|
/** @type {?} */
|
|
727
|
+
const nextHasX = !!(this.scroll && this.scroll.x);
|
|
728
|
+
/** @type {?} */
|
|
725
729
|
const nextHasY = !!(this.scroll && this.scroll.y);
|
|
726
|
-
// 运行中 y
|
|
727
|
-
|
|
730
|
+
// 运行中 x/y 从有变无/从无变有时,也必须重建:
|
|
731
|
+
// - y:ng-zorro 只在 AfterViewInit 绑一次 header/body 同步
|
|
732
|
+
// - x:空表 scroll.x=null(table-layout:auto)→ 有数据后设 scroll.x(fixed),
|
|
733
|
+
// 不重建时勾选列仍按 auto 均摊撑开(收款编辑等异步灌数页)
|
|
734
|
+
if (prevHasY !== nextHasY || prevHasX !== nextHasX) {
|
|
728
735
|
this.showTable = false;
|
|
729
736
|
this.cdr.markForCheck();
|
|
730
737
|
setTimeout((/**
|
|
@@ -737,6 +744,8 @@ export class HdTableComponent {
|
|
|
737
744
|
* @return {?}
|
|
738
745
|
*/
|
|
739
746
|
() => {
|
|
747
|
+
this.dealScroll();
|
|
748
|
+
this.cdr.markForCheck();
|
|
740
749
|
this.afterTableRender(useVirtual);
|
|
741
750
|
}));
|
|
742
751
|
}));
|
|
@@ -1490,9 +1499,17 @@ export class HdTableComponent {
|
|
|
1490
1499
|
};
|
|
1491
1500
|
}
|
|
1492
1501
|
/** @type {?} */
|
|
1493
|
-
|
|
1502
|
+
let viewportCompare = this.nzTableComponent
|
|
1494
1503
|
? getTableScrollXViewportWidth(this.nzTableComponent)
|
|
1495
1504
|
: 0;
|
|
1505
|
+
// 表体尚未量到宽时(异步灌数 / spin / 刚 remount),用宿主宽兜底
|
|
1506
|
+
if (viewportCompare <= 0 && this.hostEl && this.hostEl.nativeElement) {
|
|
1507
|
+
/** @type {?} */
|
|
1508
|
+
const hostW = ((/** @type {?} */ (this.hostEl.nativeElement))).offsetWidth;
|
|
1509
|
+
if (hostW > 0) {
|
|
1510
|
+
viewportCompare = hostW;
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1496
1513
|
if (viewportCompare > 0) {
|
|
1497
1514
|
if (declaredColWidth > viewportCompare + 1) {
|
|
1498
1515
|
return {
|
|
@@ -1517,10 +1534,10 @@ export class HdTableComponent {
|
|
|
1517
1534
|
isFluid: true,
|
|
1518
1535
|
};
|
|
1519
1536
|
}
|
|
1520
|
-
|
|
1521
|
-
|
|
1537
|
+
// 视口仍测不到:至少用声明宽设 scroll.x,强制 fixed 布局锁勾选列,
|
|
1538
|
+
// 避免落回 table-layout:auto 被均摊撑开;后续 sync/remount 再转 fluid。
|
|
1522
1539
|
return {
|
|
1523
|
-
scrollX:
|
|
1540
|
+
scrollX: `${Math.ceil(declaredColWidth)}px`,
|
|
1524
1541
|
fluidExtra: 0,
|
|
1525
1542
|
displayTotal: declaredColWidth,
|
|
1526
1543
|
isFluid: false,
|
|
@@ -1546,16 +1563,20 @@ export class HdTableComponent {
|
|
|
1546
1563
|
* @return {?}
|
|
1547
1564
|
*/
|
|
1548
1565
|
(item) => {
|
|
1549
|
-
if (item && item.isShow) {
|
|
1566
|
+
if (item && item.isShow !== false) {
|
|
1550
1567
|
declared += item.width > 0 ? item.width : ColWidth.fixColWidth;
|
|
1551
1568
|
}
|
|
1552
1569
|
}));
|
|
1553
1570
|
}
|
|
1554
1571
|
/** @type {?} */
|
|
1572
|
+
const prevHasX = !!(this.scroll && this.scroll.x);
|
|
1573
|
+
/** @type {?} */
|
|
1555
1574
|
const layout = this.resolveHorizontalLayout(declared);
|
|
1556
1575
|
/** @type {?} */
|
|
1557
1576
|
const currentY = this.scroll ? this.scroll.y : null;
|
|
1558
1577
|
/** @type {?} */
|
|
1578
|
+
const nextHasX = !!layout.scrollX;
|
|
1579
|
+
/** @type {?} */
|
|
1559
1580
|
const sameX = this.scroll && this.scroll.x === layout.scrollX;
|
|
1560
1581
|
/** @type {?} */
|
|
1561
1582
|
const sameExtra = this.fluidExtraWidth === layout.fluidExtra;
|
|
@@ -1578,6 +1599,11 @@ export class HdTableComponent {
|
|
|
1578
1599
|
this.tableColWidthTotal = layout.displayTotal;
|
|
1579
1600
|
this.scroll = { x: layout.scrollX, y: currentY };
|
|
1580
1601
|
this.cdr.markForCheck();
|
|
1602
|
+
// sync 阶段若补上了 scroll.x,需重建才能切到 fixed 布局
|
|
1603
|
+
if (prevHasX !== nextHasX) {
|
|
1604
|
+
this.applyTableScrollMode(true);
|
|
1605
|
+
return;
|
|
1606
|
+
}
|
|
1581
1607
|
setTimeout((/**
|
|
1582
1608
|
* @return {?}
|
|
1583
1609
|
*/
|
|
@@ -1832,7 +1858,7 @@ export class HdTableComponent {
|
|
|
1832
1858
|
if (!item.width) {
|
|
1833
1859
|
item.width = ColWidth.fixColWidth;
|
|
1834
1860
|
}
|
|
1835
|
-
if (item.isShow) {
|
|
1861
|
+
if (item.isShow !== false) {
|
|
1836
1862
|
item.fixedWidth = colWidth;
|
|
1837
1863
|
colWidth += item.width;
|
|
1838
1864
|
}
|
|
@@ -1843,7 +1869,7 @@ export class HdTableComponent {
|
|
|
1843
1869
|
for (let i = this.tableCols.length - 1; i >= 0; i--) {
|
|
1844
1870
|
/** @type {?} */
|
|
1845
1871
|
const item = this.tableCols[i];
|
|
1846
|
-
if (
|
|
1872
|
+
if (item.isShow === false) {
|
|
1847
1873
|
continue;
|
|
1848
1874
|
}
|
|
1849
1875
|
if (item.fixed === "right") {
|
|
@@ -3192,4 +3218,4 @@ if (false) {
|
|
|
3192
3218
|
*/
|
|
3193
3219
|
HdTableComponent.prototype.commonSessionService;
|
|
3194
3220
|
}
|
|
3195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZmFudGFzeS1uZ3pvcnJvLyIsInNvdXJjZXMiOlsiaGQtdGFibGUvaGQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsWUFBWSxHQUdiLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHFCQUFxQixFQUNyQixzQkFBc0IsR0FDdkIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBSUwsZ0JBQWdCLEVBQ2hCLFFBQVEsR0FDVCxNQUFNLG9CQUFvQixDQUFDO0FBTzVCLE1BQU0sT0FBTyxnQkFBZ0I7Ozs7OztJQWtLM0IsWUFDVSxNQUFrQixFQUNsQixHQUFzQixFQUN0QixvQkFBMEM7UUFGMUMsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFt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QiwrQ0FBbUQ7Ozs7O0lBR25ELDhDQUF1Qjs7Ozs7O0lBTXZCLDJDQUFvQjs7Ozs7O0lBTXBCLDJDQUF3Qjs7Ozs7O0lBR3hCLCtDQUFrRDs7Ozs7O0lBR2xELGlEQUFzQzs7Ozs7O0lBR3RDLDBDQUFzQzs7Ozs7SUFDdEMsNENBQXdDOztJQUV4Qyw0Q0FBNEU7Ozs7O0lBRTVFLHNEQUF1RDs7Ozs7SUFDdkQsb0RBQW9EOzs7OztJQUNwRCxnREFBaUM7Ozs7O0lBR2pDLGtEQUErQjs7Ozs7O0lBRy9CLCtDQUF3Qzs7Ozs7SUFDeEMsaURBQWlEOzs7OztJQUNqRCw4Q0FBdUM7Ozs7OztJQUd2QyxtREFLSzs7Ozs7SUFDTCx3REFBK0Q7Ozs7O0lBQy9ELCtDQUtLOzs7OztJQUNMLG9EQUEyRDs7Ozs7O0lBRTNELG9EQUEyRDs7Ozs7O0lBOFEzRCw4Q0FBaUM7O0lBOEVqQyxzQ0FHRTs7Ozs7SUFHRiw2Q0FBcUQ7O0lBRXJELHNDQUVFOztJQW9ZRixzQ0FnQ0U7Ozs7O0lBdndCQSxrQ0FBMEI7Ozs7O0lBQzFCLCtCQUE4Qjs7Ozs7SUFDOUIsZ0RBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0ICogYXMgbG9jYWxmb3JhZ2UgZnJvbSBcImxvY2FsZm9yYWdlXCI7XG5pbXBvcnQge1xuICBJbnB1dEJvb2xlYW4sXG4gIE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50LFxuICBOekZvcm1hdEVtaXRFdmVudCxcbn0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZVwiO1xuaW1wb3J0IHsgTnpSZXNpemVFdmVudCB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3Jlc2l6YWJsZVwiO1xuaW1wb3J0IHsgTnpUYWJsZUNvbXBvbmVudCB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3RhYmxlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGVsYXkgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IENvbFdpZHRoIH0gZnJvbSBcIi4uL21vZGVsL2NvbFdpZHRoXCI7XG5pbXBvcnQgeyBQYWdlIH0gZnJvbSBcIi4uL21vZGVsL2NvbW1vbi10eXBlXCI7XG5pbXBvcnQgeyBDb21tb25TZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlL2NvbW1vbi1zZXNzaW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGdldFRhYmxlU2Nyb2xsWFZpZXdwb3J0V2lkdGgsXG4gIGdldFRhYmxlVmlld3BvcnRXaWR0aCxcbiAgcmVzb2x2ZUF1dG9UYWJsZVNjcm9sbCxcbn0gZnJvbSBcIi4uL3V0aWxzL2hkLXRhYmxlLXNjcm9sbC51dGlsXCI7XG5pbXBvcnQgeyBUb3RhbE9wdGlvbiB9IGZyb20gXCIuLi9oZC1kZXRhaWwtbGluZXMvaGQtZGV0YWlsLWxpbmVzLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEhkVGFibGVDZWxsQ2hhbmdlLFxuICBIZFRhYmxlQ29sdW1uLFxuICBPcGVyYXRlQnRuLFxuICBUYWJsZUNhY2hlT3B0aW9uLFxuICBUcmVlR3JpZCxcbn0gZnJvbSBcIi4vaGQtdGFibGUuc2VydmljZVwiO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImhkLXRhYmxlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vaGQtdGFibGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2hkLXRhYmxlLmNvbXBvbmVudC5sZXNzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSGRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdXVpZDogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJsZUNvbHM6IEFycmF5PEhkVGFibGVDb2x1bW4+ID0gW107XG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogUGFnZTxhbnk+O1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiDli77pgInliJflvaLmgIHjgIJjaGVja2JveO+8muWkmumAie+8iOm7mOiupO+8ie+8m3JhZGlv77ya5Y2V6YCJ77yM5peg6KGo5aS05YWo6YCJ77yMc2VsZWN0RXZlbnQg5LuN5Zue5Lyg5pWw57uE77yIMCDmiJYgMSDmnaHvvInjgIJcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFwiY2hlY2tib3hcIiB8IFwicmFkaW9cIiA9IFwiY2hlY2tib3hcIjtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dPcGVyYXRlQ29sV2FycEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiog5piv5ZCm5bGV56S65YiX6K6+572u77yI6b2/6L2u77yJ77yM6buY6K6k5byA5ZCv77yb5by556qX562J5Zy65pmv5Y+v5LygIGZhbHNlIOWFs+mXrSAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0NvbFNldHRpbmdzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiog5omL5Yqo5oyH5a6a6KGM6auY77yb5LiN5Lyg5YiZ5Zyo6aaW5bGP5riy5p+T5ZCO6Ieq5Yqo5rWL6YePICovXG4gIEBJbnB1dCgpIHZpcnR1YWxJdGVtU2l6ZTogbnVtYmVyO1xuICBASW5wdXQoKSBzZWxlY3RGaWVsZDogc3RyaW5nID0gXCJiaWxsTnVtYmVyXCI7XG4gIC8qKlxuICAgKiDooYzli77pgInnpoHnlKjlrZfmrrXlkI3jgILlrprkuYnlkI7lj5blvZPliY3ooYzor6XlrZfmrrXvvJpcbiAgICog5Li6IHRydWUg5pe256aB55So6K+l6KGM5Yu+6YCJ77yI5YWo6YCJ5Lmf5Lya6Lez6L+H77yJ44CCXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3REaXNhYmxlZEZpZWxkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDooYzlpLHmlYjlrZfmrrXlkI3jgILlrprkuYnlkI7lj5blvZPliY3ooYzor6XlrZfmrrXvvJpcbiAgICog5Li6IHRydWUg5pe25pW06KGM6IOM5pmv6Imy5Li6ICNGN0Y4RkHjgIJcbiAgICovXG4gIEBJbnB1dCgpIHJvd0ludmFsaWRGaWVsZDogc3RyaW5nO1xuICAvLyDlkIjorqHljLrln5/vvIjnsbvlnovkuI4gaGQtZGV0YWlsLWxpbmVzIOeahCBUb3RhbE9wdGlvbiDkuIDoh7TvvIlcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dUYWJsZVRvdGFsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRhYmxlVG90YWxPcHRpb246IEFycmF5PFRvdGFsT3B0aW9uPjtcbiAgLyoqXG4gICAqIOWQiOiuoeWIl+aAu+aVsO+8iOWQq+W6j+WPt+WIl++8jOS4jiBoZC1kZXRhaWwtbGluZXMg5LiA6Ie077yJ77ybXG4gICAqIOS4jeS8oOWImeaMieW9k+WJjeWPr+ingeaVsOaNruWIl+aVsCArIDHvvIjluo/lj7fvvInmjqjnrpfjgIJcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbnNOdW1iZXI6IG51bWJlciB8IHN0cmluZztcbiAgQE91dHB1dCgpIHNvcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGFibGVTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIOihjOWGhee8lui+keWPmOabtO+8iOW3suWGmeWbnuihjOWvueixoe+8m3ByZXZpb3VzKiDkvpvmjqXlj6PlpLHotKXlm57mu5rvvIkgKi9cbiAgQE91dHB1dCgpIGNlbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEhkVGFibGVDZWxsQ2hhbmdlPigpO1xuICBASW5wdXQoKSB0YWJsZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIOaYr+WQpuaYvuekuuWIhumhte+8m2ZhbHNlIOaXtuS4gOasoeWxleekuiB0YWJsZURhdGEuY29udGVudCDlhajpg6jooYwgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICog5piv5ZCm5YmN56uv5YiG6aG177yI5a+5IGNvbnRlbnQg5YWo6YeP5YiH54mH77yJ44CCXG4gICAqIHRydWXvvJrnv7vpobXkuI3op6blj5EgdGFibGVTZWFyY2hFdmVudO+8jOmAguWQiOivpuaDheWFqOmHj+aVsOaNru+8m1xuICAgKiBmYWxzZe+8iOm7mOiupO+8ie+8muacjeWKoeerr+WIhumhte+8jOe/u+mhteinpuWPkeafpeivou+8iOeOsOacieWIl+ihqOihjOS4uu+8ieOAglxuICAgKiDkuI4gcGFnaW5hdGlvbj1mYWxzZSDlkIzml7bnlKjml7bku6XkuI3liIbpobXkuLrlh4bjgIJcbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBmcm9udFBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8g6KGo5qC85YiG6aG15Y+C5pWwXG4gIEBJbnB1dCgpIHRhYmxlUGFnZUluZGV4OiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSB0YWJsZVBhZ2VTaXplOiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIGlzRmlyc3RFbnRyeVNlYXJjaDogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNDcm9zc1BhZ2VTZWxlY3Q6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSB0YWJsZVBhZ2VJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGFibGVQYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGFibGVQYWdlU2l6ZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVRvdGFsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZVRvdGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFwidGFibGVMZWZ0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICB0YWJsZUxlZnRCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVJpZ2h0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICB0YWJsZVJpZ2h0QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzY3JvbGwgPSBudWxsO1xuXG4gIC8vIOihqOagvOWLvumAieWPguaVsFxuICBpc0FsbERpc3BsYXlEYXRhQ2hlY2tlZCA9IGZhbHNlO1xuICBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgbGlzdE9mRGlzcGxheURhdGEgPSBbXTtcbiAgbGlzdE9mQWxsRGF0YSA9IFtdO1xuICBsaXN0T2ZTZWxlY3Rpb246IEFycmF5PGFueT4gfCBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgbWFwT2ZDaGVja2VkSWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIG1hcE9mQ2hlY2tMaXN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIC8vIOWQiOiuoeWPguaVsFxuICB0YWJsZVRvdGFsT3B0aW9uTGlzdCA9IFtdO1xuICAvLyDnvJPlrZjkv6Hmga9cbiAgdGFibGVDYWNoZU9wdGlvbjogVGFibGVDYWNoZU9wdGlvbiA9IG5ldyBUYWJsZUNhY2hlT3B0aW9uKCk7XG4gIHVzZXJTZXNzaW9uOiBhbnk7XG5cbiAgdGFibGVDb2xzQ2FjaGU6IEFycmF5PEhkVGFibGVDb2x1bW4+ID0gW107XG4gIHNob3dUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RDb2xMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBzZWxlY3RDb2xMaXN0Tm9kZXNDYWNoZTogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIHNob3dMaXN0Tm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc0Ryb3Bkb3duVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyDorr7nva7liJfnmoTlj6/op4Hmk43kvZzmlbDnu4RcbiAgbm93TGlzdE5vZGVzOiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgLy8g6K6+572u5YiX55qE5LiN5Y+v6KeB5pON5L2c5pWw57uEXG4gIGhpZGVMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuXG4gIC8vIOeCueWHu+aXtumcgOimgeacieS4tOaXtuaVsOe7hOWtmOaUvuS4pOS4qnRyZWUs55So5LqO5Y+W5raI5pe25YCZ5oGi5aSN6LCD5pW05YmN55qE54q25oCBXG4gIGNhbmNlbE5vd0xpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIGNhbmNlbEhpZGVMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBzaG93RGV0YWlsOiBib29sZWFuID0gZmFsc2U7XG4gIGxvY2FsZm9yYWdlOiBhbnkgPSBudWxsO1xuICBsb2NhbHRpb25UbXA6IHN0cmluZyA9IFwiXCI7XG4gIGlzRmlyc3RFbnRyeVNlYXJjaExvY2FsOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNDcm9zc1BhZ2VTZWxlY3RMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiDoh6rliqjmtYvph4/liY3nmoTlhZzlupXooYzpq5jvvIzmtYvph4/lrozmiJDlkI7kvJrmm7TmlrAgKi9cbiAgbWVhc3VyZWRWaXJ0dWFsSXRlbVNpemUgPSA0NztcblxuICAvKiog6K6w5b2V5b2T5YmN5piv5ZCm5aSE5LqO6Jma5ouf5rua5Yqo5qih5byP77yM55So5LqO5YiH5o2iIHBhZ2VTaXplIOaXtumHjeW7uuihqOagvCAqL1xuICBwcml2YXRlIHZpcnR1YWxTY3JvbGxBY3RpdmU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAvKiog5YiX5a695ZCI6K6h77yI5ZCr5Yu+6YCJL+W6j+WPtyArIGZsdWlkIOihpeWuve+8ie+8jGZvb3RlciDooajlrr3kuI7mqKrlkJEgc2Nyb2xsIOWFseeUqCAqL1xuICB0YWJsZUNvbFdpZHRoVG90YWwgPSAwO1xuXG4gIC8qKlxuICAgKiBmbHVpZO+8muWjsOaYjuWIl+aAu+WuvSA8IOWuueWZqOaXtu+8jOaKiuW3rumineihpeWIsOacgOWQjuS4gOWIl+S4muWKoeWIl++8iOS4jeaUuee8k+WtmOWuve+8ie+8jFxuICAgKiDlubborr4gc2Nyb2xsLnggPSDlrrnlmajlrr3vvIzpgb/lhY3ooajlrr0gMTAwJSDlnYfmkYrmkpHlvIDli77pgInliJfvvJvmi5bmi73mlLnlrr3ku43lhpkgY29sLndpZHRo44CCXG4gICAqL1xuICBmbHVpZEV4dHJhV2lkdGggPSAwO1xuXG4gIC8qKlxuICAgKiDliJfmgLvlrr3mnKrotoXlh7rlrrnlmajvvIhmbHVpZCDooaXlrr3lkIPmu6HvvInvvJrkuI3pnIDopoHnnJ/mraPmqKrmu5rvvIxcbiAgICog55So5LqO5YWz5o6JIG5nLXpvcnJvIGZpeGVkLWhlYWRlciDluKbmnaXnmoTluLjpqbsgWCDovbTmu5rliqjmnaHjgIJcbiAgICovXG4gIGZsdWlkSG9yaXpvbnRhbCA9IGZhbHNlO1xuXG4gIC8qKiBmbHVpZCDooaXlrr3nm67moIfliJfnvJPlrZjvvIzpgb/lhY3mqKHmnb/mr4/moLwgQ0Qg5pe25Y+N5aSN5omrIHRhYmxlQ29scyAqL1xuICBwcml2YXRlIGZsdWlkRXh0cmFUYXJnZXRDb2w6IEhkVGFibGVDb2x1bW4gPSBudWxsO1xuXG4gIC8qKiDmlbDmja7mm7TmlrDlkI7lvoXlpI3kvY3nurXlkJHmu5rliqjkvY3nva4gKi9cbiAgcHJpdmF0ZSBwZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSBmYWxzZTtcblxuICAvKiog5b2T5YmN5o6S5bqP77yM6KGo5qC86YeN5bu65ZCO55So5LqO5oGi5aSN6KGo5aS05o6S5bqP5oCBICovXG4gIHByaXZhdGUgY3VycmVudFNvcnRLZXk6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFNvcnRWYWx1ZTogc3RyaW5nID0gbnVsbDtcblxuICBAVmlld0NoaWxkKFwiaGRUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgbnpUYWJsZUNvbXBvbmVudDogTnpUYWJsZUNvbXBvbmVudDtcblxuICBwcml2YXRlIHRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5OiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIHByaXZhdGUgdG90YWxGb290ZXJTY3JvbGxIYW5kbGVyOiAoKSA9PiB2b2lkID0gbnVsbDtcbiAgcHJpdmF0ZSB0b3RhbEZvb3RlclN5bmNSZXRyeSA9IDA7XG5cbiAgLyoqIOihqOS9k+acieerlua7muadoeaXtuWQiOiuoSBmb290ZXIg5omN6aKE55WZ5Y+z5L6n5rua5Yqo5p2h5qe9ICovXG4gIHRvdGFsRm9vdGVyTmVlZFlHdXR0ZXIgPSBmYWxzZTtcblxuICAvKiog6KeG5Y+jL+WuueWZqOWwuuWvuOWPmOWMluaXtumHjeeulyBzY3JvbGwueCDkuI7lkIjorqHlr7npvZAgKi9cbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZVRpbWVyOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGJvdW5kT25WaWV3cG9ydFJlc2l6ZTogKCkgPT4gdm9pZCA9IG51bGw7XG4gIHByaXZhdGUgaG9zdFJlc2l6ZU9ic2VydmVyOiBhbnkgPSBudWxsO1xuXG4gIC8qKiBzZWxlY3Qg5bGV5byAIC8g5pCc57Si6Ziy5oqW77yI5a+56b2QIGZvcm0tbGluZXPvvIkgKi9cbiAgcHJpdmF0ZSBzZWxlY3RPcGVuQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHtcbiAgICBmbjogKG9wZW46IGJvb2xlYW4sIGxpbmU6IGFueSkgPT4gYW55O1xuICAgIG9wZW46IGJvb2xlYW47XG4gICAgbGluZTogYW55O1xuICAgIGNvbDogSGRUYWJsZUNvbHVtbjtcbiAgfT4oKTtcbiAgcHJpdmF0ZSBzZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VsZWN0U2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHtcbiAgICBmbjogKGtleXdvcmQ6IHN0cmluZywgbGluZTogYW55KSA9PiBhbnk7XG4gICAga2V5d29yZDogc3RyaW5nO1xuICAgIGxpbmU6IGFueTtcbiAgICBjb2w6IEhkVGFibGVDb2x1bW47XG4gIH0+KCk7XG4gIHByaXZhdGUgc2VsZWN0U2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKiDlvILmraXlm57lhpkgb3B0aW9ucyDnmoTorqLpmIXvvIzpgb/lhY3ov57ngrnmkJzntKLms4TmvI8gKi9cbiAgcHJpdmF0ZSBzZWxlY3RMb2FkZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3RFbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb21tb25TZXNzaW9uU2VydmljZTogQ29tbW9uU2Vzc2lvblNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMubG9jYWxmb3JhZ2UgPSBsb2NhbGZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICBkcml2ZXI6IGxvY2FsZm9yYWdlLklOREVYRUREQixcbiAgICAgIG5hbWU6IFwiaGQtZnNjbVwiLCAvLyDorr7nva7lrZjlgqjlupPnmoTlkI3np7BcbiAgICAgIHZlcnNpb246IDEuMCwgLy8g6K6+572u5a2Y5YKo5bqT55qE54mI5pysXG4gICAgICBzdG9yZU5hbWU6IFwiaGQtZnNjbS1zdG9yZVwiLCAvLyDorr7nva7lrZjlgqjlupPnmoTlrZjlgqjnqbrpl7TlkI3np7BcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5iaW5kVG90YWxGb290ZXJTY3JvbGxTeW5jKCk7XG4gICAgdGhpcy51bmJpbmRWaWV3cG9ydFJlc2l6ZVN5bmMoKTtcbiAgICBpZiAodGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdE9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0U2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdFNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RMb2FkZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0TG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIOS+m+S4muWKoeWcqOiHquihjOWGmeWbniBvcHRpb25zIOWQjuinpuWPkSBPblB1c2gg5Yi35paw77yI5LyY5YWIIHJldHVybiBPYnNlcnZhYmxlL1Byb21pc2Ug55Sx57uE5Lu25aSE55CG77yJICovXG4gIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRmlyc3RFbnRyeVNlYXJjaCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuaXNGaXJzdEVudHJ5U2VhcmNoTG9jYWwgPSB0aGlzLmlzRmlyc3RFbnRyeVNlYXJjaDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDcm9zc1BhZ2VTZWxlY3QgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaXNDcm9zc1BhZ2VTZWxlY3RMb2NhbCA9IHRoaXMuaXNDcm9zc1BhZ2VTZWxlY3Q7XG4gICAgfVxuICAgIHRoaXMubG9jYWx0aW9uVG1wID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgaWYgKHRoaXMubG9jYWx0aW9uVG1wKSB7XG4gICAgICB0aGlzLmxvY2FsdGlvblRtcCA9IHRoaXMubG9jYWx0aW9uVG1wLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG4gICAgfVxuICAgIHRoaXMudXNlclNlc3Npb24gPSB0aGlzLmNvbW1vblNlc3Npb25TZXJ2aWNlLmdldFNlc3Npb24oXG4gICAgICBcIl9fanlfYXV0aG9yaXphdGlvbl9zZXNzaW9uX19cIixcbiAgICApO1xuICAgIC8vIOeUqOS6juW8gOWPkeeOr+Wig+iwg+ivlVxuICAgIGlmICghdGhpcy51c2VyU2Vzc2lvbikge1xuICAgICAgdGhpcy51c2VyU2Vzc2lvbiA9IHtcbiAgICAgICAgdXNlckNvZGU6IFwiZGV2XCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuYmluZFZpZXdwb3J0UmVzaXplU3luYygpO1xuICAgIHRoaXMuZGVsZXRlSGlkZUl0ZW0oKTtcbiAgICBpZiAoIXRoaXMudGFibGVDb2xzIHx8IHRoaXMudGFibGVDb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9jYWxmb3JhZ2VcbiAgICAgIC5yZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0SW5pdExvY2FsZm9yYWdlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwibG9jYWxmb3JhZ2XliqDovb3lvILluLhzdGVwMVwiLCBlKTtcbiAgICAgICAgdGhyb3cgXCJsb2NhbGZvcmFnZeWKoOi9veW8guW4uFwiO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2UpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzW1wic2VsZWN0VHlwZVwiXSAmJlxuICAgICAgY2hhbmdlc1tcInNlbGVjdFR5cGVcIl1bXCJwcmV2aW91c1ZhbHVlXCJdICE9IG51bGwgJiZcbiAgICAgIGNoYW5nZXNbXCJzZWxlY3RUeXBlXCJdW1wiY3VycmVudFZhbHVlXCJdICE9PVxuICAgICAgICBjaGFuZ2VzW1wic2VsZWN0VHlwZVwiXVtcInByZXZpb3VzVmFsdWVcIl1cbiAgICApIHtcbiAgICAgIHRoaXMucmVzZXRTdGF0dXMoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcInRhYmxlRGF0YVwiXSB8fFxuICAgICAgY2hhbmdlc1tcInRhYmxlVG90YWxPcHRpb25cIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93VGFibGVUb3RhbFwiXSB8fFxuICAgICAgY2hhbmdlc1tcImNvbHVtbnNOdW1iZXJcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZUNvbHNcIl1cbiAgICApIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVUb3RhbCgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMgJiZcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl0gJiZcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJjdXJyZW50VmFsdWVcIl0gJiZcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJwcmV2aW91c1ZhbHVlXCJdXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJjdXJyZW50VmFsdWVcIl1bXCJwYWdlU2l6ZVwiXSAhPT1cbiAgICAgICAgICBjaGFuZ2VzW1widGFibGVEYXRhXCJdW1wicHJldmlvdXNWYWx1ZVwiXVtcInBhZ2VTaXplXCJdIHx8XG4gICAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJjdXJyZW50VmFsdWVcIl1bXCJwYWdlTnVtYmVyXCJdICE9PVxuICAgICAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJwcmV2aW91c1ZhbHVlXCJdW1wicGFnZU51bWJlclwiXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ1Jlc2V0U2Nyb2xsVG9wID0gdHJ1ZTtcbiAgICAgICAgLy8gcGFnZVNpemUvcGFnZU51bWJlciDlj5jljJbkuZ/opoHph43nrpcgc2Nyb2xsIC8gZmx1aWTjgIJcbiAgICAgICAgLy8g5Lia5Yqh5bi45oqKIFBhZ2UucGFnZVNpemUg5YaZ5oiQIGNvbnRlbnQubGVuZ3Ro77yI5aaC5pS25qy+57yW6L6RIHRvUGFnZe+8ie+8jFxuICAgICAgICAvLyB2aXJ0dWFsU2Nyb2xsPWZhbHNlIOaXtuiLpei/memHjOi3s+i/h++8jOepuuihqOWIneWni+WMluWQjueahCBmbHVpZCDkuI3kvJrooaXkuIrvvIzli77pgInliJfooqvmkpHlvIDjgIJcbiAgICAgICAgLy8gYXBwbHlUYWJsZVNjcm9sbE1vZGUoZmFsc2UpIOWcqOaooeW8j+acquWPmOaXtuWPqiBkZWFsU2Nyb2xs77yM5LiN5Lya5by65Yi26YeN5bu65riF5o6S5bqP5oCB44CCXG4gICAgICAgIHRoaXMuYXBwbHlUYWJsZVNjcm9sbE1vZGUoZmFsc2UpO1xuICAgICAgICAvLyDnv7vpobUv5pS5IHBhZ2VTaXpl77ya5Li75Yqo5aSa5qyh5aSN5L2N77yM6KaG55uWIENESyDlvILmraXmuLLmn5Pml7bluo9cbiAgICAgICAgdGhpcy5zY2hlZHVsZVJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0Nyb3NzUGFnZVNlbGVjdExvY2FsKSB7XG4gICAgICAgIHRoaXMucmVzZXRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1tcInRhYmxlRGF0YVwiXSkge1xuICAgICAgdGhpcy5wZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSB0cnVlO1xuICAgICAgLy8g5LiN6K665piv5ZCm6Jma5ouf5rua5Yqo6YO96KaB6YeN566XIHNjcm9sbCAvIGZsdWlk44CCXG4gICAgICAvLyDmlLbmrL4v5LuY5qy+57yW6L6R562J6aG1IFt2aXJ0dWFsU2Nyb2xsXT1mYWxzZSArIOW8guatpeeBjOaVsOaNru+8muWOn+WFiOi3s+i/h+S8muWvvOiHtFxuICAgICAgLy8g56m66KGo5Yid5aeL5YyW5ZCO5LiN5YaN6KGl5a6977yM5Yu+6YCJ5YiX6KKr5Z2H5pGK5pKR5byA44CCXG4gICAgICB0aGlzLmFwcGx5VGFibGVTY3JvbGxNb2RlKGZhbHNlKTtcbiAgICAgIC8vIOaVsOaNruabtOaWsOWQjuWkjeS9jee6teWQkea7muWKqO+8iOWQq+iZmuaLn+a7muWKqOWcuuaZr++8iVxuICAgICAgdGhpcy5zY2hlZHVsZVJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcInRhYmxlQ29sc1wiXSAmJlxuICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcInRhYmxlQ29sc1wiXS5jdXJyZW50VmFsdWUpICE9PVxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzW1widGFibGVDb2xzXCJdLnByZXZpb3VzVmFsdWUpICYmXG4gICAgICBjaGFuZ2VzW1widGFibGVDb2xzXCJdLnByZXZpb3VzVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5kZWxldGVIaWRlSXRlbSgpO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlQ29scyB8fCB0aGlzLnRhYmxlQ29scy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2NhbGZvcmFnZVxuICAgICAgICAucmVhZHkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRJbml0TG9jYWxmb3JhZ2UoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJsb2NhbGZvcmFnZeWKoOi9veW8guW4uHN0ZXAyXCIsIGUpO1xuICAgICAgICAgIHRocm93IFwibG9jYWxmb3JhZ2XliqDovb3lvILluLhcIjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGNoYW5nZXNbXCJwYWdpbmF0aW9uXCJdICYmICFjaGFuZ2VzW1wicGFnaW5hdGlvblwiXS5maXJzdENoYW5nZSkgfHxcbiAgICAgIChjaGFuZ2VzW1wiZnJvbnRQYWdpbmF0aW9uXCJdICYmICFjaGFuZ2VzW1wiZnJvbnRQYWdpbmF0aW9uXCJdLmZpcnN0Q2hhbmdlKVxuICAgICkge1xuICAgICAgLy8g5YiG6aG15qih5byP5YiH5o2i6ZyA6YeN5bu6IG56LXRhYmxl77yIZnJvbnQgLyBzZXJ2ZXIgLyBub25l77yJXG4gICAgICB0aGlzLnRhYmxlUGFnZUluZGV4ID0gMTtcbiAgICAgIHRoaXMuYXBwbHlUYWJsZVNjcm9sbE1vZGUodHJ1ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiog5piv5ZCm6LWw5YmN56uv5YiG6aG177yI5a+5IGNvbnRlbnQg5YiH54mH77yM5LiN6K+35rGC5ZCO56uv77yJICovXG4gIGdldCB1c2VGcm9udFBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wYWdpbmF0aW9uICYmICEhdGhpcy5mcm9udFBhZ2luYXRpb247XG4gIH1cblxuICBkZWxldGVIaWRlSXRlbSgpIHtcbiAgICAvLyDpppblhYjmioppc1Nob3fkuLpmYWxzZeaVsOaNruWJlOmZpOaOiVxuICAgIHRoaXMudGFibGVDb2xzID0gdGhpcy50YWJsZUNvbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAvLyDlpoLmnpzlr7nosaHmsqHmnIkgaXNTaG93IOWxnuaAp++8jOWImem7mOiupOS4uiB0cnVl77yM5L+d55WZ6K+l5a+56LGhXG4gICAgICBpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkoXCJpc1Nob3dcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvLyDlpoLmnpzlr7nosaHmnIkgaXNTaG93IOWxnuaAp++8jOWImeajgOafpeWFtuWAvOaYr+WQpuS4uiB0cnVlXG4gICAgICByZXR1cm4gaXRlbS5pc1Nob3cgPT09IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBzb3J0KHNvcnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuY3VycmVudFNvcnRLZXkgPSBzb3J0ICYmIHNvcnQua2V5O1xuICAgIHRoaXMuY3VycmVudFNvcnRWYWx1ZSA9IHNvcnQgJiYgc29ydC52YWx1ZTtcbiAgICB0aGlzLnNvcnRFdmVudC5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0Q29sU29ydChjb2w6IEhkVGFibGVDb2x1bW4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLmNhblNvcnQgfHwgIXRoaXMuY3VycmVudFNvcnRLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29sLm5hbWUgPT09IHRoaXMuY3VycmVudFNvcnRLZXkgPyB0aGlzLmN1cnJlbnRTb3J0VmFsdWUgOiBudWxsO1xuICB9XG5cbiAgdG9nZ2xlU2hvd0RldGFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEZXRhaWwgPSAhdGhpcy5zaG93RGV0YWlsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxWaWV3cG9ydCh0cnVlKTtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVWaXJ0dWFsSXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsSXRlbVNpemUgIT0gbnVsbCAmJiB0aGlzLnZpcnR1YWxJdGVtU2l6ZSA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnZpcnR1YWxJdGVtU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZWRWaXJ0dWFsSXRlbVNpemU7XG4gIH1cblxuICAvKipcbiAgICog57q15ZCR5Y+v55So6auY5bqm5omj5YeP77ya5oyJ6ZKu5Yy6L+WQiOiuoS/liIbpobXnrYnlm7rlrprljaDkvY3jgIJcbiAgICog5b+F6aG75LiOIGRlYWxTY3JvbGwgLyBwcmVzZXRTY3JvbGxCZWZvcmVSZW1vdW50IOS9v+eUqOWQjOS4gOWll++8jOWQpuWImeS8muivr+WIpOOAjOiDveaUvuS4i+OAjeiAjOS4jeiuviBzY3JvbGwueeOAglxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTY3JvbGxZTWF4T2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnRhYmxlVG90YWwgPyAxODAgOiAxNDApICsgMjE2O1xuICB9XG5cbiAgLyoqXG4gICAqIOW9k+WJjeinhuWPo+WunumZheWxleekuueahOihjOaVsOOAglxuICAgKiDliY3nq6/liIbpobXmjIkgcGFnZUluZGV4L3BhZ2VTaXplIOWIh+eJh+S8sOeul++8jOmBv+WFjeeUqOWFqOmHjyBsZW5ndGgg6K+v5Yik6ZyA6KaB57q15ZCR5rua5Yqo44CCXG4gICAqL1xuICBwcml2YXRlIGdldFZpc2libGVSb3dDb3VudCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgdGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEuY29udGVudCA/IHRoaXMudGFibGVEYXRhLmNvbnRlbnQgOiBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGNvbnRlbnQubGVuZ3RoO1xuICAgIGlmICghdGhpcy51c2VGcm9udFBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgaWYgKHRvdGFsIDw9IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCBwYWdlU2l6ZSA9XG4gICAgICBOdW1iZXIodGhpcy50YWJsZVBhZ2VTaXplKSA+IDAgPyBOdW1iZXIodGhpcy50YWJsZVBhZ2VTaXplKSA6IDEwO1xuICAgIGNvbnN0IHBhZ2VJbmRleCA9XG4gICAgICBOdW1iZXIodGhpcy50YWJsZVBhZ2VJbmRleCkgPiAwID8gTnVtYmVyKHRoaXMudGFibGVQYWdlSW5kZXgpIDogMTtcbiAgICBjb25zdCBzdGFydCA9IChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplO1xuICAgIGlmIChzdGFydCA+PSB0b3RhbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihwYWdlU2l6ZSwgdG90YWwgLSBzdGFydCk7XG4gIH1cblxuICAvKiog5b2T5YmN6aG15YaF5a656auY5bqm5piv5ZCm6LaF5Ye66KeG5Y+j77yI6ZyA6KaB6KGo5YaF57q15ZCR5rua5Yqo77yJICovXG4gIGdldCBuZWVkc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5nZXRWaXNpYmxlUm93Q291bnQoKTtcbiAgICBpZiAocm93Q291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtYXhPZmZzZXQgPSB0aGlzLmdldFNjcm9sbFlNYXhPZmZzZXQoKTtcbiAgICBjb25zdCBlc3RpbWF0ZWRIZWlnaHQgPSByb3dDb3VudCAqIHRoaXMuZWZmZWN0aXZlVmlydHVhbEl0ZW1TaXplO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gZXN0aW1hdGVkSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0IC0gbWF4T2Zmc2V0O1xuICAgIH1cbiAgICByZXR1cm4gcm93Q291bnQgPiAxMDA7XG4gIH1cblxuICAvKiog5b2T5YmN6aG15pWw5o2u6IO95a6M5pW05bGV56S65pe25LiN5ZCv55So6Jma5ouf5rua5Yqo77yM6YG/5YWN5bCR6YeP5pWw5o2u5Lmf5Ye6546w5rua5Yqo5p2hICovXG4gIGdldCB1c2VWaXJ0dWFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5lZWRzVmVydGljYWxTY3JvbGw7XG4gIH1cblxuICBnZXRSaWdodFN0aWNreShjb2w6IEhkVGFibGVDb2x1bW4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gY29sLmZpeGVkID09PSBcInJpZ2h0XCIgPyBgJHtjb2wuZml4ZWRSaWdodFdpZHRoIHx8IDB9cHhgIDogbnVsbDtcbiAgfVxuXG4gIGdldExlZnRTdGlja3koY29sOiBIZFRhYmxlQ29sdW1uKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNvbC5maXhlZCA9PT0gXCJsZWZ0XCIgPyBgJHtjb2wuZml4ZWRXaWR0aCB8fCAwfXB4YCA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog5bqP5Y+35YiX5Zu65a6a5a6977yI5ZCrIHBhZGRpbmfvvIzlj6/lrrnnurMgNiDkvY3lpoIgMTk5OTk177yJ44CCXG4gICAqIOS4jemUgeatu+aXtuihqOS9k+S8mumaj+S9jeaVsOWPmOWuve+8iDHihpJ+NjRweO+8jDE5OTk5NeKGkn42N3B477yJ77yM5ZCI6K6h6KGM5a+55LiN6b2Q44CCXG4gICAqL1xuICByZWFkb25seSBsaW5lTnVtYmVyQ29sV2lkdGggPSA3MjtcblxuICAvKiog5byA5ZCv5ZCI6K6h5pe25bqP5Y+35YiX55qEIGxlZnTvvIjli77pgInliJfljaAgNDBweO+8iSAqL1xuICBnZXQgbGluZU51bWJlckxlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaG93U2VsZWN0ZWQgPyBcIjQwcHhcIiA6IFwiMHB4XCI7XG4gIH1cblxuICBnZXQgbGluZU51bWJlckNvbFdpZHRoUHgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lTnVtYmVyQ29sV2lkdGggKyBcInB4XCI7XG4gIH1cblxuICAvKipcbiAgICog5pegIHNjcm9sbC54IOaXtuWQiOiuoei1sCBmbHVpZO+8iHdpZHRoOjEwMCXvvInjgIJcbiAgICog5YiX5bCR5pe25Lmf5Lya6K6+IHNjcm9sbC5477yI6KGl5a695ZCD5ruh77yJ77yM5ZCI6K6h6LWw5Zu65a6a6KGo5a6944CCXG4gICAqL1xuICBnZXQgaXNUb3RhbEZvb3RlckZsdWlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMuc2Nyb2xsICYmIHRoaXMuc2Nyb2xsLngpO1xuICB9XG5cbiAgLyoqIOWxleekuueUqOWIl+Wuve+8mmZsdWlkIOaXtuacgOWQjuS4gOWIl+S4muWKoeWIlyA9IOWjsOaYjuWuvSArIGZsdWlkRXh0cmFXaWR0aCAqL1xuICBnZXRDb2xEaXNwbGF5V2lkdGgoY29sOiBIZFRhYmxlQ29sdW1uKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYXNlID1cbiAgICAgIGNvbCAmJiBjb2wud2lkdGggIT0gbnVsbCAmJiBjb2wud2lkdGggPiAwXG4gICAgICAgID8gY29sLndpZHRoXG4gICAgICAgIDogQ29sV2lkdGguZml4Q29sV2lkdGg7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mbHVpZEV4dHJhV2lkdGggPD0gMCB8fFxuICAgICAgIWNvbCB8fFxuICAgICAgIXRoaXMuZmx1aWRFeHRyYVRhcmdldENvbCB8fFxuICAgICAgY29sICE9PSB0aGlzLmZsdWlkRXh0cmFUYXJnZXRDb2xcbiAgICApIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZSArIHRoaXMuZmx1aWRFeHRyYVdpZHRoO1xuICB9XG5cbiAgLyoqIOaMieW9k+WJjSBsYXlvdXQg5Yi35pawIGZsdWlkIOihpeWuveebruagh+WIl++8iOS7hSBkZWFsU2Nyb2xsIC8gc3luYyDml7bosIPnlKjvvIkgKi9cbiAgcHJpdmF0ZSByZWZyZXNoRmx1aWRFeHRyYVRhcmdldENvbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdWlkRXh0cmFUYXJnZXRDb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLmZsdWlkRXh0cmFXaWR0aCA8PSAwIHx8ICF0aGlzLnRhYmxlQ29scyB8fCAhdGhpcy50YWJsZUNvbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSB0aGlzLnRhYmxlQ29scy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgYyA9IHRoaXMudGFibGVDb2xzW2ldO1xuICAgICAgaWYgKGMgJiYgYy5pc1Nob3cgJiYgYy5maXhlZCAhPT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHRoaXMuZmx1aWRFeHRyYVRhcmdldENvbCA9IGM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHRoaXMudGFibGVDb2xzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy50YWJsZUNvbHNbaV07XG4gICAgICBpZiAoYyAmJiBjLmlzU2hvdykge1xuICAgICAgICB0aGlzLmZsdWlkRXh0cmFUYXJnZXRDb2wgPSBjO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGZsdWlkIOKGkiAxMDAl77yb5Zu65a6aIOKGkiBzY3JvbGwueO+8iOS4juihqOS9k+WQjOS4gOWll+aoquWQkeWuveW6pu+8iSAqL1xuICBnZXQgdG90YWxGb290ZXJUYWJsZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNUb3RhbEZvb3RlckZsdWlkKSB7XG4gICAgICByZXR1cm4gXCIxMDAlXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNjcm9sbCAmJiB0aGlzLnNjcm9sbC54XG4gICAgICA/IFN0cmluZyh0aGlzLnNjcm9sbC54KVxuICAgICAgOiB0aGlzLnRhYmxlQ29sV2lkdGhUb3RhbCA+IDBcbiAgICAgICAgPyB0aGlzLnRhYmxlQ29sV2lkdGhUb3RhbCArIFwicHhcIlxuICAgICAgICA6IFwiMTAwJVwiO1xuICB9XG5cbiAgLyoqIOW9k+WJjemhteihjOWPt++8iOi3qOmhtei/nue7re+8jOS7jiAxIOW8gOWni++8iSAqL1xuICBnZXRMaW5lTnVtYmVyKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhZ2UgPSBOdW1iZXIodGhpcy50YWJsZVBhZ2VJbmRleCkgPiAwID8gTnVtYmVyKHRoaXMudGFibGVQYWdlSW5kZXgpIDogMTtcbiAgICBjb25zdCBzaXplID0gTnVtYmVyKHRoaXMudGFibGVQYWdlU2l6ZSkgPiAwID8gTnVtYmVyKHRoaXMudGFibGVQYWdlU2l6ZSkgOiAwO1xuICAgIGNvbnN0IHJvd0luZGV4ID0gTnVtYmVyKGluZGV4KSA+PSAwID8gTnVtYmVyKGluZGV4KSA6IDA7XG4gICAgcmV0dXJuIChwYWdlIC0gMSkgKiBzaXplICsgcm93SW5kZXggKyAxO1xuICB9XG5cbiAgdHJhY2tCeVJvdyA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGtleSA9IGRhdGEgJiYgZGF0YVt0aGlzLnNlbGVjdEZpZWxkXTtcbiAgICByZXR1cm4ga2V5ICE9IG51bGwgPyBTdHJpbmcoa2V5KSA6IGByb3ctJHtpbmRleH1gO1xuICB9O1xuXG4gIC8qKiDomZrmi5/mu5rliqjmjInmlbDnu4TkuIvmoIfov73ouKrvvIzpgb/lhY3kuJrliqHkuLvplK4gdHJhY2tCeSDlr7zoh7QgQ0RLIOihjOWkjeeUqOmUmeS9jSAqL1xuICB2aXJ0dWFsVHJhY2tCeVJvdyA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IGluZGV4O1xuXG4gIHRyYWNrQnlDb2wgPSAoX2luZGV4OiBudW1iZXIsIGNvbDogSGRUYWJsZUNvbHVtbik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGNvbC50aXRsZTtcbiAgfTtcblxuICBnZXRJbml0TG9jYWxmb3JhZ2UoKSB7XG4gICAgLy8g6aaW5YWI6I635Y+W5b2T5YmNaGQtdGFibGXlrZjlgqjnmoTmlbDmja4g5aaC5p6c5rKh5pyJ77yM5YiZ5Yid5aeL5YyW5LiL5b2T5YmN55qE5pWw5o2uXG4gICAgdGhpcy5sb2NhbGZvcmFnZVxuICAgICAgLmdldEl0ZW0oXG4gICAgICAgIFwiaGQtdGFibGVfXCIgK1xuICAgICAgICAgIHRoaXMudXNlclNlc3Npb24udXNlckNvZGUgK1xuICAgICAgICAgIFwiX1wiICtcbiAgICAgICAgICB0aGlzLmxvY2FsdGlvblRtcCArXG4gICAgICAgICAgXCJfXCIgK1xuICAgICAgICAgIHRoaXMudXVpZCxcbiAgICAgIClcbiAgICAgIC50aGVuKCh2YWx1ZTogVGFibGVDYWNoZU9wdGlvbikgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gJiZcbiAgICAgICAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZSAmJlxuICAgICAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLnBhZ2VTaXplID4gMTBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVQYWdlU2l6ZSA9IHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZTtcbiAgICAgICAgICAgIHRoaXMudGFibGVQYWdlU2l6ZUNoYW5nZS5lbWl0KHRoaXMudGFibGVQYWdlU2l6ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbiA9IG5ldyBUYWJsZUNhY2hlT3B0aW9uKCk7XG4gICAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLnBhZ2VTaXplID0gdGhpcy50YWJsZVBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIC8vIOacjeWKoeerr+WIhumhteaJjeWcqOWIneWni+WMluaXtuaKmyBwYWdlU2l6ZUNoYW5nZUV2ZW50IOinpuWPkeeItuafpeivou+8m+WJjeerr+WIhumhteS4jeaKm1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uICYmXG4gICAgICAgICAgIXRoaXMuZnJvbnRQYWdpbmF0aW9uICYmXG4gICAgICAgICAgdGhpcy5pc0ZpcnN0RW50cnlTZWFyY2hMb2NhbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRhYmxlUGFnZVNpemVDaGFuZ2VFdmVudC5lbWl0KHRoaXMudGFibGVQYWdlU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0ZpcnN0RW50cnlTZWFyY2hMb2NhbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gPSBuZXcgVGFibGVDYWNoZU9wdGlvbigpO1xuICAgICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgPSB0aGlzLnRhYmxlUGFnZVNpemU7XG4gICAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGluaXRUYWJsZSgpIHtcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy51dWlkKSB7XG4gICAgICB0aHJvdyBcImhkLXRhYmxl57y65aSxdXVpZOWPguaVsO+8jOivt+S9v+eUqOe8lui+keWZqOaPkuS7tueUn+aIkOW5tue7mWhkLXRhYmxl6LWL5LqIdXVpZOWxnuaAp1wiO1xuICAgIH1cbiAgICBpZiAodGhpcy5qdWRnZVJlcGVhdENvbHMoKSkge1xuICAgICAgdGhpcy5kZWFsQ29scygpO1xuICAgICAgdGhpcy5zZXRDb2xzKCk7XG4gICAgICB0aGlzLmRlYWxPcGVyYXRlQnRuKCk7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxBY3RpdmUgPSBudWxsO1xuICAgICAgdGhpcy5hcHBseVRhYmxlU2Nyb2xsTW9kZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKiog6Jma5oufL+aZrumAmuaooeW8j+WIh+aNouaXtumHjeW7uuihqOagvO+8jOmBv+WFjeaui+eVmea7muWKqOWuueWZqCAqL1xuICBhcHBseVRhYmxlU2Nyb2xsTW9kZShmb3JjZVJlbW91bnQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHVzZVZpcnR1YWwgPSB0aGlzLnVzZVZpcnR1YWxTY3JvbGw7XG4gICAgY29uc3QgbW9kZUNoYW5nZWQgPVxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsQWN0aXZlICE9PSBudWxsICYmXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxBY3RpdmUgIT09IHVzZVZpcnR1YWw7XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsQWN0aXZlID0gdXNlVmlydHVhbDtcblxuICAgIGlmIChmb3JjZVJlbW91bnQgfHwgbW9kZUNoYW5nZWQpIHtcbiAgICAgIC8vIOW/hemhu+WFiOWGmeWlvSBzY3JvbGwuee+8jOWGjeWIm+W7uiBuei10YWJsZeOAglxuICAgICAgLy8gbmctem9ycm8g5Y+q5ZyoIEFmdGVyVmlld0luaXQg57uR5LiA5qyhIGhlYWRlci9ib2R5IOeahCBzY3JvbGwg5ZCM5q2l77ybXG4gICAgICAvLyDoi6XlhYjku6UgeT1udWxsIOWIm+W7uuWGjeaUueaIkOaciSB577yM6KGo5aS055uR5ZCs5Lya5Lii77yM6KGo546w5Li65YiX5aS05LiN6Lef552A5qiq5rua44CCXG4gICAgICB0aGlzLnByZXNldFNjcm9sbEJlZm9yZVJlbW91bnQodXNlVmlydHVhbCk7XG4gICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWFsU2Nyb2xsKCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5hZnRlclRhYmxlUmVuZGVyKHVzZVZpcnR1YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZIYXNZID0gISEodGhpcy5zY3JvbGwgJiYgdGhpcy5zY3JvbGwueSk7XG4gICAgdGhpcy5kZWFsU2Nyb2xsKCk7XG4gICAgY29uc3QgbmV4dEhhc1kgPSAhISh0aGlzLnNjcm9sbCAmJiB0aGlzLnNjcm9sbC55KTtcbiAgICAvLyDov5DooYzkuK0geSDku47mnInlj5jml6Av5LuO5peg5Y+Y5pyJ5pe277yM5Lmf5b+F6aG76YeN5bu677yM5ZCm5YiZ5ZCM5q2l55uR5ZCs5LuN5oyH5ZCR5penIERPTVxuICAgIGlmIChwcmV2SGFzWSAhPT0gbmV4dEhhc1kpIHtcbiAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmFmdGVyVGFibGVSZW5kZXIodXNlVmlydHVhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hZnRlclRhYmxlUmVuZGVyKHVzZVZpcnR1YWwpO1xuICB9XG5cbiAgLyoqIOmHjeW7uuWJjemihOiuviBzY3JvbGzvvIzkv53or4EgQWZ0ZXJWaWV3SW5pdCDml7YgaGVhZGVyL2JvZHkg57uT5p6E5bey5q2j56GuICovXG4gIHByaXZhdGUgcHJlc2V0U2Nyb2xsQmVmb3JlUmVtb3VudCh1c2VWaXJ0dWFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gdGhpcy5nZXRTY3JvbGxZTWF4T2Zmc2V0KCk7XG4gICAgY29uc3QgeCA9IHRoaXMuc2Nyb2xsID8gdGhpcy5zY3JvbGwueCA6IG51bGw7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiAhdXNlVmlydHVhbCkge1xuICAgICAgdGhpcy5zY3JvbGwgPSB7IHgsIHk6IG51bGwgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zY3JvbGwgPSB7XG4gICAgICB4LFxuICAgICAgeTogYGNhbGMoMTAwdmggLSAke21heE9mZnNldH1weClgLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFmdGVyVGFibGVSZW5kZXIodXNlVmlydHVhbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh1c2VWaXJ0dWFsKSB7XG4gICAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmlld3BvcnQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMubWVhc3VyZVZpcnR1YWxJdGVtU2l6ZSh0cnVlKTtcbiAgICAgIC8vIOWunua1i+ihjOmrmOWQjuWPr+iDveS7juOAjOiDveaUvuS4i+OAjeWPmOS4uuOAjOi2heWHuuOAje+8jOmcgOWIh+aNoua7muWKqOaooeW8j1xuICAgICAgaWYgKHRoaXMudXNlVmlydHVhbFNjcm9sbCkge1xuICAgICAgICB0aGlzLmFwcGx5VGFibGVTY3JvbGxNb2RlKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3luY0hvcml6b250YWxTY3JvbGwoKTtcbiAgICAgIHRoaXMuZmx1c2hSZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaFZpcnR1YWxTY3JvbGxWaWV3cG9ydChmb3JjZU1lYXN1cmUgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBpZiAoZm9yY2VNZWFzdXJlKSB7XG4gICAgICAgIHRoaXMubWVhc3VyZVZpcnR1YWxJdGVtU2l6ZShmb3JjZU1lYXN1cmUpO1xuICAgICAgICB0aGlzLmRlYWxTY3JvbGwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZsdXNoUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9XG4gICAgICAgIHRoaXMubnpUYWJsZUNvbXBvbmVudCAmJiB0aGlzLm56VGFibGVDb21wb25lbnQuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgICAgaWYgKCF2aWV3cG9ydCkge1xuICAgICAgICB0aGlzLnN5bmNIb3Jpem9udGFsU2Nyb2xsKCk7XG4gICAgICAgIHRoaXMuZmx1c2hSZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IHRoaXMubWVhc3VyZVZpcnR1YWxJdGVtU2l6ZShmb3JjZU1lYXN1cmUpO1xuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIHRoaXMuZGVhbFNjcm9sbCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlVmlydHVhbEl0ZW1TaXplKGZvcmNlTWVhc3VyZSk7XG4gICAgICAgICAgdGhpcy5zeW5jSG9yaXpvbnRhbFNjcm9sbCgpO1xuICAgICAgICAgIHZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgICAgdGhpcy5mbHVzaFJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgdGhpcy5zeW5jSG9yaXpvbnRhbFNjcm9sbCgpO1xuICAgICAgICB0aGlzLmZsdXNoUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDmlbDmja7liLfmlrDlkI7lsIbooajkvZPnurXlkJHmu5rliqjlpI3kvY3liLDpobbpg6ggKi9cbiAgcHJpdmF0ZSByZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubnpUYWJsZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuelRhYmxlID0gdGhpcy5uelRhYmxlQ29tcG9uZW50IGFzIGFueTtcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMubnpUYWJsZUNvbXBvbmVudC5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICBpZiAodHlwZW9mICh2aWV3cG9ydCBhcyBhbnkpLnNjcm9sbFRvT2Zmc2V0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgKHZpZXdwb3J0IGFzIGFueSkuc2Nyb2xsVG9PZmZzZXQoMCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mICh2aWV3cG9ydCBhcyBhbnkpLnNjcm9sbFRvSW5kZXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAodmlld3BvcnQgYXMgYW55KS5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgfVxuICAgICAgY29uc3Qgdmlld3BvcnRFbCA9XG4gICAgICAgIHZpZXdwb3J0LmVsZW1lbnRSZWYgJiZcbiAgICAgICAgKHZpZXdwb3J0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICBpZiAodmlld3BvcnRFbCkge1xuICAgICAgICB2aWV3cG9ydEVsLnNjcm9sbFRvcCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJvZHlDYW5kaWRhdGVzID0gW1xuICAgICAgbnpUYWJsZS5taXhUYWJsZUJvZHlOYXRpdmVFbGVtZW50LFxuICAgICAgbnpUYWJsZS50YWJsZUJvZHlOYXRpdmVFbGVtZW50LFxuICAgICAgbnpUYWJsZS50YWJsZUJvZHlFbGVtZW50ICYmIG56VGFibGUudGFibGVCb2R5RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgIF07XG4gICAgYm9keUNhbmRpZGF0ZXMuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0YWJsZU1haW4gPVxuICAgICAgbnpUYWJsZS50YWJsZU1haW5FbGVtZW50ICYmXG4gICAgICAobnpUYWJsZS50YWJsZU1haW5FbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIGlmICghdGFibGVNYWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vZGVzID0gdGFibGVNYWluLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5hbnQtdGFibGUtYm9keSwgY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XCIsXG4gICAgKTtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG5vZGVzLCAoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBlbC5zY3JvbGxUb3AgPSAwO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOaVsOaNruabtOaWsOWQjuWkmuasoeWwneivleWkjeS9jeOAglxuICAgKiBuZy16b3JybyA4ICsgQ0RLIOiZmuaLn+a7muWKqOS8muWcqOaVsOaNruWIt+aWsOWQjuW8guatpeaUueWGmSBzY3JvbGxUb3DvvIzljZXmrKHlpI3kvY3nu4/luLjooqvopobnm5bjgIJcbiAgICovXG4gIHByaXZhdGUgc2NoZWR1bGVSZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpOiB2b2lkIHtcbiAgICAvLyDlpJrmrKHlsJ3or5XvvJropobnm5YgbnotdGFibGUgLyBDREsg6Jma5ouf5rua5Yqo5byC5q2l5pS55YaZIHNjcm9sbFRvcFxuICAgIGNvbnN0IGRlbGF5cyA9IFswLCA1MCwgMTAwXTtcbiAgICBkZWxheXMuZm9yRWFjaCgobXMsIGluZGV4KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpO1xuICAgICAgICBpZiAoaW5kZXggPT09IGRlbGF5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwgbXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wZW5kaW5nUmVzZXRTY3JvbGxUb3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpO1xuICB9XG5cbiAgLyoqIOacquaJi+WKqOS8oCB2aXJ0dWFsSXRlbVNpemUg5pe277yM5LuO5bey5riy5p+T6KGM5rWL6YeP55yf5a6e6auY5bqmICovXG4gIG1lYXN1cmVWaXJ0dWFsSXRlbVNpemUoZm9yY2UgPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnZpcnR1YWxJdGVtU2l6ZSAhPSBudWxsICYmIHRoaXMudmlydHVhbEl0ZW1TaXplID4gMCAmJiAhZm9yY2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnQgPVxuICAgICAgdGhpcy5uelRhYmxlQ29tcG9uZW50ICYmIHRoaXMubnpUYWJsZUNvbXBvbmVudC5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gICAgY29uc3QgdGFibGVCb2R5ID1cbiAgICAgIHRoaXMubnpUYWJsZUNvbXBvbmVudCAmJlxuICAgICAgKHRoaXMubnpUYWJsZUNvbXBvbmVudC50YWJsZUJvZHlOYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBjb25zdCByb3cgPVxuICAgICAgKHZpZXdwb3J0ICYmXG4gICAgICAgICgodmlld3BvcnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIFwidHIuaGQtdGFibGUtdmlydHVhbC1yb3dcIixcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudCkpIHx8XG4gICAgICAodGFibGVCb2R5ICYmICh0YWJsZUJvZHkucXVlcnlTZWxlY3RvcihcInRib2R5IHRyXCIpIGFzIEhUTUxFbGVtZW50KSk7XG4gICAgaWYgKCFyb3cgfHwgcm93Lm9mZnNldEhlaWdodCA8PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhlaWdodCA9IHJvdy5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKGhlaWdodCA9PT0gdGhpcy5tZWFzdXJlZFZpcnR1YWxJdGVtU2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm1lYXN1cmVkVmlydHVhbEl0ZW1TaXplID0gaGVpZ2h0O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8g6K6+572u5YiX54K55Ye75Y+W5raIXG4gIGNhbmNlbERyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FuY2VsSGlkZUxpc3ROb2RlcykpO1xuICAgIHRoaXMubm93TGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbmNlbE5vd0xpc3ROb2RlcykpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8g54K55Ye76Kem5Y+R6K6+572u5YiXXG4gIGNvbmZpcm1Ecm9wZG93bigpOiB2b2lkIHtcbiAgICAvLyDkuLTml7blrZjmlL7kuIvvvIzlj5bmtojnmoTml7blgJnmgaLlpI3ljp/mnaXnmoTnirbmgIEgICDmt7Hmi7fotJ3kuIvlr7nosaHmlbDnu4RcbiAgICB0aGlzLmNhbmNlbEhpZGVMaXN0Tm9kZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaGlkZUxpc3ROb2RlcykpO1xuICAgIHRoaXMuY2FuY2VsTm93TGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm5vd0xpc3ROb2RlcykpO1xuICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc3VibWl0R3JpZHMoKSB7XG4gICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMgPSBbXTtcbiAgICB0aGlzLm5vd0xpc3ROb2Rlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5wdXNoKGl0ZW0udGl0bGUpO1xuICAgIH0pO1xuICAgIHRoaXMuc2F2ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICB0aGlzLmluaXRUYWJsZSgpO1xuICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIOS7jue8k+WtmOiuvue9ruWIl1xuICBzZXRDb2xzKCkge1xuICAgIHRoaXMuc2hvd0xpc3ROb2RlcyA9IGZhbHNlO1xuICAgIHRoaXMubm93TGlzdE5vZGVzID0gW107XG4gICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gW107XG4gICAgaWYgKHRoaXMuaGFzQ29sc0NhY2hlKCkpIHtcbiAgICAgIGxldCB7IG5vdEluY29scywgaW5jb2xzIH0gPSB0aGlzLnRhYmxlQ29sc0NhY2hlLnJlZHVjZShcbiAgICAgICAgKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5pbmNsdWRlcyhpdGVtLnRpdGxlKSkge1xuICAgICAgICAgICAgYWNjLmluY29scy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Mubm90SW5jb2xzLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHsgbm90SW5jb2xzOiBbXSwgaW5jb2xzOiBbXSB9LFxuICAgICAgKTtcbiAgICAgIGluY29scy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5kZXhPZihhLnRpdGxlKSAtXG4gICAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5kZXhPZihiLnRpdGxlKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnRhYmxlQ29scyA9IGluY29scy5jb25jYXQobm90SW5jb2xzKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlQ29scy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzQ29sc0NhY2hlKCkpIHtcbiAgICAgICAgZWxlbWVudC5pc1Nob3cgPSB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5pbmNsdWRlcyhlbGVtZW50LnRpdGxlKVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIGlmIChlbGVtZW50LmlzU2hvdykge1xuICAgICAgICAgIHRoaXMubm93TGlzdE5vZGVzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgICBrZXk6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5maXhlZCA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5jbHVkZXMoZWxlbWVudC50aXRsZSlcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oaWRlTGlzdE5vZGVzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgICBrZXk6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5maXhlZCA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5jbHVkZXMoZWxlbWVudC50aXRsZSlcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuaXNTaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMucHVzaCh7XG4gICAgICAgICAgdGl0bGU6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAga2V5OiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgIGNoZWNrZWQ6IHRydWUsXG4gICAgICAgICAgLy8gc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQuZml4ZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g6LCD5pW05YiX5a695Li657yT5a2Y5a695bqmXG4gICAgaWYgKFxuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uICYmXG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29sV2lkdGhzICYmXG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29sV2lkdGhzLnNpemUgIT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMudGFibGVDb2xzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpZiAodGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocy5oYXMoY29sLnRpdGxlKSkge1xuICAgICAgICAgIGNvbC53aWR0aCA9IHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMuZ2V0KGNvbC50aXRsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGVhbENvbHMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xpc3ROb2RlcyA9IHRydWU7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyDmi5bmi73mk43kvZxcbiAgYmVmb3JlRHJvcCA9IChhcmc6IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50KTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiB7XG4gICAgaWYgKFxuICAgICAgYXJnLm5vZGUub3JpZ2luLmRpc2FibGVkIHx8XG4gICAgICAhYXJnLmRyYWdOb2RlLm9yaWdpbi5jaGVja2VkIHx8XG4gICAgICBhcmcucG9zID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbm9kZTogVHJlZUdyaWQgPSBuZXcgVHJlZUdyaWQoKTtcbiAgICAgIG5vZGUuY2hlY2tlZCA9IGFyZy5kcmFnTm9kZS5vcmlnaW4uY2hlY2tlZDtcbiAgICAgIG5vZGUuZGlzYWJsZWQgPSBhcmcuZHJhZ05vZGUub3JpZ2luLmRpc2FibGVkO1xuICAgICAgbm9kZS5leHBhbmRlZCA9IGFyZy5kcmFnTm9kZS5vcmlnaW4uZXhwYW5kZWQ7XG4gICAgICBub2RlLmlzTGVhZiA9IGFyZy5kcmFnTm9kZS5vcmlnaW4uaXNMZWFmO1xuICAgICAgbm9kZS5rZXkgPSBhcmcuZHJhZ05vZGUub3JpZ2luLmtleTtcbiAgICAgIG5vZGUuc2VsZWN0YWJsZSA9IGFyZy5kcmFnTm9kZS5vcmlnaW4uc2VsZWN0YWJsZTtcbiAgICAgIG5vZGUudGl0bGUgPSBhcmcuZHJhZ05vZGUub3JpZ2luLnRpdGxlO1xuICAgICAgLy8g5ouW5ou95YWD57Sg5LiL5qCHXG4gICAgICBsZXQgZHJhZ05vZGVJbmRleCA9IHRoaXMubm93TGlzdE5vZGVzLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50aXRsZSA9PSBhcmcuZHJhZ05vZGUub3JpZ2luLnRpdGxlO1xuICAgICAgfSk7XG4gICAgICAvLyDnm67moIfkvY3nva7nmoTkuIvmoIdcbiAgICAgIGxldCBub2RlSW5kZXggPVxuICAgICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS50aXRsZSA9PSBhcmcubm9kZS5vcmlnaW4udGl0bGU7XG4gICAgICAgIH0pICsgKGFyZy5wb3MgPT09IC0xID8gMCA6IGFyZy5wb3MpO1xuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMuc3BsaWNlKG5vZGVJbmRleCwgMCwgbm9kZSk7XG4gICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5zcGxpY2UoXG4gICAgICAgIG5vZGVJbmRleCA+PSBkcmFnTm9kZUluZGV4ID8gZHJhZ05vZGVJbmRleCA6IGRyYWdOb2RlSW5kZXggKyAxLFxuICAgICAgICAxLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBvZih0cnVlKS5waXBlKGRlbGF5KDEwMCkpO1xuICAgIH1cbiAgfTtcblxuICBtb3ZlRWxlbWVudE5lYXJieShhcnIsIGVsZW1lbnRUb01vdmVUaXRsZSwgdGFyZ2V0RWxlbWVudFRpdGxlLCBwb3MpIHtcbiAgICBjb25zdCB0bXBBcnJheSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXJyKSk7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0bXBBcnJheS5maW5kSW5kZXgoXG4gICAgICAoaXRlbSkgPT4gaXRlbS50aXRsZSA9PT0gdGFyZ2V0RWxlbWVudFRpdGxlLFxuICAgICk7XG4gICAgY29uc3QgZWxlbWVudEluZGV4ID0gdG1wQXJyYXkuZmluZEluZGV4KFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udGl0bGUgPT09IGVsZW1lbnRUb01vdmVUaXRsZSxcbiAgICApO1xuICAgIGNvbnN0IG5ld0luZGV4ID0gcG9zIDwgMCA/IHRhcmdldEluZGV4ICsgcG9zIDogdGFyZ2V0SW5kZXg7XG4gICAgLy8g56e76Zmk55uu5qCH5YWD57Sg77yM5bm25o+S5YWl5Yiw5paw55qE5L2N572uXG4gICAgY29uc3QgcmVtb3ZlZEVsZW1lbnQgPSB0bXBBcnJheS5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcbiAgICB0bXBBcnJheS5zcGxpY2UobmV3SW5kZXggKyAxLCAwLCByZW1vdmVkRWxlbWVudFswXSk7XG4gICAgcmV0dXJuIHRtcEFycmF5O1xuICB9XG5cbiAgLy8g5Yu+6YCJ5pON5L2cXG4gIGNoZWNrQWN0aW9uKGV2ZW50OiBOekZvcm1hdEVtaXRFdmVudCk6IHZvaWQge1xuICAgIC8vIOWLvumAieWPquacieWcqGhpZGVMaXN0Tm9kZXMs5Y+W5raI5Yu+6YCJ5Y+q5pyJ5Zyobm93TGlzdE5vZGVzXG4gICAgaWYgKGV2ZW50Lm5vZGUub3JpZ2luLmNoZWNrZWQpIHtcbiAgICAgIGxldCBub2RlOiBUcmVlR3JpZCA9IG5ldyBUcmVlR3JpZCgpO1xuICAgICAgbm9kZSA9IHRoaXMuaGlkZUxpc3ROb2Rlcy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnRpdGxlID09PSBldmVudC5ub2RlLm9yaWdpbi50aXRsZTtcbiAgICAgIH0pO1xuICAgICAgbm9kZS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIC8vIOaJvuWIsOesrOS4gOS4qmZpeGVk5bGe5oCn5Li6cmlnaHTnmoR0aXRsZe+8jOaJvuWIsOaPkuWFpeWFg+e0oOeahOS9jee9rlxuICAgICAgbGV0IHRpdGxlID0gbnVsbDtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnRhYmxlQ29sc0NhY2hlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29sc0NhY2hlW2ldLmZpeGVkID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICB0aXRsZSA9IHRoaXMudGFibGVDb2xzQ2FjaGVbaV0udGl0bGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCB0ZW1wb3JhcnlOb2RlTGlzdCA9IHRoaXMubm93TGlzdE5vZGVzLnNsaWNlKDApO1xuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICB0ZW1wb3JhcnlOb2RlTGlzdC5wdXNoKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm5vd0xpc3ROb2Rlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKG5vZGUpID0+IG5vZGUudGl0bGUgPT09IHRpdGxlLFxuICAgICAgICApO1xuICAgICAgICB0ZW1wb3JhcnlOb2RlTGlzdC5zcGxpY2UoaW5kZXgsIDAsIG5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSB0ZW1wb3JhcnlOb2RlTGlzdDtcbiAgICAgIHRoaXMuaGlkZUxpc3ROb2RlcyA9IHRoaXMuaGlkZUxpc3ROb2Rlcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGUgIT09IGV2ZW50Lm5vZGUub3JpZ2luLnRpdGxlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmICh0aGlzLmhpZGVMaXN0Tm9kZXMubGVuZ3RoID09PSAwICYmIHRoaXMudGFibGVDYWNoZU9wdGlvbiAmJiB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scykge1xuICAgICAgLy8gICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0aGlzLmdldEhpZGVMaXN0Tm9kZXMoKTtcbiAgICAgIC8vIH1cbiAgICAgIGxldCB0ZW1wb3JhcnlOb2RlTGlzdCA9IHRoaXMuaGlkZUxpc3ROb2Rlcy5zbGljZSgwKTtcbiAgICAgIHRoaXMubm93TGlzdE5vZGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUgPT09IGV2ZW50Lm5vZGUub3JpZ2luLnRpdGxlKSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XG4gICAgICAgICAgaW5uZXJJdGVtLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICB0ZW1wb3JhcnlOb2RlTGlzdC5wdXNoKGlubmVySXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gdGVtcG9yYXJ5Tm9kZUxpc3Q7XG5cbiAgICAgIC8vIOS4uuS6humYsuatouacqumAieaLqeeahOaVsOe7hOmhuuW6j+WboOS4unB1c2jmlrnms5XogIzmlLnlj5jvvIzpgJrov4fliJ3lp4vmlbDmja7ojrflj5bmmL7npLrnmoTlrZfmrrXliJfooahcbiAgICAgIHRoaXMubm93TGlzdE5vZGVzID0gdGhpcy5ub3dMaXN0Tm9kZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnRpdGxlICE9PSBldmVudC5ub2RlLm9yaWdpbi50aXRsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIOmYsuatouacqumAieaLqeeahOaVsOe7hOmhuuW6j+WboOS4unB1c2jmlrnms5XogIzmlLnlj5jvvIzku47liJ3lp4vmlbDmja7ojrflj5bpmpDol4/mnKrmmL7npLrnmoTlrZfmrrXliJfooahcbiAgZ2V0SGlkZUxpc3ROb2RlcygpOiBBcnJheTxUcmVlR3JpZD4ge1xuICAgIGxldCB0ZW1wb3JhcnlOb2RlTGlzdDogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gICAgLy8g5LuOdGFibGVDb2xzQ2FjaGXph4zpnaLmib7msqHmnInlnKhzdG9yYWdl6YeM6Z2i5Ye6546w55qE5a2X5q61LOe7hOaIkGhpZGVMaXN0XG4gICAgdGhpcy50YWJsZUNvbHNDYWNoZS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIXRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluY2x1ZGVzKGl0ZW0udGl0bGUpKSB7XG4gICAgICAgIGxldCBub2RlSXRlbTogVHJlZUdyaWQgPSBuZXcgVHJlZUdyaWQoKTtcbiAgICAgICAgbm9kZUl0ZW0udGl0bGUgPSBpdGVtLnRpdGxlO1xuICAgICAgICBub2RlSXRlbS5rZXkgPSBpdGVtLnRpdGxlO1xuICAgICAgICBub2RlSXRlbS5kaXNhYmxlZCA9IGl0ZW0uZml4ZWQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIG5vZGVJdGVtLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGVtcG9yYXJ5Tm9kZUxpc3QucHVzaChub2RlSXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRlbXBvcmFyeU5vZGVMaXN0O1xuICB9XG5cbiAgZGVhbENvbHMoKSB7XG4gICAgaWYgKCF0aGlzLnRhYmxlQ29sc1swXS5taW5XaWR0aCkge1xuICAgICAgdGhpcy50YWJsZUNvbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHNwYW4uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHNwYW4uc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9IFwibm93cmFwXCI7XG4gICAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBcIjE0cHhcIjtcbiAgICAgICAgc3Bhbi5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjsgLy8g5bCG5qC35byP5L+u5pS55Li6IGlubGluZS1ibG9ja1xuICAgICAgICBzcGFuLmlubmVyVGV4dCA9IGl0ZW0udGl0bGU7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgIGl0ZW0ubWluV2lkdGggPSBzcGFuLm9mZnNldFdpZHRoICsgMTY7XG4gICAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNwYW4pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIOWkhOeQhuW3puWPs+WQuOmZhOeahOaVsOaNruWcqOaVsOe7hOS4reeahOS9jee9rlxuICAgIGNvbnN0IGxlZnRGaXhlZENvbHMgPSB0aGlzLnRhYmxlQ29scy5maWx0ZXIoKGNvbCkgPT4gY29sLmZpeGVkID09PSBcImxlZnRcIik7XG4gICAgY29uc3QgcmlnaHRGaXhlZENvbHMgPSB0aGlzLnRhYmxlQ29scy5maWx0ZXIoXG4gICAgICAoY29sKSA9PiBjb2wuZml4ZWQgPT09IFwicmlnaHRcIixcbiAgICApO1xuICAgIGNvbnN0IG5vcm1hbENvbHMgPSB0aGlzLnRhYmxlQ29scy5maWx0ZXIoKGNvbCkgPT4gIWNvbC5maXhlZCk7XG4gICAgY29uc3QgcmVzdWx0Q29scyA9IGxlZnRGaXhlZENvbHMuY29uY2F0KG5vcm1hbENvbHMpLmNvbmNhdChyaWdodEZpeGVkQ29scyk7XG4gICAgdGhpcy50YWJsZUNvbHMgPSByZXN1bHRDb2xzO1xuICAgIGlmICghdGhpcy50YWJsZUNvbHNDYWNoZSB8fCB0aGlzLnRhYmxlQ29sc0NhY2hlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8g57yT5a2Y5LiA5LiL6KGo5qC855qE5pWw5o2uXG4gICAgICB0aGlzLnRhYmxlQ29sc0NhY2hlID0gWy4uLnRoaXMudGFibGVDb2xzXTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVUYWJsZUNhY2hlT3B0aW9uKCkge1xuICAgIGlmICghdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocykge1xuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgfSBlbHNlIGlmICghKHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMgaW5zdGFuY2VvZiBNYXApKSB7XG4gICAgICBjb25zdCBjb2xXaWR0aHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbFdpZHRocy5zZXQoa2V5LCAodGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocyBhcyBhbnkpW2tleV0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29sV2lkdGhzID0gY29sV2lkdGhzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzQ29sc0NhY2hlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbiAmJlxuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMgJiZcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgc2F2ZVRhYmxlQ2FjaGVPcHRpb24oKSB7XG4gICAgdGhpcy5sb2NhbGZvcmFnZS5zZXRJdGVtKFxuICAgICAgXCJoZC10YWJsZV9cIiArXG4gICAgICAgIHRoaXMudXNlclNlc3Npb24udXNlckNvZGUgK1xuICAgICAgICBcIl9cIiArXG4gICAgICAgIHRoaXMubG9jYWx0aW9uVG1wICtcbiAgICAgICAgXCJfXCIgK1xuICAgICAgICB0aGlzLnV1aWQsXG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24sXG4gICAgKTtcbiAgfVxuXG4gIGp1ZGdlUmVwZWF0Q29scygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGVDb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCB0aGlzLnRhYmxlQ29scy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAodGhpcy50YWJsZUNvbHNbaV0udGl0bGUgPT09IHRoaXMudGFibGVDb2xzW2pdLnRpdGxlKSB7XG4gICAgICAgICAgdGhyb3cgYGhkLXRhYmxl57uE5Lu25Lit5YiX5ZCNICR7dGhpcy50YWJsZUNvbHNbaV0udGl0bGV9IOmHjeWkjWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvblJlc2l6ZSh7IHdpZHRoIH06IE56UmVzaXplRXZlbnQsIGNvbDogSGRUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMubm9ybWFsaXplVGFibGVDYWNoZU9wdGlvbigpO1xuICAgIGxldCB0ZW1wV2lkdGggPSAwO1xuICAgIGlmICh3aWR0aCA+IGNvbC5taW5XaWR0aCkge1xuICAgICAgdGVtcFdpZHRoID0gd2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBXaWR0aCA9IGNvbC5taW5XaWR0aDtcbiAgICB9XG4gICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocy5zZXQoY29sLnRpdGxlLCB0ZW1wV2lkdGgpO1xuICAgIHRoaXMuc2F2ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICB0aGlzLnRhYmxlQ29scyA9IHRoaXMudGFibGVDb2xzLm1hcCgoZSkgPT5cbiAgICAgIGUudGl0bGUgPT09IGNvbC50aXRsZSA/IHsgLi4uZSwgd2lkdGg6IHRlbXBXaWR0aCB9IDogZSxcbiAgICApO1xuICAgIHRoaXMuZGVhbFNjcm9sbCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zeW5jVG90YWxGb290ZXJXaXRoQm9keSgpKTtcbiAgfVxuXG4gIGRlYWxPcGVyYXRlQnRuKCkge1xuICAgIGxldCBvcGVyYXRlQ29sID0gdGhpcy50YWJsZUNvbHMuZmluZCgoY29sKSA9PiBjb2wudGl0bGUgPT09IFwi5pON5L2cXCIpIHx8IG51bGw7XG4gICAgaWYgKG9wZXJhdGVDb2wpIHtcbiAgICAgIGxldCB0ZXh0U3RyID0gXCJcIjtcbiAgICAgIG9wZXJhdGVDb2wuYnRuTGlzdC5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgaWYgKCFidG4uaXNSZXBlYXQpIHtcbiAgICAgICAgICB0ZXh0U3RyICs9IHR5cGVvZiBidG4ubmFtZSA9PT0gXCJmdW5jdGlvblwiID8gXCLmk43kvZxcIiA6IGJ0bi5uYW1lO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgc3Bhbi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgIHNwYW4uc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiO1xuICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IFwiMTRweFwiO1xuICAgICAgc3Bhbi5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjsgLy8g5bCG5qC35byP5L+u5pS55Li6IGlubGluZS1ibG9ja1xuICAgICAgc3Bhbi5pbm5lclRleHQgPSB0ZXh0U3RyO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAgIG9wZXJhdGVDb2wud2lkdGggPVxuICAgICAgICBzcGFuLm9mZnNldFdpZHRoICtcbiAgICAgICAgKG9wZXJhdGVDb2wuYnRuTGlzdC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzUmVwZWF0KS5sZW5ndGggLSAxKSAqIDQgK1xuICAgICAgICAxNjtcbiAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5lZWRTaG93Q29uZmlybShidG46IE9wZXJhdGVCdG4sIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgYnRuLnNob3dDb25maXJtID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBidG4uc2hvd0NvbmZpcm0oZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiAhIWJ0bi5zaG93Q29uZmlybTtcbiAgfVxuXG4gIGdldEJ0bk5hbWUoYnRuOiBPcGVyYXRlQnRuLCBkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgYnRuLm5hbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGJ0bi5uYW1lKGRhdGEpIHx8IFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBidG4ubmFtZSAhPSBudWxsID8gU3RyaW5nKGJ0bi5uYW1lKSA6IFwiXCI7XG4gIH1cblxuICBpc0RhbmdlckJ0bihidG46IE9wZXJhdGVCdG4sIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEJ0bk5hbWUoYnRuLCBkYXRhKSA9PT0gXCLliKDpmaRcIjtcbiAgfVxuXG4gIC8qKiDomZrmi5/mu5rliqjlvIDlkK/ml7bkvb/nlKjop4blj6PmnIDlpKfpq5jluqYgKi9cbiAgcHJpdmF0ZSBnZXRWaXJ0dWFsU2Nyb2xsWShtYXhPZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjYWxjKDEwMHZoIC0gJHttYXhPZmZzZXR9cHgpYDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzVGFibGVEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMudGFibGVEYXRhICYmXG4gICAgICB0aGlzLnRhYmxlRGF0YS5jb250ZW50ICYmXG4gICAgICB0aGlzLnRhYmxlRGF0YS5jb250ZW50Lmxlbmd0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5oyJ5aOw5piO5YiX5oC75a69ICsg5a655Zmo5a6977yM6K6h566XIHNjcm9sbC54IOS4jiBmbHVpZCDooaXlrr3jgIJcbiAgICog5YiX5bCR77yac2Nyb2xsLnggPSDlhoXlrrnljLrlrr3vvIhjbGllbnRXaWR0aO+8ie+8jOW3rumineWKoOWIsOacgOWQjuS4muWKoeWIl++8iOWLvumAieS/neaMgSA0MO+8ie+8m1xuICAgKiDliJflpJrvvJpzY3JvbGwueCA9IOWjsOaYjuaAu+WuveOAglxuICAgKiDmr5TovoPmmK/lkKbotoXlrr3nlKggb2Zmc2V0V2lkdGjvvIjlkKsgWSDmp73vvInvvIzpgb/lhY3jgIzku4Xlm6DnurXmu5rmnaHjgI3or6/lvIDmqKrmu5rvvJtcbiAgICog6KGl5a6955uu5qCH55SoIGNsaWVudFdpZHRo77yM5LiUIHNjcm9sbC54IOeUqCBmbG9vcu+8jOmBv+WFjeihqOWuveWkmiAxcHgg6YC85Ye6IFgg6L205rua5Yqo5p2h44CCXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVIb3Jpem9udGFsTGF5b3V0KGRlY2xhcmVkQ29sV2lkdGg6IG51bWJlcik6IHtcbiAgICBzY3JvbGxYOiBzdHJpbmcgfCBudWxsO1xuICAgIGZsdWlkRXh0cmE6IG51bWJlcjtcbiAgICBkaXNwbGF5VG90YWw6IG51bWJlcjtcbiAgICBpc0ZsdWlkOiBib29sZWFuO1xuICB9IHtcbiAgICBpZiAoIXRoaXMuaGFzVGFibGVEYXRhKCkgfHwgZGVjbGFyZWRDb2xXaWR0aCA8PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY3JvbGxYOiBudWxsLFxuICAgICAgICBmbHVpZEV4dHJhOiAwLFxuICAgICAgICBkaXNwbGF5VG90YWw6IGRlY2xhcmVkQ29sV2lkdGgsXG4gICAgICAgIGlzRmx1aWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnRDb21wYXJlID0gdGhpcy5uelRhYmxlQ29tcG9uZW50XG4gICAgICA/IGdldFRhYmxlU2Nyb2xsWFZpZXdwb3J0V2lkdGgodGhpcy5uelRhYmxlQ29tcG9uZW50KVxuICAgICAgOiAwO1xuICAgIGlmICh2aWV3cG9ydENvbXBhcmUgPiAwKSB7XG4gICAgICBpZiAoZGVjbGFyZWRDb2xXaWR0aCA+IHZpZXdwb3J0Q29tcGFyZSArIDEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxYOiBgJHtNYXRoLmNlaWwoZGVjbGFyZWRDb2xXaWR0aCl9cHhgLFxuICAgICAgICAgIGZsdWlkRXh0cmE6IDAsXG4gICAgICAgICAgZGlzcGxheVRvdGFsOiBkZWNsYXJlZENvbFdpZHRoLFxuICAgICAgICAgIGlzRmx1aWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsbFdpZHRoID0gdGhpcy5uelRhYmxlQ29tcG9uZW50XG4gICAgICAgID8gZ2V0VGFibGVWaWV3cG9ydFdpZHRoKHRoaXMubnpUYWJsZUNvbXBvbmVudClcbiAgICAgICAgOiAwO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5mbG9vcihcbiAgICAgICAgZmlsbFdpZHRoID4gMCA/IGZpbGxXaWR0aCA6IHZpZXdwb3J0Q29tcGFyZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBmbHVpZEV4dHJhID0gTWF0aC5tYXgoMCwgdGFyZ2V0IC0gZGVjbGFyZWRDb2xXaWR0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY3JvbGxYOiBgJHt0YXJnZXR9cHhgLFxuICAgICAgICBmbHVpZEV4dHJhLFxuICAgICAgICBkaXNwbGF5VG90YWw6IGRlY2xhcmVkQ29sV2lkdGggKyBmbHVpZEV4dHJhLFxuICAgICAgICBpc0ZsdWlkOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYXV0b1Njcm9sbCA9IHJlc29sdmVBdXRvVGFibGVTY3JvbGwoXG4gICAgICB0aGlzLm56VGFibGVDb21wb25lbnQsXG4gICAgICB0aGlzLmhhc1RhYmxlRGF0YSgpLFxuICAgICAgZGVjbGFyZWRDb2xXaWR0aCxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxYOiBhdXRvU2Nyb2xsID8gYXV0b1Njcm9sbC54IDogbnVsbCxcbiAgICAgIGZsdWlkRXh0cmE6IDAsXG4gICAgICBkaXNwbGF5VG90YWw6IGRlY2xhcmVkQ29sV2lkdGgsXG4gICAgICBpc0ZsdWlkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIOihqOagvOa4suafk+WQjuaMieWunumZheWuueWZqOWuveW6puagoeato+aoquWQkSBzY3JvbGwgLyBmbHVpZCDooaXlrr0gKi9cbiAgcHJpdmF0ZSBzeW5jSG9yaXpvbnRhbFNjcm9sbCgpOiB2b2lkIHtcbiAgICBsZXQgZGVjbGFyZWQgPSAwO1xuICAgIGlmICh0aGlzLnNob3dTZWxlY3RlZCkge1xuICAgICAgZGVjbGFyZWQgKz0gNDA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUYWJsZVRvdGFsKSB7XG4gICAgICBkZWNsYXJlZCArPSB0aGlzLmxpbmVOdW1iZXJDb2xXaWR0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVDb2xzKSB7XG4gICAgICB0aGlzLnRhYmxlQ29scy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNTaG93KSB7XG4gICAgICAgICAgZGVjbGFyZWQgKz0gaXRlbS53aWR0aCA+IDAgPyBpdGVtLndpZHRoIDogQ29sV2lkdGguZml4Q29sV2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLnJlc29sdmVIb3Jpem9udGFsTGF5b3V0KGRlY2xhcmVkKTtcbiAgICBjb25zdCBjdXJyZW50WSA9IHRoaXMuc2Nyb2xsID8gdGhpcy5zY3JvbGwueSA6IG51bGw7XG4gICAgY29uc3Qgc2FtZVggPSB0aGlzLnNjcm9sbCAmJiB0aGlzLnNjcm9sbC54ID09PSBsYXlvdXQuc2Nyb2xsWDtcbiAgICBjb25zdCBzYW1lRXh0cmEgPSB0aGlzLmZsdWlkRXh0cmFXaWR0aCA9PT0gbGF5b3V0LmZsdWlkRXh0cmE7XG4gICAgY29uc3Qgc2FtZUZsdWlkID0gdGhpcy5mbHVpZEhvcml6b250YWwgPT09IGxheW91dC5pc0ZsdWlkO1xuICAgIGlmIChcbiAgICAgIHNhbWVYICYmXG4gICAgICBzYW1lRXh0cmEgJiZcbiAgICAgIHNhbWVGbHVpZCAmJlxuICAgICAgdGhpcy5zY3JvbGwgJiZcbiAgICAgIHRoaXMuc2Nyb2xsLnkgPT09IGN1cnJlbnRZXG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY1RvdGFsRm9vdGVyV2l0aEJvZHkoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmx1aWRFeHRyYVdpZHRoID0gbGF5b3V0LmZsdWlkRXh0cmE7XG4gICAgdGhpcy5mbHVpZEhvcml6b250YWwgPSBsYXlvdXQuaXNGbHVpZDtcbiAgICB0aGlzLnJlZnJlc2hGbHVpZEV4dHJhVGFyZ2V0Q29sKCk7XG4gICAgdGhpcy50YWJsZUNvbFdpZHRoVG90YWwgPSBsYXlvdXQuZGlzcGxheVRvdGFsO1xuICAgIHRoaXMuc2Nyb2xsID0geyB4OiBsYXlvdXQuc2Nyb2xsWCwgeTogY3VycmVudFkgfTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY0hlYWRlckJvZHlTY3JvbGxMZWZ0KCkpO1xuICB9XG5cbiAgLyoqIOaJi+WKqOaKiuihqOS9k+aoquWQkea7muWKqOWQjOatpeWIsOihqOWktCAvIOWQiOiuoSBmb290ZXLvvIjlhZzlupUgbmctem9ycm8g55uR5ZCs5Lii5aSx55qE5oOF5Ya177yJICovXG4gIHByaXZhdGUgc3luY0hlYWRlckJvZHlTY3JvbGxMZWZ0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uelRhYmxlQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9ICh0aGlzLm56VGFibGVDb21wb25lbnQgYXMgYW55KS50YWJsZUhlYWRlck5hdGl2ZUVsZW1lbnQgYXNcbiAgICAgIHwgSFRNTEVsZW1lbnRcbiAgICAgIHwgbnVsbDtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRUYWJsZUJvZHlTY3JvbGxFbCgpO1xuICAgIGlmICh0aGlzLnNjcm9sbCAmJiB0aGlzLnNjcm9sbC54ICYmIGhlYWRlciAmJiBib2R5KSB7XG4gICAgICBpZiAoaGVhZGVyLnNjcm9sbExlZnQgIT09IGJvZHkuc2Nyb2xsTGVmdCkge1xuICAgICAgICBoZWFkZXIuc2Nyb2xsTGVmdCA9IGJvZHkuc2Nyb2xsTGVmdDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zeW5jVG90YWxGb290ZXJXaXRoQm9keSgpO1xuICB9XG5cbiAgLyoqIOWPluihqOS9k+aoquWQkea7muWKqOWuueWZqO+8iOiZmuaLn+a7muWKqOS8mOWFiCB2aWV3cG9ydO+8iSAqL1xuICBwcml2YXRlIGdldFRhYmxlQm9keVNjcm9sbEVsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLm56VGFibGVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtaXggPSAodGhpcy5uelRhYmxlQ29tcG9uZW50IGFzIGFueSkubWl4VGFibGVCb2R5TmF0aXZlRWxlbWVudCBhc1xuICAgICAgfCBIVE1MRWxlbWVudFxuICAgICAgfCBudWxsO1xuICAgIGlmIChtaXgpIHtcbiAgICAgIHJldHVybiBtaXg7XG4gICAgfVxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmhvc3RFbCAmJiAodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCFob3N0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIChob3N0LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIFwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmFudC10YWJsZS1ib2R5XCIsXG4gICAgICApIGFzIEhUTUxFbGVtZW50KSB8fFxuICAgICAgKGhvc3QucXVlcnlTZWxlY3RvcihcIi5hbnQtdGFibGUtYm9keVwiKSBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3RhbEZvb3RlclNjcm9sbEVsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuaG9zdEVsICYmICh0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICByZXR1cm4gaG9zdFxuICAgICAgPyAoaG9zdC5xdWVyeVNlbGVjdG9yKFwiLmhkLXRhYmxlLXRvdGFsLWZvb3RlclwiKSBhcyBIVE1MRWxlbWVudClcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIC8qKiDooajkvZPmmK/lkKblh7rnjrDnurXlkJHmu5rliqjmnaHvvIjlkKvmu5rliqjmnaHmp73lrr3vvIkgKi9cbiAgcHJpdmF0ZSBib2R5SGFzVmVydGljYWxTY3JvbGxiYXIoYm9keTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGJvZHkuc2Nyb2xsSGVpZ2h0ID4gYm9keS5jbGllbnRIZWlnaHQgKyAxIHx8XG4gICAgICBib2R5Lm9mZnNldFdpZHRoIC0gYm9keS5jbGllbnRXaWR0aCA+IDFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOWQiOiuoSBmb290ZXIg5LiO6KGo5L2T6IGU5Yqo77yaXG4gICAqIC0gZmx1aWTvvIjliJfmnKrmkpHmu6HvvInvvJrkuI3mqKrmu5rjgIHkuI3mtYvlrr3vvIzooajlrr0gMTAwJSDkuI7ooajkvZPlkIzmr5Tkvovmi4nkvLjvvJtcbiAgICogLSBmaXhlZO+8iOaciSBzY3JvbGwueO+8ie+8muWQjOatpSBzY3JvbGxMZWZ077ybXG4gICAqIC0g5LuF5b2T6KGo5L2T5pyJ56uW5rua5p2h5pe26aKE55WZ5Y+z5L6n5qe977yM6KGM5bCR5peg56uW5rua5pe25LiN5Y2g5L2N44CCXG4gICAqL1xuICBwcml2YXRlIHN5bmNUb3RhbEZvb3RlcldpdGhCb2R5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93VGFibGVUb3RhbCkge1xuICAgICAgdGhpcy51bmJpbmRUb3RhbEZvb3RlclNjcm9sbFN5bmMoKTtcbiAgICAgIGlmICh0aGlzLnRvdGFsRm9vdGVyTmVlZFlHdXR0ZXIpIHtcbiAgICAgICAgdGhpcy50b3RhbEZvb3Rlck5lZWRZR3V0dGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb290ZXIgPSB0aGlzLmdldFRvdGFsRm9vdGVyU2Nyb2xsRWwoKTtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRUYWJsZUJvZHlTY3JvbGxFbCgpO1xuICAgIGlmICghZm9vdGVyKSB7XG4gICAgICBpZiAodGhpcy50b3RhbEZvb3RlclN5bmNSZXRyeSA8IDEwKSB7XG4gICAgICAgIHRoaXMudG90YWxGb290ZXJTeW5jUmV0cnkrKztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN5bmNUb3RhbEZvb3RlcldpdGhCb2R5KCksIDUwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b3RhbEZvb3RlclN5bmNSZXRyeSA9IDA7XG4gICAgY29uc3QgbmVlZFlHdXR0ZXIgPSAhIShib2R5ICYmIHRoaXMuYm9keUhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvZHkpKTtcbiAgICBpZiAodGhpcy50b3RhbEZvb3Rlck5lZWRZR3V0dGVyICE9PSBuZWVkWUd1dHRlcikge1xuICAgICAgdGhpcy50b3RhbEZvb3Rlck5lZWRZR3V0dGVyID0gbmVlZFlHdXR0ZXI7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUb3RhbEZvb3RlckZsdWlkKSB7XG4gICAgICB0aGlzLnVuYmluZFRvdGFsRm9vdGVyU2Nyb2xsU3luYygpO1xuICAgICAgZm9vdGVyLnNjcm9sbExlZnQgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5zeW5jVG90YWxGb290ZXJTY3JvbGxMZWZ0KGJvZHkuc2Nyb2xsTGVmdCk7XG4gICAgICB0aGlzLmJpbmRUb3RhbEZvb3RlclNjcm9sbFN5bmMoYm9keSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jVG90YWxGb290ZXJTY3JvbGxMZWZ0KHNjcm9sbExlZnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuZ2V0VG90YWxGb290ZXJTY3JvbGxFbCgpO1xuICAgIGlmIChmb290ZXIgJiYgZm9vdGVyLnNjcm9sbExlZnQgIT09IHNjcm9sbExlZnQpIHtcbiAgICAgIGZvb3Rlci5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJpbmRUb3RhbEZvb3RlclNjcm9sbFN5bmMoYm9keTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1RhYmxlVG90YWwgfHwgIWJvZHkgfHwgdGhpcy5pc1RvdGFsRm9vdGVyRmx1aWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b3RhbEZvb3RlclNjcm9sbEJvdW5kQm9keSA9PT0gYm9keSAmJlxuICAgICAgdGhpcy50b3RhbEZvb3RlclNjcm9sbEhhbmRsZXJcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51bmJpbmRUb3RhbEZvb3RlclNjcm9sbFN5bmMoKTtcbiAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5ID0gYm9keTtcbiAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3luY1RvdGFsRm9vdGVyU2Nyb2xsTGVmdChib2R5LnNjcm9sbExlZnQpO1xuICAgIH07XG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMudG90YWxGb290ZXJTY3JvbGxIYW5kbGVyLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgIH0gYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5iaW5kVG90YWxGb290ZXJTY3JvbGxTeW5jKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5ICYmIHRoaXMudG90YWxGb290ZXJTY3JvbGxIYW5kbGVyKSB7XG4gICAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgIHRoaXMudG90YWxGb290ZXJTY3JvbGxIYW5kbGVyLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50b3RhbEZvb3RlclNjcm9sbEJvdW5kQm9keSA9IG51bGw7XG4gICAgdGhpcy50b3RhbEZvb3RlclNjcm9sbEhhbmRsZXIgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOebkeWQrOeql+WPoyAvIOWuueWZqOWuveW6puWPmOWMlu+8mumHjeaWsOWIpOWumiBzY3JvbGwueO+8iGZsdWlk4oaUZml4ZWTvvInkuI7lkIjorqHlj7Pkvqfnq5bmu5rmp73vvIxcbiAgICog6YG/5YWN5ouJ5a69L+e8qeeqhOWxj+W5leWQjuWQiOiuoeihjOWuveS4juihqOS9k+mUmeS9jeOAglxuICAgKi9cbiAgcHJpdmF0ZSBiaW5kVmlld3BvcnRSZXNpemVTeW5jKCk6IHZvaWQge1xuICAgIHRoaXMuYm91bmRPblZpZXdwb3J0UmVzaXplID0gKCkgPT4gdGhpcy5zY2hlZHVsZVZpZXdwb3J0U2Nyb2xsU3luYygpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmJvdW5kT25WaWV3cG9ydFJlc2l6ZSk7XG4gICAgfVxuICAgIGNvbnN0IFJPID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyAod2luZG93IGFzIGFueSkuUmVzaXplT2JzZXJ2ZXIgOiBudWxsO1xuICAgIGlmIChSTyAmJiB0aGlzLmhvc3RFbCAmJiB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmhvc3RSZXNpemVPYnNlcnZlciA9IG5ldyBSTygoKSA9PiB0aGlzLnNjaGVkdWxlVmlld3BvcnRTY3JvbGxTeW5jKCkpO1xuICAgICAgdGhpcy5ob3N0UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVuYmluZFZpZXdwb3J0UmVzaXplU3luYygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ib3VuZE9uVmlld3BvcnRSZXNpemUgJiYgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5ib3VuZE9uVmlld3BvcnRSZXNpemUpO1xuICAgIH1cbiAgICB0aGlzLmJvdW5kT25WaWV3cG9ydFJlc2l6ZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuaG9zdFJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLmhvc3RSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLmhvc3RSZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdwb3J0UmVzaXplVGltZXIgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudmlld3BvcnRSZXNpemVUaW1lcik7XG4gICAgICB0aGlzLnZpZXdwb3J0UmVzaXplVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVWaWV3cG9ydFNjcm9sbFN5bmMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld3BvcnRSZXNpemVUaW1lciAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy52aWV3cG9ydFJlc2l6ZVRpbWVyKTtcbiAgICB9XG4gICAgdGhpcy52aWV3cG9ydFJlc2l6ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0UmVzaXplVGltZXIgPSBudWxsO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlQ29scyB8fCAhdGhpcy50YWJsZUNvbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3luY0hvcml6b250YWxTY3JvbGwoKTtcbiAgICAgIC8vIOetieihqOS9k+W4g+WxgOeos+WumuWQjuWGjeagoeWQiOiuoeerlua7muanvSAvIOaoqua7muWQjOatpVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN5bmNUb3RhbEZvb3RlcldpdGhCb2R5KCksIDUwKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgZGVhbFNjcm9sbCgpIHtcbiAgICBsZXQgY29sV2lkdGggPSAwO1xuICAgIGlmICh0aGlzLnNob3dTZWxlY3RlZCkge1xuICAgICAgY29sV2lkdGggKz0gNDA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUYWJsZVRvdGFsKSB7XG4gICAgICBjb2xXaWR0aCArPSB0aGlzLmxpbmVOdW1iZXJDb2xXaWR0aDsgLy8g5bqP5Y+35YiX77yI5Zu65a6a5a6977yM5LiN6ZqP5L2N5pWw5Y+Y5YyW77yJXG4gICAgfVxuICAgIHRoaXMudGFibGVDb2xzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmICghaXRlbS53aWR0aCkge1xuICAgICAgICBpdGVtLndpZHRoID0gQ29sV2lkdGguZml4Q29sV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5pc1Nob3cpIHtcbiAgICAgICAgaXRlbS5maXhlZFdpZHRoID0gY29sV2lkdGg7XG4gICAgICAgIGNvbFdpZHRoICs9IGl0ZW0ud2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyDlj7Pkvqflm7rlrprliJfvvJrku47lj7PlvoDlt6bntK/orqHlgY/np7vvvIzpgb/lhY3lpJrliJfpg70gcmlnaHQ6MCDkupLnm7jpga7mjKFcbiAgICBsZXQgcmlnaHRPZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnRhYmxlQ29scy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMudGFibGVDb2xzW2ldO1xuICAgICAgaWYgKCFpdGVtLmlzU2hvdykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLmZpeGVkID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgaXRlbS5maXhlZFJpZ2h0V2lkdGggPSByaWdodE9mZnNldDtcbiAgICAgICAgcmlnaHRPZmZzZXQgKz0gaXRlbS53aWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uZml4ZWRSaWdodFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLnJlc29sdmVIb3Jpem9udGFsTGF5b3V0KGNvbFdpZHRoKTtcbiAgICB0aGlzLmZsdWlkRXh0cmFXaWR0aCA9IGxheW91dC5mbHVpZEV4dHJhO1xuICAgIHRoaXMuZmx1aWRIb3Jpem9udGFsID0gbGF5b3V0LmlzRmx1aWQ7XG4gICAgdGhpcy5yZWZyZXNoRmx1aWRFeHRyYVRhcmdldENvbCgpO1xuICAgIHRoaXMudGFibGVDb2xXaWR0aFRvdGFsID0gbGF5b3V0LmRpc3BsYXlUb3RhbDtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSB0aGlzLmdldFNjcm9sbFlNYXhPZmZzZXQoKTtcbiAgICBjb25zdCB1c2VWaXJ0dWFsID0gdGhpcy51c2VWaXJ0dWFsU2Nyb2xsO1xuICAgIGNvbnN0IHNjcm9sbFggPSBsYXlvdXQuc2Nyb2xsWDtcblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwgJiYgIXVzZVZpcnR1YWwpIHtcbiAgICAgIHRoaXMuc2Nyb2xsID0ge1xuICAgICAgICB4OiBzY3JvbGxYLFxuICAgICAgICB5OiBudWxsLFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5zY3JvbGwgPSB7XG4gICAgICAgIHg6IHNjcm9sbFgsXG4gICAgICAgIHk6IGBjYWxjKDEwMHZoIC0gJHttYXhPZmZzZXR9cHgpYCxcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGwgPSB7XG4gICAgICB4OiBzY3JvbGxYLFxuICAgICAgeTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsWShtYXhPZmZzZXQpLFxuICAgIH07XG4gIH1cblxuICAvLyDooajmoLzli77pgInpgLvovpFcbiAgY3VycmVudFBhZ2VEYXRhQ2hhbmdlKCRldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5saXN0T2ZEaXNwbGF5RGF0YSA9ICRldmVudDtcbiAgICB0aGlzLnJlZnJlc2hTdGF0dXMoKTtcbiAgICBpZiAoIXRoaXMuaXNDcm9zc1BhZ2VTZWxlY3RMb2NhbCkge1xuICAgICAgdGhpcy5yZXNldFN0YXR1cygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNlYXJjaChyZXNldDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWJjeerr+WIhumhte+8muWPquWQjOatpemhteeggS/mnaHmlbDvvIzkuI3op6blj5HniLbnu4Tku7bmn6Xor6JcbiAgICBpZiAodGhpcy5mcm9udFBhZ2luYXRpb24pIHtcbiAgICAgIGlmIChyZXNldCkge1xuICAgICAgICB0aGlzLnRhYmxlUGFnZUluZGV4ID0gMTtcbiAgICAgICAgdGhpcy50YWJsZVBhZ2VTaXplQ2hhbmdlLmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGVQYWdlSW5kZXhDaGFuZ2UuZW1pdCh0aGlzLnRhYmxlUGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZSA9IHRoaXMudGFibGVQYWdlU2l6ZTtcbiAgICAgIHRoaXMuc2F2ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICAgIC8vIOaMieW9k+WJjemhteihjOaVsOmHjeeul+aYr+WQpumcgOimgSBzY3JvbGwuee+8iOacq+mhteaVsOaNruWwkeaXtuWOu+aOieWbuuWumumrmOW6pu+8jOmBv+WFjeeVmeeZve+8iVxuICAgICAgdGhpcy5wZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSB0cnVlO1xuICAgICAgdGhpcy5hcHBseVRhYmxlU2Nyb2xsTW9kZShmYWxzZSk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgPSB0aGlzLnRhYmxlUGFnZVNpemU7XG4gICAgdGhpcy5zYXZlVGFibGVDYWNoZU9wdGlvbigpO1xuICAgIGlmIChyZXNldCkge1xuICAgICAgdGhpcy50YWJsZVBhZ2VTaXplQ2hhbmdlLmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICAgIHRoaXMudGFibGVQYWdlU2l6ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJsZVBhZ2VJbmRleENoYW5nZS5lbWl0KHRoaXMudGFibGVQYWdlSW5kZXgpO1xuICAgICAgLy8g6Kem5Y+R54i257uE5Lu25p+l6K+i5LqL5Lu2XG4gICAgICB0aGlzLnRhYmxlU2VhcmNoRXZlbnQuZW1pdChyZXNldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOW6lemDqOWQiOiuoe+8muS4jiBoZC1kZXRhaWwtbGluZXMg55u45ZCM77yM5L2/55SoIFRvdGFsT3B0aW9u77yIaW5zZXJ0SW5kZXggLyBpbnNlcnRWYWx1Ze+8ieOAglxuICAgKiDlvIDlkK/lkI7lvLrliLblsZXnpLrluo/lj7fliJfvvIzjgIzlkIjorqHjgI3okL3lnKjluo/lj7fliJfkuIvvvJtcbiAgICogaW5zZXJ0SW5kZXgg5LuOIDEg6LW35a+55bqU5Y+v6KeB5pWw5o2u5YiX77yb5pyq5LygIGluc2VydFZhbHVlIOaXtuaMieivpeWIlyBuYW1lIOWvuSBjb250ZW50IOaxguWSjOOAglxuICAgKi9cbiAgY2FsY3VsYXRlVGFibGVUb3RhbCgpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93VGFibGVUb3RhbCB8fFxuICAgICAgIXRoaXMudGFibGVUb3RhbE9wdGlvbiB8fFxuICAgICAgIXRoaXMudGFibGVUb3RhbE9wdGlvbi5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmlzaWJsZUNvbHMgPSAodGhpcy50YWJsZUNvbHMgfHwgW10pLmZpbHRlcihcbiAgICAgIChjKSA9PiBjICYmIGMuaXNTaG93ICE9PSBmYWxzZSxcbiAgICApO1xuICAgIC8vIGNvbHVtbnNOdW1iZXIg5ZCr5bqP5Y+35YiX77yI5LiOIGRldGFpbC1saW5lcyDkuIDoh7TvvInvvIzmlbDmja7mp73kvY3mlbAgPSBjb2x1bW5zTnVtYmVyIC0gMVxuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSBOdW1iZXIodGhpcy5jb2x1bW5zTnVtYmVyKTtcbiAgICBjb25zdCBjb2x1bW5OdW1iZXIgPVxuICAgICAgY29uZmlndXJlZCA+IDFcbiAgICAgICAgPyBjb25maWd1cmVkIC0gMVxuICAgICAgICA6IGNvbmZpZ3VyZWQgPT09IDFcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IHZpc2libGVDb2xzLmxlbmd0aDtcbiAgICBpZiAoIWNvbHVtbk51bWJlciB8fCBjb2x1bW5OdW1iZXIgPCAxKSB7XG4gICAgICB0aGlzLnRhYmxlVG90YWxPcHRpb25MaXN0ID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QgPSBuZXcgQXJyYXkoY29sdW1uTnVtYmVyKS5maWxsKFwiXCIpO1xuICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgdGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEuY29udGVudCA/IHRoaXMudGFibGVEYXRhLmNvbnRlbnQgOiBbXTtcbiAgICB0aGlzLnRhYmxlVG90YWxPcHRpb24uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gPT0gbnVsbCB8fCAhaXRlbS5pbnNlcnRJbmRleCB8fCBpdGVtLmluc2VydEluZGV4IDwgMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgdmFsdWU6IGFueSA9IGl0ZW0uaW5zZXJ0VmFsdWU7XG4gICAgICAvLyDmnKrkvKAgaW5zZXJ0VmFsdWUg5pe277ya5oyJIGluc2VydEluZGV4IOWvueW6lOWPr+ingeWIlyBuYW1lIOiHquWKqOaxguWSjFxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgY29uc3QgY29sID0gdmlzaWJsZUNvbHNbaXRlbS5pbnNlcnRJbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbCAmJiB0eXBlb2YgY29sLm5hbWUgPT09IFwic3RyaW5nXCIgPyBjb2wubmFtZSA6IG51bGw7XG4gICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBjb250ZW50LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhdyA9IHJvdyA/IHJvd1tmaWVsZF0gOiBudWxsO1xuICAgICAgICAgIGlmIChyYXcgPT0gbnVsbCB8fCByYXcgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XG4gICAgICAgICAgaWYgKCFpc05hTihudW0pKSB7XG4gICAgICAgICAgICBzdW0gKz0gbnVtO1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBzdW07XG4gICAgICB9XG4gICAgICBjb25zdCBjb2xBdEluZGV4ID0gdmlzaWJsZUNvbHNbaXRlbS5pbnNlcnRJbmRleCAtIDFdO1xuICAgICAgdGhpcy50YWJsZVRvdGFsT3B0aW9uTGlzdFtpdGVtLmluc2VydEluZGV4IC0gMV0gPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBhbGlnbjogaXRlbS5hbGlnbiB8fCAoY29sQXRJbmRleCAmJiBjb2xBdEluZGV4LmFsaWduKSB8fCBcImxlZnRcIixcbiAgICAgICAgc2hvd0RlY2ltYWw6IGl0ZW0uc2hvd0RlY2ltYWwgfHwgZmFsc2UsXG4gICAgICAgIHByZXNlcnZlTnVtYmVyOlxuICAgICAgICAgIGl0ZW0ucHJlc2VydmVOdW1iZXIgIT0gbnVsbCA/IGl0ZW0ucHJlc2VydmVOdW1iZXIgOiAyLFxuICAgICAgICBpc0hpZGU6IGl0ZW0uaXNIaWRlIHx8IGZhbHNlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFibGVUb3RhbENlbGxNZXRhKGNvbDogSGRUYWJsZUNvbHVtbiwgY29sSW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKCFjb2wgfHwgIXRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QgfHwgIXRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHZpc2libGVJbmRleCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGNvbEluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLnRhYmxlQ29sc1tpXTtcbiAgICAgIGlmIChjICYmIGMuaXNTaG93ICE9PSBmYWxzZSkge1xuICAgICAgICB2aXNpYmxlSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZpc2libGVJbmRleCA8IDAgfHwgdmlzaWJsZUluZGV4ID49IHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3RbdmlzaWJsZUluZGV4XTtcbiAgICByZXR1cm4gbWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gXCJvYmplY3RcIiA/IG1ldGEgOiBudWxsO1xuICB9XG5cbiAgLyoqIOWQiOiuoeWNleWFg+agvOWxleekuuaWh+ahiO+8iOWvuem9kCBkZXRhaWwtbGluZXMg5bCP5pWw6KeE5YiZ77yJICovXG4gIGdldFRhYmxlVG90YWxDZWxsVmFsdWUoY29sOiBIZFRhYmxlQ29sdW1uLCBjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5nZXRUYWJsZVRvdGFsQ2VsbE1ldGEoY29sLCBjb2xJbmRleCk7XG4gICAgaWYgKCFtZXRhIHx8IG1ldGEuaXNIaWRlKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBtZXRhLnZhbHVlO1xuICAgIGlmICghKHZhbHVlIHx8IHZhbHVlID09PSAwKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHByZXNlcnZlID1cbiAgICAgIG1ldGEucHJlc2VydmVOdW1iZXIgIT0gbnVsbCA/IE51bWJlcihtZXRhLnByZXNlcnZlTnVtYmVyKSA6IDI7XG4gICAgaWYgKHZhbHVlICUgMSA9PT0gMCAmJiAhbWV0YS5zaG93RGVjaW1hbCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlc2VydmUpO1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChOdW1iZXIodmFsdWUpICogZmFjdG9yKSAvIGZhY3RvcikudG9GaXhlZChwcmVzZXJ2ZSk7XG4gIH1cblxuICBnZXRUYWJsZVRvdGFsQ2VsbEFsaWduKGNvbDogSGRUYWJsZUNvbHVtbiwgY29sSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0VGFibGVUb3RhbENlbGxNZXRhKGNvbCwgY29sSW5kZXgpO1xuICAgIGNvbnN0IGFsaWduID1cbiAgICAgIChtZXRhICYmIG1ldGEuYWxpZ24pIHx8IChjb2wgJiYgY29sLmFsaWduKSB8fCBcImxlZnRcIjtcbiAgICBpZiAoYWxpZ24gPT09IFwicmlnaHRcIiB8fCBhbGlnbiA9PT0gXCJjZW50ZXJcIiB8fCBhbGlnbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIHJldHVybiBhbGlnbjtcbiAgICB9XG4gICAgcmV0dXJuIFwibGVmdFwiO1xuICB9XG5cbiAgLyoqIOW6lemDqOOAjOWFsSBuIOadoeOAje+8mumdnuWIhumhtS/liY3nq6/liIbpobXnlKggY29udGVudC5sZW5ndGjvvIzmnI3liqHnq6/liIbpobXnlKggdG90YWxFbGVtZW50cyAqL1xuICBnZXRUYWJsZVRvdGFsQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24gfHwgdGhpcy5mcm9udFBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YS5jb250ZW50ID8gdGhpcy50YWJsZURhdGEuY29udGVudC5sZW5ndGggOiAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50YWJsZURhdGEudG90YWxFbGVtZW50cyAhPSBudWxsXG4gICAgICA/IHRoaXMudGFibGVEYXRhLnRvdGFsRWxlbWVudHNcbiAgICAgIDogMDtcbiAgfVxuXG4gIHJlc2V0U3RhdHVzKCkge1xuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIC8vIOWFiOaYvuW8j+e9riBmYWxzZe+8jOmBv+WFjSBuei1jaGVja2JveCDlhoXpg6jnirbmgIHkuI4gbWFwT2ZDaGVja2VkSWQg5LiN5ZCM5q2l77yI6Jma5ouf5rua5Yqo5aSN55So6KGM5pe25bi46KeB77yJXG4gICAgT2JqZWN0LmtleXModGhpcy5tYXBPZkNoZWNrTGlzdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkW2tleV0gPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RPZkRpc3BsYXlEYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW1bdGhpcy5zZWxlY3RGaWVsZF07XG4gICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtrZXldID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5tYXBPZkNoZWNrZWRJZCA9IHt9O1xuICAgIHRoaXMubWFwT2ZDaGVja0xpc3QgPSB7fTtcbiAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoW10pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIOWNlemAie+8mumAieS4reW9k+WJjeihjOW5tua4heaOieWFtuWug+ihjO+8m+W/veeVpSByYWRpbyDlm6DliIfmjaLogIzlj5Hlh7rnmoQgZmFsc2UgKi9cbiAgb25SYWRpb1NlbGVjdChjaGVja2VkOiBib29sZWFuLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNoZWNrZWQgfHwgIWRhdGEpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdERpc2FibGVkKGRhdGEpKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gZGF0YVt0aGlzLnNlbGVjdEZpZWxkXTtcbiAgICB0aGlzLm1hcE9mQ2hlY2tlZElkID0ge307XG4gICAgdGhpcy5tYXBPZkNoZWNrTGlzdCA9IHt9O1xuICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtrZXldID0gdHJ1ZTtcbiAgICAgIHRoaXMubWFwT2ZDaGVja0xpc3Rba2V5XSA9IGRhdGE7XG4gICAgfVxuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdEV2ZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoa2V5ICE9IG51bGwgPyBbZGF0YV0gOiBbXSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVmcmVzaFN0YXR1cyhldmVudDogYm9vbGVhbiA9IGZhbHNlLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gXCJyYWRpb1wiKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLm9uUmFkaW9TZWxlY3QoZXZlbnQsIGRhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZGF0YSkge1xuICAgICAgLy8g56aB55So6KGM5LiN5YWB6K645Yu+6YCJ77yb5Y+W5raI5Yu+6YCJ5LuN5YWB6K6477yI5L6L5aaC5pWw5o2u5Y+Y5pu05YmN5bey5Yu+6YCJ77yJXG4gICAgICBpZiAoZXZlbnQgJiYgdGhpcy5pc1NlbGVjdERpc2FibGVkKGRhdGEpKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGFbdGhpcy5zZWxlY3RGaWVsZF1dID0gZXZlbnQ7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgIXRoaXMubWFwT2ZDaGVja0xpc3RbZGF0YVt0aGlzLnNlbGVjdEZpZWxkXV0gJiZcbiAgICAgICAgICAodGhpcy5tYXBPZkNoZWNrTGlzdFtkYXRhW3RoaXMuc2VsZWN0RmllbGRdXSA9IGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrTGlzdFtkYXRhW3RoaXMuc2VsZWN0RmllbGRdXSAmJlxuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcE9mQ2hlY2tMaXN0W2RhdGFbdGhpcy5zZWxlY3RGaWVsZF1dO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RhYmxlTGlzdCA9IHRoaXMubGlzdE9mRGlzcGxheURhdGEuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+ICF0aGlzLmlzU2VsZWN0RGlzYWJsZWQoaXRlbSksXG4gICAgKTtcbiAgICB0aGlzLmlzQWxsRGlzcGxheURhdGFDaGVja2VkID1cbiAgICAgIHNlbGVjdGFibGVMaXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgIHNlbGVjdGFibGVMaXN0LmV2ZXJ5KChpdGVtKSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW1bdGhpcy5zZWxlY3RGaWVsZF1dKTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9XG4gICAgICBzZWxlY3RhYmxlTGlzdC5zb21lKFxuICAgICAgICAoaXRlbSkgPT4gdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXSxcbiAgICAgICkgJiYgIXRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQ7XG4gICAgLy8g6Kem5Y+Rc2VsZWN05LqL5Lu2XG4gICAgaWYgKHRoaXMuc2VsZWN0RXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTGlzdDogQXJyYXk8YW55PiA9IE9iamVjdC52YWx1ZXModGhpcy5tYXBPZkNoZWNrTGlzdCk7XG4gICAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoc2VsZWN0ZWRMaXN0KTtcbiAgICB9XG4gICAgLy8g5aaC5p6c5pWw5o2u5Li656m677yM5YiZ5riF56m65Yu+6YCJ5qCH6K+GXG4gICAgaWYgKHRoaXMudGFibGVEYXRhLmNvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmlzQWxsRGlzcGxheURhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkRpc3BsYXlEYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIC8vIOWFqOmAiS/lj5bmtojlhajpgInlnYfot7Pov4fnpoHnlKjooYzvvIjnpoHnlKjooYzkv53mjIHljp/li77pgInnirbmgIHvvIlcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0RGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICF0aGlzLm1hcE9mQ2hlY2tMaXN0W2l0ZW1bdGhpcy5zZWxlY3RGaWVsZF1dICYmXG4gICAgICAgICAgKHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gPSBpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gJiZcbiAgICAgICAgICBkZWxldGUgdGhpcy5tYXBPZkNoZWNrTGlzdFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIOW9k+WJjeihjOaYr+WQpuemgeeUqOWLvumAiSAqL1xuICBpc1NlbGVjdERpc2FibGVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuc2VsZWN0RGlzYWJsZWRGaWVsZCAmJlxuICAgICAgZGF0YSAmJlxuICAgICAgZGF0YVt0aGlzLnNlbGVjdERpc2FibGVkRmllbGRdID09PSB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKiDlvZPliY3ooYzmmK/lkKblpLHmlYggKi9cbiAgaXNJbnZhbGlkUm93KGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMucm93SW52YWxpZEZpZWxkICYmXG4gICAgICBkYXRhICYmXG4gICAgICBkYXRhW3RoaXMucm93SW52YWxpZEZpZWxkXSA9PT0gdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5YiX5paH5a2X6aKc6Imy77yaY29sb3Ig5Li65Ye95pWw5pe25oyJ6KGM6K6h566X77yI55So5LqO5p+Q5LiA6KGM5p+Q5LiA5YiX5qCH57qi77yJ77yM5ZCm5YiZ5pW05YiX5ZCM6Imy44CCXG4gICAqL1xuICByZXNvbHZlQ2VsbENvbG9yKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCB8fCBjb2wuY29sb3IgPT0gbnVsbCB8fCBjb2wuY29sb3IgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbC5jb2xvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbC5jb2xvcihkYXRhKTtcbiAgICAgIHJldHVybiB2YWx1ZSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29sLmNvbG9yO1xuICB9XG5cbiAgLyoqIOWPr+eCueWHu+WNleWFg+agvOminOiJsu+8muepuuWAvOWbuuWumueBsO+8jOWQpuWImeaMieWIlyBjb2xvciAqL1xuICBnZXRMaW5rQ2VsbENvbG9yKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55LCBpc0VtcHR5OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgcmV0dXJuIFwiIzJBMzYzNFwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ2VsbENvbG9yKGNvbCwgZGF0YSk7XG4gIH1cblxuICAvKiog5pmu6YCa5paH5pys5Y2V5YWD5qC86aKc6Imy77ya5aSx5pWI6KGM57uf5LiA54Gw77yM5ZCm5YiZ55So5YiX6YWN572uIGNvbG9yICovXG4gIGdldFBsYWluQ2VsbENvbG9yKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0ludmFsaWRSb3coZGF0YSkpIHtcbiAgICAgIHJldHVybiBcIiM4NjhBOUNcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNlbGxDb2xvcihjb2wsIGRhdGEpO1xuICB9XG5cbiAganVkZ2VDb2xFbXB0eShzdHI6IGFueSkge1xuICAgIGlmIChzdHIgfHwgc3RyID09PSAwKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCI856m6PlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRlRmllbGQoY29sOiBIZFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sLmlzU3RhdGUpIHtcbiAgICAgIHJldHVybiBjb2wubmFtZSBhcyBzdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiBjb2wuc3RhdGVGaWVsZCB8fCBcInN0YXRlXCI7XG4gIH1cblxuICAvKiog5a2X5q615YC85ZCO5piv5ZCm5bGV56S656uW57q/6KGM5Y+3ICovXG4gIGhhc1Jvd05vKGNvbDogSGRUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShjb2wgJiYgKGNvbC5yb3dObyA9PT0gdHJ1ZSB8fCAodHlwZW9mIGNvbC5yb3dObyA9PT0gXCJzdHJpbmdcIiAmJiBjb2wucm93Tm8pKSk7XG4gIH1cblxuICAvKipcbiAgICog6KGM5Y+35paH5qGI44CCcm93Tm8g5Li65a2X5q615ZCN5pe25Y+W6KGM5pWw5o2u77yb5Li6IHRydWUg5pe25oyJ5b2T5YmN6aG15bqP5Y+377yI6Leo6aG16L+e57ut77yM5LuOIDEg5byA5aeL77yJ44CCXG4gICAqL1xuICBnZXRSb3dOb1RleHQoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5oYXNSb3dObyhjb2wpKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2wucm93Tm8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YSA/IGRhdGFbY29sLnJvd05vXSA6IG51bGw7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBwYWdlID0gTnVtYmVyKHRoaXMudGFibGVQYWdlSW5kZXgpID4gMCA/IE51bWJlcih0aGlzLnRhYmxlUGFnZUluZGV4KSA6IDE7XG4gICAgY29uc3Qgc2l6ZSA9IE51bWJlcih0aGlzLnRhYmxlUGFnZVNpemUpID4gMCA/IE51bWJlcih0aGlzLnRhYmxlUGFnZVNpemUpIDogMDtcbiAgICBjb25zdCByb3dJbmRleCA9IE51bWJlcihpbmRleCkgPj0gMCA/IE51bWJlcihpbmRleCkgOiAwO1xuICAgIHJldHVybiBTdHJpbmcoKHBhZ2UgLSAxKSAqIHNpemUgKyByb3dJbmRleCArIDEpO1xuICB9XG5cbiAgLyoqIOihqOWktOOAjOmFjemAgeWNleWPtyB8IOihjOOAjeaLhuaIkOefreerlue6v++8jOmBv+WFjeWtl+espiB8IOaLiea7oeihjOmrmCAqL1xuICBnZXRUaXRsZVBhcnRzKGNvbDogSGRUYWJsZUNvbHVtbik6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5oYXNSb3dObyhjb2wpIHx8ICFjb2wgfHwgIWNvbC50aXRsZSB8fCBTdHJpbmcoY29sLnRpdGxlKS5pbmRleE9mKFwifFwiKSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSBTdHJpbmcoY29sLnRpdGxlKS5zcGxpdChcInxcIik7XG4gICAgaWYgKHJhdy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIFtyYXdbMF0udHJpbSgpLCByYXcuc2xpY2UoMSkuam9pbihcInxcIikudHJpbSgpXTtcbiAgfVxuXG4gIC8qKiDmmK/lkKbmmL7npLrnvJbovpHnrJTlm77moIfvvIjmnIkgZWRpdFR5cGUg5pe26LWw6KGM5YaF5o6n5Lu277yM5LiN5YaN5pi+56S656yU77yJICovXG4gIGlzRWRpdGFibGUoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCB0aGlzLmhhc0lubGluZUVkaXQoY29sKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29sLmVkaXRhYmxlID09IG51bGwgfHwgY29sLmVkaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbC5lZGl0YWJsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gISFjb2wuZWRpdGFibGUoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiAhIWNvbC5lZGl0YWJsZTtcbiAgfVxuXG4gIC8qKiDngrnlh7vnvJbovpHnrJTvvIzlm57osIPniLbnu4Tku7bkvKDlhaXnmoQgZWRpdCAqL1xuICBvbkVkaXRDbGljayhldmVudDogRXZlbnQsIGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckV2ZW50KGNvbC5lZGl0IHx8IG51bGwsIGRhdGEpO1xuICB9XG5cbiAgLyoqIOWIl+aYr+WQpumFjee9ruS6huWPr+eUqOeahOihjOWGhee8lui+ke+8iG5hbWUg5b+F6aG75pivIHN0cmluZ++8iSAqL1xuICBoYXNJbmxpbmVFZGl0KGNvbDogSGRUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmICghY29sIHx8ICFjb2wuZWRpdFR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2wubmFtZSAhPT0gXCJzdHJpbmdcIiB8fCAhY29sLm5hbWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbaGQtdGFibGVdIGVkaXRUeXBlIOimgeaxgiBuYW1lIOS4uiBzdHJpbmfvvIzliJfjgIxcIiArXG4gICAgICAgICAgKGNvbC50aXRsZSB8fCBcIlwiKSArXG4gICAgICAgICAgXCLjgI3lt7Llm57pgIDlj6ror7tcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNFZGl0RGlzYWJsZWQoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCBjb2wuZWRpdERpc2FibGVkID09IG51bGwgfHwgY29sLmVkaXREaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2wuZWRpdERpc2FibGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiAhIWNvbC5lZGl0RGlzYWJsZWQoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiAhIWNvbC5lZGl0RGlzYWJsZWQ7XG4gIH1cblxuICBnZXRTZWxlY3RMaXN0KGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogQXJyYXk8YW55PiB7XG4gICAgaWYgKCFjb2wgfHwgIWNvbC5zZWxlY3RPcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gY29sLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3ROYW1lICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBkYXRhW29wdC5zZWxlY3RMaXN0TmFtZV07XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShsaXN0KSA/IGxpc3QgOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob3B0LnNlbGVjdExpc3QpID8gb3B0LnNlbGVjdExpc3QgOiBbXTtcbiAgfVxuXG4gIGdldFNlbGVjdE9wdGlvbkxhYmVsKGNvbDogSGRUYWJsZUNvbHVtbiwgaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLnNlbGVjdE9wdGlvbiB8fCAhaXRlbSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IG9wdCA9IGNvbC5zZWxlY3RPcHRpb247XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtW29wdC52YWx1ZV07XG4gICAgY29uc3QgbGFiZWwgPSBpdGVtW29wdC5sYWJlbF07XG4gICAgaWYgKG9wdC5zaG93TGFiZWxBbmRWYWx1ZSB8fCBvcHQuaGRTaG93SXRlbUNvZGUpIHtcbiAgICAgIHJldHVybiBgWyR7dmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZX1dJHtsYWJlbCA9PSBudWxsID8gXCJcIiA6IGxhYmVsfWA7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbCA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhsYWJlbCk7XG4gIH1cblxuICBnZXRJbnB1dE51bWJlclByb3AoXG4gICAgY29sOiBIZFRhYmxlQ29sdW1uLFxuICAgIGtleTogXCJtaW5cIiB8IFwibWF4XCIgfCBcInN0ZXBcIiB8IFwicHJlY2lzaW9uXCIsXG4gICAgZmFsbGJhY2s6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLmlucHV0TnVtYmVyKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIGNvbnN0IHZhbCA9IGNvbC5pbnB1dE51bWJlcltrZXldO1xuICAgIHJldHVybiB2YWwgIT0gbnVsbCA/IE51bWJlcih2YWwpIDogZmFsbGJhY2s7XG4gIH1cblxuICBpc0RhdGVTaG93VGltZShjb2w6IEhkVGFibGVDb2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoY29sICYmIGNvbC5kYXRlT3B0aW9uICYmIGNvbC5kYXRlT3B0aW9uLnNob3dUaW1lKTtcbiAgfVxuXG4gIGlzRGF0ZVNob3dUb2RheShjb2w6IEhkVGFibGVDb2x1bW4pOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLmRhdGVPcHRpb24gfHwgY29sLmRhdGVPcHRpb24uc2hvd1RvZGF5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gY29sLmRhdGVPcHRpb24uc2hvd1RvZGF5ICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldERhdGVGb3JtYXQoY29sOiBIZFRhYmxlQ29sdW1uLCBpc1JhbmdlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoY29sICYmIGNvbC5kYXRlT3B0aW9uICYmIGNvbC5kYXRlT3B0aW9uLmZvcm1hdCkge1xuICAgICAgcmV0dXJuIGNvbC5kYXRlT3B0aW9uLmZvcm1hdDtcbiAgICB9XG4gICAgaWYgKCFpc1JhbmdlICYmIHRoaXMuaXNEYXRlU2hvd1RpbWUoY29sKSkge1xuICAgICAgcmV0dXJuIFwieXl5eS1NTS1kZCBISDptbTpzc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJ5eXl5LU1NLWRkXCI7XG4gIH1cblxuICBnZXREaXNhYmxlZERhdGUoY29sOiBIZFRhYmxlQ29sdW1uKTogKGN1cnJlbnQ6IERhdGUpID0+IGJvb2xlYW4ge1xuICAgIGlmIChjb2wgJiYgY29sLmRhdGVPcHRpb24gJiYgY29sLmRhdGVPcHRpb24uZGlzYWJsZWREYXRlKSB7XG4gICAgICByZXR1cm4gY29sLmRhdGVPcHRpb24uZGlzYWJsZWREYXRlO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBnZXRSYW5nZVBsYWNlaG9sZGVyKGNvbDogSGRUYWJsZUNvbHVtbik6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29sICYmIGNvbC5kYXRlT3B0aW9uID8gY29sLmRhdGVPcHRpb24ucmFuZ2VQbGFjZWhvbGRlciA6IG51bGw7XG4gICAgaWYgKHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyLmxlbmd0aCA+PSAyKSB7XG4gICAgICByZXR1cm4gW3BsYWNlaG9sZGVyWzBdLCBwbGFjZWhvbGRlclsxXV07XG4gICAgfVxuICAgIHJldHVybiBbXCLlvIDlp4vml6XmnJ9cIiwgXCLnu5PmnZ/ml6XmnJ9cIl07XG4gIH1cblxuICAvKiogSW5wdXQgLyBJbnB1dE51bWJlciAvIOaXpeacn+WPmOabtO+8muWFiOiusOaXp+WAvOWGjeWGmeWbnuW5tumAmuefpeeItue7hOS7tiAqL1xuICBvbkNlbGxDaGFuZ2UoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzSW5saW5lRWRpdChjb2wpIHx8ICFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBjb2wubmFtZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGRhdGFbbmFtZV07XG4gICAgZGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIHRoaXMuY2VsbENoYW5nZS5lbWl0KHtcbiAgICAgIGxpbmU6IGRhdGEsXG4gICAgICBjb2wsXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCDlsZXlvIDvvJrmnIkgb25PcGVuQ2hhbmdlRXZlbnQg5pe25bGV5byA5YWI5riF56m66YCJ6aG55YaN5Zue6LCDIChvcGVuLCBsaW5lKe+8m+WFs+mXreS4jeWbnuiwg+S4muWKoeOAglxuICAgKiDlm57osIPoi6UgcmV0dXJuIOaVsOe7hCAvIFByb21pc2UgLyBPYnNlcnZhYmxl77yM55Sx57uE5Lu25YaZ5ZueIG9wdGlvbnMg5bm2IG1hcmtGb3JDaGVja+OAglxuICAgKi9cbiAgb25TZWxlY3RPcGVuQ2hhbmdlKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55LCBvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFjb2wgfHwgIWNvbC5vbk9wZW5DaGFuZ2VFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oY29sLCBkYXRhKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBjb25zdCBmbiA9IGNvbC5vbk9wZW5DaGFuZ2VFdmVudDtcbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIGNvbC5vbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gY29sLm9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lXG4gICAgICAgIDogMDtcbiAgICBpZiAoIWRlYm91bmNlTXMpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0TG9hZGVyUmVzdWx0KGNvbCwgZGF0YSwgZm4ob3BlbiwgZGF0YSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdE9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmbjogY2IsIG9wZW46IG8sIGxpbmUsIGNvbDogYyB9KSA9PiB7XG4gICAgICAgIGlmIChvKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RMb2FkZXJSZXN1bHQoYywgbGluZSwgY2IobywgbGluZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLnNlbGVjdE9wZW5DaGFuZ2VTdWJqZWN0Lm5leHQoeyBmbiwgb3BlbiwgbGluZTogZGF0YSwgY29sIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCDmkJzntKLvvJrmnIkgb25TZWFyY2hFdmVudCDml7blm57osIMgKGtleXdvcmQsIGxpbmUp77yM5LiN5riF56m6IG9wdGlvbnPjgIJcbiAgICog5Zue6LCD6IulIHJldHVybiDmlbDnu4QgLyBQcm9taXNlIC8gT2JzZXJ2YWJsZe+8jOeUsee7hOS7tuWGmeWbniBvcHRpb25zIOW5tiBtYXJrRm9yQ2hlY2vjgIJcbiAgICovXG4gIG9uU2VsZWN0U2VhcmNoKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLm9uU2VhcmNoRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm4gPSBjb2wub25TZWFyY2hFdmVudDtcbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIGNvbC5vblNlYXJjaEV2ZW50RXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IGNvbC5vblNlYXJjaEV2ZW50RXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RMb2FkZXJSZXN1bHQoY29sLCBkYXRhLCBmbihrZXl3b3JkLCBkYXRhKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdFNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RTZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RTZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdFNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZShkZWJvdW5jZU1zKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm46IGNiLCBrZXl3b3JkOiBrdywgbGluZSwgY29sOiBjIH0pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RMb2FkZXJSZXN1bHQoYywgbGluZSwgY2Ioa3csIGxpbmUpKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0U2VhcmNoU3ViamVjdC5uZXh0KHsgZm4sIGtleXdvcmQsIGxpbmU6IGRhdGEsIGNvbCB9KTtcbiAgfVxuXG4gIC8qKiDlsZXlvIDml7bmuIXnqbrliJcgc2VsZWN0TGlzdCDmiJbooYzkuIogc2VsZWN0TGlzdE5hbWXvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaUgKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBjb2wuc2VsZWN0T3B0aW9uO1xuICAgIGlmIChvcHQuc2VsZWN0TGlzdCAhPSBudWxsKSB7XG4gICAgICBvcHQuc2VsZWN0TGlzdCA9IFtdO1xuICAgIH1cbiAgICBpZiAob3B0LnNlbGVjdExpc3ROYW1lICYmIGRhdGEpIHtcbiAgICAgIGRhdGFbb3B0LnNlbGVjdExpc3ROYW1lXSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlpITnkIbliqDovb3lm57osIPov5Tlm57lgLzvvJrmlbDnu4Tnm7TmjqXlhpnlm57vvJtQcm9taXNlL09ic2VydmFibGUg5a6M5oiQ5ZCO5YaZ5Zue77ybdm9pZCDku4UgbWFya0ZvckNoZWNr44CCXG4gICAqIOS8mOWFiOWGmSBzZWxlY3RMaXN0TmFtZe+8jOWQpuWImeWGmeWIl+S4iiBzZWxlY3RMaXN044CCXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVNlbGVjdExvYWRlclJlc3VsdChcbiAgICBjb2w6IEhkVGFibGVDb2x1bW4sXG4gICAgZGF0YTogYW55LFxuICAgIHJlc3VsdDogYW55LFxuICApOiB2b2lkIHtcbiAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0T3B0aW9ucyhjb2wsIGRhdGEsIHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmVzdWx0LnRoZW4oXG4gICAgICAgIChsaXN0OiBhbnkpID0+IHRoaXMuYXBwbHlTZWxlY3RPcHRpb25zKGNvbCwgZGF0YSwgbGlzdCksXG4gICAgICAgICgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQuc3Vic2NyaWJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdExvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdExvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RMb2FkZXJTdWJzY3JpcHRpb24gPSByZXN1bHQuc3Vic2NyaWJlKFxuICAgICAgICAobGlzdDogYW55KSA9PiB0aGlzLmFwcGx5U2VsZWN0T3B0aW9ucyhjb2wsIGRhdGEsIGxpc3QpLFxuICAgICAgICAoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlbGVjdE9wdGlvbnMoXG4gICAgY29sOiBIZFRhYmxlQ29sdW1uLFxuICAgIGRhdGE6IGFueSxcbiAgICBsaXN0OiBhbnksXG4gICk6IHZvaWQge1xuICAgIGlmICghY29sIHx8ICFjb2wuc2VsZWN0T3B0aW9uIHx8ICFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gY29sLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3ROYW1lICYmIGRhdGEpIHtcbiAgICAgIGRhdGFbb3B0LnNlbGVjdExpc3ROYW1lXSA9IGxpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdC5zZWxlY3RMaXN0ID0gbGlzdDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogU2VsZWN0IOWPmOabtO+8muWPjOWGmSB2YWx1ZSArIGxhYmVs77yM5bm25bimIHByZXZpb3VzKiAvIG9wdGlvbiAqL1xuICBvblNlbGVjdENoYW5nZShjb2w6IEhkVGFibGVDb2x1bW4sIGRhdGE6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNJbmxpbmVFZGl0KGNvbCkgfHwgIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IGNvbC5uYW1lIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHQgPSBjb2wuc2VsZWN0T3B0aW9uO1xuICAgIGNvbnN0IGxhYmVsRmllbGQgPSBvcHQgJiYgb3B0LmxhYmVsID8gb3B0LmxhYmVsIDogbnVsbDtcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gZGF0YVtuYW1lXTtcbiAgICBjb25zdCBwcmV2aW91c0xhYmVsID0gbGFiZWxGaWVsZCA/IGRhdGFbbGFiZWxGaWVsZF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0U2VsZWN0TGlzdChjb2wsIGRhdGEpO1xuICAgIGNvbnN0IHByZXZpb3VzT3B0aW9uID1cbiAgICAgIHByZXZpb3VzVmFsdWUgPT0gbnVsbCB8fCAhb3B0XG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGxpc3QuZmluZCgoaXRlbSkgPT4gaXRlbSAmJiBpdGVtW29wdC52YWx1ZV0gPT09IHByZXZpb3VzVmFsdWUpIHx8XG4gICAgICAgICAgbnVsbDtcbiAgICBjb25zdCBvcHRpb24gPVxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCAhb3B0XG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGxpc3QuZmluZCgoaXRlbSkgPT4gaXRlbSAmJiBpdGVtW29wdC52YWx1ZV0gPT09IHZhbHVlKSB8fCBudWxsO1xuXG4gICAgZGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIGxldCBsYWJlbDogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmIChsYWJlbEZpZWxkKSB7XG4gICAgICBsYWJlbCA9IG9wdGlvbiA/IG9wdGlvbltvcHQubGFiZWxdIDogbnVsbDtcbiAgICAgIGRhdGFbbGFiZWxGaWVsZF0gPSBsYWJlbDtcbiAgICB9XG5cbiAgICB0aGlzLmNlbGxDaGFuZ2UuZW1pdCh7XG4gICAgICBsaW5lOiBkYXRhLFxuICAgICAgY29sLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGxhYmVsLFxuICAgICAgcHJldmlvdXNMYWJlbCxcbiAgICAgIG9wdGlvbixcbiAgICAgIHByZXZpb3VzT3B0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iXX0=
|
|
3221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZmFudGFzeS1uZ3pvcnJvLyIsInNvdXJjZXMiOlsiaGQtdGFibGUvaGQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsWUFBWSxHQUdiLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHFCQUFxQixHQUN0QixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFJTCxnQkFBZ0IsRUFDaEIsUUFBUSxHQUNULE1BQU0sb0JBQW9CLENBQUM7QUFPNUIsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7O0lBa0szQixZQUNVLE1BQWtCLEVBQ2xCLEdBQXNCLEVBQ3RCLG9CQUEwQztRQUYxQyxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ2xCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLHlCQUFv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LGtEQUErQjs7Ozs7O0lBRy9CLCtDQUF3Qzs7Ozs7SUFDeEMsaURBQWlEOzs7OztJQUNqRCw4Q0FBdUM7Ozs7OztJQUd2QyxtREFLSzs7Ozs7SUFDTCx3REFBK0Q7Ozs7O0lBQy9ELCtDQUtLOzs7OztJQUNMLG9EQUEyRDs7Ozs7O0lBRTNELG9EQUEyRDs7Ozs7O0lBOFEzRCw4Q0FBaUM7O0lBOEVqQyxzQ0FHRTs7Ozs7SUFHRiw2Q0FBcUQ7O0lBRXJELHNDQUVFOztJQTJZRixzQ0FnQ0U7Ozs7O0lBOXdCQSxrQ0FBMEI7Ozs7O0lBQzFCLCtCQUE4Qjs7Ozs7SUFDOUIsZ0RBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0ICogYXMgbG9jYWxmb3JhZ2UgZnJvbSBcImxvY2FsZm9yYWdlXCI7XG5pbXBvcnQge1xuICBJbnB1dEJvb2xlYW4sXG4gIE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50LFxuICBOekZvcm1hdEVtaXRFdmVudCxcbn0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZVwiO1xuaW1wb3J0IHsgTnpSZXNpemVFdmVudCB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3Jlc2l6YWJsZVwiO1xuaW1wb3J0IHsgTnpUYWJsZUNvbXBvbmVudCB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3RhYmxlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGVsYXkgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IENvbFdpZHRoIH0gZnJvbSBcIi4uL21vZGVsL2NvbFdpZHRoXCI7XG5pbXBvcnQgeyBQYWdlIH0gZnJvbSBcIi4uL21vZGVsL2NvbW1vbi10eXBlXCI7XG5pbXBvcnQgeyBDb21tb25TZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlL2NvbW1vbi1zZXNzaW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGdldFRhYmxlU2Nyb2xsWFZpZXdwb3J0V2lkdGgsXG4gIGdldFRhYmxlVmlld3BvcnRXaWR0aCxcbn0gZnJvbSBcIi4uL3V0aWxzL2hkLXRhYmxlLXNjcm9sbC51dGlsXCI7XG5pbXBvcnQgeyBUb3RhbE9wdGlvbiB9IGZyb20gXCIuLi9oZC1kZXRhaWwtbGluZXMvaGQtZGV0YWlsLWxpbmVzLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEhkVGFibGVDZWxsQ2hhbmdlLFxuICBIZFRhYmxlQ29sdW1uLFxuICBPcGVyYXRlQnRuLFxuICBUYWJsZUNhY2hlT3B0aW9uLFxuICBUcmVlR3JpZCxcbn0gZnJvbSBcIi4vaGQtdGFibGUuc2VydmljZVwiO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImhkLXRhYmxlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vaGQtdGFibGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2hkLXRhYmxlLmNvbXBvbmVudC5sZXNzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSGRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdXVpZDogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJsZUNvbHM6IEFycmF5PEhkVGFibGVDb2x1bW4+ID0gW107XG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogUGFnZTxhbnk+O1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiDli77pgInliJflvaLmgIHjgIJjaGVja2JveO+8muWkmumAie+8iOm7mOiupO+8ie+8m3JhZGlv77ya5Y2V6YCJ77yM5peg6KGo5aS05YWo6YCJ77yMc2VsZWN0RXZlbnQg5LuN5Zue5Lyg5pWw57uE77yIMCDmiJYgMSDmnaHvvInjgIJcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFwiY2hlY2tib3hcIiB8IFwicmFkaW9cIiA9IFwiY2hlY2tib3hcIjtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dPcGVyYXRlQ29sV2FycEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiog5piv5ZCm5bGV56S65YiX6K6+572u77yI6b2/6L2u77yJ77yM6buY6K6k5byA5ZCv77yb5by556qX562J5Zy65pmv5Y+v5LygIGZhbHNlIOWFs+mXrSAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0NvbFNldHRpbmdzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAvKiog5omL5Yqo5oyH5a6a6KGM6auY77yb5LiN5Lyg5YiZ5Zyo6aaW5bGP5riy5p+T5ZCO6Ieq5Yqo5rWL6YePICovXG4gIEBJbnB1dCgpIHZpcnR1YWxJdGVtU2l6ZTogbnVtYmVyO1xuICBASW5wdXQoKSBzZWxlY3RGaWVsZDogc3RyaW5nID0gXCJiaWxsTnVtYmVyXCI7XG4gIC8qKlxuICAgKiDooYzli77pgInnpoHnlKjlrZfmrrXlkI3jgILlrprkuYnlkI7lj5blvZPliY3ooYzor6XlrZfmrrXvvJpcbiAgICog5Li6IHRydWUg5pe256aB55So6K+l6KGM5Yu+6YCJ77yI5YWo6YCJ5Lmf5Lya6Lez6L+H77yJ44CCXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3REaXNhYmxlZEZpZWxkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDooYzlpLHmlYjlrZfmrrXlkI3jgILlrprkuYnlkI7lj5blvZPliY3ooYzor6XlrZfmrrXvvJpcbiAgICog5Li6IHRydWUg5pe25pW06KGM6IOM5pmv6Imy5Li6ICNGN0Y4RkHjgIJcbiAgICovXG4gIEBJbnB1dCgpIHJvd0ludmFsaWRGaWVsZDogc3RyaW5nO1xuICAvLyDlkIjorqHljLrln5/vvIjnsbvlnovkuI4gaGQtZGV0YWlsLWxpbmVzIOeahCBUb3RhbE9wdGlvbiDkuIDoh7TvvIlcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dUYWJsZVRvdGFsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRhYmxlVG90YWxPcHRpb246IEFycmF5PFRvdGFsT3B0aW9uPjtcbiAgLyoqXG4gICAqIOWQiOiuoeWIl+aAu+aVsO+8iOWQq+W6j+WPt+WIl++8jOS4jiBoZC1kZXRhaWwtbGluZXMg5LiA6Ie077yJ77ybXG4gICAqIOS4jeS8oOWImeaMieW9k+WJjeWPr+ingeaVsOaNruWIl+aVsCArIDHvvIjluo/lj7fvvInmjqjnrpfjgIJcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbnNOdW1iZXI6IG51bWJlciB8IHN0cmluZztcbiAgQE91dHB1dCgpIHNvcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGFibGVTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIOihjOWGhee8lui+keWPmOabtO+8iOW3suWGmeWbnuihjOWvueixoe+8m3ByZXZpb3VzKiDkvpvmjqXlj6PlpLHotKXlm57mu5rvvIkgKi9cbiAgQE91dHB1dCgpIGNlbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEhkVGFibGVDZWxsQ2hhbmdlPigpO1xuICBASW5wdXQoKSB0YWJsZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIOaYr+WQpuaYvuekuuWIhumhte+8m2ZhbHNlIOaXtuS4gOasoeWxleekuiB0YWJsZURhdGEuY29udGVudCDlhajpg6jooYwgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICog5piv5ZCm5YmN56uv5YiG6aG177yI5a+5IGNvbnRlbnQg5YWo6YeP5YiH54mH77yJ44CCXG4gICAqIHRydWXvvJrnv7vpobXkuI3op6blj5EgdGFibGVTZWFyY2hFdmVudO+8jOmAguWQiOivpuaDheWFqOmHj+aVsOaNru+8m1xuICAgKiBmYWxzZe+8iOm7mOiupO+8ie+8muacjeWKoeerr+WIhumhte+8jOe/u+mhteinpuWPkeafpeivou+8iOeOsOacieWIl+ihqOihjOS4uu+8ieOAglxuICAgKiDkuI4gcGFnaW5hdGlvbj1mYWxzZSDlkIzml7bnlKjml7bku6XkuI3liIbpobXkuLrlh4bjgIJcbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBmcm9udFBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8g6KGo5qC85YiG6aG15Y+C5pWwXG4gIEBJbnB1dCgpIHRhYmxlUGFnZUluZGV4OiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSB0YWJsZVBhZ2VTaXplOiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIGlzRmlyc3RFbnRyeVNlYXJjaDogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNDcm9zc1BhZ2VTZWxlY3Q6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSB0YWJsZVBhZ2VJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGFibGVQYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGFibGVQYWdlU2l6ZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVRvdGFsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZVRvdGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFwidGFibGVMZWZ0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICB0YWJsZUxlZnRCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVJpZ2h0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICB0YWJsZVJpZ2h0QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzY3JvbGwgPSBudWxsO1xuXG4gIC8vIOihqOagvOWLvumAieWPguaVsFxuICBpc0FsbERpc3BsYXlEYXRhQ2hlY2tlZCA9IGZhbHNlO1xuICBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgbGlzdE9mRGlzcGxheURhdGEgPSBbXTtcbiAgbGlzdE9mQWxsRGF0YSA9IFtdO1xuICBsaXN0T2ZTZWxlY3Rpb246IEFycmF5PGFueT4gfCBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgbWFwT2ZDaGVja2VkSWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIG1hcE9mQ2hlY2tMaXN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIC8vIOWQiOiuoeWPguaVsFxuICB0YWJsZVRvdGFsT3B0aW9uTGlzdCA9IFtdO1xuICAvLyDnvJPlrZjkv6Hmga9cbiAgdGFibGVDYWNoZU9wdGlvbjogVGFibGVDYWNoZU9wdGlvbiA9IG5ldyBUYWJsZUNhY2hlT3B0aW9uKCk7XG4gIHVzZXJTZXNzaW9uOiBhbnk7XG5cbiAgdGFibGVDb2xzQ2FjaGU6IEFycmF5PEhkVGFibGVDb2x1bW4+ID0gW107XG4gIHNob3dUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RDb2xMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBzZWxlY3RDb2xMaXN0Tm9kZXNDYWNoZTogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIHNob3dMaXN0Tm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc0Ryb3Bkb3duVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyDorr7nva7liJfnmoTlj6/op4Hmk43kvZzmlbDnu4RcbiAgbm93TGlzdE5vZGVzOiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgLy8g6K6+572u5YiX55qE5LiN5Y+v6KeB5pON5L2c5pWw57uEXG4gIGhpZGVMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuXG4gIC8vIOeCueWHu+aXtumcgOimgeacieS4tOaXtuaVsOe7hOWtmOaUvuS4pOS4qnRyZWUs55So5LqO5Y+W5raI5pe25YCZ5oGi5aSN6LCD5pW05YmN55qE54q25oCBXG4gIGNhbmNlbE5vd0xpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIGNhbmNlbEhpZGVMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBzaG93RGV0YWlsOiBib29sZWFuID0gZmFsc2U7XG4gIGxvY2FsZm9yYWdlOiBhbnkgPSBudWxsO1xuICBsb2NhbHRpb25UbXA6IHN0cmluZyA9IFwiXCI7XG4gIGlzRmlyc3RFbnRyeVNlYXJjaExvY2FsOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNDcm9zc1BhZ2VTZWxlY3RMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiDoh6rliqjmtYvph4/liY3nmoTlhZzlupXooYzpq5jvvIzmtYvph4/lrozmiJDlkI7kvJrmm7TmlrAgKi9cbiAgbWVhc3VyZWRWaXJ0dWFsSXRlbVNpemUgPSA0NztcblxuICAvKiog6K6w5b2V5b2T5YmN5piv5ZCm5aSE5LqO6Jma5ouf5rua5Yqo5qih5byP77yM55So5LqO5YiH5o2iIHBhZ2VTaXplIOaXtumHjeW7uuihqOagvCAqL1xuICBwcml2YXRlIHZpcnR1YWxTY3JvbGxBY3RpdmU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAvKiog5YiX5a695ZCI6K6h77yI5ZCr5Yu+6YCJL+W6j+WPtyArIGZsdWlkIOihpeWuve+8ie+8jGZvb3RlciDooajlrr3kuI7mqKrlkJEgc2Nyb2xsIOWFseeUqCAqL1xuICB0YWJsZUNvbFdpZHRoVG90YWwgPSAwO1xuXG4gIC8qKlxuICAgKiBmbHVpZO+8muWjsOaYjuWIl+aAu+WuvSA8IOWuueWZqOaXtu+8jOaKiuW3rumineihpeWIsOacgOWQjuS4gOWIl+S4muWKoeWIl++8iOS4jeaUuee8k+WtmOWuve+8ie+8jFxuICAgKiDlubborr4gc2Nyb2xsLnggPSDlrrnlmajlrr3vvIzpgb/lhY3ooajlrr0gMTAwJSDlnYfmkYrmkpHlvIDli77pgInliJfvvJvmi5bmi73mlLnlrr3ku43lhpkgY29sLndpZHRo44CCXG4gICAqL1xuICBmbHVpZEV4dHJhV2lkdGggPSAwO1xuXG4gIC8qKlxuICAgKiDliJfmgLvlrr3mnKrotoXlh7rlrrnlmajvvIhmbHVpZCDooaXlrr3lkIPmu6HvvInvvJrkuI3pnIDopoHnnJ/mraPmqKrmu5rvvIxcbiAgICog55So5LqO5YWz5o6JIG5nLXpvcnJvIGZpeGVkLWhlYWRlciDluKbmnaXnmoTluLjpqbsgWCDovbTmu5rliqjmnaHjgIJcbiAgICovXG4gIGZsdWlkSG9yaXpvbnRhbCA9IGZhbHNlO1xuXG4gIC8qKiBmbHVpZCDooaXlrr3nm67moIfliJfnvJPlrZjvvIzpgb/lhY3mqKHmnb/mr4/moLwgQ0Qg5pe25Y+N5aSN5omrIHRhYmxlQ29scyAqL1xuICBwcml2YXRlIGZsdWlkRXh0cmFUYXJnZXRDb2w6IEhkVGFibGVDb2x1bW4gPSBudWxsO1xuXG4gIC8qKiDmlbDmja7mm7TmlrDlkI7lvoXlpI3kvY3nurXlkJHmu5rliqjkvY3nva4gKi9cbiAgcHJpdmF0ZSBwZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSBmYWxzZTtcblxuICAvKiog5b2T5YmN5o6S5bqP77yM6KGo5qC86YeN5bu65ZCO55So5LqO5oGi5aSN6KGo5aS05o6S5bqP5oCBICovXG4gIHByaXZhdGUgY3VycmVudFNvcnRLZXk6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFNvcnRWYWx1ZTogc3RyaW5nID0gbnVsbDtcblxuICBAVmlld0NoaWxkKFwiaGRUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgbnpUYWJsZUNvbXBvbmVudDogTnpUYWJsZUNvbXBvbmVudDtcblxuICBwcml2YXRlIHRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5OiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIHByaXZhdGUgdG90YWxGb290ZXJTY3JvbGxIYW5kbGVyOiAoKSA9PiB2b2lkID0gbnVsbDtcbiAgcHJpdmF0ZSB0b3RhbEZvb3RlclN5bmNSZXRyeSA9IDA7XG5cbiAgLyoqIOihqOS9k+acieerlua7muadoeaXtuWQiOiuoSBmb290ZXIg5omN6aKE55WZ5Y+z5L6n5rua5Yqo5p2h5qe9ICovXG4gIHRvdGFsRm9vdGVyTmVlZFlHdXR0ZXIgPSBmYWxzZTtcblxuICAvKiog6KeG5Y+jL+WuueWZqOWwuuWvuOWPmOWMluaXtumHjeeulyBzY3JvbGwueCDkuI7lkIjorqHlr7npvZAgKi9cbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZVRpbWVyOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGJvdW5kT25WaWV3cG9ydFJlc2l6ZTogKCkgPT4gdm9pZCA9IG51bGw7XG4gIHByaXZhdGUgaG9zdFJlc2l6ZU9ic2VydmVyOiBhbnkgPSBudWxsO1xuXG4gIC8qKiBzZWxlY3Qg5bGV5byAIC8g5pCc57Si6Ziy5oqW77yI5a+56b2QIGZvcm0tbGluZXPvvIkgKi9cbiAgcHJpdmF0ZSBzZWxlY3RPcGVuQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHtcbiAgICBmbjogKG9wZW46IGJvb2xlYW4sIGxpbmU6IGFueSkgPT4gYW55O1xuICAgIG9wZW46IGJvb2xlYW47XG4gICAgbGluZTogYW55O1xuICAgIGNvbDogSGRUYWJsZUNvbHVtbjtcbiAgfT4oKTtcbiAgcHJpdmF0ZSBzZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VsZWN0U2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHtcbiAgICBmbjogKGtleXdvcmQ6IHN0cmluZywgbGluZTogYW55KSA9PiBhbnk7XG4gICAga2V5d29yZDogc3RyaW5nO1xuICAgIGxpbmU6IGFueTtcbiAgICBjb2w6IEhkVGFibGVDb2x1bW47XG4gIH0+KCk7XG4gIHByaXZhdGUgc2VsZWN0U2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKiDlvILmraXlm57lhpkgb3B0aW9ucyDnmoTorqLpmIXvvIzpgb/lhY3ov57ngrnmkJzntKLms4TmvI8gKi9cbiAgcHJpdmF0ZSBzZWxlY3RMb2FkZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3RFbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb21tb25TZXNzaW9uU2VydmljZTogQ29tbW9uU2Vzc2lvblNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMubG9jYWxmb3JhZ2UgPSBsb2NhbGZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICBkcml2ZXI6IGxvY2FsZm9yYWdlLklOREVYRUREQixcbiAgICAgIG5hbWU6IFwiaGQtZnNjbVwiLCAvLyDorr7nva7lrZjlgqjlupPnmoTlkI3np7BcbiAgICAgIHZlcnNpb246IDEuMCwgLy8g6K6+572u5a2Y5YKo5bqT55qE54mI5pysXG4gICAgICBzdG9yZU5hbWU6IFwiaGQtZnNjbS1zdG9yZVwiLCAvLyDorr7nva7lrZjlgqjlupPnmoTlrZjlgqjnqbrpl7TlkI3np7BcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5iaW5kVG90YWxGb290ZXJTY3JvbGxTeW5jKCk7XG4gICAgdGhpcy51bmJpbmRWaWV3cG9ydFJlc2l6ZVN5bmMoKTtcbiAgICBpZiAodGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdE9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0U2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdFNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RMb2FkZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0TG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIOS+m+S4muWKoeWcqOiHquihjOWGmeWbniBvcHRpb25zIOWQjuinpuWPkSBPblB1c2gg5Yi35paw77yI5LyY5YWIIHJldHVybiBPYnNlcnZhYmxlL1Byb21pc2Ug55Sx57uE5Lu25aSE55CG77yJICovXG4gIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRmlyc3RFbnRyeVNlYXJjaCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuaXNGaXJzdEVudHJ5U2VhcmNoTG9jYWwgPSB0aGlzLmlzRmlyc3RFbnRyeVNlYXJjaDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDcm9zc1BhZ2VTZWxlY3QgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaXNDcm9zc1BhZ2VTZWxlY3RMb2NhbCA9IHRoaXMuaXNDcm9zc1BhZ2VTZWxlY3Q7XG4gICAgfVxuICAgIHRoaXMubG9jYWx0aW9uVG1wID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgaWYgKHRoaXMubG9jYWx0aW9uVG1wKSB7XG4gICAgICB0aGlzLmxvY2FsdGlvblRtcCA9IHRoaXMubG9jYWx0aW9uVG1wLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG4gICAgfVxuICAgIHRoaXMudXNlclNlc3Npb24gPSB0aGlzLmNvbW1vblNlc3Npb25TZXJ2aWNlLmdldFNlc3Npb24oXG4gICAgICBcIl9fanlfYXV0aG9yaXphdGlvbl9zZXNzaW9uX19cIixcbiAgICApO1xuICAgIC8vIOeUqOS6juW8gOWPkeeOr+Wig+iwg+ivlVxuICAgIGlmICghdGhpcy51c2VyU2Vzc2lvbikge1xuICAgICAgdGhpcy51c2VyU2Vzc2lvbiA9IHtcbiAgICAgICAgdXNlckNvZGU6IFwiZGV2XCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuYmluZFZpZXdwb3J0UmVzaXplU3luYygpO1xuICAgIHRoaXMuZGVsZXRlSGlkZUl0ZW0oKTtcbiAgICBpZiAoIXRoaXMudGFibGVDb2xzIHx8IHRoaXMudGFibGVDb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9jYWxmb3JhZ2VcbiAgICAgIC5yZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0SW5pdExvY2FsZm9yYWdlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwibG9jYWxmb3JhZ2XliqDovb3lvILluLhzdGVwMVwiLCBlKTtcbiAgICAgICAgdGhyb3cgXCJsb2NhbGZvcmFnZeWKoOi9veW8guW4uFwiO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2UpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzW1wic2VsZWN0VHlwZVwiXSAmJlxuICAgICAgY2hhbmdlc1tcInNlbGVjdFR5cGVcIl1bXCJwcmV2aW91c1ZhbHVlXCJdICE9IG51bGwgJiZcbiAgICAgIGNoYW5nZXNbXCJzZWxlY3RUeXBlXCJdW1wiY3VycmVudFZhbHVlXCJdICE9PVxuICAgICAgICBjaGFuZ2VzW1wic2VsZWN0VHlwZVwiXVtcInByZXZpb3VzVmFsdWVcIl1cbiAgICApIHtcbiAgICAgIHRoaXMucmVzZXRTdGF0dXMoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcInRhYmxlRGF0YVwiXSB8fFxuICAgICAgY2hhbmdlc1tcInRhYmxlVG90YWxPcHRpb25cIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93VGFibGVUb3RhbFwiXSB8fFxuICAgICAgY2hhbmdlc1tcImNvbHVtbnNOdW1iZXJcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZUNvbHNcIl1cbiAgICApIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVUb3RhbCgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMgJiZcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl0gJiZcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJjdXJyZW50VmFsdWVcIl0gJiZcbiAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJwcmV2aW91c1ZhbHVlXCJdXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJjdXJyZW50VmFsdWVcIl1bXCJwYWdlU2l6ZVwiXSAhPT1cbiAgICAgICAgICBjaGFuZ2VzW1widGFibGVEYXRhXCJdW1wicHJldmlvdXNWYWx1ZVwiXVtcInBhZ2VTaXplXCJdIHx8XG4gICAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJjdXJyZW50VmFsdWVcIl1bXCJwYWdlTnVtYmVyXCJdICE9PVxuICAgICAgICAgIGNoYW5nZXNbXCJ0YWJsZURhdGFcIl1bXCJwcmV2aW91c1ZhbHVlXCJdW1wicGFnZU51bWJlclwiXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ1Jlc2V0U2Nyb2xsVG9wID0gdHJ1ZTtcbiAgICAgICAgLy8gcGFnZVNpemUvcGFnZU51bWJlciDlj5jljJbkuZ/opoHph43nrpcgc2Nyb2xsIC8gZmx1aWTjgIJcbiAgICAgICAgLy8g5Lia5Yqh5bi45oqKIFBhZ2UucGFnZVNpemUg5YaZ5oiQIGNvbnRlbnQubGVuZ3Ro77yI5aaC5pS25qy+57yW6L6RIHRvUGFnZe+8ie+8jFxuICAgICAgICAvLyB2aXJ0dWFsU2Nyb2xsPWZhbHNlIOaXtuiLpei/memHjOi3s+i/h++8jOepuuihqOWIneWni+WMluWQjueahCBmbHVpZCDkuI3kvJrooaXkuIrvvIzli77pgInliJfooqvmkpHlvIDjgIJcbiAgICAgICAgLy8gYXBwbHlUYWJsZVNjcm9sbE1vZGUoZmFsc2UpIOWcqOaooeW8j+acquWPmOaXtuWPqiBkZWFsU2Nyb2xs77yM5LiN5Lya5by65Yi26YeN5bu65riF5o6S5bqP5oCB44CCXG4gICAgICAgIHRoaXMuYXBwbHlUYWJsZVNjcm9sbE1vZGUoZmFsc2UpO1xuICAgICAgICAvLyDnv7vpobUv5pS5IHBhZ2VTaXpl77ya5Li75Yqo5aSa5qyh5aSN5L2N77yM6KaG55uWIENESyDlvILmraXmuLLmn5Pml7bluo9cbiAgICAgICAgdGhpcy5zY2hlZHVsZVJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0Nyb3NzUGFnZVNlbGVjdExvY2FsKSB7XG4gICAgICAgIHRoaXMucmVzZXRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1tcInRhYmxlRGF0YVwiXSkge1xuICAgICAgdGhpcy5wZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSB0cnVlO1xuICAgICAgLy8g5LiN6K665piv5ZCm6Jma5ouf5rua5Yqo6YO96KaB6YeN566XIHNjcm9sbCAvIGZsdWlk44CCXG4gICAgICAvLyDmlLbmrL4v5LuY5qy+57yW6L6R562J6aG1IFt2aXJ0dWFsU2Nyb2xsXT1mYWxzZSArIOW8guatpeeBjOaVsOaNru+8muWOn+WFiOi3s+i/h+S8muWvvOiHtFxuICAgICAgLy8g56m66KGo5Yid5aeL5YyW5ZCO5LiN5YaN6KGl5a6977yM5Yu+6YCJ5YiX6KKr5Z2H5pGK5pKR5byA44CCXG4gICAgICB0aGlzLmFwcGx5VGFibGVTY3JvbGxNb2RlKGZhbHNlKTtcbiAgICAgIC8vIOaVsOaNruabtOaWsOWQjuWkjeS9jee6teWQkea7muWKqO+8iOWQq+iZmuaLn+a7muWKqOWcuuaZr++8iVxuICAgICAgdGhpcy5zY2hlZHVsZVJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcInRhYmxlQ29sc1wiXSAmJlxuICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcInRhYmxlQ29sc1wiXS5jdXJyZW50VmFsdWUpICE9PVxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzW1widGFibGVDb2xzXCJdLnByZXZpb3VzVmFsdWUpICYmXG4gICAgICBjaGFuZ2VzW1widGFibGVDb2xzXCJdLnByZXZpb3VzVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5kZWxldGVIaWRlSXRlbSgpO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlQ29scyB8fCB0aGlzLnRhYmxlQ29scy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2NhbGZvcmFnZVxuICAgICAgICAucmVhZHkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRJbml0TG9jYWxmb3JhZ2UoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJsb2NhbGZvcmFnZeWKoOi9veW8guW4uHN0ZXAyXCIsIGUpO1xuICAgICAgICAgIHRocm93IFwibG9jYWxmb3JhZ2XliqDovb3lvILluLhcIjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGNoYW5nZXNbXCJwYWdpbmF0aW9uXCJdICYmICFjaGFuZ2VzW1wicGFnaW5hdGlvblwiXS5maXJzdENoYW5nZSkgfHxcbiAgICAgIChjaGFuZ2VzW1wiZnJvbnRQYWdpbmF0aW9uXCJdICYmICFjaGFuZ2VzW1wiZnJvbnRQYWdpbmF0aW9uXCJdLmZpcnN0Q2hhbmdlKVxuICAgICkge1xuICAgICAgLy8g5YiG6aG15qih5byP5YiH5o2i6ZyA6YeN5bu6IG56LXRhYmxl77yIZnJvbnQgLyBzZXJ2ZXIgLyBub25l77yJXG4gICAgICB0aGlzLnRhYmxlUGFnZUluZGV4ID0gMTtcbiAgICAgIHRoaXMuYXBwbHlUYWJsZVNjcm9sbE1vZGUodHJ1ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiog5piv5ZCm6LWw5YmN56uv5YiG6aG177yI5a+5IGNvbnRlbnQg5YiH54mH77yM5LiN6K+35rGC5ZCO56uv77yJICovXG4gIGdldCB1c2VGcm9udFBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wYWdpbmF0aW9uICYmICEhdGhpcy5mcm9udFBhZ2luYXRpb247XG4gIH1cblxuICBkZWxldGVIaWRlSXRlbSgpIHtcbiAgICAvLyDpppblhYjmioppc1Nob3fkuLpmYWxzZeaVsOaNruWJlOmZpOaOiVxuICAgIHRoaXMudGFibGVDb2xzID0gdGhpcy50YWJsZUNvbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAvLyDlpoLmnpzlr7nosaHmsqHmnIkgaXNTaG93IOWxnuaAp++8jOWImem7mOiupOS4uiB0cnVl77yM5L+d55WZ6K+l5a+56LGhXG4gICAgICBpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkoXCJpc1Nob3dcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvLyDlpoLmnpzlr7nosaHmnIkgaXNTaG93IOWxnuaAp++8jOWImeajgOafpeWFtuWAvOaYr+WQpuS4uiB0cnVlXG4gICAgICByZXR1cm4gaXRlbS5pc1Nob3cgPT09IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBzb3J0KHNvcnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuY3VycmVudFNvcnRLZXkgPSBzb3J0ICYmIHNvcnQua2V5O1xuICAgIHRoaXMuY3VycmVudFNvcnRWYWx1ZSA9IHNvcnQgJiYgc29ydC52YWx1ZTtcbiAgICB0aGlzLnNvcnRFdmVudC5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0Q29sU29ydChjb2w6IEhkVGFibGVDb2x1bW4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLmNhblNvcnQgfHwgIXRoaXMuY3VycmVudFNvcnRLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29sLm5hbWUgPT09IHRoaXMuY3VycmVudFNvcnRLZXkgPyB0aGlzLmN1cnJlbnRTb3J0VmFsdWUgOiBudWxsO1xuICB9XG5cbiAgdG9nZ2xlU2hvd0RldGFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEZXRhaWwgPSAhdGhpcy5zaG93RGV0YWlsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxWaWV3cG9ydCh0cnVlKTtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVWaXJ0dWFsSXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsSXRlbVNpemUgIT0gbnVsbCAmJiB0aGlzLnZpcnR1YWxJdGVtU2l6ZSA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnZpcnR1YWxJdGVtU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZWRWaXJ0dWFsSXRlbVNpemU7XG4gIH1cblxuICAvKipcbiAgICog57q15ZCR5Y+v55So6auY5bqm5omj5YeP77ya5oyJ6ZKu5Yy6L+WQiOiuoS/liIbpobXnrYnlm7rlrprljaDkvY3jgIJcbiAgICog5b+F6aG75LiOIGRlYWxTY3JvbGwgLyBwcmVzZXRTY3JvbGxCZWZvcmVSZW1vdW50IOS9v+eUqOWQjOS4gOWll++8jOWQpuWImeS8muivr+WIpOOAjOiDveaUvuS4i+OAjeiAjOS4jeiuviBzY3JvbGwueeOAglxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTY3JvbGxZTWF4T2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnRhYmxlVG90YWwgPyAxODAgOiAxNDApICsgMjE2O1xuICB9XG5cbiAgLyoqXG4gICAqIOW9k+WJjeinhuWPo+WunumZheWxleekuueahOihjOaVsOOAglxuICAgKiDliY3nq6/liIbpobXmjIkgcGFnZUluZGV4L3BhZ2VTaXplIOWIh+eJh+S8sOeul++8jOmBv+WFjeeUqOWFqOmHjyBsZW5ndGgg6K+v5Yik6ZyA6KaB57q15ZCR5rua5Yqo44CCXG4gICAqL1xuICBwcml2YXRlIGdldFZpc2libGVSb3dDb3VudCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgdGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEuY29udGVudCA/IHRoaXMudGFibGVEYXRhLmNvbnRlbnQgOiBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGNvbnRlbnQubGVuZ3RoO1xuICAgIGlmICghdGhpcy51c2VGcm9udFBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgaWYgKHRvdGFsIDw9IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCBwYWdlU2l6ZSA9XG4gICAgICBOdW1iZXIodGhpcy50YWJsZVBhZ2VTaXplKSA+IDAgPyBOdW1iZXIodGhpcy50YWJsZVBhZ2VTaXplKSA6IDEwO1xuICAgIGNvbnN0IHBhZ2VJbmRleCA9XG4gICAgICBOdW1iZXIodGhpcy50YWJsZVBhZ2VJbmRleCkgPiAwID8gTnVtYmVyKHRoaXMudGFibGVQYWdlSW5kZXgpIDogMTtcbiAgICBjb25zdCBzdGFydCA9IChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplO1xuICAgIGlmIChzdGFydCA+PSB0b3RhbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihwYWdlU2l6ZSwgdG90YWwgLSBzdGFydCk7XG4gIH1cblxuICAvKiog5b2T5YmN6aG15YaF5a656auY5bqm5piv5ZCm6LaF5Ye66KeG5Y+j77yI6ZyA6KaB6KGo5YaF57q15ZCR5rua5Yqo77yJICovXG4gIGdldCBuZWVkc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5nZXRWaXNpYmxlUm93Q291bnQoKTtcbiAgICBpZiAocm93Q291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtYXhPZmZzZXQgPSB0aGlzLmdldFNjcm9sbFlNYXhPZmZzZXQoKTtcbiAgICBjb25zdCBlc3RpbWF0ZWRIZWlnaHQgPSByb3dDb3VudCAqIHRoaXMuZWZmZWN0aXZlVmlydHVhbEl0ZW1TaXplO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gZXN0aW1hdGVkSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0IC0gbWF4T2Zmc2V0O1xuICAgIH1cbiAgICByZXR1cm4gcm93Q291bnQgPiAxMDA7XG4gIH1cblxuICAvKiog5b2T5YmN6aG15pWw5o2u6IO95a6M5pW05bGV56S65pe25LiN5ZCv55So6Jma5ouf5rua5Yqo77yM6YG/5YWN5bCR6YeP5pWw5o2u5Lmf5Ye6546w5rua5Yqo5p2hICovXG4gIGdldCB1c2VWaXJ0dWFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5lZWRzVmVydGljYWxTY3JvbGw7XG4gIH1cblxuICBnZXRSaWdodFN0aWNreShjb2w6IEhkVGFibGVDb2x1bW4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gY29sLmZpeGVkID09PSBcInJpZ2h0XCIgPyBgJHtjb2wuZml4ZWRSaWdodFdpZHRoIHx8IDB9cHhgIDogbnVsbDtcbiAgfVxuXG4gIGdldExlZnRTdGlja3koY29sOiBIZFRhYmxlQ29sdW1uKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNvbC5maXhlZCA9PT0gXCJsZWZ0XCIgPyBgJHtjb2wuZml4ZWRXaWR0aCB8fCAwfXB4YCA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog5bqP5Y+35YiX5Zu65a6a5a6977yI5ZCrIHBhZGRpbmfvvIzlj6/lrrnnurMgNiDkvY3lpoIgMTk5OTk177yJ44CCXG4gICAqIOS4jemUgeatu+aXtuihqOS9k+S8mumaj+S9jeaVsOWPmOWuve+8iDHihpJ+NjRweO+8jDE5OTk5NeKGkn42N3B477yJ77yM5ZCI6K6h6KGM5a+55LiN6b2Q44CCXG4gICAqL1xuICByZWFkb25seSBsaW5lTnVtYmVyQ29sV2lkdGggPSA3MjtcblxuICAvKiog5byA5ZCv5ZCI6K6h5pe25bqP5Y+35YiX55qEIGxlZnTvvIjli77pgInliJfljaAgNDBweO+8iSAqL1xuICBnZXQgbGluZU51bWJlckxlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaG93U2VsZWN0ZWQgPyBcIjQwcHhcIiA6IFwiMHB4XCI7XG4gIH1cblxuICBnZXQgbGluZU51bWJlckNvbFdpZHRoUHgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lTnVtYmVyQ29sV2lkdGggKyBcInB4XCI7XG4gIH1cblxuICAvKipcbiAgICog5pegIHNjcm9sbC54IOaXtuWQiOiuoei1sCBmbHVpZO+8iHdpZHRoOjEwMCXvvInjgIJcbiAgICog5YiX5bCR5pe25Lmf5Lya6K6+IHNjcm9sbC5477yI6KGl5a695ZCD5ruh77yJ77yM5ZCI6K6h6LWw5Zu65a6a6KGo5a6944CCXG4gICAqL1xuICBnZXQgaXNUb3RhbEZvb3RlckZsdWlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMuc2Nyb2xsICYmIHRoaXMuc2Nyb2xsLngpO1xuICB9XG5cbiAgLyoqIOWxleekuueUqOWIl+Wuve+8mmZsdWlkIOaXtuacgOWQjuS4gOWIl+S4muWKoeWIlyA9IOWjsOaYjuWuvSArIGZsdWlkRXh0cmFXaWR0aCAqL1xuICBnZXRDb2xEaXNwbGF5V2lkdGgoY29sOiBIZFRhYmxlQ29sdW1uKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYXNlID1cbiAgICAgIGNvbCAmJiBjb2wud2lkdGggIT0gbnVsbCAmJiBjb2wud2lkdGggPiAwXG4gICAgICAgID8gY29sLndpZHRoXG4gICAgICAgIDogQ29sV2lkdGguZml4Q29sV2lkdGg7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mbHVpZEV4dHJhV2lkdGggPD0gMCB8fFxuICAgICAgIWNvbCB8fFxuICAgICAgIXRoaXMuZmx1aWRFeHRyYVRhcmdldENvbCB8fFxuICAgICAgY29sICE9PSB0aGlzLmZsdWlkRXh0cmFUYXJnZXRDb2xcbiAgICApIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZSArIHRoaXMuZmx1aWRFeHRyYVdpZHRoO1xuICB9XG5cbiAgLyoqIOaMieW9k+WJjSBsYXlvdXQg5Yi35pawIGZsdWlkIOihpeWuveebruagh+WIl++8iOS7hSBkZWFsU2Nyb2xsIC8gc3luYyDml7bosIPnlKjvvIkgKi9cbiAgcHJpdmF0ZSByZWZyZXNoRmx1aWRFeHRyYVRhcmdldENvbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdWlkRXh0cmFUYXJnZXRDb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLmZsdWlkRXh0cmFXaWR0aCA8PSAwIHx8ICF0aGlzLnRhYmxlQ29scyB8fCAhdGhpcy50YWJsZUNvbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSB0aGlzLnRhYmxlQ29scy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgYyA9IHRoaXMudGFibGVDb2xzW2ldO1xuICAgICAgaWYgKGMgJiYgYy5pc1Nob3cgJiYgYy5maXhlZCAhPT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHRoaXMuZmx1aWRFeHRyYVRhcmdldENvbCA9IGM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHRoaXMudGFibGVDb2xzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy50YWJsZUNvbHNbaV07XG4gICAgICBpZiAoYyAmJiBjLmlzU2hvdykge1xuICAgICAgICB0aGlzLmZsdWlkRXh0cmFUYXJnZXRDb2wgPSBjO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGZsdWlkIOKGkiAxMDAl77yb5Zu65a6aIOKGkiBzY3JvbGwueO+8iOS4juihqOS9k+WQjOS4gOWll+aoquWQkeWuveW6pu+8iSAqL1xuICBnZXQgdG90YWxGb290ZXJUYWJsZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNUb3RhbEZvb3RlckZsdWlkKSB7XG4gICAgICByZXR1cm4gXCIxMDAlXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNjcm9sbCAmJiB0aGlzLnNjcm9sbC54XG4gICAgICA/IFN0cmluZyh0aGlzLnNjcm9sbC54KVxuICAgICAgOiB0aGlzLnRhYmxlQ29sV2lkdGhUb3RhbCA+IDBcbiAgICAgICAgPyB0aGlzLnRhYmxlQ29sV2lkdGhUb3RhbCArIFwicHhcIlxuICAgICAgICA6IFwiMTAwJVwiO1xuICB9XG5cbiAgLyoqIOW9k+WJjemhteihjOWPt++8iOi3qOmhtei/nue7re+8jOS7jiAxIOW8gOWni++8iSAqL1xuICBnZXRMaW5lTnVtYmVyKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhZ2UgPSBOdW1iZXIodGhpcy50YWJsZVBhZ2VJbmRleCkgPiAwID8gTnVtYmVyKHRoaXMudGFibGVQYWdlSW5kZXgpIDogMTtcbiAgICBjb25zdCBzaXplID0gTnVtYmVyKHRoaXMudGFibGVQYWdlU2l6ZSkgPiAwID8gTnVtYmVyKHRoaXMudGFibGVQYWdlU2l6ZSkgOiAwO1xuICAgIGNvbnN0IHJvd0luZGV4ID0gTnVtYmVyKGluZGV4KSA+PSAwID8gTnVtYmVyKGluZGV4KSA6IDA7XG4gICAgcmV0dXJuIChwYWdlIC0gMSkgKiBzaXplICsgcm93SW5kZXggKyAxO1xuICB9XG5cbiAgdHJhY2tCeVJvdyA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGtleSA9IGRhdGEgJiYgZGF0YVt0aGlzLnNlbGVjdEZpZWxkXTtcbiAgICByZXR1cm4ga2V5ICE9IG51bGwgPyBTdHJpbmcoa2V5KSA6IGByb3ctJHtpbmRleH1gO1xuICB9O1xuXG4gIC8qKiDomZrmi5/mu5rliqjmjInmlbDnu4TkuIvmoIfov73ouKrvvIzpgb/lhY3kuJrliqHkuLvplK4gdHJhY2tCeSDlr7zoh7QgQ0RLIOihjOWkjeeUqOmUmeS9jSAqL1xuICB2aXJ0dWFsVHJhY2tCeVJvdyA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IGluZGV4O1xuXG4gIHRyYWNrQnlDb2wgPSAoX2luZGV4OiBudW1iZXIsIGNvbDogSGRUYWJsZUNvbHVtbik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGNvbC50aXRsZTtcbiAgfTtcblxuICBnZXRJbml0TG9jYWxmb3JhZ2UoKSB7XG4gICAgLy8g6aaW5YWI6I635Y+W5b2T5YmNaGQtdGFibGXlrZjlgqjnmoTmlbDmja4g5aaC5p6c5rKh5pyJ77yM5YiZ5Yid5aeL5YyW5LiL5b2T5YmN55qE5pWw5o2uXG4gICAgdGhpcy5sb2NhbGZvcmFnZVxuICAgICAgLmdldEl0ZW0oXG4gICAgICAgIFwiaGQtdGFibGVfXCIgK1xuICAgICAgICAgIHRoaXMudXNlclNlc3Npb24udXNlckNvZGUgK1xuICAgICAgICAgIFwiX1wiICtcbiAgICAgICAgICB0aGlzLmxvY2FsdGlvblRtcCArXG4gICAgICAgICAgXCJfXCIgK1xuICAgICAgICAgIHRoaXMudXVpZCxcbiAgICAgIClcbiAgICAgIC50aGVuKCh2YWx1ZTogVGFibGVDYWNoZU9wdGlvbikgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gJiZcbiAgICAgICAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZSAmJlxuICAgICAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLnBhZ2VTaXplID4gMTBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVQYWdlU2l6ZSA9IHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZTtcbiAgICAgICAgICAgIHRoaXMudGFibGVQYWdlU2l6ZUNoYW5nZS5lbWl0KHRoaXMudGFibGVQYWdlU2l6ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbiA9IG5ldyBUYWJsZUNhY2hlT3B0aW9uKCk7XG4gICAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLnBhZ2VTaXplID0gdGhpcy50YWJsZVBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIC8vIOacjeWKoeerr+WIhumhteaJjeWcqOWIneWni+WMluaXtuaKmyBwYWdlU2l6ZUNoYW5nZUV2ZW50IOinpuWPkeeItuafpeivou+8m+WJjeerr+WIhumhteS4jeaKm1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uICYmXG4gICAgICAgICAgIXRoaXMuZnJvbnRQYWdpbmF0aW9uICYmXG4gICAgICAgICAgdGhpcy5pc0ZpcnN0RW50cnlTZWFyY2hMb2NhbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRhYmxlUGFnZVNpemVDaGFuZ2VFdmVudC5lbWl0KHRoaXMudGFibGVQYWdlU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0ZpcnN0RW50cnlTZWFyY2hMb2NhbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gPSBuZXcgVGFibGVDYWNoZU9wdGlvbigpO1xuICAgICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgPSB0aGlzLnRhYmxlUGFnZVNpemU7XG4gICAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGluaXRUYWJsZSgpIHtcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy51dWlkKSB7XG4gICAgICB0aHJvdyBcImhkLXRhYmxl57y65aSxdXVpZOWPguaVsO+8jOivt+S9v+eUqOe8lui+keWZqOaPkuS7tueUn+aIkOW5tue7mWhkLXRhYmxl6LWL5LqIdXVpZOWxnuaAp1wiO1xuICAgIH1cbiAgICBpZiAodGhpcy5qdWRnZVJlcGVhdENvbHMoKSkge1xuICAgICAgdGhpcy5kZWFsQ29scygpO1xuICAgICAgdGhpcy5zZXRDb2xzKCk7XG4gICAgICB0aGlzLmRlYWxPcGVyYXRlQnRuKCk7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxBY3RpdmUgPSBudWxsO1xuICAgICAgdGhpcy5hcHBseVRhYmxlU2Nyb2xsTW9kZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKiog6Jma5oufL+aZrumAmuaooeW8j+WIh+aNouaXtumHjeW7uuihqOagvO+8jOmBv+WFjeaui+eVmea7muWKqOWuueWZqCAqL1xuICBhcHBseVRhYmxlU2Nyb2xsTW9kZShmb3JjZVJlbW91bnQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHVzZVZpcnR1YWwgPSB0aGlzLnVzZVZpcnR1YWxTY3JvbGw7XG4gICAgY29uc3QgbW9kZUNoYW5nZWQgPVxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsQWN0aXZlICE9PSBudWxsICYmXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxBY3RpdmUgIT09IHVzZVZpcnR1YWw7XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsQWN0aXZlID0gdXNlVmlydHVhbDtcblxuICAgIGlmIChmb3JjZVJlbW91bnQgfHwgbW9kZUNoYW5nZWQpIHtcbiAgICAgIC8vIOW/hemhu+WFiOWGmeWlvSBzY3JvbGwuee+8jOWGjeWIm+W7uiBuei10YWJsZeOAglxuICAgICAgLy8gbmctem9ycm8g5Y+q5ZyoIEFmdGVyVmlld0luaXQg57uR5LiA5qyhIGhlYWRlci9ib2R5IOeahCBzY3JvbGwg5ZCM5q2l77ybXG4gICAgICAvLyDoi6XlhYjku6UgeT1udWxsIOWIm+W7uuWGjeaUueaIkOaciSB577yM6KGo5aS055uR5ZCs5Lya5Lii77yM6KGo546w5Li65YiX5aS05LiN6Lef552A5qiq5rua44CCXG4gICAgICB0aGlzLnByZXNldFNjcm9sbEJlZm9yZVJlbW91bnQodXNlVmlydHVhbCk7XG4gICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWFsU2Nyb2xsKCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5hZnRlclRhYmxlUmVuZGVyKHVzZVZpcnR1YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZIYXNYID0gISEodGhpcy5zY3JvbGwgJiYgdGhpcy5zY3JvbGwueCk7XG4gICAgY29uc3QgcHJldkhhc1kgPSAhISh0aGlzLnNjcm9sbCAmJiB0aGlzLnNjcm9sbC55KTtcbiAgICB0aGlzLmRlYWxTY3JvbGwoKTtcbiAgICBjb25zdCBuZXh0SGFzWCA9ICEhKHRoaXMuc2Nyb2xsICYmIHRoaXMuc2Nyb2xsLngpO1xuICAgIGNvbnN0IG5leHRIYXNZID0gISEodGhpcy5zY3JvbGwgJiYgdGhpcy5zY3JvbGwueSk7XG4gICAgLy8g6L+Q6KGM5LitIHgveSDku47mnInlj5jml6Av5LuO5peg5Y+Y5pyJ5pe277yM5Lmf5b+F6aG76YeN5bu677yaXG4gICAgLy8gLSB577yabmctem9ycm8g5Y+q5ZyoIEFmdGVyVmlld0luaXQg57uR5LiA5qyhIGhlYWRlci9ib2R5IOWQjOatpVxuICAgIC8vIC0geO+8muepuuihqCBzY3JvbGwueD1udWxs77yIdGFibGUtbGF5b3V0OmF1dG/vvInihpIg5pyJ5pWw5o2u5ZCO6K6+IHNjcm9sbC5477yIZml4ZWTvvInvvIxcbiAgICAvLyAgIOS4jemHjeW7uuaXtuWLvumAieWIl+S7jeaMiSBhdXRvIOWdh+aRiuaSkeW8gO+8iOaUtuasvue8lui+keetieW8guatpeeBjOaVsOmhte+8iVxuICAgIGlmIChwcmV2SGFzWSAhPT0gbmV4dEhhc1kgfHwgcHJldkhhc1ggIT09IG5leHRIYXNYKSB7XG4gICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWFsU2Nyb2xsKCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5hZnRlclRhYmxlUmVuZGVyKHVzZVZpcnR1YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYWZ0ZXJUYWJsZVJlbmRlcih1c2VWaXJ0dWFsKTtcbiAgfVxuXG4gIC8qKiDph43lu7rliY3pooTorr4gc2Nyb2xs77yM5L+d6K+BIEFmdGVyVmlld0luaXQg5pe2IGhlYWRlci9ib2R5IOe7k+aehOW3suato+ehriAqL1xuICBwcml2YXRlIHByZXNldFNjcm9sbEJlZm9yZVJlbW91bnQodXNlVmlydHVhbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHRoaXMuZ2V0U2Nyb2xsWU1heE9mZnNldCgpO1xuICAgIGNvbnN0IHggPSB0aGlzLnNjcm9sbCA/IHRoaXMuc2Nyb2xsLnggOiBudWxsO1xuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwgJiYgIXVzZVZpcnR1YWwpIHtcbiAgICAgIHRoaXMuc2Nyb2xsID0geyB4LCB5OiBudWxsIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsID0ge1xuICAgICAgeCxcbiAgICAgIHk6IGBjYWxjKDEwMHZoIC0gJHttYXhPZmZzZXR9cHgpYCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZnRlclRhYmxlUmVuZGVyKHVzZVZpcnR1YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodXNlVmlydHVhbCkge1xuICAgICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZpZXdwb3J0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB0aGlzLm1lYXN1cmVWaXJ0dWFsSXRlbVNpemUodHJ1ZSk7XG4gICAgICAvLyDlrp7mtYvooYzpq5jlkI7lj6/og73ku47jgIzog73mlL7kuIvjgI3lj5jkuLrjgIzotoXlh7rjgI3vvIzpnIDliIfmjaLmu5rliqjmqKHlvI9cbiAgICAgIGlmICh0aGlzLnVzZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgdGhpcy5hcHBseVRhYmxlU2Nyb2xsTW9kZShmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN5bmNIb3Jpem9udGFsU2Nyb2xsKCk7XG4gICAgICB0aGlzLmZsdXNoUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmlld3BvcnQoZm9yY2VNZWFzdXJlID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudXNlVmlydHVhbFNjcm9sbCkge1xuICAgICAgaWYgKGZvcmNlTWVhc3VyZSkge1xuICAgICAgICB0aGlzLm1lYXN1cmVWaXJ0dWFsSXRlbVNpemUoZm9yY2VNZWFzdXJlKTtcbiAgICAgICAgdGhpcy5kZWFsU2Nyb2xsKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICAgdGhpcy5mbHVzaFJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld3BvcnQgPVxuICAgICAgICB0aGlzLm56VGFibGVDb21wb25lbnQgJiYgdGhpcy5uelRhYmxlQ29tcG9uZW50LmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcbiAgICAgIGlmICghdmlld3BvcnQpIHtcbiAgICAgICAgdGhpcy5zeW5jSG9yaXpvbnRhbFNjcm9sbCgpO1xuICAgICAgICB0aGlzLmZsdXNoUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVhc3VyZWQgPSB0aGlzLm1lYXN1cmVWaXJ0dWFsSXRlbVNpemUoZm9yY2VNZWFzdXJlKTtcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICB0aGlzLmRlYWxTY3JvbGwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWVhc3VyZVZpcnR1YWxJdGVtU2l6ZShmb3JjZU1lYXN1cmUpO1xuICAgICAgICAgIHRoaXMuc3luY0hvcml6b250YWxTY3JvbGwoKTtcbiAgICAgICAgICB2aWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgIHRoaXMuZmx1c2hSZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgIHRoaXMuc3luY0hvcml6b250YWxTY3JvbGwoKTtcbiAgICAgICAgdGhpcy5mbHVzaFJlc2V0VGFibGVCb2R5U2Nyb2xsVG9wKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiog5pWw5o2u5Yi35paw5ZCO5bCG6KGo5L2T57q15ZCR5rua5Yqo5aSN5L2N5Yiw6aG26YOoICovXG4gIHByaXZhdGUgcmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm56VGFibGVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbnpUYWJsZSA9IHRoaXMubnpUYWJsZUNvbXBvbmVudCBhcyBhbnk7XG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLm56VGFibGVDb21wb25lbnQuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgaWYgKHR5cGVvZiAodmlld3BvcnQgYXMgYW55KS5zY3JvbGxUb09mZnNldCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICh2aWV3cG9ydCBhcyBhbnkpLnNjcm9sbFRvT2Zmc2V0KDApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiAodmlld3BvcnQgYXMgYW55KS5zY3JvbGxUb0luZGV4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgKHZpZXdwb3J0IGFzIGFueSkuc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZpZXdwb3J0RWwgPVxuICAgICAgICB2aWV3cG9ydC5lbGVtZW50UmVmICYmXG4gICAgICAgICh2aWV3cG9ydC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgaWYgKHZpZXdwb3J0RWwpIHtcbiAgICAgICAgdmlld3BvcnRFbC5zY3JvbGxUb3AgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBib2R5Q2FuZGlkYXRlcyA9IFtcbiAgICAgIG56VGFibGUubWl4VGFibGVCb2R5TmF0aXZlRWxlbWVudCxcbiAgICAgIG56VGFibGUudGFibGVCb2R5TmF0aXZlRWxlbWVudCxcbiAgICAgIG56VGFibGUudGFibGVCb2R5RWxlbWVudCAmJiBuelRhYmxlLnRhYmxlQm9keUVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICBdO1xuICAgIGJvZHlDYW5kaWRhdGVzLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IDA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdGFibGVNYWluID1cbiAgICAgIG56VGFibGUudGFibGVNYWluRWxlbWVudCAmJlxuICAgICAgKG56VGFibGUudGFibGVNYWluRWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAoIXRhYmxlTWFpbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub2RlcyA9IHRhYmxlTWFpbi5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuYW50LXRhYmxlLWJvZHksIGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFwiLFxuICAgICk7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlcywgKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgZWwuc2Nyb2xsVG9wID0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmlbDmja7mm7TmlrDlkI7lpJrmrKHlsJ3or5XlpI3kvY3jgIJcbiAgICogbmctem9ycm8gOCArIENESyDomZrmi5/mu5rliqjkvJrlnKjmlbDmja7liLfmlrDlkI7lvILmraXmlLnlhpkgc2Nyb2xsVG9w77yM5Y2V5qyh5aSN5L2N57uP5bi46KKr6KaG55uW44CCXG4gICAqL1xuICBwcml2YXRlIHNjaGVkdWxlUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTogdm9pZCB7XG4gICAgLy8g5aSa5qyh5bCd6K+V77ya6KaG55uWIG56LXRhYmxlIC8gQ0RLIOiZmuaLn+a7muWKqOW8guatpeaUueWGmSBzY3JvbGxUb3BcbiAgICBjb25zdCBkZWxheXMgPSBbMCwgNTAsIDEwMF07XG4gICAgZGVsYXlzLmZvckVhY2goKG1zLCBpbmRleCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSBkZWxheXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMucGVuZGluZ1Jlc2V0U2Nyb2xsVG9wID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hSZXNldFRhYmxlQm9keVNjcm9sbFRvcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVuZGluZ1Jlc2V0U2Nyb2xsVG9wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgfVxuXG4gIC8qKiDmnKrmiYvliqjkvKAgdmlydHVhbEl0ZW1TaXplIOaXtu+8jOS7juW3sua4suafk+ihjOa1i+mHj+ecn+WunumrmOW6piAqL1xuICBtZWFzdXJlVmlydHVhbEl0ZW1TaXplKGZvcmNlID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsSXRlbVNpemUgIT0gbnVsbCAmJiB0aGlzLnZpcnR1YWxJdGVtU2l6ZSA+IDAgJiYgIWZvcmNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID1cbiAgICAgIHRoaXMubnpUYWJsZUNvbXBvbmVudCAmJiB0aGlzLm56VGFibGVDb21wb25lbnQuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIGNvbnN0IHRhYmxlQm9keSA9XG4gICAgICB0aGlzLm56VGFibGVDb21wb25lbnQgJiZcbiAgICAgICh0aGlzLm56VGFibGVDb21wb25lbnQudGFibGVCb2R5TmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgY29uc3Qgcm93ID1cbiAgICAgICh2aWV3cG9ydCAmJlxuICAgICAgICAoKHZpZXdwb3J0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBcInRyLmhkLXRhYmxlLXZpcnR1YWwtcm93XCIsXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQpKSB8fFxuICAgICAgKHRhYmxlQm9keSAmJiAodGFibGVCb2R5LnF1ZXJ5U2VsZWN0b3IoXCJ0Ym9keSB0clwiKSBhcyBIVE1MRWxlbWVudCkpO1xuICAgIGlmICghcm93IHx8IHJvdy5vZmZzZXRIZWlnaHQgPD0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHQgPSByb3cub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChoZWlnaHQgPT09IHRoaXMubWVhc3VyZWRWaXJ0dWFsSXRlbVNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5tZWFzdXJlZFZpcnR1YWxJdGVtU2l6ZSA9IGhlaWdodDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIOiuvue9ruWIl+eCueWHu+WPlua2iFxuICBjYW5jZWxEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbmNlbEhpZGVMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLm5vd0xpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYW5jZWxOb3dMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIOeCueWHu+inpuWPkeiuvue9ruWIl1xuICBjb25maXJtRHJvcGRvd24oKTogdm9pZCB7XG4gICAgLy8g5Li05pe25a2Y5pS+5LiL77yM5Y+W5raI55qE5pe25YCZ5oGi5aSN5Y6f5p2l55qE54q25oCBICAg5rex5ou36LSd5LiL5a+56LGh5pWw57uEXG4gICAgdGhpcy5jYW5jZWxIaWRlTGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpZGVMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmNhbmNlbE5vd0xpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ub3dMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHN1Ym1pdEdyaWRzKCkge1xuICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzID0gW107XG4gICAgdGhpcy5ub3dMaXN0Tm9kZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMucHVzaChpdGVtLnRpdGxlKTtcbiAgICB9KTtcbiAgICB0aGlzLnNhdmVUYWJsZUNhY2hlT3B0aW9uKCk7XG4gICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyDku47nvJPlrZjorr7nva7liJdcbiAgc2V0Q29scygpIHtcbiAgICB0aGlzLnNob3dMaXN0Tm9kZXMgPSBmYWxzZTtcbiAgICB0aGlzLm5vd0xpc3ROb2RlcyA9IFtdO1xuICAgIHRoaXMuaGlkZUxpc3ROb2RlcyA9IFtdO1xuICAgIGlmICh0aGlzLmhhc0NvbHNDYWNoZSgpKSB7XG4gICAgICBsZXQgeyBub3RJbmNvbHMsIGluY29scyB9ID0gdGhpcy50YWJsZUNvbHNDYWNoZS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5jbHVkZXMoaXRlbS50aXRsZSkpIHtcbiAgICAgICAgICAgIGFjYy5pbmNvbHMucHVzaChpdGVtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjLm5vdEluY29scy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7IG5vdEluY29sczogW10sIGluY29sczogW10gfSxcbiAgICAgICk7XG4gICAgICBpbmNvbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluZGV4T2YoYS50aXRsZSkgLVxuICAgICAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluZGV4T2YoYi50aXRsZSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJsZUNvbHMgPSBpbmNvbHMuY29uY2F0KG5vdEluY29scyk7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZUNvbHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc0NvbHNDYWNoZSgpKSB7XG4gICAgICAgIGVsZW1lbnQuaXNTaG93ID0gdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5jbHVkZXMoZWxlbWVudC50aXRsZSlcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICBpZiAoZWxlbWVudC5pc1Nob3cpIHtcbiAgICAgICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAga2V5OiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQuZml4ZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAvLyBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluY2x1ZGVzKGVsZW1lbnQudGl0bGUpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGlkZUxpc3ROb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAga2V5OiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQuZml4ZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAvLyBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluY2x1ZGVzKGVsZW1lbnQudGl0bGUpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmlzU2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMubm93TGlzdE5vZGVzLnB1c2goe1xuICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgIGtleTogZWxlbWVudC50aXRsZSxcbiAgICAgICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgICAgIC8vIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRpc2FibGVkOiBlbGVtZW50LmZpeGVkID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIOiwg+aVtOWIl+WuveS4uue8k+WtmOWuveW6plxuICAgIGlmIChcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbiAmJlxuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocyAmJlxuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocy5zaXplICE9PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLnRhYmxlQ29scy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMuaGFzKGNvbC50aXRsZSkpIHtcbiAgICAgICAgICBjb2wud2lkdGggPSB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29sV2lkdGhzLmdldChjb2wudGl0bGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmRlYWxDb2xzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dMaXN0Tm9kZXMgPSB0cnVlO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8g5ouW5ou95pON5L2cXG4gIGJlZm9yZURyb3AgPSAoYXJnOiBOekZvcm1hdEJlZm9yZURyb3BFdmVudCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gPT4ge1xuICAgIGlmIChcbiAgICAgIGFyZy5ub2RlLm9yaWdpbi5kaXNhYmxlZCB8fFxuICAgICAgIWFyZy5kcmFnTm9kZS5vcmlnaW4uY2hlY2tlZCB8fFxuICAgICAgYXJnLnBvcyA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5vZGU6IFRyZWVHcmlkID0gbmV3IFRyZWVHcmlkKCk7XG4gICAgICBub2RlLmNoZWNrZWQgPSBhcmcuZHJhZ05vZGUub3JpZ2luLmNoZWNrZWQ7XG4gICAgICBub2RlLmRpc2FibGVkID0gYXJnLmRyYWdOb2RlLm9yaWdpbi5kaXNhYmxlZDtcbiAgICAgIG5vZGUuZXhwYW5kZWQgPSBhcmcuZHJhZ05vZGUub3JpZ2luLmV4cGFuZGVkO1xuICAgICAgbm9kZS5pc0xlYWYgPSBhcmcuZHJhZ05vZGUub3JpZ2luLmlzTGVhZjtcbiAgICAgIG5vZGUua2V5ID0gYXJnLmRyYWdOb2RlLm9yaWdpbi5rZXk7XG4gICAgICBub2RlLnNlbGVjdGFibGUgPSBhcmcuZHJhZ05vZGUub3JpZ2luLnNlbGVjdGFibGU7XG4gICAgICBub2RlLnRpdGxlID0gYXJnLmRyYWdOb2RlLm9yaWdpbi50aXRsZTtcbiAgICAgIC8vIOaLluaLveWFg+e0oOS4i+agh1xuICAgICAgbGV0IGRyYWdOb2RlSW5kZXggPSB0aGlzLm5vd0xpc3ROb2Rlcy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGUgPT0gYXJnLmRyYWdOb2RlLm9yaWdpbi50aXRsZTtcbiAgICAgIH0pO1xuICAgICAgLy8g55uu5qCH5L2N572u55qE5LiL5qCHXG4gICAgICBsZXQgbm9kZUluZGV4ID1cbiAgICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGUgPT0gYXJnLm5vZGUub3JpZ2luLnRpdGxlO1xuICAgICAgICB9KSArIChhcmcucG9zID09PSAtMSA/IDAgOiBhcmcucG9zKTtcbiAgICAgIHRoaXMubm93TGlzdE5vZGVzLnNwbGljZShub2RlSW5kZXgsIDAsIG5vZGUpO1xuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMuc3BsaWNlKFxuICAgICAgICBub2RlSW5kZXggPj0gZHJhZ05vZGVJbmRleCA/IGRyYWdOb2RlSW5kZXggOiBkcmFnTm9kZUluZGV4ICsgMSxcbiAgICAgICAgMSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShkZWxheSgxMDApKTtcbiAgICB9XG4gIH07XG5cbiAgbW92ZUVsZW1lbnROZWFyYnkoYXJyLCBlbGVtZW50VG9Nb3ZlVGl0bGUsIHRhcmdldEVsZW1lbnRUaXRsZSwgcG9zKSB7XG4gICAgY29uc3QgdG1wQXJyYXkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFycikpO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdG1wQXJyYXkuZmluZEluZGV4KFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udGl0bGUgPT09IHRhcmdldEVsZW1lbnRUaXRsZSxcbiAgICApO1xuICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IHRtcEFycmF5LmZpbmRJbmRleChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnRpdGxlID09PSBlbGVtZW50VG9Nb3ZlVGl0bGUsXG4gICAgKTtcbiAgICBjb25zdCBuZXdJbmRleCA9IHBvcyA8IDAgPyB0YXJnZXRJbmRleCArIHBvcyA6IHRhcmdldEluZGV4O1xuICAgIC8vIOenu+mZpOebruagh+WFg+e0oO+8jOW5tuaPkuWFpeWIsOaWsOeahOS9jee9rlxuICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50ID0gdG1wQXJyYXkuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSk7XG4gICAgdG1wQXJyYXkuc3BsaWNlKG5ld0luZGV4ICsgMSwgMCwgcmVtb3ZlZEVsZW1lbnRbMF0pO1xuICAgIHJldHVybiB0bXBBcnJheTtcbiAgfVxuXG4gIC8vIOWLvumAieaTjeS9nFxuICBjaGVja0FjdGlvbihldmVudDogTnpGb3JtYXRFbWl0RXZlbnQpOiB2b2lkIHtcbiAgICAvLyDli77pgInlj6rmnInlnKhoaWRlTGlzdE5vZGVzLOWPlua2iOWLvumAieWPquacieWcqG5vd0xpc3ROb2Rlc1xuICAgIGlmIChldmVudC5ub2RlLm9yaWdpbi5jaGVja2VkKSB7XG4gICAgICBsZXQgbm9kZTogVHJlZUdyaWQgPSBuZXcgVHJlZUdyaWQoKTtcbiAgICAgIG5vZGUgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50aXRsZSA9PT0gZXZlbnQubm9kZS5vcmlnaW4udGl0bGU7XG4gICAgICB9KTtcbiAgICAgIG5vZGUuY2hlY2tlZCA9IHRydWU7XG4gICAgICAvLyDmib7liLDnrKzkuIDkuKpmaXhlZOWxnuaAp+S4unJpZ2h055qEdGl0bGXvvIzmib7liLDmj5LlhaXlhYPntKDnmoTkvY3nva5cbiAgICAgIGxldCB0aXRsZSA9IG51bGw7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy50YWJsZUNvbHNDYWNoZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodGhpcy50YWJsZUNvbHNDYWNoZVtpXS5maXhlZCA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLnRhYmxlQ29sc0NhY2hlW2ldLnRpdGxlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgdGVtcG9yYXJ5Tm9kZUxpc3QgPSB0aGlzLm5vd0xpc3ROb2Rlcy5zbGljZSgwKTtcbiAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgdGVtcG9yYXJ5Tm9kZUxpc3QucHVzaChub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ub3dMaXN0Tm9kZXMuZmluZEluZGV4KFxuICAgICAgICAgIChub2RlKSA9PiBub2RlLnRpdGxlID09PSB0aXRsZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGVtcG9yYXJ5Tm9kZUxpc3Quc3BsaWNlKGluZGV4LCAwLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm93TGlzdE5vZGVzID0gdGVtcG9yYXJ5Tm9kZUxpc3Q7XG4gICAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnRpdGxlICE9PSBldmVudC5ub2RlLm9yaWdpbi50aXRsZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiAodGhpcy5oaWRlTGlzdE5vZGVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gJiYgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMpIHtcbiAgICAgIC8vICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gdGhpcy5nZXRIaWRlTGlzdE5vZGVzKCk7XG4gICAgICAvLyB9XG4gICAgICBsZXQgdGVtcG9yYXJ5Tm9kZUxpc3QgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuc2xpY2UoMCk7XG4gICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBldmVudC5ub2RlLm9yaWdpbi50aXRsZSkge1xuICAgICAgICAgIGNvbnN0IGlubmVySXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xuICAgICAgICAgIGlubmVySXRlbS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgdGVtcG9yYXJ5Tm9kZUxpc3QucHVzaChpbm5lckl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaGlkZUxpc3ROb2RlcyA9IHRlbXBvcmFyeU5vZGVMaXN0O1xuXG4gICAgICAvLyDkuLrkuobpmLLmraLmnKrpgInmi6nnmoTmlbDnu4Tpobrluo/lm6DkuLpwdXNo5pa55rOV6ICM5pS55Y+Y77yM6YCa6L+H5Yid5aeL5pWw5o2u6I635Y+W5pi+56S655qE5a2X5q615YiX6KGoXG4gICAgICB0aGlzLm5vd0xpc3ROb2RlcyA9IHRoaXMubm93TGlzdE5vZGVzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50aXRsZSAhPT0gZXZlbnQubm9kZS5vcmlnaW4udGl0bGU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyDpmLLmraLmnKrpgInmi6nnmoTmlbDnu4Tpobrluo/lm6DkuLpwdXNo5pa55rOV6ICM5pS55Y+Y77yM5LuO5Yid5aeL5pWw5o2u6I635Y+W6ZqQ6JeP5pyq5pi+56S655qE5a2X5q615YiX6KGoXG4gIGdldEhpZGVMaXN0Tm9kZXMoKTogQXJyYXk8VHJlZUdyaWQ+IHtcbiAgICBsZXQgdGVtcG9yYXJ5Tm9kZUxpc3Q6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICAgIC8vIOS7jnRhYmxlQ29sc0NhY2hl6YeM6Z2i5om+5rKh5pyJ5Zyoc3RvcmFnZemHjOmdouWHuueOsOeahOWtl+autSznu4TmiJBoaWRlTGlzdFxuICAgIHRoaXMudGFibGVDb2xzQ2FjaGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5pbmNsdWRlcyhpdGVtLnRpdGxlKSkge1xuICAgICAgICBsZXQgbm9kZUl0ZW06IFRyZWVHcmlkID0gbmV3IFRyZWVHcmlkKCk7XG4gICAgICAgIG5vZGVJdGVtLnRpdGxlID0gaXRlbS50aXRsZTtcbiAgICAgICAgbm9kZUl0ZW0ua2V5ID0gaXRlbS50aXRsZTtcbiAgICAgICAgbm9kZUl0ZW0uZGlzYWJsZWQgPSBpdGVtLmZpeGVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBub2RlSXRlbS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIHRlbXBvcmFyeU5vZGVMaXN0LnB1c2gobm9kZUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0ZW1wb3JhcnlOb2RlTGlzdDtcbiAgfVxuXG4gIGRlYWxDb2xzKCkge1xuICAgIGlmICghdGhpcy50YWJsZUNvbHNbMF0ubWluV2lkdGgpIHtcbiAgICAgIHRoaXMudGFibGVDb2xzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICBzcGFuLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiO1xuICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gXCIxNHB4XCI7XG4gICAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7IC8vIOWwhuagt+W8j+S/ruaUueS4uiBpbmxpbmUtYmxvY2tcbiAgICAgICAgc3Bhbi5pbm5lclRleHQgPSBpdGVtLnRpdGxlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICBpdGVtLm1pbldpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aCArIDE2O1xuICAgICAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyDlpITnkIblt6blj7PlkLjpmYTnmoTmlbDmja7lnKjmlbDnu4TkuK3nmoTkvY3nva5cbiAgICBjb25zdCBsZWZ0Rml4ZWRDb2xzID0gdGhpcy50YWJsZUNvbHMuZmlsdGVyKChjb2wpID0+IGNvbC5maXhlZCA9PT0gXCJsZWZ0XCIpO1xuICAgIGNvbnN0IHJpZ2h0Rml4ZWRDb2xzID0gdGhpcy50YWJsZUNvbHMuZmlsdGVyKFxuICAgICAgKGNvbCkgPT4gY29sLmZpeGVkID09PSBcInJpZ2h0XCIsXG4gICAgKTtcbiAgICBjb25zdCBub3JtYWxDb2xzID0gdGhpcy50YWJsZUNvbHMuZmlsdGVyKChjb2wpID0+ICFjb2wuZml4ZWQpO1xuICAgIGNvbnN0IHJlc3VsdENvbHMgPSBsZWZ0Rml4ZWRDb2xzLmNvbmNhdChub3JtYWxDb2xzKS5jb25jYXQocmlnaHRGaXhlZENvbHMpO1xuICAgIHRoaXMudGFibGVDb2xzID0gcmVzdWx0Q29scztcbiAgICBpZiAoIXRoaXMudGFibGVDb2xzQ2FjaGUgfHwgdGhpcy50YWJsZUNvbHNDYWNoZS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIOe8k+WtmOS4gOS4i+ihqOagvOeahOaVsOaNrlxuICAgICAgdGhpcy50YWJsZUNvbHNDYWNoZSA9IFsuLi50aGlzLnRhYmxlQ29sc107XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplVGFibGVDYWNoZU9wdGlvbigpIHtcbiAgICBpZiAoIXRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMpIHtcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIH0gZWxzZSBpZiAoISh0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29sV2lkdGhzIGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgY29uc3QgY29sV2lkdGhzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb2xXaWR0aHMuc2V0KGtleSwgKHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMgYXMgYW55KVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocyA9IGNvbFdpZHRocztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc0NvbHNDYWNoZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gJiZcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzICYmXG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVUYWJsZUNhY2hlT3B0aW9uKCkge1xuICAgIHRoaXMubG9jYWxmb3JhZ2Uuc2V0SXRlbShcbiAgICAgIFwiaGQtdGFibGVfXCIgK1xuICAgICAgICB0aGlzLnVzZXJTZXNzaW9uLnVzZXJDb2RlICtcbiAgICAgICAgXCJfXCIgK1xuICAgICAgICB0aGlzLmxvY2FsdGlvblRtcCArXG4gICAgICAgIFwiX1wiICtcbiAgICAgICAgdGhpcy51dWlkLFxuICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLFxuICAgICk7XG4gIH1cblxuICBqdWRnZVJlcGVhdENvbHMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYmxlQ29scy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgdGhpcy50YWJsZUNvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb2xzW2ldLnRpdGxlID09PSB0aGlzLnRhYmxlQ29sc1tqXS50aXRsZSkge1xuICAgICAgICAgIHRocm93IGBoZC10YWJsZee7hOS7tuS4reWIl+WQjSAke3RoaXMudGFibGVDb2xzW2ldLnRpdGxlfSDph43lpI1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25SZXNpemUoeyB3aWR0aCB9OiBOelJlc2l6ZUV2ZW50LCBjb2w6IEhkVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLm5vcm1hbGl6ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICBsZXQgdGVtcFdpZHRoID0gMDtcbiAgICBpZiAod2lkdGggPiBjb2wubWluV2lkdGgpIHtcbiAgICAgIHRlbXBXaWR0aCA9IHdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wV2lkdGggPSBjb2wubWluV2lkdGg7XG4gICAgfVxuICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMuc2V0KGNvbC50aXRsZSwgdGVtcFdpZHRoKTtcbiAgICB0aGlzLnNhdmVUYWJsZUNhY2hlT3B0aW9uKCk7XG4gICAgdGhpcy50YWJsZUNvbHMgPSB0aGlzLnRhYmxlQ29scy5tYXAoKGUpID0+XG4gICAgICBlLnRpdGxlID09PSBjb2wudGl0bGUgPyB7IC4uLmUsIHdpZHRoOiB0ZW1wV2lkdGggfSA6IGUsXG4gICAgKTtcbiAgICB0aGlzLmRlYWxTY3JvbGwoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY1RvdGFsRm9vdGVyV2l0aEJvZHkoKSk7XG4gIH1cblxuICBkZWFsT3BlcmF0ZUJ0bigpIHtcbiAgICBsZXQgb3BlcmF0ZUNvbCA9IHRoaXMudGFibGVDb2xzLmZpbmQoKGNvbCkgPT4gY29sLnRpdGxlID09PSBcIuaTjeS9nFwiKSB8fCBudWxsO1xuICAgIGlmIChvcGVyYXRlQ29sKSB7XG4gICAgICBsZXQgdGV4dFN0ciA9IFwiXCI7XG4gICAgICBvcGVyYXRlQ29sLmJ0bkxpc3QuZm9yRWFjaCgoYnRuKSA9PiB7XG4gICAgICAgIGlmICghYnRuLmlzUmVwZWF0KSB7XG4gICAgICAgICAgdGV4dFN0ciArPSB0eXBlb2YgYnRuLm5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IFwi5pON5L2cXCIgOiBidG4ubmFtZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgIHNwYW4uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICBzcGFuLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgc3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gXCJub3dyYXBcIjtcbiAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBcIjE0cHhcIjtcbiAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7IC8vIOWwhuagt+W8j+S/ruaUueS4uiBpbmxpbmUtYmxvY2tcbiAgICAgIHNwYW4uaW5uZXJUZXh0ID0gdGV4dFN0cjtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICBvcGVyYXRlQ29sLndpZHRoID1cbiAgICAgICAgc3Bhbi5vZmZzZXRXaWR0aCArXG4gICAgICAgIChvcGVyYXRlQ29sLmJ0bkxpc3QuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pc1JlcGVhdCkubGVuZ3RoIC0gMSkgKiA0ICtcbiAgICAgICAgMTY7XG4gICAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc3Bhbik7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBuZWVkU2hvd0NvbmZpcm0oYnRuOiBPcGVyYXRlQnRuLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGJ0bi5zaG93Q29uZmlybSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gYnRuLnNob3dDb25maXJtKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gISFidG4uc2hvd0NvbmZpcm07XG4gIH1cblxuICBnZXRCdG5OYW1lKGJ0bjogT3BlcmF0ZUJ0biwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGJ0bi5uYW1lID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBidG4ubmFtZShkYXRhKSB8fCBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gYnRuLm5hbWUgIT0gbnVsbCA/IFN0cmluZyhidG4ubmFtZSkgOiBcIlwiO1xuICB9XG5cbiAgaXNEYW5nZXJCdG4oYnRuOiBPcGVyYXRlQnRuLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCdG5OYW1lKGJ0biwgZGF0YSkgPT09IFwi5Yig6ZmkXCI7XG4gIH1cblxuICAvKiog6Jma5ouf5rua5Yqo5byA5ZCv5pe25L2/55So6KeG5Y+j5pyA5aSn6auY5bqmICovXG4gIHByaXZhdGUgZ2V0VmlydHVhbFNjcm9sbFkobWF4T2Zmc2V0OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgY2FsYygxMDB2aCAtICR7bWF4T2Zmc2V0fXB4KWA7XG4gIH1cblxuICBwcml2YXRlIGhhc1RhYmxlRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLnRhYmxlRGF0YSAmJlxuICAgICAgdGhpcy50YWJsZURhdGEuY29udGVudCAmJlxuICAgICAgdGhpcy50YWJsZURhdGEuY29udGVudC5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOaMieWjsOaYjuWIl+aAu+WuvSArIOWuueWZqOWuve+8jOiuoeeulyBzY3JvbGwueCDkuI4gZmx1aWQg6KGl5a6944CCXG4gICAqIOWIl+Wwke+8mnNjcm9sbC54ID0g5YaF5a655Yy65a6977yIY2xpZW50V2lkdGjvvInvvIzlt67pop3liqDliLDmnIDlkI7kuJrliqHliJfvvIjli77pgInkv53mjIEgNDDvvInvvJtcbiAgICog5YiX5aSa77yac2Nyb2xsLnggPSDlo7DmmI7mgLvlrr3jgIJcbiAgICog5q+U6L6D5piv5ZCm6LaF5a6955SoIG9mZnNldFdpZHRo77yI5ZCrIFkg5qe977yJ77yM6YG/5YWN44CM5LuF5Zug57q15rua5p2h44CN6K+v5byA5qiq5rua77ybXG4gICAqIOihpeWuveebruagh+eUqCBjbGllbnRXaWR0aO+8jOS4lCBzY3JvbGwueCDnlKggZmxvb3LvvIzpgb/lhY3ooajlrr3lpJogMXB4IOmAvOWHuiBYIOi9tOa7muWKqOadoeOAglxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlSG9yaXpvbnRhbExheW91dChkZWNsYXJlZENvbFdpZHRoOiBudW1iZXIpOiB7XG4gICAgc2Nyb2xsWDogc3RyaW5nIHwgbnVsbDtcbiAgICBmbHVpZEV4dHJhOiBudW1iZXI7XG4gICAgZGlzcGxheVRvdGFsOiBudW1iZXI7XG4gICAgaXNGbHVpZDogYm9vbGVhbjtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLmhhc1RhYmxlRGF0YSgpIHx8IGRlY2xhcmVkQ29sV2lkdGggPD0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Nyb2xsWDogbnVsbCxcbiAgICAgICAgZmx1aWRFeHRyYTogMCxcbiAgICAgICAgZGlzcGxheVRvdGFsOiBkZWNsYXJlZENvbFdpZHRoLFxuICAgICAgICBpc0ZsdWlkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGxldCB2aWV3cG9ydENvbXBhcmUgPSB0aGlzLm56VGFibGVDb21wb25lbnRcbiAgICAgID8gZ2V0VGFibGVTY3JvbGxYVmlld3BvcnRXaWR0aCh0aGlzLm56VGFibGVDb21wb25lbnQpXG4gICAgICA6IDA7XG4gICAgLy8g6KGo5L2T5bCa5pyq6YeP5Yiw5a695pe277yI5byC5q2l54GM5pWwIC8gc3BpbiAvIOWImiByZW1vdW5077yJ77yM55So5a6/5Li75a695YWc5bqVXG4gICAgaWYgKHZpZXdwb3J0Q29tcGFyZSA8PSAwICYmIHRoaXMuaG9zdEVsICYmIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGhvc3RXID0gKHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoO1xuICAgICAgaWYgKGhvc3RXID4gMCkge1xuICAgICAgICB2aWV3cG9ydENvbXBhcmUgPSBob3N0VztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZpZXdwb3J0Q29tcGFyZSA+IDApIHtcbiAgICAgIGlmIChkZWNsYXJlZENvbFdpZHRoID4gdmlld3BvcnRDb21wYXJlICsgMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbFg6IGAke01hdGguY2VpbChkZWNsYXJlZENvbFdpZHRoKX1weGAsXG4gICAgICAgICAgZmx1aWRFeHRyYTogMCxcbiAgICAgICAgICBkaXNwbGF5VG90YWw6IGRlY2xhcmVkQ29sV2lkdGgsXG4gICAgICAgICAgaXNGbHVpZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBmaWxsV2lkdGggPSB0aGlzLm56VGFibGVDb21wb25lbnRcbiAgICAgICAgPyBnZXRUYWJsZVZpZXdwb3J0V2lkdGgodGhpcy5uelRhYmxlQ29tcG9uZW50KVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCB0YXJnZXQgPSBNYXRoLmZsb29yKFxuICAgICAgICBmaWxsV2lkdGggPiAwID8gZmlsbFdpZHRoIDogdmlld3BvcnRDb21wYXJlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZsdWlkRXh0cmEgPSBNYXRoLm1heCgwLCB0YXJnZXQgLSBkZWNsYXJlZENvbFdpZHRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjcm9sbFg6IGAke3RhcmdldH1weGAsXG4gICAgICAgIGZsdWlkRXh0cmEsXG4gICAgICAgIGRpc3BsYXlUb3RhbDogZGVjbGFyZWRDb2xXaWR0aCArIGZsdWlkRXh0cmEsXG4gICAgICAgIGlzRmx1aWQ6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyDop4blj6Pku43mtYvkuI3liLDvvJroh7PlsJHnlKjlo7DmmI7lrr3orr4gc2Nyb2xsLnjvvIzlvLrliLYgZml4ZWQg5biD5bGA6ZSB5Yu+6YCJ5YiX77yMXG4gICAgLy8g6YG/5YWN6JC95ZueIHRhYmxlLWxheW91dDphdXRvIOiiq+Wdh+aRiuaSkeW8gO+8m+WQjue7rSBzeW5jL3JlbW91bnQg5YaN6L2sIGZsdWlk44CCXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbFg6IGAke01hdGguY2VpbChkZWNsYXJlZENvbFdpZHRoKX1weGAsXG4gICAgICBmbHVpZEV4dHJhOiAwLFxuICAgICAgZGlzcGxheVRvdGFsOiBkZWNsYXJlZENvbFdpZHRoLFxuICAgICAgaXNGbHVpZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiDooajmoLzmuLLmn5PlkI7mjInlrp7pmYXlrrnlmajlrr3luqbmoKHmraPmqKrlkJEgc2Nyb2xsIC8gZmx1aWQg6KGl5a69ICovXG4gIHByaXZhdGUgc3luY0hvcml6b250YWxTY3JvbGwoKTogdm9pZCB7XG4gICAgbGV0IGRlY2xhcmVkID0gMDtcbiAgICBpZiAodGhpcy5zaG93U2VsZWN0ZWQpIHtcbiAgICAgIGRlY2xhcmVkICs9IDQwO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93VGFibGVUb3RhbCkge1xuICAgICAgZGVjbGFyZWQgKz0gdGhpcy5saW5lTnVtYmVyQ29sV2lkdGg7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlQ29scykge1xuICAgICAgdGhpcy50YWJsZUNvbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzU2hvdyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBkZWNsYXJlZCArPSBpdGVtLndpZHRoID4gMCA/IGl0ZW0ud2lkdGggOiBDb2xXaWR0aC5maXhDb2xXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHByZXZIYXNYID0gISEodGhpcy5zY3JvbGwgJiYgdGhpcy5zY3JvbGwueCk7XG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5yZXNvbHZlSG9yaXpvbnRhbExheW91dChkZWNsYXJlZCk7XG4gICAgY29uc3QgY3VycmVudFkgPSB0aGlzLnNjcm9sbCA/IHRoaXMuc2Nyb2xsLnkgOiBudWxsO1xuICAgIGNvbnN0IG5leHRIYXNYID0gISFsYXlvdXQuc2Nyb2xsWDtcbiAgICBjb25zdCBzYW1lWCA9IHRoaXMuc2Nyb2xsICYmIHRoaXMuc2Nyb2xsLnggPT09IGxheW91dC5zY3JvbGxYO1xuICAgIGNvbnN0IHNhbWVFeHRyYSA9IHRoaXMuZmx1aWRFeHRyYVdpZHRoID09PSBsYXlvdXQuZmx1aWRFeHRyYTtcbiAgICBjb25zdCBzYW1lRmx1aWQgPSB0aGlzLmZsdWlkSG9yaXpvbnRhbCA9PT0gbGF5b3V0LmlzRmx1aWQ7XG4gICAgaWYgKFxuICAgICAgc2FtZVggJiZcbiAgICAgIHNhbWVFeHRyYSAmJlxuICAgICAgc2FtZUZsdWlkICYmXG4gICAgICB0aGlzLnNjcm9sbCAmJlxuICAgICAgdGhpcy5zY3JvbGwueSA9PT0gY3VycmVudFlcbiAgICApIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zeW5jVG90YWxGb290ZXJXaXRoQm9keSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mbHVpZEV4dHJhV2lkdGggPSBsYXlvdXQuZmx1aWRFeHRyYTtcbiAgICB0aGlzLmZsdWlkSG9yaXpvbnRhbCA9IGxheW91dC5pc0ZsdWlkO1xuICAgIHRoaXMucmVmcmVzaEZsdWlkRXh0cmFUYXJnZXRDb2woKTtcbiAgICB0aGlzLnRhYmxlQ29sV2lkdGhUb3RhbCA9IGxheW91dC5kaXNwbGF5VG90YWw7XG4gICAgdGhpcy5zY3JvbGwgPSB7IHg6IGxheW91dC5zY3JvbGxYLCB5OiBjdXJyZW50WSB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIHN5bmMg6Zi25q616Iul6KGl5LiK5LqGIHNjcm9sbC5477yM6ZyA6YeN5bu65omN6IO95YiH5YiwIGZpeGVkIOW4g+WxgFxuICAgIGlmIChwcmV2SGFzWCAhPT0gbmV4dEhhc1gpIHtcbiAgICAgIHRoaXMuYXBwbHlUYWJsZVNjcm9sbE1vZGUodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zeW5jSGVhZGVyQm9keVNjcm9sbExlZnQoKSk7XG4gIH1cblxuICAvKiog5omL5Yqo5oqK6KGo5L2T5qiq5ZCR5rua5Yqo5ZCM5q2l5Yiw6KGo5aS0IC8g5ZCI6K6hIGZvb3Rlcu+8iOWFnOW6lSBuZy16b3JybyDnm5HlkKzkuKLlpLHnmoTmg4XlhrXvvIkgKi9cbiAgcHJpdmF0ZSBzeW5jSGVhZGVyQm9keVNjcm9sbExlZnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm56VGFibGVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyID0gKHRoaXMubnpUYWJsZUNvbXBvbmVudCBhcyBhbnkpLnRhYmxlSGVhZGVyTmF0aXZlRWxlbWVudCBhc1xuICAgICAgfCBIVE1MRWxlbWVudFxuICAgICAgfCBudWxsO1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldFRhYmxlQm9keVNjcm9sbEVsKCk7XG4gICAgaWYgKHRoaXMuc2Nyb2xsICYmIHRoaXMuc2Nyb2xsLnggJiYgaGVhZGVyICYmIGJvZHkpIHtcbiAgICAgIGlmIChoZWFkZXIuc2Nyb2xsTGVmdCAhPT0gYm9keS5zY3JvbGxMZWZ0KSB7XG4gICAgICAgIGhlYWRlci5zY3JvbGxMZWZ0ID0gYm9keS5zY3JvbGxMZWZ0O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN5bmNUb3RhbEZvb3RlcldpdGhCb2R5KCk7XG4gIH1cblxuICAvKiog5Y+W6KGo5L2T5qiq5ZCR5rua5Yqo5a655Zmo77yI6Jma5ouf5rua5Yqo5LyY5YWIIHZpZXdwb3J077yJICovXG4gIHByaXZhdGUgZ2V0VGFibGVCb2R5U2Nyb2xsRWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMubnpUYWJsZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1peCA9ICh0aGlzLm56VGFibGVDb21wb25lbnQgYXMgYW55KS5taXhUYWJsZUJvZHlOYXRpdmVFbGVtZW50IGFzXG4gICAgICB8IEhUTUxFbGVtZW50XG4gICAgICB8IG51bGw7XG4gICAgaWYgKG1peCkge1xuICAgICAgcmV0dXJuIG1peDtcbiAgICB9XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuaG9zdEVsICYmICh0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAoIWhvc3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgKGhvc3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgXCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQuYW50LXRhYmxlLWJvZHlcIixcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQpIHx8XG4gICAgICAoaG9zdC5xdWVyeVNlbGVjdG9yKFwiLmFudC10YWJsZS1ib2R5XCIpIGFzIEhUTUxFbGVtZW50KSB8fFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRvdGFsRm9vdGVyU2Nyb2xsRWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0RWwgJiYgKHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHJldHVybiBob3N0XG4gICAgICA/IChob3N0LnF1ZXJ5U2VsZWN0b3IoXCIuaGQtdGFibGUtdG90YWwtZm9vdGVyXCIpIGFzIEhUTUxFbGVtZW50KVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqIOihqOS9k+aYr+WQpuWHuueOsOe6teWQkea7muWKqOadoe+8iOWQq+a7muWKqOadoeanveWuve+8iSAqL1xuICBwcml2YXRlIGJvZHlIYXNWZXJ0aWNhbFNjcm9sbGJhcihib2R5OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgYm9keS5zY3JvbGxIZWlnaHQgPiBib2R5LmNsaWVudEhlaWdodCArIDEgfHxcbiAgICAgIGJvZHkub2Zmc2V0V2lkdGggLSBib2R5LmNsaWVudFdpZHRoID4gMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5ZCI6K6hIGZvb3RlciDkuI7ooajkvZPogZTliqjvvJpcbiAgICogLSBmbHVpZO+8iOWIl+acquaSkea7oe+8ie+8muS4jeaoqua7muOAgeS4jea1i+Wuve+8jOihqOWuvSAxMDAlIOS4juihqOS9k+WQjOavlOS+i+aLieS8uO+8m1xuICAgKiAtIGZpeGVk77yI5pyJIHNjcm9sbC5477yJ77ya5ZCM5q2lIHNjcm9sbExlZnTvvJtcbiAgICogLSDku4XlvZPooajkvZPmnInnq5bmu5rmnaHml7bpooTnlZnlj7Pkvqfmp73vvIzooYzlsJHml6Dnq5bmu5rml7bkuI3ljaDkvY3jgIJcbiAgICovXG4gIHByaXZhdGUgc3luY1RvdGFsRm9vdGVyV2l0aEJvZHkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dUYWJsZVRvdGFsKSB7XG4gICAgICB0aGlzLnVuYmluZFRvdGFsRm9vdGVyU2Nyb2xsU3luYygpO1xuICAgICAgaWYgKHRoaXMudG90YWxGb290ZXJOZWVkWUd1dHRlcikge1xuICAgICAgICB0aGlzLnRvdGFsRm9vdGVyTmVlZFlHdXR0ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuZ2V0VG90YWxGb290ZXJTY3JvbGxFbCgpO1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldFRhYmxlQm9keVNjcm9sbEVsKCk7XG4gICAgaWYgKCFmb290ZXIpIHtcbiAgICAgIGlmICh0aGlzLnRvdGFsRm9vdGVyU3luY1JldHJ5IDwgMTApIHtcbiAgICAgICAgdGhpcy50b3RhbEZvb3RlclN5bmNSZXRyeSsrO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY1RvdGFsRm9vdGVyV2l0aEJvZHkoKSwgNTApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvdGFsRm9vdGVyU3luY1JldHJ5ID0gMDtcbiAgICBjb25zdCBuZWVkWUd1dHRlciA9ICEhKGJvZHkgJiYgdGhpcy5ib2R5SGFzVmVydGljYWxTY3JvbGxiYXIoYm9keSkpO1xuICAgIGlmICh0aGlzLnRvdGFsRm9vdGVyTmVlZFlHdXR0ZXIgIT09IG5lZWRZR3V0dGVyKSB7XG4gICAgICB0aGlzLnRvdGFsRm9vdGVyTmVlZFlHdXR0ZXIgPSBuZWVkWUd1dHRlcjtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1RvdGFsRm9vdGVyRmx1aWQpIHtcbiAgICAgIHRoaXMudW5iaW5kVG90YWxGb290ZXJTY3JvbGxTeW5jKCk7XG4gICAgICBmb290ZXIuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLnN5bmNUb3RhbEZvb3RlclNjcm9sbExlZnQoYm9keS5zY3JvbGxMZWZ0KTtcbiAgICAgIHRoaXMuYmluZFRvdGFsRm9vdGVyU2Nyb2xsU3luYyhib2R5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bmNUb3RhbEZvb3RlclNjcm9sbExlZnQoc2Nyb2xsTGVmdDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm9vdGVyID0gdGhpcy5nZXRUb3RhbEZvb3RlclNjcm9sbEVsKCk7XG4gICAgaWYgKGZvb3RlciAmJiBmb290ZXIuc2Nyb2xsTGVmdCAhPT0gc2Nyb2xsTGVmdCkge1xuICAgICAgZm9vdGVyLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYmluZFRvdGFsRm9vdGVyU2Nyb2xsU3luYyhib2R5OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93VGFibGVUb3RhbCB8fCAhYm9keSB8fCB0aGlzLmlzVG90YWxGb290ZXJGbHVpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5ID09PSBib2R5ICYmXG4gICAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsSGFuZGxlclxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVuYmluZFRvdGFsRm9vdGVyU2Nyb2xsU3luYygpO1xuICAgIHRoaXMudG90YWxGb290ZXJTY3JvbGxCb3VuZEJvZHkgPSBib2R5O1xuICAgIHRoaXMudG90YWxGb290ZXJTY3JvbGxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5zeW5jVG90YWxGb290ZXJTY3JvbGxMZWZ0KGJvZHkuc2Nyb2xsTGVmdCk7XG4gICAgfTtcbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy50b3RhbEZvb3RlclNjcm9sbEhhbmRsZXIsIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgfSBhcyBhbnkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRUb3RhbEZvb3RlclNjcm9sbFN5bmMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG90YWxGb290ZXJTY3JvbGxCb3VuZEJvZHkgJiYgdGhpcy50b3RhbEZvb3RlclNjcm9sbEhhbmRsZXIpIHtcbiAgICAgIHRoaXMudG90YWxGb290ZXJTY3JvbGxCb3VuZEJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJzY3JvbGxcIixcbiAgICAgICAgdGhpcy50b3RhbEZvb3RlclNjcm9sbEhhbmRsZXIsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsQm91bmRCb2R5ID0gbnVsbDtcbiAgICB0aGlzLnRvdGFsRm9vdGVyU2Nyb2xsSGFuZGxlciA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog55uR5ZCs56qX5Y+jIC8g5a655Zmo5a695bqm5Y+Y5YyW77ya6YeN5paw5Yik5a6aIHNjcm9sbC5477yIZmx1aWTihpRmaXhlZO+8ieS4juWQiOiuoeWPs+S+p+erlua7muanve+8jFxuICAgKiDpgb/lhY3mi4nlrr0v57yp56qE5bGP5bmV5ZCO5ZCI6K6h6KGM5a695LiO6KGo5L2T6ZSZ5L2N44CCXG4gICAqL1xuICBwcml2YXRlIGJpbmRWaWV3cG9ydFJlc2l6ZVN5bmMoKTogdm9pZCB7XG4gICAgdGhpcy5ib3VuZE9uVmlld3BvcnRSZXNpemUgPSAoKSA9PiB0aGlzLnNjaGVkdWxlVmlld3BvcnRTY3JvbGxTeW5jKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuYm91bmRPblZpZXdwb3J0UmVzaXplKTtcbiAgICB9XG4gICAgY29uc3QgUk8gPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/ICh3aW5kb3cgYXMgYW55KS5SZXNpemVPYnNlcnZlciA6IG51bGw7XG4gICAgaWYgKFJPICYmIHRoaXMuaG9zdEVsICYmIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9zdFJlc2l6ZU9ic2VydmVyID0gbmV3IFJPKCgpID0+IHRoaXMuc2NoZWR1bGVWaWV3cG9ydFNjcm9sbFN5bmMoKSk7XG4gICAgICB0aGlzLmhvc3RSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5iaW5kVmlld3BvcnRSZXNpemVTeW5jKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJvdW5kT25WaWV3cG9ydFJlc2l6ZSAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmJvdW5kT25WaWV3cG9ydFJlc2l6ZSk7XG4gICAgfVxuICAgIHRoaXMuYm91bmRPblZpZXdwb3J0UmVzaXplID0gbnVsbDtcbiAgICBpZiAodGhpcy5ob3N0UmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuaG9zdFJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMuaG9zdFJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudmlld3BvcnRSZXNpemVUaW1lciAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy52aWV3cG9ydFJlc2l6ZVRpbWVyKTtcbiAgICAgIHRoaXMudmlld3BvcnRSZXNpemVUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVZpZXdwb3J0U2Nyb2xsU3luYygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWV3cG9ydFJlc2l6ZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnZpZXdwb3J0UmVzaXplVGltZXIpO1xuICAgIH1cbiAgICB0aGlzLnZpZXdwb3J0UmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudmlld3BvcnRSZXNpemVUaW1lciA9IG51bGw7XG4gICAgICBpZiAoIXRoaXMudGFibGVDb2xzIHx8ICF0aGlzLnRhYmxlQ29scy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zeW5jSG9yaXpvbnRhbFNjcm9sbCgpO1xuICAgICAgLy8g562J6KGo5L2T5biD5bGA56iz5a6a5ZCO5YaN5qCh5ZCI6K6h56uW5rua5qe9IC8g5qiq5rua5ZCM5q2lXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY1RvdGFsRm9vdGVyV2l0aEJvZHkoKSwgNTApO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBkZWFsU2Nyb2xsKCkge1xuICAgIGxldCBjb2xXaWR0aCA9IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlbGVjdGVkKSB7XG4gICAgICBjb2xXaWR0aCArPSA0MDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd1RhYmxlVG90YWwpIHtcbiAgICAgIGNvbFdpZHRoICs9IHRoaXMubGluZU51bWJlckNvbFdpZHRoOyAvLyDluo/lj7fliJfvvIjlm7rlrprlrr3vvIzkuI3pmo/kvY3mlbDlj5jljJbvvIlcbiAgICB9XG4gICAgdGhpcy50YWJsZUNvbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtLndpZHRoKSB7XG4gICAgICAgIGl0ZW0ud2lkdGggPSBDb2xXaWR0aC5maXhDb2xXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLmlzU2hvdyAhPT0gZmFsc2UpIHtcbiAgICAgICAgaXRlbS5maXhlZFdpZHRoID0gY29sV2lkdGg7XG4gICAgICAgIGNvbFdpZHRoICs9IGl0ZW0ud2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyDlj7Pkvqflm7rlrprliJfvvJrku47lj7PlvoDlt6bntK/orqHlgY/np7vvvIzpgb/lhY3lpJrliJfpg70gcmlnaHQ6MCDkupLnm7jpga7mjKFcbiAgICBsZXQgcmlnaHRPZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnRhYmxlQ29scy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMudGFibGVDb2xzW2ldO1xuICAgICAgaWYgKGl0ZW0uaXNTaG93ID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLmZpeGVkID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgaXRlbS5maXhlZFJpZ2h0V2lkdGggPSByaWdodE9mZnNldDtcbiAgICAgICAgcmlnaHRPZmZzZXQgKz0gaXRlbS53aWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uZml4ZWRSaWdodFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLnJlc29sdmVIb3Jpem9udGFsTGF5b3V0KGNvbFdpZHRoKTtcbiAgICB0aGlzLmZsdWlkRXh0cmFXaWR0aCA9IGxheW91dC5mbHVpZEV4dHJhO1xuICAgIHRoaXMuZmx1aWRIb3Jpem9udGFsID0gbGF5b3V0LmlzRmx1aWQ7XG4gICAgdGhpcy5yZWZyZXNoRmx1aWRFeHRyYVRhcmdldENvbCgpO1xuICAgIHRoaXMudGFibGVDb2xXaWR0aFRvdGFsID0gbGF5b3V0LmRpc3BsYXlUb3RhbDtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSB0aGlzLmdldFNjcm9sbFlNYXhPZmZzZXQoKTtcbiAgICBjb25zdCB1c2VWaXJ0dWFsID0gdGhpcy51c2VWaXJ0dWFsU2Nyb2xsO1xuICAgIGNvbnN0IHNjcm9sbFggPSBsYXlvdXQuc2Nyb2xsWDtcblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwgJiYgIXVzZVZpcnR1YWwpIHtcbiAgICAgIHRoaXMuc2Nyb2xsID0ge1xuICAgICAgICB4OiBzY3JvbGxYLFxuICAgICAgICB5OiBudWxsLFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5zY3JvbGwgPSB7XG4gICAgICAgIHg6IHNjcm9sbFgsXG4gICAgICAgIHk6IGBjYWxjKDEwMHZoIC0gJHttYXhPZmZzZXR9cHgpYCxcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGwgPSB7XG4gICAgICB4OiBzY3JvbGxYLFxuICAgICAgeTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsWShtYXhPZmZzZXQpLFxuICAgIH07XG4gIH1cblxuICAvLyDooajmoLzli77pgInpgLvovpFcbiAgY3VycmVudFBhZ2VEYXRhQ2hhbmdlKCRldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5saXN0T2ZEaXNwbGF5RGF0YSA9ICRldmVudDtcbiAgICB0aGlzLnJlZnJlc2hTdGF0dXMoKTtcbiAgICBpZiAoIXRoaXMuaXNDcm9zc1BhZ2VTZWxlY3RMb2NhbCkge1xuICAgICAgdGhpcy5yZXNldFN0YXR1cygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNlYXJjaChyZXNldDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWJjeerr+WIhumhte+8muWPquWQjOatpemhteeggS/mnaHmlbDvvIzkuI3op6blj5HniLbnu4Tku7bmn6Xor6JcbiAgICBpZiAodGhpcy5mcm9udFBhZ2luYXRpb24pIHtcbiAgICAgIGlmIChyZXNldCkge1xuICAgICAgICB0aGlzLnRhYmxlUGFnZUluZGV4ID0gMTtcbiAgICAgICAgdGhpcy50YWJsZVBhZ2VTaXplQ2hhbmdlLmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGVQYWdlSW5kZXhDaGFuZ2UuZW1pdCh0aGlzLnRhYmxlUGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZSA9IHRoaXMudGFibGVQYWdlU2l6ZTtcbiAgICAgIHRoaXMuc2F2ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICAgIC8vIOaMieW9k+WJjemhteihjOaVsOmHjeeul+aYr+WQpumcgOimgSBzY3JvbGwuee+8iOacq+mhteaVsOaNruWwkeaXtuWOu+aOieWbuuWumumrmOW6pu+8jOmBv+WFjeeVmeeZve+8iVxuICAgICAgdGhpcy5wZW5kaW5nUmVzZXRTY3JvbGxUb3AgPSB0cnVlO1xuICAgICAgdGhpcy5hcHBseVRhYmxlU2Nyb2xsTW9kZShmYWxzZSk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVzZXRUYWJsZUJvZHlTY3JvbGxUb3AoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgPSB0aGlzLnRhYmxlUGFnZVNpemU7XG4gICAgdGhpcy5zYXZlVGFibGVDYWNoZU9wdGlvbigpO1xuICAgIGlmIChyZXNldCkge1xuICAgICAgdGhpcy50YWJsZVBhZ2VTaXplQ2hhbmdlLmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICAgIHRoaXMudGFibGVQYWdlU2l6ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJsZVBhZ2VJbmRleENoYW5nZS5lbWl0KHRoaXMudGFibGVQYWdlSW5kZXgpO1xuICAgICAgLy8g6Kem5Y+R54i257uE5Lu25p+l6K+i5LqL5Lu2XG4gICAgICB0aGlzLnRhYmxlU2VhcmNoRXZlbnQuZW1pdChyZXNldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOW6lemDqOWQiOiuoe+8muS4jiBoZC1kZXRhaWwtbGluZXMg55u45ZCM77yM5L2/55SoIFRvdGFsT3B0aW9u77yIaW5zZXJ0SW5kZXggLyBpbnNlcnRWYWx1Ze+8ieOAglxuICAgKiDlvIDlkK/lkI7lvLrliLblsZXnpLrluo/lj7fliJfvvIzjgIzlkIjorqHjgI3okL3lnKjluo/lj7fliJfkuIvvvJtcbiAgICogaW5zZXJ0SW5kZXgg5LuOIDEg6LW35a+55bqU5Y+v6KeB5pWw5o2u5YiX77yb5pyq5LygIGluc2VydFZhbHVlIOaXtuaMieivpeWIlyBuYW1lIOWvuSBjb250ZW50IOaxguWSjOOAglxuICAgKi9cbiAgY2FsY3VsYXRlVGFibGVUb3RhbCgpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93VGFibGVUb3RhbCB8fFxuICAgICAgIXRoaXMudGFibGVUb3RhbE9wdGlvbiB8fFxuICAgICAgIXRoaXMudGFibGVUb3RhbE9wdGlvbi5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmlzaWJsZUNvbHMgPSAodGhpcy50YWJsZUNvbHMgfHwgW10pLmZpbHRlcihcbiAgICAgIChjKSA9PiBjICYmIGMuaXNTaG93ICE9PSBmYWxzZSxcbiAgICApO1xuICAgIC8vIGNvbHVtbnNOdW1iZXIg5ZCr5bqP5Y+35YiX77yI5LiOIGRldGFpbC1saW5lcyDkuIDoh7TvvInvvIzmlbDmja7mp73kvY3mlbAgPSBjb2x1bW5zTnVtYmVyIC0gMVxuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSBOdW1iZXIodGhpcy5jb2x1bW5zTnVtYmVyKTtcbiAgICBjb25zdCBjb2x1bW5OdW1iZXIgPVxuICAgICAgY29uZmlndXJlZCA+IDFcbiAgICAgICAgPyBjb25maWd1cmVkIC0gMVxuICAgICAgICA6IGNvbmZpZ3VyZWQgPT09IDFcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IHZpc2libGVDb2xzLmxlbmd0aDtcbiAgICBpZiAoIWNvbHVtbk51bWJlciB8fCBjb2x1bW5OdW1iZXIgPCAxKSB7XG4gICAgICB0aGlzLnRhYmxlVG90YWxPcHRpb25MaXN0ID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QgPSBuZXcgQXJyYXkoY29sdW1uTnVtYmVyKS5maWxsKFwiXCIpO1xuICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgdGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEuY29udGVudCA/IHRoaXMudGFibGVEYXRhLmNvbnRlbnQgOiBbXTtcbiAgICB0aGlzLnRhYmxlVG90YWxPcHRpb24uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gPT0gbnVsbCB8fCAhaXRlbS5pbnNlcnRJbmRleCB8fCBpdGVtLmluc2VydEluZGV4IDwgMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgdmFsdWU6IGFueSA9IGl0ZW0uaW5zZXJ0VmFsdWU7XG4gICAgICAvLyDmnKrkvKAgaW5zZXJ0VmFsdWUg5pe277ya5oyJIGluc2VydEluZGV4IOWvueW6lOWPr+ingeWIlyBuYW1lIOiHquWKqOaxguWSjFxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgY29uc3QgY29sID0gdmlzaWJsZUNvbHNbaXRlbS5pbnNlcnRJbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbCAmJiB0eXBlb2YgY29sLm5hbWUgPT09IFwic3RyaW5nXCIgPyBjb2wubmFtZSA6IG51bGw7XG4gICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBjb250ZW50LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhdyA9IHJvdyA/IHJvd1tmaWVsZF0gOiBudWxsO1xuICAgICAgICAgIGlmIChyYXcgPT0gbnVsbCB8fCByYXcgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XG4gICAgICAgICAgaWYgKCFpc05hTihudW0pKSB7XG4gICAgICAgICAgICBzdW0gKz0gbnVtO1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBzdW07XG4gICAgICB9XG4gICAgICBjb25zdCBjb2xBdEluZGV4ID0gdmlzaWJsZUNvbHNbaXRlbS5pbnNlcnRJbmRleCAtIDFdO1xuICAgICAgdGhpcy50YWJsZVRvdGFsT3B0aW9uTGlzdFtpdGVtLmluc2VydEluZGV4IC0gMV0gPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBhbGlnbjogaXRlbS5hbGlnbiB8fCAoY29sQXRJbmRleCAmJiBjb2xBdEluZGV4LmFsaWduKSB8fCBcImxlZnRcIixcbiAgICAgICAgc2hvd0RlY2ltYWw6IGl0ZW0uc2hvd0RlY2ltYWwgfHwgZmFsc2UsXG4gICAgICAgIHByZXNlcnZlTnVtYmVyOlxuICAgICAgICAgIGl0ZW0ucHJlc2VydmVOdW1iZXIgIT0gbnVsbCA/IGl0ZW0ucHJlc2VydmVOdW1iZXIgOiAyLFxuICAgICAgICBpc0hpZGU6IGl0ZW0uaXNIaWRlIHx8IGZhbHNlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFibGVUb3RhbENlbGxNZXRhKGNvbDogSGRUYWJsZUNvbHVtbiwgY29sSW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKCFjb2wgfHwgIXRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QgfHwgIXRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHZpc2libGVJbmRleCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGNvbEluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLnRhYmxlQ29sc1tpXTtcbiAgICAgIGlmIChjICYmIGMuaXNTaG93ICE9PSBmYWxzZSkge1xuICAgICAgICB2aXNpYmxlSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZpc2libGVJbmRleCA8IDAgfHwgdmlzaWJsZUluZGV4ID49IHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IHRoaXMudGFibGVUb3RhbE9wdGlvbkxpc3RbdmlzaWJsZUluZGV4XTtcbiAgICByZXR1cm4gbWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gXCJvYmplY3RcIiA/IG1ldGEgOiBudWxsO1xuICB9XG5cbiAgLyoqIOWQiOiuoeWNleWFg+agvOWxleekuuaWh+ahiO+8iOWvuem9kCBkZXRhaWwtbGluZXMg5bCP5pWw6KeE5YiZ77yJICovXG4gIGdldFRhYmxlVG90YWxDZWxsVmFsdWUoY29sOiBIZFRhYmxlQ29sdW1uLCBjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5nZXRUYWJsZVRvdGFsQ2VsbE1ldGEoY29sLCBjb2xJbmRleCk7XG4gICAgaWYgKCFtZXRhIHx8IG1ldGEuaXNIaWRlKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBtZXRhLnZhbHVlO1xuICAgIGlmICghKHZhbHVlIHx8IHZhbHVlID09PSAwKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHByZXNlcnZlID1cbiAgICAgIG1ldGEucHJlc2VydmVOdW1iZXIgIT0gbnVsbCA/IE51bWJlcihtZXRhLnByZXNlcnZlTnVtYmVyKSA6IDI7XG4gICAgaWYgKHZhbHVlICUgMSA9PT0gMCAmJiAhbWV0YS5zaG93RGVjaW1hbCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlc2VydmUpO1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChOdW1iZXIodmFsdWUpICogZmFjdG9yKSAvIGZhY3RvcikudG9GaXhlZChwcmVzZXJ2ZSk7XG4gIH1cblxuICBnZXRUYWJsZVRvdGFsQ2VsbEFsaWduKGNvbDogSGRUYWJsZUNvbHVtbiwgY29sSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0VGFibGVUb3RhbENlbGxNZXRhKGNvbCwgY29sSW5kZXgpO1xuICAgIGNvbnN0IGFsaWduID1cbiAgICAgIChtZXRhICYmIG1ldGEuYWxpZ24pIHx8IChjb2wgJiYgY29sLmFsaWduKSB8fCBcImxlZnRcIjtcbiAgICBpZiAoYWxpZ24gPT09IFwicmlnaHRcIiB8fCBhbGlnbiA9PT0gXCJjZW50ZXJcIiB8fCBhbGlnbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIHJldHVybiBhbGlnbjtcbiAgICB9XG4gICAgcmV0dXJuIFwibGVmdFwiO1xuICB9XG5cbiAgLyoqIOW6lemDqOOAjOWFsSBuIOadoeOAje+8mumdnuWIhumhtS/liY3nq6/liIbpobXnlKggY29udGVudC5sZW5ndGjvvIzmnI3liqHnq6/liIbpobXnlKggdG90YWxFbGVtZW50cyAqL1xuICBnZXRUYWJsZVRvdGFsQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24gfHwgdGhpcy5mcm9udFBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YS5jb250ZW50ID8gdGhpcy50YWJsZURhdGEuY29udGVudC5sZW5ndGggOiAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50YWJsZURhdGEudG90YWxFbGVtZW50cyAhPSBudWxsXG4gICAgICA/IHRoaXMudGFibGVEYXRhLnRvdGFsRWxlbWVudHNcbiAgICAgIDogMDtcbiAgfVxuXG4gIHJlc2V0U3RhdHVzKCkge1xuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIC8vIOWFiOaYvuW8j+e9riBmYWxzZe+8jOmBv+WFjSBuei1jaGVja2JveCDlhoXpg6jnirbmgIHkuI4gbWFwT2ZDaGVja2VkSWQg5LiN5ZCM5q2l77yI6Jma5ouf5rua5Yqo5aSN55So6KGM5pe25bi46KeB77yJXG4gICAgT2JqZWN0LmtleXModGhpcy5tYXBPZkNoZWNrTGlzdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkW2tleV0gPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RPZkRpc3BsYXlEYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW1bdGhpcy5zZWxlY3RGaWVsZF07XG4gICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtrZXldID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5tYXBPZkNoZWNrZWRJZCA9IHt9O1xuICAgIHRoaXMubWFwT2ZDaGVja0xpc3QgPSB7fTtcbiAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoW10pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIOWNlemAie+8mumAieS4reW9k+WJjeihjOW5tua4heaOieWFtuWug+ihjO+8m+W/veeVpSByYWRpbyDlm6DliIfmjaLogIzlj5Hlh7rnmoQgZmFsc2UgKi9cbiAgb25SYWRpb1NlbGVjdChjaGVja2VkOiBib29sZWFuLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNoZWNrZWQgfHwgIWRhdGEpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdERpc2FibGVkKGRhdGEpKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gZGF0YVt0aGlzLnNlbGVjdEZpZWxkXTtcbiAgICB0aGlzLm1hcE9mQ2hlY2tlZElkID0ge307XG4gICAgdGhpcy5tYXBPZkNoZWNrTGlzdCA9IHt9O1xuICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtrZXldID0gdHJ1ZTtcbiAgICAgIHRoaXMubWFwT2ZDaGVja0xpc3Rba2V5XSA9IGRhdGE7XG4gICAgfVxuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdEV2ZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoa2V5ICE9IG51bGwgPyBbZGF0YV0gOiBbXSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVmcmVzaFN0YXR1cyhldmVudDogYm9vbGVhbiA9IGZhbHNlLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gXCJyYWRpb1wiKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLm9uUmFkaW9TZWxlY3QoZXZlbnQsIGRhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZGF0YSkge1xuICAgICAgLy8g56aB55So6KGM5LiN5YWB6K645Yu+6YCJ77yb5Y+W5raI5Yu+6YCJ5LuN5YWB6K6477yI5L6L5aaC5pWw5o2u5Y+Y5pu05YmN5bey5Yu+6YCJ77yJXG4gICAgICBpZiAoZXZlbnQgJiYgdGhpcy5pc1NlbGVjdERpc2FibGVkKGRhdGEpKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGFbdGhpcy5zZWxlY3RGaWVsZF1dID0gZXZlbnQ7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgIXRoaXMubWFwT2ZDaGVja0xpc3RbZGF0YVt0aGlzLnNlbGVjdEZpZWxkXV0gJiZcbiAgICAgICAgICAodGhpcy5tYXBPZkNoZWNrTGlzdFtkYXRhW3RoaXMuc2VsZWN0RmllbGRdXSA9IGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrTGlzdFtkYXRhW3RoaXMuc2VsZWN0RmllbGRdXSAmJlxuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcE9mQ2hlY2tMaXN0W2RhdGFbdGhpcy5zZWxlY3RGaWVsZF1dO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RhYmxlTGlzdCA9IHRoaXMubGlzdE9mRGlzcGxheURhdGEuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+ICF0aGlzLmlzU2VsZWN0RGlzYWJsZWQoaXRlbSksXG4gICAgKTtcbiAgICB0aGlzLmlzQWxsRGlzcGxheURhdGFDaGVja2VkID1cbiAgICAgIHNlbGVjdGFibGVMaXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgIHNlbGVjdGFibGVMaXN0LmV2ZXJ5KChpdGVtKSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW1bdGhpcy5zZWxlY3RGaWVsZF1dKTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9XG4gICAgICBzZWxlY3RhYmxlTGlzdC5zb21lKFxuICAgICAgICAoaXRlbSkgPT4gdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXSxcbiAgICAgICkgJiYgIXRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQ7XG4gICAgLy8g6Kem5Y+Rc2VsZWN05LqL5Lu2XG4gICAgaWYgKHRoaXMuc2VsZWN0RXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTGlzdDogQXJyYXk8YW55PiA9IE9iamVjdC52YWx1ZXModGhpcy5tYXBPZkNoZWNrTGlzdCk7XG4gICAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoc2VsZWN0ZWRMaXN0KTtcbiAgICB9XG4gICAgLy8g5aaC5p6c5pWw5o2u5Li656m677yM5YiZ5riF56m65Yu+6YCJ5qCH6K+GXG4gICAgaWYgKHRoaXMudGFibGVEYXRhLmNvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmlzQWxsRGlzcGxheURhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkRpc3BsYXlEYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIC8vIOWFqOmAiS/lj5bmtojlhajpgInlnYfot7Pov4fnpoHnlKjooYzvvIjnpoHnlKjooYzkv53mjIHljp/li77pgInnirbmgIHvvIlcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0RGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICF0aGlzLm1hcE9mQ2hlY2tMaXN0W2l0ZW1bdGhpcy5zZWxlY3RGaWVsZF1dICYmXG4gICAgICAgICAgKHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gPSBpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gJiZcbiAgICAgICAgICBkZWxldGUgdGhpcy5tYXBPZkNoZWNrTGlzdFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIOW9k+WJjeihjOaYr+WQpuemgeeUqOWLvumAiSAqL1xuICBpc1NlbGVjdERpc2FibGVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuc2VsZWN0RGlzYWJsZWRGaWVsZCAmJlxuICAgICAgZGF0YSAmJlxuICAgICAgZGF0YVt0aGlzLnNlbGVjdERpc2FibGVkRmllbGRdID09PSB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKiDlvZPliY3ooYzmmK/lkKblpLHmlYggKi9cbiAgaXNJbnZhbGlkUm93KGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMucm93SW52YWxpZEZpZWxkICYmXG4gICAgICBkYXRhICYmXG4gICAgICBkYXRhW3RoaXMucm93SW52YWxpZEZpZWxkXSA9PT0gdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5YiX5paH5a2X6aKc6Imy77yaY29sb3Ig5Li65Ye95pWw5pe25oyJ6KGM6K6h566X77yI55So5LqO5p+Q5LiA6KGM5p+Q5LiA5YiX5qCH57qi77yJ77yM5ZCm5YiZ5pW05YiX5ZCM6Imy44CCXG4gICAqL1xuICByZXNvbHZlQ2VsbENvbG9yKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCB8fCBjb2wuY29sb3IgPT0gbnVsbCB8fCBjb2wuY29sb3IgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbC5jb2xvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbC5jb2xvcihkYXRhKTtcbiAgICAgIHJldHVybiB2YWx1ZSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29sLmNvbG9yO1xuICB9XG5cbiAgLyoqIOWPr+eCueWHu+WNleWFg+agvOminOiJsu+8muepuuWAvOWbuuWumueBsO+8jOWQpuWImeaMieWIlyBjb2xvciAqL1xuICBnZXRMaW5rQ2VsbENvbG9yKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55LCBpc0VtcHR5OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgcmV0dXJuIFwiIzJBMzYzNFwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ2VsbENvbG9yKGNvbCwgZGF0YSk7XG4gIH1cblxuICAvKiog5pmu6YCa5paH5pys5Y2V5YWD5qC86aKc6Imy77ya5aSx5pWI6KGM57uf5LiA54Gw77yM5ZCm5YiZ55So5YiX6YWN572uIGNvbG9yICovXG4gIGdldFBsYWluQ2VsbENvbG9yKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0ludmFsaWRSb3coZGF0YSkpIHtcbiAgICAgIHJldHVybiBcIiM4NjhBOUNcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNlbGxDb2xvcihjb2wsIGRhdGEpO1xuICB9XG5cbiAganVkZ2VDb2xFbXB0eShzdHI6IGFueSkge1xuICAgIGlmIChzdHIgfHwgc3RyID09PSAwKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCI856m6PlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRlRmllbGQoY29sOiBIZFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sLmlzU3RhdGUpIHtcbiAgICAgIHJldHVybiBjb2wubmFtZSBhcyBzdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiBjb2wuc3RhdGVGaWVsZCB8fCBcInN0YXRlXCI7XG4gIH1cblxuICAvKiog5a2X5q615YC85ZCO5piv5ZCm5bGV56S656uW57q/6KGM5Y+3ICovXG4gIGhhc1Jvd05vKGNvbDogSGRUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShjb2wgJiYgKGNvbC5yb3dObyA9PT0gdHJ1ZSB8fCAodHlwZW9mIGNvbC5yb3dObyA9PT0gXCJzdHJpbmdcIiAmJiBjb2wucm93Tm8pKSk7XG4gIH1cblxuICAvKipcbiAgICog6KGM5Y+35paH5qGI44CCcm93Tm8g5Li65a2X5q615ZCN5pe25Y+W6KGM5pWw5o2u77yb5Li6IHRydWUg5pe25oyJ5b2T5YmN6aG15bqP5Y+377yI6Leo6aG16L+e57ut77yM5LuOIDEg5byA5aeL77yJ44CCXG4gICAqL1xuICBnZXRSb3dOb1RleHQoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5oYXNSb3dObyhjb2wpKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2wucm93Tm8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YSA/IGRhdGFbY29sLnJvd05vXSA6IG51bGw7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBwYWdlID0gTnVtYmVyKHRoaXMudGFibGVQYWdlSW5kZXgpID4gMCA/IE51bWJlcih0aGlzLnRhYmxlUGFnZUluZGV4KSA6IDE7XG4gICAgY29uc3Qgc2l6ZSA9IE51bWJlcih0aGlzLnRhYmxlUGFnZVNpemUpID4gMCA/IE51bWJlcih0aGlzLnRhYmxlUGFnZVNpemUpIDogMDtcbiAgICBjb25zdCByb3dJbmRleCA9IE51bWJlcihpbmRleCkgPj0gMCA/IE51bWJlcihpbmRleCkgOiAwO1xuICAgIHJldHVybiBTdHJpbmcoKHBhZ2UgLSAxKSAqIHNpemUgKyByb3dJbmRleCArIDEpO1xuICB9XG5cbiAgLyoqIOihqOWktOOAjOmFjemAgeWNleWPtyB8IOihjOOAjeaLhuaIkOefreerlue6v++8jOmBv+WFjeWtl+espiB8IOaLiea7oeihjOmrmCAqL1xuICBnZXRUaXRsZVBhcnRzKGNvbDogSGRUYWJsZUNvbHVtbik6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5oYXNSb3dObyhjb2wpIHx8ICFjb2wgfHwgIWNvbC50aXRsZSB8fCBTdHJpbmcoY29sLnRpdGxlKS5pbmRleE9mKFwifFwiKSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSBTdHJpbmcoY29sLnRpdGxlKS5zcGxpdChcInxcIik7XG4gICAgaWYgKHJhdy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIFtyYXdbMF0udHJpbSgpLCByYXcuc2xpY2UoMSkuam9pbihcInxcIikudHJpbSgpXTtcbiAgfVxuXG4gIC8qKiDmmK/lkKbmmL7npLrnvJbovpHnrJTlm77moIfvvIjmnIkgZWRpdFR5cGUg5pe26LWw6KGM5YaF5o6n5Lu277yM5LiN5YaN5pi+56S656yU77yJICovXG4gIGlzRWRpdGFibGUoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCB0aGlzLmhhc0lubGluZUVkaXQoY29sKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29sLmVkaXRhYmxlID09IG51bGwgfHwgY29sLmVkaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbC5lZGl0YWJsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gISFjb2wuZWRpdGFibGUoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiAhIWNvbC5lZGl0YWJsZTtcbiAgfVxuXG4gIC8qKiDngrnlh7vnvJbovpHnrJTvvIzlm57osIPniLbnu4Tku7bkvKDlhaXnmoQgZWRpdCAqL1xuICBvbkVkaXRDbGljayhldmVudDogRXZlbnQsIGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckV2ZW50KGNvbC5lZGl0IHx8IG51bGwsIGRhdGEpO1xuICB9XG5cbiAgLyoqIOWIl+aYr+WQpumFjee9ruS6huWPr+eUqOeahOihjOWGhee8lui+ke+8iG5hbWUg5b+F6aG75pivIHN0cmluZ++8iSAqL1xuICBoYXNJbmxpbmVFZGl0KGNvbDogSGRUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmICghY29sIHx8ICFjb2wuZWRpdFR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2wubmFtZSAhPT0gXCJzdHJpbmdcIiB8fCAhY29sLm5hbWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbaGQtdGFibGVdIGVkaXRUeXBlIOimgeaxgiBuYW1lIOS4uiBzdHJpbmfvvIzliJfjgIxcIiArXG4gICAgICAgICAgKGNvbC50aXRsZSB8fCBcIlwiKSArXG4gICAgICAgICAgXCLjgI3lt7Llm57pgIDlj6ror7tcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNFZGl0RGlzYWJsZWQoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCBjb2wuZWRpdERpc2FibGVkID09IG51bGwgfHwgY29sLmVkaXREaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2wuZWRpdERpc2FibGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiAhIWNvbC5lZGl0RGlzYWJsZWQoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiAhIWNvbC5lZGl0RGlzYWJsZWQ7XG4gIH1cblxuICBnZXRTZWxlY3RMaXN0KGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55KTogQXJyYXk8YW55PiB7XG4gICAgaWYgKCFjb2wgfHwgIWNvbC5zZWxlY3RPcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gY29sLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3ROYW1lICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBkYXRhW29wdC5zZWxlY3RMaXN0TmFtZV07XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShsaXN0KSA/IGxpc3QgOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob3B0LnNlbGVjdExpc3QpID8gb3B0LnNlbGVjdExpc3QgOiBbXTtcbiAgfVxuXG4gIGdldFNlbGVjdE9wdGlvbkxhYmVsKGNvbDogSGRUYWJsZUNvbHVtbiwgaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLnNlbGVjdE9wdGlvbiB8fCAhaXRlbSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IG9wdCA9IGNvbC5zZWxlY3RPcHRpb247XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtW29wdC52YWx1ZV07XG4gICAgY29uc3QgbGFiZWwgPSBpdGVtW29wdC5sYWJlbF07XG4gICAgaWYgKG9wdC5zaG93TGFiZWxBbmRWYWx1ZSB8fCBvcHQuaGRTaG93SXRlbUNvZGUpIHtcbiAgICAgIHJldHVybiBgWyR7dmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZX1dJHtsYWJlbCA9PSBudWxsID8gXCJcIiA6IGxhYmVsfWA7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbCA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhsYWJlbCk7XG4gIH1cblxuICBnZXRJbnB1dE51bWJlclByb3AoXG4gICAgY29sOiBIZFRhYmxlQ29sdW1uLFxuICAgIGtleTogXCJtaW5cIiB8IFwibWF4XCIgfCBcInN0ZXBcIiB8IFwicHJlY2lzaW9uXCIsXG4gICAgZmFsbGJhY2s6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLmlucHV0TnVtYmVyKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIGNvbnN0IHZhbCA9IGNvbC5pbnB1dE51bWJlcltrZXldO1xuICAgIHJldHVybiB2YWwgIT0gbnVsbCA/IE51bWJlcih2YWwpIDogZmFsbGJhY2s7XG4gIH1cblxuICBpc0RhdGVTaG93VGltZShjb2w6IEhkVGFibGVDb2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoY29sICYmIGNvbC5kYXRlT3B0aW9uICYmIGNvbC5kYXRlT3B0aW9uLnNob3dUaW1lKTtcbiAgfVxuXG4gIGlzRGF0ZVNob3dUb2RheShjb2w6IEhkVGFibGVDb2x1bW4pOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLmRhdGVPcHRpb24gfHwgY29sLmRhdGVPcHRpb24uc2hvd1RvZGF5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gY29sLmRhdGVPcHRpb24uc2hvd1RvZGF5ICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldERhdGVGb3JtYXQoY29sOiBIZFRhYmxlQ29sdW1uLCBpc1JhbmdlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoY29sICYmIGNvbC5kYXRlT3B0aW9uICYmIGNvbC5kYXRlT3B0aW9uLmZvcm1hdCkge1xuICAgICAgcmV0dXJuIGNvbC5kYXRlT3B0aW9uLmZvcm1hdDtcbiAgICB9XG4gICAgaWYgKCFpc1JhbmdlICYmIHRoaXMuaXNEYXRlU2hvd1RpbWUoY29sKSkge1xuICAgICAgcmV0dXJuIFwieXl5eS1NTS1kZCBISDptbTpzc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJ5eXl5LU1NLWRkXCI7XG4gIH1cblxuICBnZXREaXNhYmxlZERhdGUoY29sOiBIZFRhYmxlQ29sdW1uKTogKGN1cnJlbnQ6IERhdGUpID0+IGJvb2xlYW4ge1xuICAgIGlmIChjb2wgJiYgY29sLmRhdGVPcHRpb24gJiYgY29sLmRhdGVPcHRpb24uZGlzYWJsZWREYXRlKSB7XG4gICAgICByZXR1cm4gY29sLmRhdGVPcHRpb24uZGlzYWJsZWREYXRlO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBnZXRSYW5nZVBsYWNlaG9sZGVyKGNvbDogSGRUYWJsZUNvbHVtbik6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29sICYmIGNvbC5kYXRlT3B0aW9uID8gY29sLmRhdGVPcHRpb24ucmFuZ2VQbGFjZWhvbGRlciA6IG51bGw7XG4gICAgaWYgKHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyLmxlbmd0aCA+PSAyKSB7XG4gICAgICByZXR1cm4gW3BsYWNlaG9sZGVyWzBdLCBwbGFjZWhvbGRlclsxXV07XG4gICAgfVxuICAgIHJldHVybiBbXCLlvIDlp4vml6XmnJ9cIiwgXCLnu5PmnZ/ml6XmnJ9cIl07XG4gIH1cblxuICAvKiogSW5wdXQgLyBJbnB1dE51bWJlciAvIOaXpeacn+WPmOabtO+8muWFiOiusOaXp+WAvOWGjeWGmeWbnuW5tumAmuefpeeItue7hOS7tiAqL1xuICBvbkNlbGxDaGFuZ2UoY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzSW5saW5lRWRpdChjb2wpIHx8ICFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBjb2wubmFtZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGRhdGFbbmFtZV07XG4gICAgZGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIHRoaXMuY2VsbENoYW5nZS5lbWl0KHtcbiAgICAgIGxpbmU6IGRhdGEsXG4gICAgICBjb2wsXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCDlsZXlvIDvvJrmnIkgb25PcGVuQ2hhbmdlRXZlbnQg5pe25bGV5byA5YWI5riF56m66YCJ6aG55YaN5Zue6LCDIChvcGVuLCBsaW5lKe+8m+WFs+mXreS4jeWbnuiwg+S4muWKoeOAglxuICAgKiDlm57osIPoi6UgcmV0dXJuIOaVsOe7hCAvIFByb21pc2UgLyBPYnNlcnZhYmxl77yM55Sx57uE5Lu25YaZ5ZueIG9wdGlvbnMg5bm2IG1hcmtGb3JDaGVja+OAglxuICAgKi9cbiAgb25TZWxlY3RPcGVuQ2hhbmdlKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55LCBvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFjb2wgfHwgIWNvbC5vbk9wZW5DaGFuZ2VFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oY29sLCBkYXRhKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBjb25zdCBmbiA9IGNvbC5vbk9wZW5DaGFuZ2VFdmVudDtcbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIGNvbC5vbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gY29sLm9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lXG4gICAgICAgIDogMDtcbiAgICBpZiAoIWRlYm91bmNlTXMpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0TG9hZGVyUmVzdWx0KGNvbCwgZGF0YSwgZm4ob3BlbiwgZGF0YSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdE9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3RPcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmbjogY2IsIG9wZW46IG8sIGxpbmUsIGNvbDogYyB9KSA9PiB7XG4gICAgICAgIGlmIChvKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RMb2FkZXJSZXN1bHQoYywgbGluZSwgY2IobywgbGluZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLnNlbGVjdE9wZW5DaGFuZ2VTdWJqZWN0Lm5leHQoeyBmbiwgb3BlbiwgbGluZTogZGF0YSwgY29sIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCDmkJzntKLvvJrmnIkgb25TZWFyY2hFdmVudCDml7blm57osIMgKGtleXdvcmQsIGxpbmUp77yM5LiN5riF56m6IG9wdGlvbnPjgIJcbiAgICog5Zue6LCD6IulIHJldHVybiDmlbDnu4QgLyBQcm9taXNlIC8gT2JzZXJ2YWJsZe+8jOeUsee7hOS7tuWGmeWbniBvcHRpb25zIOW5tiBtYXJrRm9yQ2hlY2vjgIJcbiAgICovXG4gIG9uU2VsZWN0U2VhcmNoKGNvbDogSGRUYWJsZUNvbHVtbiwgZGF0YTogYW55LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLm9uU2VhcmNoRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm4gPSBjb2wub25TZWFyY2hFdmVudDtcbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIGNvbC5vblNlYXJjaEV2ZW50RXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IGNvbC5vblNlYXJjaEV2ZW50RXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RMb2FkZXJSZXN1bHQoY29sLCBkYXRhLCBmbihrZXl3b3JkLCBkYXRhKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdFNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RTZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RTZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdFNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZShkZWJvdW5jZU1zKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm46IGNiLCBrZXl3b3JkOiBrdywgbGluZSwgY29sOiBjIH0pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RMb2FkZXJSZXN1bHQoYywgbGluZSwgY2Ioa3csIGxpbmUpKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0U2VhcmNoU3ViamVjdC5uZXh0KHsgZm4sIGtleXdvcmQsIGxpbmU6IGRhdGEsIGNvbCB9KTtcbiAgfVxuXG4gIC8qKiDlsZXlvIDml7bmuIXnqbrliJcgc2VsZWN0TGlzdCDmiJbooYzkuIogc2VsZWN0TGlzdE5hbWXvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaUgKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oY29sOiBIZFRhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBjb2wuc2VsZWN0T3B0aW9uO1xuICAgIGlmIChvcHQuc2VsZWN0TGlzdCAhPSBudWxsKSB7XG4gICAgICBvcHQuc2VsZWN0TGlzdCA9IFtdO1xuICAgIH1cbiAgICBpZiAob3B0LnNlbGVjdExpc3ROYW1lICYmIGRhdGEpIHtcbiAgICAgIGRhdGFbb3B0LnNlbGVjdExpc3ROYW1lXSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlpITnkIbliqDovb3lm57osIPov5Tlm57lgLzvvJrmlbDnu4Tnm7TmjqXlhpnlm57vvJtQcm9taXNlL09ic2VydmFibGUg5a6M5oiQ5ZCO5YaZ5Zue77ybdm9pZCDku4UgbWFya0ZvckNoZWNr44CCXG4gICAqIOS8mOWFiOWGmSBzZWxlY3RMaXN0TmFtZe+8jOWQpuWImeWGmeWIl+S4iiBzZWxlY3RMaXN044CCXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVNlbGVjdExvYWRlclJlc3VsdChcbiAgICBjb2w6IEhkVGFibGVDb2x1bW4sXG4gICAgZGF0YTogYW55LFxuICAgIHJlc3VsdDogYW55LFxuICApOiB2b2lkIHtcbiAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0T3B0aW9ucyhjb2wsIGRhdGEsIHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmVzdWx0LnRoZW4oXG4gICAgICAgIChsaXN0OiBhbnkpID0+IHRoaXMuYXBwbHlTZWxlY3RPcHRpb25zKGNvbCwgZGF0YSwgbGlzdCksXG4gICAgICAgICgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQuc3Vic2NyaWJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdExvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdExvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RMb2FkZXJTdWJzY3JpcHRpb24gPSByZXN1bHQuc3Vic2NyaWJlKFxuICAgICAgICAobGlzdDogYW55KSA9PiB0aGlzLmFwcGx5U2VsZWN0T3B0aW9ucyhjb2wsIGRhdGEsIGxpc3QpLFxuICAgICAgICAoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlbGVjdE9wdGlvbnMoXG4gICAgY29sOiBIZFRhYmxlQ29sdW1uLFxuICAgIGRhdGE6IGFueSxcbiAgICBsaXN0OiBhbnksXG4gICk6IHZvaWQge1xuICAgIGlmICghY29sIHx8ICFjb2wuc2VsZWN0T3B0aW9uIHx8ICFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gY29sLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3ROYW1lICYmIGRhdGEpIHtcbiAgICAgIGRhdGFbb3B0LnNlbGVjdExpc3ROYW1lXSA9IGxpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdC5zZWxlY3RMaXN0ID0gbGlzdDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogU2VsZWN0IOWPmOabtO+8muWPjOWGmSB2YWx1ZSArIGxhYmVs77yM5bm25bimIHByZXZpb3VzKiAvIG9wdGlvbiAqL1xuICBvblNlbGVjdENoYW5nZShjb2w6IEhkVGFibGVDb2x1bW4sIGRhdGE6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNJbmxpbmVFZGl0KGNvbCkgfHwgIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IGNvbC5uYW1lIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHQgPSBjb2wuc2VsZWN0T3B0aW9uO1xuICAgIGNvbnN0IGxhYmVsRmllbGQgPSBvcHQgJiYgb3B0LmxhYmVsID8gb3B0LmxhYmVsIDogbnVsbDtcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gZGF0YVtuYW1lXTtcbiAgICBjb25zdCBwcmV2aW91c0xhYmVsID0gbGFiZWxGaWVsZCA/IGRhdGFbbGFiZWxGaWVsZF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0U2VsZWN0TGlzdChjb2wsIGRhdGEpO1xuICAgIGNvbnN0IHByZXZpb3VzT3B0aW9uID1cbiAgICAgIHByZXZpb3VzVmFsdWUgPT0gbnVsbCB8fCAhb3B0XG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGxpc3QuZmluZCgoaXRlbSkgPT4gaXRlbSAmJiBpdGVtW29wdC52YWx1ZV0gPT09IHByZXZpb3VzVmFsdWUpIHx8XG4gICAgICAgICAgbnVsbDtcbiAgICBjb25zdCBvcHRpb24gPVxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCAhb3B0XG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGxpc3QuZmluZCgoaXRlbSkgPT4gaXRlbSAmJiBpdGVtW29wdC52YWx1ZV0gPT09IHZhbHVlKSB8fCBudWxsO1xuXG4gICAgZGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIGxldCBsYWJlbDogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmIChsYWJlbEZpZWxkKSB7XG4gICAgICBsYWJlbCA9IG9wdGlvbiA/IG9wdGlvbltvcHQubGFiZWxdIDogbnVsbDtcbiAgICAgIGRhdGFbbGFiZWxGaWVsZF0gPSBsYWJlbDtcbiAgICB9XG5cbiAgICB0aGlzLmNlbGxDaGFuZ2UuZW1pdCh7XG4gICAgICBsaW5lOiBkYXRhLFxuICAgICAgY29sLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGxhYmVsLFxuICAgICAgcHJldmlvdXNMYWJlbCxcbiAgICAgIG9wdGlvbixcbiAgICAgIHByZXZpb3VzT3B0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iXX0=
|