@plait/mind 0.5.0 → 0.7.0

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.
Files changed (36) hide show
  1. package/constants/node-style.d.ts +0 -6
  2. package/constants/theme.d.ts +6 -0
  3. package/esm2020/constants/node-style.mjs +4 -10
  4. package/esm2020/constants/theme.mjs +73 -0
  5. package/esm2020/drawer/emojis.drawer.mjs +2 -3
  6. package/esm2020/drawer/quick-insert.drawer.mjs +4 -2
  7. package/esm2020/interfaces/index.mjs +2 -1
  8. package/esm2020/interfaces/theme-color.mjs +57 -0
  9. package/esm2020/node.component.mjs +4 -3
  10. package/esm2020/plugins/with-mind-hotkey.mjs +28 -0
  11. package/esm2020/plugins/with-mind.mjs +18 -2
  12. package/esm2020/utils/draw/node-dnd.mjs +2 -3
  13. package/esm2020/utils/draw/node-link/indented-link.mjs +2 -2
  14. package/esm2020/utils/draw/node-link/logic-link.mjs +2 -2
  15. package/esm2020/utils/draw/node-shape.mjs +5 -3
  16. package/esm2020/utils/draw/node-topic.mjs +3 -3
  17. package/esm2020/utils/mind.mjs +8 -9
  18. package/esm2020/utils/node/create-node.mjs +19 -29
  19. package/esm2020/utils/node-style/branch.mjs +19 -8
  20. package/esm2020/utils/node-style/common.mjs +2 -11
  21. package/esm2020/utils/node-style/shape.mjs +6 -12
  22. package/fesm2015/plait-mind.mjs +199 -75
  23. package/fesm2015/plait-mind.mjs.map +1 -1
  24. package/fesm2020/plait-mind.mjs +229 -75
  25. package/fesm2020/plait-mind.mjs.map +1 -1
  26. package/interfaces/index.d.ts +1 -0
  27. package/interfaces/theme-color.d.ts +17 -0
  28. package/package.json +1 -1
  29. package/plugins/with-mind-hotkey.d.ts +3 -0
  30. package/plugins/with-mind.d.ts +1 -1
  31. package/styles/mixins.scss +31 -0
  32. package/styles/styles.scss +4 -0
  33. package/utils/mind.d.ts +5 -5
  34. package/utils/node/create-node.d.ts +6 -3
  35. package/utils/node-style/branch.d.ts +4 -2
  36. package/utils/node-style/shape.d.ts +1 -1
@@ -74,7 +74,8 @@ export class MindNodeComponent extends PlaitPluginElementComponent {
74
74
  }
75
75
  const isEqualNode = RectangleClient.isEqual(this.node, newNode);
76
76
  this.node = newNode;
77
- if (!isEqualNode || value.element !== previous.element) {
77
+ const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');
78
+ if (!isEqualNode || value.element !== previous.element || isChangeTheme) {
78
79
  this.drawActiveG();
79
80
  this.updateActiveClass();
80
81
  this.drawShape();
@@ -292,7 +293,7 @@ export class MindNodeComponent extends PlaitPluginElementComponent {
292
293
  }
293
294
  // interactive
294
295
  fromEvent(collapseG, 'mouseup')
295
- .pipe(filter(() => !this.handActive || PlaitBoard.isReadonly(this.board)), take(1))
296
+ .pipe(filter(() => !this.handActive || !!PlaitBoard.isReadonly(this.board)), take(1))
296
297
  .subscribe(() => {
297
298
  const isCollapsed = !this.node.origin.isCollapsed;
298
299
  const newElement = { isCollapsed };
@@ -570,4 +571,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
570
571
  changeDetection: ChangeDetectionStrategy.OnPush
571
572
  }]
572
573
  }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; } });
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9ub2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFPWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixZQUFZLEVBQ1osYUFBYSxFQUdiLGVBQWUsRUFDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFFZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNu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QUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDL0YsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7SUFDTixDQUFDO0lBTUQsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqRCxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7OzhHQTdvQlEsaUJBQWlCO2tHQUFqQixpQkFBaUIsOEVBWGhCOzs7Ozs7OztLQVFUOzJGQUdRLGlCQUFpQjtrQkFiN0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUU7Ozs7Ozs7O0tBUVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIGNyZWF0ZUcsXG4gICAgY3JlYXRlVGV4dCxcbiAgICBJU19URVhUX0VESVRBQkxFLFxuICAgIE1FUkdJTkcsXG4gICAgUGxhaXRCb2FyZCxcbiAgICB0b1BvaW50LFxuICAgIHRyYW5zZm9ybVBvaW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgZHJhd1JvdW5kUmVjdGFuZ2xlLFxuICAgIFBsYWl0UGx1Z2luRWxlbWVudENvbXBvbmVudCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgTk9ERV9UT19JTkRFWCxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIE9uQ29udGV4dENoYW5nZWQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7XG4gICAgaXNCb3R0b21MYXlvdXQsXG4gICAgaXNIb3Jpem9udGFsTGF5b3V0LFxuICAgIGlzSW5kZW50ZWRMYXlvdXQsXG4gICAgaXNMZWZ0TGF5b3V0LFxuICAgIEFic3RyYWN0Tm9kZSxcbiAgICBpc1JpZ2h0TGF5b3V0LFxuICAgIGlzVG9wTGF5b3V0LFxuICAgIE1pbmRMYXlvdXRUeXBlXG59IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IGhhc0VkaXRhYmxlVGFyZ2V0LCBQbGFpdFJpY2h0ZXh0Q29tcG9uZW50LCBzZXRGdWxsU2VsZWN0aW9uQW5kRm9jdXMsIHVwZGF0ZVJpY2hUZXh0IH0gZnJvbSAnQHBsYWl0L3JpY2h0ZXh0JztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZGl0b3IsIE9wZXJhdGlvbiB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEVYVEVORF9PRkZTRVQsIEVYVEVORF9SQURJVVMsIFBSSU1BUllfQ09MT1IgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBOT0RFX01JTl9XSURUSCB9IGZyb20gJy4vY29uc3RhbnRzL25vZGUtcnVsZSc7XG5pbXBvcnQgeyBkcmF3VG9waWNCeU5vZGUsIHVwZGF0ZU1pbmROb2RlVG9waWNTaXplIH0gZnJvbSAnLi91dGlscy9kcmF3L25vZGUtdG9waWMnO1xuaW1wb3J0IHsgZHJhd1JvdW5kUmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi91dGlscy9kcmF3L25vZGUtc2hhcGUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmROb2RlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlLCBpc0hpdE1pbmRFbGVtZW50IH0gZnJvbSAnLi91dGlscy9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IGdldENoaWxkcmVuQ291bnQgfSBmcm9tICcuL3V0aWxzL21pbmQnO1xuaW1wb3J0IHsgZ2V0U2hhcGVCeUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL25vZGUtc3R5bGUvc2hhcGUnO1xuaW1wb3J0IHsgRUxFTUVOVF9UT19OT0RFIH0gZnJvbSAnLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgZ2V0UmljaHRleHRDb250ZW50U2l6ZSB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBkcmF3QWJzdHJhY3RMaW5rIH0gZnJvbSAnLi91dGlscy9kcmF3L25vZGUtbGluay9hYnN0cmFjdC1saW5rJztcbmltcG9ydCB7IEVtb2ppc0RyYXdlciB9IGZyb20gJy4vZHJhd2VyL2Vtb2ppcy5kcmF3ZXInO1xuaW1wb3J0IHsgTWluZFRyYW5zZm9ybXMgfSBmcm9tICcuL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lIH0gZnJvbSAnLi91dGlscy9kcmF3L2Fic3RyYWN0LW91dGxpbmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnRTaGFwZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBRdWlja0luc2VydERyYXdlciB9IGZyb20gJy4vZHJhd2VyL3F1aWNrLWluc2VydC5kcmF3ZXInO1xuaW1wb3J0IHsgaGFzQWZ0ZXJEcmF3IH0gZnJvbSAnLi9iYXNlL2Jhc2UuZHJhd2VyJztcbmltcG9ydCB7IGdldEJyYW5jaENvbG9yQnlNaW5kRWxlbWVudCwgZ2V0QnJhbmNoV2lkdGhCeU1pbmRFbGVtZW50IH0gZnJvbSAnLi91dGlscy9ub2RlLXN0eWxlL2JyYW5jaCc7XG5pbXBvcnQgeyBQbGFpdE1pbmRCb2FyZCB9IGZyb20gJy4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiB9IGZyb20gJy4vcGx1Z2lucy93aXRoLWFic3RyYWN0LXJlc2l6ZS5ib2FyZCc7XG5pbXBvcnQgeyBkcmF3TGluayB9IGZyb20gJy4vdXRpbHMvZHJhdy9ub2RlLWxpbmsvZHJhdy1saW5rJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1taW5kLW5vZGUnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxwbGFpdC1jaGlsZHJlblxuICAgICAgICAgICAgKm5nSWY9XCIhZWxlbWVudC5pc0NvbGxhcHNlZFwiXG4gICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgW3BhcmVudF09XCJlbGVtZW50XCJcbiAgICAgICAgICAgIFtlZmZlY3RdPVwiZWZmZWN0XCJcbiAgICAgICAgICAgIFtwYXJlbnRHXT1cInBhcmVudEdcIlxuICAgICAgICA+PC9wbGFpdC1jaGlsZHJlbj5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1pbmROb2RlQ29tcG9uZW50IGV4dGVuZHMgUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50PE1pbmRFbGVtZW50LCBQbGFpdE1pbmRCb2FyZD5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNvbnRleHRDaGFuZ2VkPE1pbmRFbGVtZW50LCBQbGFpdE1pbmRCb2FyZD4ge1xuICAgIGlzRWRpdGFibGUgPSBmYWxzZTtcblxuICAgIHJvdWdoU1ZHITogUm91Z2hTVkc7XG5cbiAgICBub2RlITogTWluZE5vZGU7XG5cbiAgICBpbmRleCE6IG51bWJlcjtcblxuICAgIGFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRz86IFNWR0dFbGVtZW50O1xuXG4gICAgcGFyZW50RyE6IFNWR0dFbGVtZW50O1xuXG4gICAgYWN0aXZlRzogU1ZHR0VsZW1lbnRbXSA9IFtdO1xuXG4gICAgc2hhcGVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgbGlua0c/OiBTVkdHRWxlbWVudDtcblxuICAgIHJpY2h0ZXh0Rz86IFNWR0dFbGVtZW50O1xuXG4gICAgZm9yZWlnbk9iamVjdD86IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50O1xuXG4gICAgZXh0ZW5kRz86IFNWR0dFbGVtZW50O1xuXG4gICAgbWFza0chOiBTVkdHRWxlbWVudDtcblxuICAgIHJpY2h0ZXh0Q29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPFBsYWl0UmljaHRleHRDb21wb25lbnQ+O1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZW1vamlzRHJhd2VyITogRW1vamlzRHJhd2VyO1xuXG4gICAgcXVpY2tJbnNlcnREcmF3ZXIhOiBRdWlja0luc2VydERyYXdlcjtcblxuICAgIHB1YmxpYyBnZXQgaGFuZEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQucG9pbnRlciA9PT0gUGxhaXRQb2ludGVyVHlwZS5oYW5kO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcjI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICAgICkge1xuICAgICAgICBzdXBlcihjZHIpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVtb2ppc0RyYXdlciA9IG5ldyBFbW9qaXNEcmF3ZXIodGhpcy5ib2FyZCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdGhpcy5xdWlja0luc2VydERyYXdlciA9IG5ldyBRdWlja0luc2VydERyYXdlcih0aGlzLmJvYXJkKTtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5ub2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gTk9ERV9UT19JTkRFWC5nZXQodGhpcy5lbGVtZW50KSB8fCAwO1xuICAgICAgICB0aGlzLnJvdWdoU1ZHID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5wYXJlbnRHID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChNaW5kRWxlbWVudC5nZXRSb290KHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCkpLnJvb3RHIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICB0aGlzLmRyYXdTaGFwZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgIHRoaXMuZHJhd1JpY2h0ZXh0KCk7XG4gICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVDbGFzcygpO1xuICAgICAgICB0aGlzLmRyYXdNYXNrRygpO1xuICAgICAgICB0aGlzLmRyYXdFbW9qaXMoKTtcbiAgICAgICAgdGhpcy5kcmF3RXh0ZW5kKCk7XG4gICAgICAgIHRoaXMuZHJhd1F1aWNrSW5zZXJ0KCk7XG4gICAgfVxuXG4gICAgb25Db250ZXh0Q2hhbmdlZChcbiAgICAgICAgdmFsdWU6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8TWluZEVsZW1lbnQsIFBsYWl0TWluZEJvYXJkPixcbiAgICAgICAgcHJldmlvdXM6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8TWluZEVsZW1lbnQsIFBsYWl0TWluZEJvYXJkPlxuICAgICkge1xuICAgICAgICBjb25zdCBuZXdOb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZSh2YWx1ZS5lbGVtZW50KTtcblxuICAgICAgICAvLyByZXNvbHZlIG1vdmUgbm9kZSByaWNodGV4dCBsb3NlIGlzc3VlXG4gICAgICAgIGlmICh0aGlzLm5vZGUgIT09IG5ld05vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcmVpZ25PYmplY3QgJiYgdGhpcy5mb3JlaWduT2JqZWN0LmNoaWxkcmVuLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JlaWduT2JqZWN0Py5hcHBlbmRDaGlsZCh0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmPy5pbnN0YW5jZS5lZGl0YWJsZSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0VxdWFsTm9kZSA9IFJlY3RhbmdsZUNsaWVudC5pc0VxdWFsKHRoaXMubm9kZSwgbmV3Tm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG5ld05vZGU7XG5cbiAgICAgICAgaWYgKCFpc0VxdWFsTm9kZSB8fCB2YWx1ZS5lbGVtZW50ICE9PSBwcmV2aW91cy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZSgpO1xuICAgICAgICAgICAgdGhpcy5kcmF3TGluaygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSaWNodGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5kcmF3TWFza0coKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0V4dGVuZCgpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UXVpY2tJbnNlcnQoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0Vtb2ppcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzU2FtZVNlbGVjdGVkID0gdmFsdWUuc2VsZWN0ZWQgPT09IHByZXZpb3VzLnNlbGVjdGVkO1xuICAgICAgICAgICAgY29uc3QgaGFzU2FtZVBhcmVudCA9IHZhbHVlLnBhcmVudCA9PT0gcHJldmlvdXMucGFyZW50O1xuICAgICAgICAgICAgaWYgKCFoYXNTYW1lU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVDbGFzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNTYW1lUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3TGluaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd0Vtb2ppcygpIHtcbiAgICAgICAgY29uc3QgZyA9IHRoaXMuZW1vamlzRHJhd2VyLmRyYXdFbW9qaXModGhpcy5lbGVtZW50KTtcbiAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICAgIHRoaXMuZy5hcHBlbmQoZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3UXVpY2tJbnNlcnQoKSB7XG4gICAgICAgIHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5xdWlja0luc2VydERyYXdlci5jYW5EcmF3KHRoaXMuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSB0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyLmRyYXcodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChoYXNBZnRlckRyYXcodGhpcy5xdWlja0luc2VydERyYXdlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyLmFmdGVyRHJhdyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHRlbmRHPy5hcHBlbmRDaGlsZChnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdTaGFwZSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U2hhcGUoKTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBnZXRTaGFwZUJ5RWxlbWVudCh0aGlzLmJvYXJkLCB0aGlzLm5vZGUub3JpZ2luKSBhcyBNaW5kRWxlbWVudFNoYXBlO1xuICAgICAgICBzd2l0Y2ggKHNoYXBlKSB7XG4gICAgICAgICAgICBjYXNlIE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGU6XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZUcgPSBkcmF3Um91bmRSZWN0YW5nbGVCeU5vZGUodGhpcy5ib2FyZCwgdGhpcy5ub2RlIGFzIE1pbmROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmcucHJlcGVuZCh0aGlzLnNoYXBlRyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveVNoYXBlKCkge1xuICAgICAgICBpZiAodGhpcy5zaGFwZUcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVHLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5zaGFwZUcgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd0xpbmsoKSB7XG4gICAgICAgIGlmIChQbGFpdE1pbmQuaXNNaW5kKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE1pbmRFbGVtZW50LmdldFBhcmVudCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShwYXJlbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLmxpbmtHKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtHLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0TGF5b3V0QnlFbGVtZW50KHBhcmVudCkgYXMgTWluZExheW91dFR5cGU7XG4gICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdCh0aGlzLm5vZGUub3JpZ2luKSkge1xuICAgICAgICAgICAgdGhpcy5saW5rRyA9IGRyYXdBYnN0cmFjdExpbmsodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCBpc0hvcml6b250YWxMYXlvdXQobGF5b3V0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtHID0gZHJhd0xpbmsodGhpcy5ib2FyZCwgcGFyZW50Tm9kZSwgdGhpcy5ub2RlLCBpc0hvcml6b250YWxMYXlvdXQobGF5b3V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLmxpbmtHKTtcbiAgICB9XG5cbiAgICBkZXN0cm95TGluZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGlua0cpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3TWFza0coKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveU1hc2tHKCk7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aE9mZnNldCA9IDI7XG4gICAgICAgIGNvbnN0IGV4dGVuZE9mZnNldCA9IDE1O1xuICAgICAgICBjb25zdCBub2RlTGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0TGF5b3V0QnlFbGVtZW50KHRoaXMubm9kZS5vcmlnaW4pIGFzIE1pbmRMYXlvdXRUeXBlO1xuICAgICAgICBjb25zdCBpc1RvcCA9IGlzVG9wTGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc1JpZ2h0ID0gaXNSaWdodExheW91dChub2RlTGF5b3V0KTtcbiAgICAgICAgY29uc3QgaXNCb3R0b20gPSBpc0JvdHRvbUxheW91dChub2RlTGF5b3V0KTtcbiAgICAgICAgY29uc3QgaXNMZWZ0ID0gaXNMZWZ0TGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLm5vZGUgYXMgTWluZE5vZGUpO1xuXG4gICAgICAgIGxldCBkcmF3WCA9IHg7XG4gICAgICAgIGxldCBkcmF3WSA9IHk7XG4gICAgICAgIGxldCBkcmF3V2lkdGggPSB4ICsgd2lkdGg7XG4gICAgICAgIGxldCBkcmF3SGVpZ2h0ID0geSArIGhlaWdodDtcblxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIGNhc2UgaXNUb3A6XG4gICAgICAgICAgICAgICAgZHJhd1ggPSB4IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdZID0geSAtIGV4dGVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3V2lkdGggPSB4ICsgd2lkdGggKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd0hlaWdodCA9IHkgKyBoZWlnaHQgKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGlzQm90dG9tOlxuICAgICAgICAgICAgICAgIGRyYXdYID0geCAtIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3WSA9IHkgLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1dpZHRoID0geCArIHdpZHRoICsgbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdIZWlnaHQgPSB5ICsgaGVpZ2h0ICsgZXh0ZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBpc0xlZnQ6XG4gICAgICAgICAgICAgICAgZHJhd1ggPSB4IC0gZXh0ZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdZID0geSAtIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3V2lkdGggPSB4ICsgd2lkdGggKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd0hlaWdodCA9IHkgKyBoZWlnaHQgKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGlzUmlnaHQ6XG4gICAgICAgICAgICAgICAgZHJhd1ggPSB4IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdZID0geSAtIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3V2lkdGggPSB4ICsgd2lkdGggKyBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd0hlaWdodCA9IHkgKyBoZWlnaHQgKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXNrRyA9IGRyYXdSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgICAgIHRoaXMucm91Z2hTVkcgYXMgUm91Z2hTVkcsXG4gICAgICAgICAgICBkcmF3WCxcbiAgICAgICAgICAgIGRyYXdZLFxuICAgICAgICAgICAgZHJhd1dpZHRoLFxuICAgICAgICAgICAgZHJhd0hlaWdodCxcbiAgICAgICAgICAgIHsgc3Ryb2tlOiAnbm9uZScsIGZpbGw6ICdyZ2JhKDI1NSwyNTUsMjU1LDApJywgZmlsbFN0eWxlOiAnc29saWQnIH0sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWFza0cuY2xhc3NMaXN0LmFkZCgnbWFzaycpO1xuICAgICAgICB0aGlzLm1hc2tHLnNldEF0dHJpYnV0ZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG4gICAgICAgIHRoaXMuZy5hcHBlbmQodGhpcy5tYXNrRyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZE1hc2tHKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5tYXNrRywgJ21vdXNlZW50ZXInKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpdEJvYXJkLmlzRm9jdXModGhpcy5ib2FyZCkgJiYgIXRoaXMuZWxlbWVudC5pc0NvbGxhcHNlZCAmJiAhdGhpcy5oYW5kQWN0aXZlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LmFkZCgnaG92ZXJlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLm1hc2tHLCAnbW91c2VsZWF2ZScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKSAmJiAhdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LnJlbW92ZSgnaG92ZXJlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzdHJveU1hc2tHKCkge1xuICAgICAgICBpZiAodGhpcy5tYXNrRykge1xuICAgICAgICAgICAgdGhpcy5tYXNrRy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmFibGVNYXNrRygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFza0cpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc2FibGVkTWFza0coKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2tHKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tHLnNldEF0dHJpYnV0ZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdBY3RpdmVHKCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lBY3RpdmVHKCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdCh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBYnN0cmFjdEluY2x1ZGVkT3V0bGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHRoaXMubm9kZSBhcyBNaW5kTm9kZSk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFN0cm9rZUcgPSBkcmF3Um91bmRSZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgdGhpcy5yb3VnaFNWRyBhcyBSb3VnaFNWRyxcbiAgICAgICAgICAgICAgICB4IC0gMixcbiAgICAgICAgICAgICAgICB5IC0gMixcbiAgICAgICAgICAgICAgICB4ICsgd2lkdGggKyAyLFxuICAgICAgICAgICAgICAgIHkgKyBoZWlnaHQgKyAyLFxuICAgICAgICAgICAgICAgIHsgc3Ryb2tlOiBQUklNQVJZX0NPTE9SLCBzdHJva2VXaWR0aDogMiwgZmlsbDogJycgfSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8g5b2x5ZONIG1hc2sg56e75YWl56e75Ye65LqL5Lu2XG4gICAgICAgICAgICBzZWxlY3RlZFN0cm9rZUcuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuZy5hcHBlbmRDaGlsZChzZWxlY3RlZFN0cm9rZUcpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVHLnB1c2goc2VsZWN0ZWRTdHJva2VHKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmPy5pbnN0YW5jZS5wbGFpdFJlYWRvbmx5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kRyA9IGRyYXdSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3VnaFNWRyBhcyBSb3VnaFNWRyxcbiAgICAgICAgICAgICAgICAgICAgeCAtIDIsXG4gICAgICAgICAgICAgICAgICAgIHkgLSAyLFxuICAgICAgICAgICAgICAgICAgICB4ICsgd2lkdGggKyAyLFxuICAgICAgICAgICAgICAgICAgICB5ICsgaGVpZ2h0ICsgMixcbiAgICAgICAgICAgICAgICAgICAgeyBzdHJva2U6IFBSSU1BUllfQ09MT1IsIGZpbGw6IFBSSU1BUllfQ09MT1IsIGZpbGxTdHlsZTogJ3NvbGlkJyB9LFxuICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRHLnN0eWxlLm9wYWNpdHkgPSAnMC4xNSc7XG4gICAgICAgICAgICAgICAgLy8g5b2x5ZON5Y+M5Ye75LqL5Lu2XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kRy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZy5hcHBlbmRDaGlsZChzZWxlY3RlZEJhY2tncm91bmRHKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUcucHVzaChzZWxlY3RlZEJhY2tncm91bmRHLCBzZWxlY3RlZFN0cm9rZUcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveUFjdGl2ZUcoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlRy5mb3JFYWNoKGcgPT4gZy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRyA9IFtdO1xuICAgIH1cblxuICAgIHVwZGF0ZUFjdGl2ZUNsYXNzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcjIuYWRkQ2xhc3ModGhpcy5nLCAnYWN0aXZlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcjIucmVtb3ZlQ2xhc3ModGhpcy5nLCAnYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3UmljaHRleHQoKSB7XG4gICAgICAgIGNvbnN0IHsgcmljaHRleHRHLCByaWNodGV4dENvbXBvbmVudFJlZiwgZm9yZWlnbk9iamVjdCB9ID0gZHJhd1RvcGljQnlOb2RlKHRoaXMuYm9hcmQsIHRoaXMubm9kZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZiA9IHJpY2h0ZXh0Q29tcG9uZW50UmVmO1xuICAgICAgICB0aGlzLnJpY2h0ZXh0RyA9IHJpY2h0ZXh0RztcbiAgICAgICAgdGhpcy5mb3JlaWduT2JqZWN0ID0gZm9yZWlnbk9iamVjdDtcbiAgICAgICAgdGhpcy5yZW5kZXIyLmFkZENsYXNzKHJpY2h0ZXh0RywgJ3JpY2h0ZXh0Jyk7XG4gICAgICAgIHRoaXMuZy5hcHBlbmQocmljaHRleHRHKTtcbiAgICB9XG5cbiAgICBkcmF3RXh0ZW5kKCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lFeHRlbmQoKTtcbiAgICAgICAgLy8gY3JlYXRlIGV4dGVuZFxuICAgICAgICB0aGlzLmV4dGVuZEcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgdGhpcy5leHRlbmRHLmNsYXNzTGlzdC5hZGQoJ2V4dGVuZCcpO1xuICAgICAgICBjb2xsYXBzZUcuY2xhc3NMaXN0LmFkZCgnY29sbGFwc2UtY29udGFpbmVyJyk7XG4gICAgICAgIHRoaXMuZy5hcHBlbmQodGhpcy5leHRlbmRHKTtcbiAgICAgICAgdGhpcy5leHRlbmRHLmFwcGVuZChjb2xsYXBzZUcpO1xuICAgICAgICBpZiAodGhpcy5ub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbnRlcmFjdGl2ZVxuICAgICAgICBmcm9tRXZlbnQoY29sbGFwc2VHLCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuaGFuZEFjdGl2ZSB8fCBQbGFpdEJvYXJkLmlzUmVhZG9ubHkodGhpcy5ib2FyZCkpLFxuICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gIXRoaXMubm9kZS5vcmlnaW4uaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RWxlbWVudDogUGFydGlhbDxNaW5kRWxlbWVudD4gPSB7IGlzQ29sbGFwc2VkIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5ib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICBjb25zdCBzdHJva2UgPSBnZXRCcmFuY2hDb2xvckJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgYnJhbmNoV2lkdGggPSBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgZXh0ZW5kWSA9IHkgKyBoZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBub2RlTGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudCh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuXG4gICAgICAgIGxldCBleHRlbmRMaW5lWFkgPSBbXG4gICAgICAgICAgICBbeCArIHdpZHRoLCBleHRlbmRZXSxcbiAgICAgICAgICAgIFt4ICsgd2lkdGggKyBFWFRFTkRfT0ZGU0VULCBleHRlbmRZXVxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBhcnJvd1lPZmZzZXQgPSBbLTQsIDEsIC0wLjYsIDRdO1xuICAgICAgICBsZXQgYXJyb3dYT2Zmc2V0ID0gWzEwLCA1LjUsIDUuNSwgMTBdO1xuXG4gICAgICAgIGxldCBleHRlbmRMaW5lWE9mZnNldCA9IFswLCAwXTtcbiAgICAgICAgbGV0IGV4dGVuZExpbmVZT2Zmc2V0ID0gWzAsIDBdO1xuXG4gICAgICAgIGxldCBjaXJjbGVPZmZzZXQgPSBbRVhURU5EX1JBRElVUyAvIDIsIDBdO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWxMYXlvdXQobm9kZUxheW91dCkgJiYgIWlzSW5kZW50ZWRMYXlvdXQobm9kZUxheW91dCkpIHtcbiAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID1cbiAgICAgICAgICAgICAgICAoZ2V0U2hhcGVCeUVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5ub2RlLm9yaWdpbikgYXMgTWluZEVsZW1lbnRTaGFwZSkgPT09IE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICAgICAgPyBbMCwgMF1cbiAgICAgICAgICAgICAgICAgICAgOiBbaGVpZ2h0IC8gMiwgaGVpZ2h0IC8gMl07XG4gICAgICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KG5vZGVMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgLy/lt6ZcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWE9mZnNldCA9IFstd2lkdGgsIC13aWR0aCAtIEVYVEVORF9PRkZTRVQgKiAyXTtcbiAgICAgICAgICAgICAgICBjaXJjbGVPZmZzZXQgPSBbLUVYVEVORF9SQURJVVMgLyAyLCAwXTtcbiAgICAgICAgICAgICAgICBhcnJvd1hPZmZzZXQgPSBbLTEwLCAtNS41LCAtNS41LCAtMTBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyb3dYT2Zmc2V0ID0gWy00LCAwLjYsIC0xLCA0XTtcbiAgICAgICAgICAgIGlmIChpc1RvcExheW91dChub2RlTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIC8v5LiKXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoIC8gMiwgLXdpZHRoIC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID0gWy1oZWlnaHQgLyAyLCAtaGVpZ2h0IC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGFycm93WU9mZnNldCA9IFstMTAsIC01LjUsIC01LjUsIC0xMF07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWzAsIC1FWFRFTkRfUkFESVVTIC8gMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v5LiLXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoIC8gMiwgLXdpZHRoIC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID0gW2hlaWdodCAvIDIsIGhlaWdodCAvIDIgKyBFWFRFTkRfT0ZGU0VUXTtcbiAgICAgICAgICAgICAgICBhcnJvd1lPZmZzZXQgPSBbMTAsIDUuNSwgNS41LCAxMF07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWzAsIEVYVEVORF9SQURJVVMgLyAyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZExpbmVYWSA9IFtcbiAgICAgICAgICAgIFtleHRlbmRMaW5lWFlbMF1bMF0gKyBleHRlbmRMaW5lWE9mZnNldFswXSwgZXh0ZW5kTGluZVhZWzBdWzFdICsgZXh0ZW5kTGluZVlPZmZzZXRbMF1dLFxuICAgICAgICAgICAgW2V4dGVuZExpbmVYWVsxXVswXSArIGV4dGVuZExpbmVYT2Zmc2V0WzFdLCBleHRlbmRMaW5lWFlbMV1bMV0gKyBleHRlbmRMaW5lWU9mZnNldFsxXV1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBleHRlbmRMaW5lID0gdGhpcy5yb3VnaFNWRy5saW5lKGV4dGVuZExpbmVYWVswXVswXSwgZXh0ZW5kTGluZVhZWzBdWzFdLCBleHRlbmRMaW5lWFlbMV1bMF0sIGV4dGVuZExpbmVYWVsxXVsxXSwge1xuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGJyYW5jaFdpZHRoLFxuICAgICAgICAgICAgc3Ryb2tlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8v57uY5Yi2566t5aS0XG4gICAgICAgIGNvbnN0IGhpZGVBcnJvd1RvcExpbmUgPSB0aGlzLnJvdWdoU1ZHLmxpbmUoXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMF0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMF0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMV0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMV0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGhpZGVBcnJvd0JvdHRvbUxpbmUgPSB0aGlzLnJvdWdoU1ZHLmxpbmUoXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMl0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMl0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbM10sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbM10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZS5vcmlnaW4uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhZGdlID0gdGhpcy5yb3VnaFNWRy5jaXJjbGUoZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdLCBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0sIEVYVEVORF9SQURJVVMsIHtcbiAgICAgICAgICAgICAgICBmaWxsOiBzdHJva2UsXG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBudW1iZXJPZmZzZXQgPSAwO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQodGhpcy5ub2RlLm9yaWdpbikgPj0gMTApIG51bWJlck9mZnNldCA9IC0yO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQodGhpcy5ub2RlLm9yaWdpbikgPT09IDEpIG51bWJlck9mZnNldCA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhZGdlVGV4dCA9IGNyZWF0ZVRleHQoXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdIC0gNCArIG51bWJlck9mZnNldCxcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0gKyA0LFxuICAgICAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgICAgICBgJHtnZXRDaGlsZHJlbkNvdW50KHRoaXMubm9kZS5vcmlnaW4pfWBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZWQnKTtcbiAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnb3BhY2l0eTogMC4xNScpO1xuICAgICAgICAgICAgYmFkZ2VUZXh0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZm9udC1zaXplOiAxMnB4Jyk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoYmFkZ2UpO1xuICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGJhZGdlVGV4dCk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoZXh0ZW5kTGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LnJlbW92ZSgnY29sbGFwc2VkJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlLm9yaWdpbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZUNpcmNsZUcgPSB0aGlzLnJvdWdoU1ZHLmNpcmNsZShcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdLFxuICAgICAgICAgICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIEVYVEVORF9SQURJVVMgLSAxLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogYnJhbmNoV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVDaXJjbGVHKTtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoaGlkZUFycm93VG9wTGluZSk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVBcnJvd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveUV4dGVuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXh0ZW5kRykge1xuICAgICAgICAgICAgdGhpcy5leHRlbmRHLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveVJpY2h0ZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5yaWNodGV4dEcpIHtcbiAgICAgICAgICAgIHRoaXMucmljaHRleHRHLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKGFjdGl2ZUhhbmRsZVBvc2l0aW9uPzogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiwgcmVzaXppbmdMb2NhdGlvbj86IG51bWJlcikge1xuICAgICAgICB0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRz8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHID0gZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lKFxuICAgICAgICAgICAgdGhpcy5ib2FyZCxcbiAgICAgICAgICAgIHRoaXMucm91Z2hTVkcsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICBhY3RpdmVIYW5kbGVQb3NpdGlvbixcbiAgICAgICAgICAgIHJlc2l6aW5nTG9jYXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRIb3N0KHRoaXMuYm9hcmQpLmFwcGVuZCh0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRyk7XG4gICAgfVxuXG4gICAgdXBkYXRlUmljaHRleHQoKSB7XG4gICAgICAgIHVwZGF0ZVJpY2hUZXh0KHRoaXMubm9kZS5vcmlnaW4uZGF0YS50b3BpYywgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZiEpO1xuICAgICAgICB1cGRhdGVNaW5kTm9kZVRvcGljU2l6ZSh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIHRoaXMucmljaHRleHRHIGFzIFNWR0dFbGVtZW50LCB0aGlzLmlzRWRpdGFibGUpO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdFRleHQoaXNFbmQ6IGJvb2xlYW4sIGlzQ2xlYXI6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZGVmaW5lZCByaWNodGV4dENvbXBvbmVudFJlZicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJpY2h0ZXh0SW5zdGFuY2UgPSB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IHRydWU7XG4gICAgICAgIElTX1RFWFRfRURJVEFCTEUuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgICAgICB0aGlzLmRpc2FibGVkTWFza0coKTtcbiAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICAgICAgaWYgKHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSkge1xuICAgICAgICAgICAgcmljaHRleHRJbnN0YW5jZS5wbGFpdFJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNFbmQgPyBFZGl0b3IuZW5kKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yLCBbMF0pIDogWzBdO1xuICAgICAgICAgICAgc2V0RnVsbFNlbGVjdGlvbkFuZEZvY3VzKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yLCBsb2NhdGlvbik7XG4gICAgICAgICAgICBpZiAoaXNDbGVhcikge1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChyaWNodGV4dEluc3RhbmNlLmVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgaW52YWxpZCB3aWR0aCBhbmQgaGVpZ2h0IChvbGQgZGF0YSlcbiAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAod2lkdGggIT09IHRoaXMuZWxlbWVudC53aWR0aCB8fCBoZWlnaHQgIT09IHRoaXMuZWxlbWVudC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmljaHRleHQgPSByaWNodGV4dEluc3RhbmNlLnBsYWl0VmFsdWU7XG4gICAgICAgIC8vIHVzZSBkZWJvdW5jZVRpbWUgdG8gd2FpdCBET00gcmVuZGVyIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlJCA9IHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6Tmjokgb3BlcmF0aW9ucyDkuK3lhajmmK8gc2V0X3NlbGVjdGlvbiDnmoTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFldmVudC5vcGVyYXRpb25zLmV2ZXJ5KG9wID0+IE9wZXJhdGlvbi5pc1NlbGVjdGlvbk9wZXJhdGlvbihvcCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmljaHRleHQgPT09IGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSaWNodGV4dCgpO1xuICAgICAgICAgICAgICAgIC8vIOabtOaWsOWvjOaWh+acrOOAgeabtOaWsOWuvemrmFxuICAgICAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0VG9waWModGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50LCBldmVudC52YWx1ZSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9zaXRpb24kID0gcmljaHRleHRJbnN0YW5jZS5wbGFpdENvbXBvc2l0aW9uLnBpcGUoZGVib3VuY2VUaW1lKDApKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmljaHRleHRDb250ZW50U2l6ZShyaWNodGV4dEluc3RhbmNlLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmICh3aWR0aCA8IE5PREVfTUlOX1dJRFRIKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBOT0RFX01JTl9XSURUSDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZyAmJiAod2lkdGggIT09IHRoaXMubm9kZS5vcmlnaW4ud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLm5vZGUub3JpZ2luLmhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50OiBQYXJ0aWFsPE1pbmRFbGVtZW50PiA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoIC8gdGhpcy5ib2FyZC52aWV3cG9ydC56b29tLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIHRoaXMuYm9hcmQudmlld3BvcnQuem9vbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5ib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb3VzZWRvd24kID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludCh0aGlzLmJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdCh0aGlzLmJvYXJkKSkpO1xuICAgICAgICAgICAgY29uc3QgY2xpY2tJbk5vZGUgPSBpc0hpdE1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIHBvaW50LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNsaWNrSW5Ob2RlICYmICFoYXNFZGl0YWJsZVRhcmdldChyaWNodGV4dEluc3RhbmNlLmVkaXRvciwgZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjbGlja0luTm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjb21wb3NpdGlvbiBpbnB1dCBzdGF0ZSwgbGlrZTogQ2hpbmVzZSBJTUUgQ29tcG9zaXRpb24gSW5wdXRcbiAgICAgICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTWFza0coKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yO1xuICAgICAgICBjb25zdCB7IGtleWRvd24gfSA9IGVkaXRvcjtcbiAgICAgICAgZWRpdG9yLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3QWN0aXZlRygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTWFza0coKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZXhpdEhhbmRsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZU1hc2tHKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV4aXRIYW5kbGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3TWFza0coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXhpdEhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvbiQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBtb3VzZWRvd24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmtleWRvd24gPSBrZXlkb3duOyAvLyByZXNldCBrZXlkb3duXG4gICAgICAgICAgICAgICAgLy8gZWRpdGFibGUgc3RhdHVzXG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZj8uY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICAgICAgICAgICAgICBJU19URVhUX0VESVRBQkxFLnNldCh0aGlzLmJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIG5vZGU6IE1pbmROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiBub2RlLm9yaWdpbi5pZDtcbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmljaHRleHQoKTtcbiAgICAgICAgdGhpcy5lbW9qaXNEcmF3ZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoRUxFTUVOVF9UT19OT0RFLmdldCh0aGlzLmVsZW1lbnQpID09PSB0aGlzLm5vZGUpIHtcbiAgICAgICAgICAgIEVMRU1FTlRfVE9fTk9ERS5kZWxldGUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
574
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9ub2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFPWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixZQUFZLEVBQ1osYUFBYSxFQUdiLGVBQWUsRUFDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFFZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNu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QyxZQUFZLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBd0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9GLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQU1ELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDOzs4R0Evb0JRLGlCQUFpQjtrR0FBakIsaUJBQWlCLDhFQVhoQjs7Ozs7Ozs7S0FRVDsyRkFHUSxpQkFBaUI7a0JBYjdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7OztLQVFUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgUGxhaXRQb2ludGVyVHlwZSxcbiAgICBjcmVhdGVHLFxuICAgIGNyZWF0ZVRleHQsXG4gICAgSVNfVEVYVF9FRElUQUJMRSxcbiAgICBNRVJHSU5HLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgdG9Qb2ludCxcbiAgICB0cmFuc2Zvcm1Qb2ludCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGRyYXdSb3VuZFJlY3RhbmdsZSxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb21wb25lbnQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIE5PREVfVE9fSU5ERVgsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCxcbiAgICBPbkNvbnRleHRDaGFuZ2VkLFxuICAgIFJlY3RhbmdsZUNsaWVudFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQge1xuICAgIGlzQm90dG9tTGF5b3V0LFxuICAgIGlzSG9yaXpvbnRhbExheW91dCxcbiAgICBpc0luZGVudGVkTGF5b3V0LFxuICAgIGlzTGVmdExheW91dCxcbiAgICBBYnN0cmFjdE5vZGUsXG4gICAgaXNSaWdodExheW91dCxcbiAgICBpc1RvcExheW91dCxcbiAgICBNaW5kTGF5b3V0VHlwZVxufSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBoYXNFZGl0YWJsZVRhcmdldCwgUGxhaXRSaWNodGV4dENvbXBvbmVudCwgc2V0RnVsbFNlbGVjdGlvbkFuZEZvY3VzLCB1cGRhdGVSaWNoVGV4dCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdG9yLCBPcGVyYXRpb24gfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBFWFRFTkRfT0ZGU0VULCBFWFRFTkRfUkFESVVTLCBQUklNQVJZX0NPTE9SIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTk9ERV9NSU5fV0lEVEggfSBmcm9tICcuL2NvbnN0YW50cy9ub2RlLXJ1bGUnO1xuaW1wb3J0IHsgZHJhd1RvcGljQnlOb2RlLCB1cGRhdGVNaW5kTm9kZVRvcGljU2l6ZSB9IGZyb20gJy4vdXRpbHMvZHJhdy9ub2RlLXRvcGljJztcbmltcG9ydCB7IGRyYXdSb3VuZFJlY3RhbmdsZUJ5Tm9kZSB9IGZyb20gJy4vdXRpbHMvZHJhdy9ub2RlLXNoYXBlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50LCBQbGFpdE1pbmQgfSBmcm9tICcuL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBNaW5kTm9kZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IE1pbmRRdWVyaWVzIH0gZnJvbSAnLi9xdWVyaWVzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5Tm9kZSwgaXNIaXRNaW5kRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBnZXRDaGlsZHJlbkNvdW50IH0gZnJvbSAnLi91dGlscy9taW5kJztcbmltcG9ydCB7IGdldFNoYXBlQnlFbGVtZW50IH0gZnJvbSAnLi91dGlscy9ub2RlLXN0eWxlL3NoYXBlJztcbmltcG9ydCB7IEVMRU1FTlRfVE9fTk9ERSB9IGZyb20gJy4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IGdldFJpY2h0ZXh0Q29udGVudFNpemUgfSBmcm9tICdAcGxhaXQvcmljaHRleHQnO1xuaW1wb3J0IHsgZHJhd0Fic3RyYWN0TGluayB9IGZyb20gJy4vdXRpbHMvZHJhdy9ub2RlLWxpbmsvYWJzdHJhY3QtbGluayc7XG5pbXBvcnQgeyBFbW9qaXNEcmF3ZXIgfSBmcm9tICcuL2RyYXdlci9lbW9qaXMuZHJhd2VyJztcbmltcG9ydCB7IE1pbmRUcmFuc2Zvcm1zIH0gZnJvbSAnLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGRyYXdBYnN0cmFjdEluY2x1ZGVkT3V0bGluZSB9IGZyb20gJy4vdXRpbHMvZHJhdy9hYnN0cmFjdC1vdXRsaW5lJztcbmltcG9ydCB7IE1pbmRFbGVtZW50U2hhcGUgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUXVpY2tJbnNlcnREcmF3ZXIgfSBmcm9tICcuL2RyYXdlci9xdWljay1pbnNlcnQuZHJhd2VyJztcbmltcG9ydCB7IGhhc0FmdGVyRHJhdyB9IGZyb20gJy4vYmFzZS9iYXNlLmRyYXdlcic7XG5pbXBvcnQgeyBnZXRCcmFuY2hDb2xvckJ5TWluZEVsZW1lbnQsIGdldEJyYW5jaFdpZHRoQnlNaW5kRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvbm9kZS1zdHlsZS9icmFuY2gnO1xuaW1wb3J0IHsgUGxhaXRNaW5kQm9hcmQgfSBmcm9tICcuL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkJztcbmltcG9ydCB7IEFic3RyYWN0SGFuZGxlUG9zaXRpb24gfSBmcm9tICcuL3BsdWdpbnMvd2l0aC1hYnN0cmFjdC1yZXNpemUuYm9hcmQnO1xuaW1wb3J0IHsgZHJhd0xpbmsgfSBmcm9tICcuL3V0aWxzL2RyYXcvbm9kZS1saW5rL2RyYXctbGluayc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGxhaXQtbWluZC1ub2RlJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8cGxhaXQtY2hpbGRyZW5cbiAgICAgICAgICAgICpuZ0lmPVwiIWVsZW1lbnQuaXNDb2xsYXBzZWRcIlxuICAgICAgICAgICAgW2JvYXJkXT1cImJvYXJkXCJcbiAgICAgICAgICAgIFtwYXJlbnRdPVwiZWxlbWVudFwiXG4gICAgICAgICAgICBbZWZmZWN0XT1cImVmZmVjdFwiXG4gICAgICAgICAgICBbcGFyZW50R109XCJwYXJlbnRHXCJcbiAgICAgICAgPjwvcGxhaXQtY2hpbGRyZW4+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNaW5kTm9kZUNvbXBvbmVudCBleHRlbmRzIFBsYWl0UGx1Z2luRWxlbWVudENvbXBvbmVudDxNaW5kRWxlbWVudCwgUGxhaXRNaW5kQm9hcmQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25Db250ZXh0Q2hhbmdlZDxNaW5kRWxlbWVudCwgUGxhaXRNaW5kQm9hcmQ+IHtcbiAgICBpc0VkaXRhYmxlID0gZmFsc2U7XG5cbiAgICByb3VnaFNWRyE6IFJvdWdoU1ZHO1xuXG4gICAgbm9kZSE6IE1pbmROb2RlO1xuXG4gICAgaW5kZXghOiBudW1iZXI7XG5cbiAgICBhYnN0cmFjdEluY2x1ZGVkT3V0bGluZUc/OiBTVkdHRWxlbWVudDtcblxuICAgIHBhcmVudEchOiBTVkdHRWxlbWVudDtcblxuICAgIGFjdGl2ZUc6IFNWR0dFbGVtZW50W10gPSBbXTtcblxuICAgIHNoYXBlRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGxpbmtHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICByaWNodGV4dEc/OiBTVkdHRWxlbWVudDtcblxuICAgIGZvcmVpZ25PYmplY3Q/OiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDtcblxuICAgIGV4dGVuZEc/OiBTVkdHRWxlbWVudDtcblxuICAgIG1hc2tHITogU1ZHR0VsZW1lbnQ7XG5cbiAgICByaWNodGV4dENvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxQbGFpdFJpY2h0ZXh0Q29tcG9uZW50PjtcblxuICAgIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGVtb2ppc0RyYXdlciE6IEVtb2ppc0RyYXdlcjtcblxuICAgIHF1aWNrSW5zZXJ0RHJhd2VyITogUXVpY2tJbnNlcnREcmF3ZXI7XG5cbiAgICBwdWJsaWMgZ2V0IGhhbmRBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvYXJkLnBvaW50ZXIgPT09IFBsYWl0UG9pbnRlclR5cGUuaGFuZDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXIyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2RyKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbW9qaXNEcmF3ZXIgPSBuZXcgRW1vamlzRHJhd2VyKHRoaXMuYm9hcmQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMucXVpY2tJbnNlcnREcmF3ZXIgPSBuZXcgUXVpY2tJbnNlcnREcmF3ZXIodGhpcy5ib2FyZCk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMubm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5pbmRleCA9IE5PREVfVE9fSU5ERVguZ2V0KHRoaXMuZWxlbWVudCkgfHwgMDtcbiAgICAgICAgdGhpcy5yb3VnaFNWRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCk7XG4gICAgICAgIHRoaXMucGFyZW50RyA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoTWluZEVsZW1lbnQuZ2V0Um9vdCh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpKS5yb290RyBhcyBTVkdHRWxlbWVudDtcbiAgICAgICAgdGhpcy5kcmF3U2hhcGUoKTtcbiAgICAgICAgdGhpcy5kcmF3TGluaygpO1xuICAgICAgICB0aGlzLmRyYXdSaWNodGV4dCgpO1xuICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5kcmF3TWFza0coKTtcbiAgICAgICAgdGhpcy5kcmF3RW1vamlzKCk7XG4gICAgICAgIHRoaXMuZHJhd0V4dGVuZCgpO1xuICAgICAgICB0aGlzLmRyYXdRdWlja0luc2VydCgpO1xuICAgIH1cblxuICAgIG9uQ29udGV4dENoYW5nZWQoXG4gICAgICAgIHZhbHVlOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PE1pbmRFbGVtZW50LCBQbGFpdE1pbmRCb2FyZD4sXG4gICAgICAgIHByZXZpb3VzOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PE1pbmRFbGVtZW50LCBQbGFpdE1pbmRCb2FyZD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUodmFsdWUuZWxlbWVudCk7XG5cbiAgICAgICAgLy8gcmVzb2x2ZSBtb3ZlIG5vZGUgcmljaHRleHQgbG9zZSBpc3N1ZVxuICAgICAgICBpZiAodGhpcy5ub2RlICE9PSBuZXdOb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JlaWduT2JqZWN0ICYmIHRoaXMuZm9yZWlnbk9iamVjdC5jaGlsZHJlbi5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9yZWlnbk9iamVjdD8uYXBwZW5kQ2hpbGQodGhpcy5yaWNodGV4dENvbXBvbmVudFJlZj8uaW5zdGFuY2UuZWRpdGFibGUgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNFcXVhbE5vZGUgPSBSZWN0YW5nbGVDbGllbnQuaXNFcXVhbCh0aGlzLm5vZGUsIG5ld05vZGUpO1xuICAgICAgICB0aGlzLm5vZGUgPSBuZXdOb2RlO1xuXG4gICAgICAgIGNvbnN0IGlzQ2hhbmdlVGhlbWUgPSB0aGlzLmJvYXJkLm9wZXJhdGlvbnMuZmluZChvcCA9PiBvcC50eXBlID09PSAnc2V0X3RoZW1lJyk7XG5cbiAgICAgICAgaWYgKCFpc0VxdWFsTm9kZSB8fCB2YWx1ZS5lbGVtZW50ICE9PSBwcmV2aW91cy5lbGVtZW50IHx8IGlzQ2hhbmdlVGhlbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlQ2xhc3MoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJpY2h0ZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdNYXNrRygpO1xuICAgICAgICAgICAgdGhpcy5kcmF3RXh0ZW5kKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdRdWlja0luc2VydCgpO1xuICAgICAgICAgICAgdGhpcy5kcmF3RW1vamlzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNTYW1lU2VsZWN0ZWQgPSB2YWx1ZS5zZWxlY3RlZCA9PT0gcHJldmlvdXMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBoYXNTYW1lUGFyZW50ID0gdmFsdWUucGFyZW50ID09PSBwcmV2aW91cy5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAoIWhhc1NhbWVTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc1NhbWVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3RW1vamlzKCkge1xuICAgICAgICBjb25zdCBnID0gdGhpcy5lbW9qaXNEcmF3ZXIuZHJhd0Vtb2ppcyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBpZiAoZykge1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZChnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdRdWlja0luc2VydCgpIHtcbiAgICAgICAgdGhpcy5xdWlja0luc2VydERyYXdlci5kZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyLmNhbkRyYXcodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuZHJhdyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGhhc0FmdGVyRHJhdyh0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuYWZ0ZXJEcmF3KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVuZEc/LmFwcGVuZENoaWxkKGcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd1NoYXBlKCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTaGFwZSgpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IGdldFNoYXBlQnlFbGVtZW50KHRoaXMuYm9hcmQsIHRoaXMubm9kZS5vcmlnaW4pIGFzIE1pbmRFbGVtZW50U2hhcGU7XG4gICAgICAgIHN3aXRjaCAoc2hhcGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWluZEVsZW1lbnRTaGFwZS5yb3VuZFJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLmJvYXJkLCB0aGlzLm5vZGUgYXMgTWluZE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZy5wcmVwZW5kKHRoaXMuc2hhcGVHKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95U2hhcGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNoYXBlRykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZUcucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnNoYXBlRyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3TGluaygpIHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMubGlua0cpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQocGFyZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHRoaXMubm9kZS5vcmlnaW4pKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtHID0gZHJhd0Fic3RyYWN0TGluayh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIGlzSG9yaXpvbnRhbExheW91dChsYXlvdXQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cgPSBkcmF3TGluayh0aGlzLmJvYXJkLCBwYXJlbnROb2RlLCB0aGlzLm5vZGUsIGlzSG9yaXpvbnRhbExheW91dChsYXlvdXQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmcuYXBwZW5kKHRoaXMubGlua0cpO1xuICAgIH1cblxuICAgIGRlc3Ryb3lMaW5lKCkge1xuICAgICAgICBpZiAodGhpcy5saW5rRykge1xuICAgICAgICAgICAgdGhpcy5saW5rRy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdNYXNrRygpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95TWFza0coKTtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoT2Zmc2V0ID0gMjtcbiAgICAgICAgY29uc3QgZXh0ZW5kT2Zmc2V0ID0gMTU7XG4gICAgICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQodGhpcy5ub2RlLm9yaWdpbikgYXMgTWluZExheW91dFR5cGU7XG4gICAgICAgIGNvbnN0IGlzVG9wID0gaXNUb3BMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgIGNvbnN0IGlzUmlnaHQgPSBpc1JpZ2h0TGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc0JvdHRvbSA9IGlzQm90dG9tTGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc0xlZnQgPSBpc0xlZnRMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHRoaXMubm9kZSBhcyBNaW5kTm9kZSk7XG5cbiAgICAgICAgbGV0IGRyYXdYID0geDtcbiAgICAgICAgbGV0IGRyYXdZID0geTtcbiAgICAgICAgbGV0IGRyYXdXaWR0aCA9IHggKyB3aWR0aDtcbiAgICAgICAgbGV0IGRyYXdIZWlnaHQgPSB5ICsgaGVpZ2h0O1xuXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBpc1RvcDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gZXh0ZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaXNCb3R0b206XG4gICAgICAgICAgICAgICAgZHJhd1ggPSB4IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdZID0geSAtIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3V2lkdGggPSB4ICsgd2lkdGggKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd0hlaWdodCA9IHkgKyBoZWlnaHQgKyBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGlzTGVmdDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaXNSaWdodDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGV4dGVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hc2tHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgdGhpcy5yb3VnaFNWRyBhcyBSb3VnaFNWRyxcbiAgICAgICAgICAgIGRyYXdYLFxuICAgICAgICAgICAgZHJhd1ksXG4gICAgICAgICAgICBkcmF3V2lkdGgsXG4gICAgICAgICAgICBkcmF3SGVpZ2h0LFxuICAgICAgICAgICAgeyBzdHJva2U6ICdub25lJywgZmlsbDogJ3JnYmEoMjU1LDI1NSwyNTUsMCknLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYXNrRy5jbGFzc0xpc3QuYWRkKCdtYXNrJyk7XG4gICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLm1hc2tHKTtcblxuICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkTWFza0coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLm1hc2tHLCAnbW91c2VlbnRlcicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKSAmJiAhdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkICYmICF0aGlzLmhhbmRBY3RpdmU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QuYWRkKCdob3ZlcmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMubWFza0csICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaXRCb2FyZC5pc0ZvY3VzKHRoaXMuYm9hcmQpICYmICF0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95TWFza0coKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2tHKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tHLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5nLmNsYXNzTGlzdC5yZW1vdmUoJ2hvdmVyZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZU1hc2tHKCkge1xuICAgICAgICBpZiAodGhpcy5tYXNrRykge1xuICAgICAgICAgICAgdGhpcy5tYXNrRy5zZXRBdHRyaWJ1dGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzYWJsZWRNYXNrRygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFza0cpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd0FjdGl2ZUcoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUFjdGl2ZUcoKTtcbiAgICAgICAgdGhpcy5hYnN0cmFjdEluY2x1ZGVkT3V0bGluZUc/LnJlbW92ZSgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHRoaXMuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUodGhpcy5ub2RlIGFzIE1pbmROb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU3Ryb2tlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICB0aGlzLnJvdWdoU1ZHIGFzIFJvdWdoU1ZHLFxuICAgICAgICAgICAgICAgIHggLSAyLFxuICAgICAgICAgICAgICAgIHkgLSAyLFxuICAgICAgICAgICAgICAgIHggKyB3aWR0aCArIDIsXG4gICAgICAgICAgICAgICAgeSArIGhlaWdodCArIDIsXG4gICAgICAgICAgICAgICAgeyBzdHJva2U6IFBSSU1BUllfQ09MT1IsIHN0cm9rZVdpZHRoOiAyLCBmaWxsOiAnJyB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyDlvbHlk40gbWFzayDnp7vlhaXnp7vlh7rkuovku7ZcbiAgICAgICAgICAgIHNlbGVjdGVkU3Ryb2tlRy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZENoaWxkKHNlbGVjdGVkU3Ryb2tlRyk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUcucHVzaChzZWxlY3RlZFN0cm9rZUcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmljaHRleHRDb21wb25lbnRSZWY/Lmluc3RhbmNlLnBsYWl0UmVhZG9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEJhY2tncm91bmRHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdWdoU1ZHIGFzIFJvdWdoU1ZHLFxuICAgICAgICAgICAgICAgICAgICB4IC0gMixcbiAgICAgICAgICAgICAgICAgICAgeSAtIDIsXG4gICAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCArIDIsXG4gICAgICAgICAgICAgICAgICAgIHkgKyBoZWlnaHQgKyAyLFxuICAgICAgICAgICAgICAgICAgICB7IHN0cm9rZTogUFJJTUFSWV9DT0xPUiwgZmlsbDogUFJJTUFSWV9DT0xPUiwgZmlsbFN0eWxlOiAnc29saWQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQmFja2dyb3VuZEcuc3R5bGUub3BhY2l0eSA9ICcwLjE1JztcbiAgICAgICAgICAgICAgICAvLyDlvbHlk43lj4zlh7vkuovku7ZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRHLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5nLmFwcGVuZENoaWxkKHNlbGVjdGVkQmFja2dyb3VuZEcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRy5wdXNoKHNlbGVjdGVkQmFja2dyb3VuZEcsIHNlbGVjdGVkU3Ryb2tlRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QWN0aXZlRygpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVHLmZvckVhY2goZyA9PiBnLnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5hY3RpdmVHID0gW107XG4gICAgfVxuXG4gICAgdXBkYXRlQWN0aXZlQ2xhc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyMi5hZGRDbGFzcyh0aGlzLmcsICdhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyMi5yZW1vdmVDbGFzcyh0aGlzLmcsICdhY3RpdmUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdSaWNodGV4dCgpIHtcbiAgICAgICAgY29uc3QgeyByaWNodGV4dEcsIHJpY2h0ZXh0Q29tcG9uZW50UmVmLCBmb3JlaWduT2JqZWN0IH0gPSBkcmF3VG9waWNCeU5vZGUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmID0gcmljaHRleHRDb21wb25lbnRSZWY7XG4gICAgICAgIHRoaXMucmljaHRleHRHID0gcmljaHRleHRHO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QgPSBmb3JlaWduT2JqZWN0O1xuICAgICAgICB0aGlzLnJlbmRlcjIuYWRkQ2xhc3MocmljaHRleHRHLCAncmljaHRleHQnKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZChyaWNodGV4dEcpO1xuICAgIH1cblxuICAgIGRyYXdFeHRlbmQoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUV4dGVuZCgpO1xuICAgICAgICAvLyBjcmVhdGUgZXh0ZW5kXG4gICAgICAgIHRoaXMuZXh0ZW5kRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgY29uc3QgY29sbGFwc2VHID0gY3JlYXRlRygpO1xuICAgICAgICB0aGlzLmV4dGVuZEcuY2xhc3NMaXN0LmFkZCgnZXh0ZW5kJyk7XG4gICAgICAgIGNvbGxhcHNlRy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZS1jb250YWluZXInKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLmV4dGVuZEcpO1xuICAgICAgICB0aGlzLmV4dGVuZEcuYXBwZW5kKGNvbGxhcHNlRyk7XG4gICAgICAgIGlmICh0aGlzLm5vZGUub3JpZ2luLmlzUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGludGVyYWN0aXZlXG4gICAgICAgIGZyb21FdmVudChjb2xsYXBzZUcsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5oYW5kQWN0aXZlIHx8ICEhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KHRoaXMuYm9hcmQpKSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9ICF0aGlzLm5vZGUub3JpZ2luLmlzQ29sbGFwc2VkO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ6IFBhcnRpYWw8TWluZEVsZW1lbnQ+ID0geyBpc0NvbGxhcHNlZCB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKHRoaXMuYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUodGhpcy5ub2RlKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlID0gZ2V0QnJhbmNoQ29sb3JCeU1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJyYW5jaFdpZHRoID0gZ2V0QnJhbmNoV2lkdGhCeU1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGV4dGVuZFkgPSB5ICsgaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3Qgbm9kZUxheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcblxuICAgICAgICBsZXQgZXh0ZW5kTGluZVhZID0gW1xuICAgICAgICAgICAgW3ggKyB3aWR0aCwgZXh0ZW5kWV0sXG4gICAgICAgICAgICBbeCArIHdpZHRoICsgRVhURU5EX09GRlNFVCwgZXh0ZW5kWV1cbiAgICAgICAgXTtcblxuICAgICAgICBsZXQgYXJyb3dZT2Zmc2V0ID0gWy00LCAxLCAtMC42LCA0XTtcbiAgICAgICAgbGV0IGFycm93WE9mZnNldCA9IFsxMCwgNS41LCA1LjUsIDEwXTtcblxuICAgICAgICBsZXQgZXh0ZW5kTGluZVhPZmZzZXQgPSBbMCwgMF07XG4gICAgICAgIGxldCBleHRlbmRMaW5lWU9mZnNldCA9IFswLCAwXTtcblxuICAgICAgICBsZXQgY2lyY2xlT2Zmc2V0ID0gW0VYVEVORF9SQURJVVMgLyAyLCAwXTtcblxuICAgICAgICBpZiAoaXNIb3Jpem9udGFsTGF5b3V0KG5vZGVMYXlvdXQpICYmICFpc0luZGVudGVkTGF5b3V0KG5vZGVMYXlvdXQpKSB7XG4gICAgICAgICAgICBleHRlbmRMaW5lWU9mZnNldCA9XG4gICAgICAgICAgICAgICAgKGdldFNoYXBlQnlFbGVtZW50KHRoaXMuYm9hcmQsIHRoaXMubm9kZS5vcmlnaW4pIGFzIE1pbmRFbGVtZW50U2hhcGUpID09PSBNaW5kRWxlbWVudFNoYXBlLnJvdW5kUmVjdGFuZ2xlXG4gICAgICAgICAgICAgICAgICAgID8gWzAsIDBdXG4gICAgICAgICAgICAgICAgICAgIDogW2hlaWdodCAvIDIsIGhlaWdodCAvIDJdO1xuICAgICAgICAgICAgaWYgKGlzTGVmdExheW91dChub2RlTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIC8v5bemXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoLCAtd2lkdGggLSBFWFRFTkRfT0ZGU0VUICogMl07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWy1FWFRFTkRfUkFESVVTIC8gMiwgMF07XG4gICAgICAgICAgICAgICAgYXJyb3dYT2Zmc2V0ID0gWy0xMCwgLTUuNSwgLTUuNSwgLTEwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycm93WE9mZnNldCA9IFstNCwgMC42LCAtMSwgNF07XG4gICAgICAgICAgICBpZiAoaXNUb3BMYXlvdXQobm9kZUxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAvL+S4ilxuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVYT2Zmc2V0ID0gWy13aWR0aCAvIDIsIC13aWR0aCAvIDIgLSBFWFRFTkRfT0ZGU0VUXTtcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWU9mZnNldCA9IFstaGVpZ2h0IC8gMiwgLWhlaWdodCAvIDIgLSBFWFRFTkRfT0ZGU0VUXTtcbiAgICAgICAgICAgICAgICBhcnJvd1lPZmZzZXQgPSBbLTEwLCAtNS41LCAtNS41LCAtMTBdO1xuICAgICAgICAgICAgICAgIGNpcmNsZU9mZnNldCA9IFswLCAtRVhURU5EX1JBRElVUyAvIDJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL+S4i1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVYT2Zmc2V0ID0gWy13aWR0aCAvIDIsIC13aWR0aCAvIDIgLSBFWFRFTkRfT0ZGU0VUXTtcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWU9mZnNldCA9IFtoZWlnaHQgLyAyLCBoZWlnaHQgLyAyICsgRVhURU5EX09GRlNFVF07XG4gICAgICAgICAgICAgICAgYXJyb3dZT2Zmc2V0ID0gWzEwLCA1LjUsIDUuNSwgMTBdO1xuICAgICAgICAgICAgICAgIGNpcmNsZU9mZnNldCA9IFswLCBFWFRFTkRfUkFESVVTIC8gMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmRMaW5lWFkgPSBbXG4gICAgICAgICAgICBbZXh0ZW5kTGluZVhZWzBdWzBdICsgZXh0ZW5kTGluZVhPZmZzZXRbMF0sIGV4dGVuZExpbmVYWVswXVsxXSArIGV4dGVuZExpbmVZT2Zmc2V0WzBdXSxcbiAgICAgICAgICAgIFtleHRlbmRMaW5lWFlbMV1bMF0gKyBleHRlbmRMaW5lWE9mZnNldFsxXSwgZXh0ZW5kTGluZVhZWzFdWzFdICsgZXh0ZW5kTGluZVlPZmZzZXRbMV1dXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZXh0ZW5kTGluZSA9IHRoaXMucm91Z2hTVkcubGluZShleHRlbmRMaW5lWFlbMF1bMF0sIGV4dGVuZExpbmVYWVswXVsxXSwgZXh0ZW5kTGluZVhZWzFdWzBdLCBleHRlbmRMaW5lWFlbMV1bMV0sIHtcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBicmFuY2hXaWR0aCxcbiAgICAgICAgICAgIHN0cm9rZVxuICAgICAgICB9KTtcblxuICAgICAgICAvL+e7mOWItueureWktFxuICAgICAgICBjb25zdCBoaWRlQXJyb3dUb3BMaW5lID0gdGhpcy5yb3VnaFNWRy5saW5lKFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgYXJyb3dYT2Zmc2V0WzBdLFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzFdICsgYXJyb3dZT2Zmc2V0WzBdLFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgYXJyb3dYT2Zmc2V0WzFdLFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzFdICsgYXJyb3dZT2Zmc2V0WzFdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBoaWRlQXJyb3dCb3R0b21MaW5lID0gdGhpcy5yb3VnaFNWRy5saW5lKFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgYXJyb3dYT2Zmc2V0WzJdLFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzFdICsgYXJyb3dZT2Zmc2V0WzJdLFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgYXJyb3dYT2Zmc2V0WzNdLFxuICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzFdICsgYXJyb3dZT2Zmc2V0WzNdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLm5vZGUub3JpZ2luLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBiYWRnZSA9IHRoaXMucm91Z2hTVkcuY2lyY2xlKGV4dGVuZExpbmVYWVsxXVswXSArIGNpcmNsZU9mZnNldFswXSwgZXh0ZW5kTGluZVhZWzFdWzFdICsgY2lyY2xlT2Zmc2V0WzFdLCBFWFRFTkRfUkFESVVTLCB7XG4gICAgICAgICAgICAgICAgZmlsbDogc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsZXQgbnVtYmVyT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGlmIChnZXRDaGlsZHJlbkNvdW50KHRoaXMubm9kZS5vcmlnaW4pID49IDEwKSBudW1iZXJPZmZzZXQgPSAtMjtcbiAgICAgICAgICAgIGlmIChnZXRDaGlsZHJlbkNvdW50KHRoaXMubm9kZS5vcmlnaW4pID09PSAxKSBudW1iZXJPZmZzZXQgPSAxO1xuXG4gICAgICAgICAgICBjb25zdCBiYWRnZVRleHQgPSBjcmVhdGVUZXh0KFxuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVYWVsxXVswXSArIGNpcmNsZU9mZnNldFswXSAtIDQgKyBudW1iZXJPZmZzZXQsXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzFdICsgY2lyY2xlT2Zmc2V0WzFdICsgNCxcbiAgICAgICAgICAgICAgICBzdHJva2UsXG4gICAgICAgICAgICAgICAgYCR7Z2V0Q2hpbGRyZW5Db3VudCh0aGlzLm5vZGUub3JpZ2luKX1gXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LmFkZCgnY29sbGFwc2VkJyk7XG4gICAgICAgICAgICBiYWRnZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ29wYWNpdHk6IDAuMTUnKTtcbiAgICAgICAgICAgIGJhZGdlVGV4dC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogMTJweCcpO1xuICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGJhZGdlKTtcbiAgICAgICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChiYWRnZVRleHQpO1xuICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGV4dGVuZExpbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nLmNsYXNzTGlzdC5yZW1vdmUoJ2NvbGxhcHNlZCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5vcmlnaW4uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpZGVDaXJjbGVHID0gdGhpcy5yb3VnaFNWRy5jaXJjbGUoXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZExpbmVYWVsxXVswXSArIGNpcmNsZU9mZnNldFswXSxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzFdICsgY2lyY2xlT2Zmc2V0WzFdLFxuICAgICAgICAgICAgICAgICAgICBFWFRFTkRfUkFESVVTIC0gMSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGJyYW5jaFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChoaWRlQ2lyY2xlRyk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVBcnJvd1RvcExpbmUpO1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChoaWRlQXJyb3dCb3R0b21MaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lFeHRlbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4dGVuZEcpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kRy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lSaWNodGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMucmljaHRleHRHKSB7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Ry5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yaWNodGV4dENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVBYnN0cmFjdEluY2x1ZGVkT3V0bGluZShhY3RpdmVIYW5kbGVQb3NpdGlvbj86IEFic3RyYWN0SGFuZGxlUG9zaXRpb24sIHJlc2l6aW5nTG9jYXRpb24/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hYnN0cmFjdEluY2x1ZGVkT3V0bGluZUc/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRyA9IGRyYXdBYnN0cmFjdEluY2x1ZGVkT3V0bGluZShcbiAgICAgICAgICAgIHRoaXMuYm9hcmQsXG4gICAgICAgICAgICB0aGlzLnJvdWdoU1ZHLFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LFxuICAgICAgICAgICAgYWN0aXZlSGFuZGxlUG9zaXRpb24sXG4gICAgICAgICAgICByZXNpemluZ0xvY2F0aW9uXG4gICAgICAgICk7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0SG9zdCh0aGlzLmJvYXJkKS5hcHBlbmQodGhpcy5hYnN0cmFjdEluY2x1ZGVkT3V0bGluZUcpO1xuICAgIH1cblxuICAgIHVwZGF0ZVJpY2h0ZXh0KCkge1xuICAgICAgICB1cGRhdGVSaWNoVGV4dCh0aGlzLm5vZGUub3JpZ2luLmRhdGEudG9waWMsIHRoaXMucmljaHRleHRDb21wb25lbnRSZWYhKTtcbiAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICB9XG5cbiAgICBzdGFydEVkaXRUZXh0KGlzRW5kOiBib29sZWFuLCBpc0NsZWFyOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmRlZmluZWQgcmljaHRleHRDb21wb25lbnRSZWYnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByaWNodGV4dEluc3RhbmNlID0gdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgICAgICB0aGlzLmlzRWRpdGFibGUgPSB0cnVlO1xuICAgICAgICBJU19URVhUX0VESVRBQkxFLnNldCh0aGlzLmJvYXJkLCB0cnVlKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZE1hc2tHKCk7XG4gICAgICAgIHVwZGF0ZU1pbmROb2RlVG9waWNTaXplKHRoaXMuYm9hcmQsIHRoaXMubm9kZSwgdGhpcy5yaWNodGV4dEcgYXMgU1ZHR0VsZW1lbnQsIHRoaXMuaXNFZGl0YWJsZSk7XG4gICAgICAgIGlmIChyaWNodGV4dEluc3RhbmNlLnBsYWl0UmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGlzRW5kID8gRWRpdG9yLmVuZChyaWNodGV4dEluc3RhbmNlLmVkaXRvciwgWzBdKSA6IFswXTtcbiAgICAgICAgICAgIHNldEZ1bGxTZWxlY3Rpb25BbmRGb2N1cyhyaWNodGV4dEluc3RhbmNlLmVkaXRvciwgbG9jYXRpb24pO1xuICAgICAgICAgICAgaWYgKGlzQ2xlYXIpIHtcbiAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQocmljaHRleHRJbnN0YW5jZS5lZGl0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIGludmFsaWQgd2lkdGggYW5kIGhlaWdodCAob2xkIGRhdGEpXG4gICAgICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSaWNodGV4dENvbnRlbnRTaXplKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdGFibGUpO1xuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSB0aGlzLmVsZW1lbnQud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLmVsZW1lbnQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0VG9waWNTaXplKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJpY2h0ZXh0ID0gcmljaHRleHRJbnN0YW5jZS5wbGFpdFZhbHVlO1xuICAgICAgICAvLyB1c2UgZGVib3VuY2VUaW1lIHRvIHdhaXQgRE9NIHJlbmRlciBjb21wbGV0ZVxuICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZSQgPSByaWNodGV4dEluc3RhbmNlLnBsYWl0Q2hhbmdlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+H5ruk5o6JIG9wZXJhdGlvbnMg5Lit5YWo5pivIHNldF9zZWxlY3Rpb24g55qE5pON5L2cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhZXZlbnQub3BlcmF0aW9ucy5ldmVyeShvcCA9PiBPcGVyYXRpb24uaXNTZWxlY3Rpb25PcGVyYXRpb24ob3ApKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJpY2h0ZXh0ID09PSBldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmljaHRleHQoKTtcbiAgICAgICAgICAgICAgICAvLyDmm7TmlrDlr4zmlofmnKzjgIHmm7TmlrDlrr3pq5hcbiAgICAgICAgICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSaWNodGV4dENvbnRlbnRTaXplKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdGFibGUpO1xuICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldFRvcGljKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCwgZXZlbnQudmFsdWUsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvc2l0aW9uJCA9IHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRDb21wb3NpdGlvbi5waXBlKGRlYm91bmNlVGltZSgwKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAod2lkdGggPCBOT0RFX01JTl9XSURUSCkge1xuICAgICAgICAgICAgICAgIHdpZHRoID0gTk9ERV9NSU5fV0lEVEg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDb21wb3NpbmcgJiYgKHdpZHRoICE9PSB0aGlzLm5vZGUub3JpZ2luLndpZHRoIHx8IGhlaWdodCAhPT0gdGhpcy5ub2RlLm9yaWdpbi5oZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RWxlbWVudDogUGFydGlhbDxNaW5kRWxlbWVudD4gPSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCAvIHRoaXMuYm9hcmQudmlld3BvcnQuem9vbSxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyB0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb21cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKHRoaXMuYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbW91c2Vkb3duJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQodGhpcy5ib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QodGhpcy5ib2FyZCkpKTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrSW5Ob2RlID0gaXNIaXRNaW5kRWxlbWVudCh0aGlzLmJvYXJkLCBwb2ludCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChjbGlja0luTm9kZSAmJiAhaGFzRWRpdGFibGVUYXJnZXQocmljaHRleHRJbnN0YW5jZS5lZGl0b3IsIGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghY2xpY2tJbk5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgY29tcG9zaXRpb24gaW5wdXQgc3RhdGUsIGxpa2U6IENoaW5lc2UgSU1FIENvbXBvc2l0aW9uIElucHV0XG4gICAgICAgICAgICAgICAgdGltZXIoMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhpdEhhbmRsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZU1hc2tHKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlZGl0b3IgPSByaWNodGV4dEluc3RhbmNlLmVkaXRvcjtcbiAgICAgICAgY29uc3QgeyBrZXlkb3duIH0gPSBlZGl0b3I7XG4gICAgICAgIGVkaXRvci5rZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZXhpdEhhbmRsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZU1hc2tHKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV4aXRIYW5kbGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVNYXNrRygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3QWN0aXZlRygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd01hc2tHKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGV4aXRIYW5kbGUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHVuc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2UkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgY29tcG9zaXRpb24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgbW91c2Vkb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5rZXlkb3duID0ga2V5ZG93bjsgLy8gcmVzZXQga2V5ZG93blxuICAgICAgICAgICAgICAgIC8vIGVkaXRhYmxlIHN0YXR1c1xuICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICByaWNodGV4dEluc3RhbmNlLnBsYWl0UmVhZG9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmljaHRleHRDb21wb25lbnRSZWY/LmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHVwZGF0ZU1pbmROb2RlVG9waWNTaXplKHRoaXMuYm9hcmQsIHRoaXMubm9kZSwgdGhpcy5yaWNodGV4dEcgYXMgU1ZHR0VsZW1lbnQsIHRoaXMuaXNFZGl0YWJsZSk7XG4gICAgICAgICAgICAgICAgSVNfVEVYVF9FRElUQUJMRS5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBub2RlOiBNaW5kTm9kZSkgPT4ge1xuICAgICAgICByZXR1cm4gbm9kZS5vcmlnaW4uaWQ7XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRz8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveVJpY2h0ZXh0KCk7XG4gICAgICAgIHRoaXMuZW1vamlzRHJhd2VyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgaWYgKEVMRU1FTlRfVE9fTk9ERS5nZXQodGhpcy5lbGVtZW50KSA9PT0gdGhpcy5ub2RlKSB7XG4gICAgICAgICAgICBFTEVNRU5UX1RPX05PREUuZGVsZXRlKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { PlaitBoard, Transforms, getSelectedElements } from '@plait/core';
2
+ import { MindElement, PlaitMind } from '../interfaces';
3
+ import { isKeyHotkey } from 'is-hotkey';
4
+ export const withMindHotkey = (board) => {
5
+ const { keydown } = board;
6
+ board.keydown = (keyboardEvent) => {
7
+ if (!PlaitBoard.getMovingPoint(board)) {
8
+ return;
9
+ }
10
+ if (isExpandHotkey(keyboardEvent)) {
11
+ const selectedMindElements = getSelectedElements(board).filter(element => MindElement.isMindElement(board, element));
12
+ if (selectedMindElements.length === 1 &&
13
+ !PlaitMind.isMind(selectedMindElements[0]) &&
14
+ selectedMindElements[0].children &&
15
+ selectedMindElements[0].children.length > 0) {
16
+ const element = selectedMindElements[0];
17
+ Transforms.setNode(board, { isCollapsed: element.isCollapsed ? false : true }, PlaitBoard.findPath(board, element));
18
+ return;
19
+ }
20
+ }
21
+ keydown(keyboardEvent);
22
+ };
23
+ return board;
24
+ };
25
+ export const isExpandHotkey = (keyboardEvent) => {
26
+ return isKeyHotkey('mod+/', keyboardEvent);
27
+ };
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLWhvdGtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsdWdpbnMvd2l0aC1taW5kLWhvdGtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNoRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTFCLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxhQUE0QixFQUFFLEVBQUU7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBRUQsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDckUsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQzNCLENBQUM7WUFDbkIsSUFDSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDakMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO2dCQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDN0M7Z0JBQ0UsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDcEgsT0FBTzthQUNWO1NBQ0o7UUFFRCxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsYUFBNEIsRUFBRSxFQUFFO0lBQzNELE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBUcmFuc2Zvcm1zLCBnZXRTZWxlY3RlZEVsZW1lbnRzLCBob3RrZXlzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNLZXlIb3RrZXkgfSBmcm9tICdpcy1ob3RrZXknO1xuXG5leHBvcnQgY29uc3Qgd2l0aE1pbmRIb3RrZXkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IGtleWRvd24gfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQua2V5ZG93biA9IChrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludChib2FyZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0V4cGFuZEhvdGtleShrZXlib2FyZEV2ZW50KSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRNaW5kRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5maWx0ZXIoZWxlbWVudCA9PlxuICAgICAgICAgICAgICAgIE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpXG4gICAgICAgICAgICApIGFzIE1pbmRFbGVtZW50W107XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRNaW5kRWxlbWVudHMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgIVBsYWl0TWluZC5pc01pbmQoc2VsZWN0ZWRNaW5kRWxlbWVudHNbMF0pICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRNaW5kRWxlbWVudHNbMF0uY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1pbmRFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gc2VsZWN0ZWRNaW5kRWxlbWVudHNbMF07XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGlzQ29sbGFwc2VkOiBlbGVtZW50LmlzQ29sbGFwc2VkID8gZmFsc2UgOiB0cnVlIH0sIFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlkb3duKGtleWJvYXJkRXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFeHBhbmRIb3RrZXkgPSAoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBpc0tleUhvdGtleSgnbW9kKy8nLCBrZXlib2FyZEV2ZW50KTtcbn07XG4iXX0=
@@ -16,6 +16,8 @@ import { withMindExtend } from './with-mind-extend';
16
16
  import { TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node-topic-style';
17
17
  import { MindTransforms } from '../transforms';
18
18
  import { withCreateMind } from './with-mind-create';
19
+ import { DefaultAbstractNodeStyle } from '../constants/node-style';
20
+ import { withMindHotkey } from './with-mind-hotkey';
19
21
  export const withMind = (board) => {
20
22
  const { drawElement, dblclick, keydown, insertFragment, setFragment, deleteFragment, isHitSelection, getRectangle, isMovable, isRecursion } = board;
21
23
  board.drawElement = (context) => {
@@ -27,6 +29,20 @@ export const withMind = (board) => {
27
29
  }
28
30
  return drawElement(context);
29
31
  };
32
+ board.applyTheme = (element) => {
33
+ const mindElement = element;
34
+ const shouldClearProperty = !PlaitBoard.isBoard(element) && (mindElement?.branchColor || mindElement?.fill || mindElement?.strokeColor);
35
+ const isAbstract = AbstractNode.isAbstract(element);
36
+ if (shouldClearProperty) {
37
+ const path = PlaitBoard.findPath(board, element);
38
+ if (isAbstract) {
39
+ Transforms.setNode(board, { fill: null, strokeColor: DefaultAbstractNodeStyle.strokeColor, branchColor: DefaultAbstractNodeStyle.branchColor }, path);
40
+ }
41
+ else {
42
+ Transforms.setNode(board, { fill: null, strokeColor: null, branchColor: null }, path);
43
+ }
44
+ }
45
+ };
30
46
  board.getRectangle = element => {
31
47
  if (MindElement.isMindElement(board, element)) {
32
48
  return getRectangleByNode(MindElement.getNode(element));
@@ -204,6 +220,6 @@ export const withMind = (board) => {
204
220
  MindTransforms.removeElements(board, selectedElements);
205
221
  deleteFragment(data);
206
222
  };
207
- return withMindExtend(withCreateMind(withAbstract(withDnd(board))));
223
+ return withMindHotkey(withMindExtend(withCreateMind(withAbstract(withDnd(board)))));
208
224
  };
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy93aXRoLW1pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLFVBQVUsRUFDVixpQkFBaUIsRUFHakIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsY0FBYyxFQUNkLFVBQVUsRUFFVixtQkFBbUIsRUFDbkIsSUFBSSxFQUNQLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMsa0NBQWtDLEVBQ3JDLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8s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O1FBQzNFLE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNFLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFdkQsTUFBTSxJQUFJLEdBQUcsa0NBQWtDLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDekUsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwRCxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixPQUFPLGNBQWMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzLFxuICAgIGhvdGtleXMsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEhpc3RvcnlCb2FyZCxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICByZW1vdmVTZWxlY3RlZEVsZW1lbnQsXG4gICAgdG9Qb2ludCxcbiAgICB0cmFuc2Zvcm1Qb2ludCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIFJhbmdlLFxuICAgIGRlcHRoRmlyc3RSZWN1cnNpb24sXG4gICAgUGF0aFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXRTaXplQnlUZXh0IH0gZnJvbSAnQHBsYWl0L3JpY2h0ZXh0JztcbmltcG9ydCB7IE1pbmRFbGVtZW50LCBQbGFpdE1pbmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBsYWl0TWluZENvbXBvbmVudCB9IGZyb20gJy4uL21pbmQuY29tcG9uZW50JztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBpbnNlcnRNaW5kRWxlbWVudCxcbiAgICBnZXRGaXJzdExldmVsRWxlbWVudCxcbiAgICBpc0luUmlnaHRCcmFuY2hPZlN0YW5kYXJkTGF5b3V0LFxuICAgIGluc2VydEVsZW1lbnRIYW5kbGVBYnN0cmFjdCxcbiAgICBkZWxldGVFbGVtZW50SGFuZGxlQWJzdHJhY3QsXG4gICAgaW5zZXJ0RWxlbWVudEhhbmRsZVJpZ2h0Tm9kZUNvdW50LFxuICAgIGRlbGV0ZUVsZW1lbnRzSGFuZGxlUmlnaHROb2RlQ291bnRcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlLCBpc0hpdE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBpc1ZpcnR1YWxLZXkgfSBmcm9tICcuLi91dGlscy9pcy12aXJ0dWFsLWtleSc7XG5pbXBvcnQgeyB3aXRoRG5kIH0gZnJvbSAnLi93aXRoLW5vZGUtZG5kJztcbmltcG9ydCB7IGJ1aWxkQ2xpcGJvYXJkRGF0YSwgZ2V0RGF0YUZyb21DbGlwYm9hcmQsIGluc2VydENsaXBib2FyZERhdGEsIGluc2VydENsaXBib2FyZFRleHQsIHNldENsaXBib2FyZERhdGEgfSBmcm9tICcuLi91dGlscy9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgZmluZE5ld0NoaWxkTm9kZVBhdGgsIGZpbmROZXdTaWJsaW5nTm9kZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRoJztcbmltcG9ydCB7IGVudGVyTm9kZUVkaXRpbmcgfSBmcm9tICcuLi91dGlscy9ub2RlL2NvbW1vbic7XG5pbXBvcnQgeyB3aXRoQWJzdHJhY3QgfSBmcm9tICcuL3dpdGgtYWJzdHJhY3QtcmVzaXplJztcbmltcG9ydCB7IHdpdGhNaW5kRXh0ZW5kIH0gZnJvbSAnLi93aXRoLW1pbmQtZXh0ZW5kJztcbmltcG9ydCB7IFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQgfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZS10b3BpYy1zdHlsZSc7XG5pbXBvcnQgeyBNaW5kVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgd2l0aENyZWF0ZU1pbmQgfSBmcm9tICcuL3dpdGgtbWluZC1jcmVhdGUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aE1pbmQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGRyYXdFbGVtZW50LFxuICAgICAgICBkYmxjbGljayxcbiAgICAgICAga2V5ZG93bixcbiAgICAgICAgaW5zZXJ0RnJhZ21lbnQsXG4gICAgICAgIHNldEZyYWdtZW50LFxuICAgICAgICBkZWxldGVGcmFnbWVudCxcbiAgICAgICAgaXNIaXRTZWxlY3Rpb24sXG4gICAgICAgIGdldFJlY3RhbmdsZSxcbiAgICAgICAgaXNNb3ZhYmxlLFxuICAgICAgICBpc1JlY3Vyc2lvblxuICAgIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmRyYXdFbGVtZW50ID0gKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFBsYWl0TWluZENvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXRSZWN0YW5nbGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlQnlOb2RlKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmlzUmVjdXJzaW9uID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBlbGVtZW50KSAmJiBlbGVtZW50LmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUmVjdXJzaW9uKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc0hpdFNlbGVjdGlvbiA9IChlbGVtZW50LCByYW5nZTogUmFuZ2UpID0+IHtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGllbnQgPSBnZXRSZWN0YW5nbGVCeU5vZGUoTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdCA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdChSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3JhbmdlLmFuY2hvciwgcmFuZ2UuZm9jdXNdKSwgY2xpZW50KTtcbiAgICAgICAgICAgIHJldHVybiBpc0hpdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNIaXRTZWxlY3Rpb24oZWxlbWVudCwgcmFuZ2UpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc01vdmFibGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCkgJiYgZWxlbWVudC5pc1Jvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc01vdmFibGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGtleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBNaW5kRWxlbWVudFtdO1xuICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdUYWInIHx8XG4gICAgICAgICAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIXNlbGVjdGVkRWxlbWVudHNbMF0uaXNSb290ICYmICFBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChzZWxlY3RlZEVsZW1lbnRzWzBdKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHNbMF07XG4gICAgICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ6IFBhcnRpYWw8TWluZEVsZW1lbnQ+ID0geyBpc0NvbGxhcHNlZDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFBsYWl0SGlzdG9yeUJvYXJkLndpdGhvdXRTYXZpbmcoYm9hcmQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHNlbGVjdGVkRWxlbWVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TWluZEVsZW1lbnQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudCwgZmluZE5ld0NoaWxkTm9kZVBhdGgoYm9hcmQsIHNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0luUmlnaHRCcmFuY2hPZlN0YW5kYXJkTGF5b3V0KHNlbGVjdGVkRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnMgPSBpbnNlcnRFbGVtZW50SGFuZGxlUmlnaHROb2RlQ291bnQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudFBhdGguc2xpY2UoMCwgMSksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0UmlnaHROb2RlQ291bnRCeVJlZnMoYm9hcmQsIHJlZnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJzdHJhY3RSZWZzID0gaW5zZXJ0RWxlbWVudEhhbmRsZUFic3RyYWN0KGJvYXJkLCBQYXRoLm5leHQoc2VsZWN0ZWRFbGVtZW50UGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRBYnN0cmFjdHNCeVJlZnMoYm9hcmQsIGFic3RyYWN0UmVmcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TWluZEVsZW1lbnQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudCwgZmluZE5ld1NpYmxpbmdOb2RlUGF0aChib2FyZCwgc2VsZWN0ZWRFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChob3RrZXlzLmlzRGVsZXRlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNEZWxldGVGb3J3YXJkKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBnZXRGaXJzdExldmVsRWxlbWVudChzZWxlY3RlZEVsZW1lbnRzKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzdHJhY3RSZWZzID0gZGVsZXRlRWxlbWVudEhhbmRsZUFic3RyYWN0KGJvYXJkLCBkZWxldGFibGVFbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0QWJzdHJhY3RzQnlSZWZzKGJvYXJkLCBhYnN0cmFjdFJlZnMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVmcyA9IGRlbGV0ZUVsZW1lbnRzSGFuZGxlUmlnaHROb2RlQ291bnQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldFJpZ2h0Tm9kZUNvdW50QnlSZWZzKGJvYXJkLCByZWZzKTtcblxuICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnJlbW92ZUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVFbGVtZW50OiBNaW5kRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdExldmVsRWxlbWVudHMgPSBnZXRGaXJzdExldmVsRWxlbWVudChzZWxlY3RlZEVsZW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChmaXJzdExldmVsRWxlbWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IE1pbmRFbGVtZW50LmdldFBhcmVudChmaXJzdExldmVsRWxlbWVudHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50ID0gcGFyZW50LmNoaWxkcmVuW2ZpcnN0TGV2ZWxFbGVtZW50c1swXS5zdGFydF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gZmlyc3RMZXZlbEVsZW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudFBhcmVudCA9IE1pbmRFbGVtZW50LmZpbmRQYXJlbnQoZmlyc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNTYW1lUGFyZW50ID0gZmlyc3RMZXZlbEVsZW1lbnRzLmV2ZXJ5KGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWluZEVsZW1lbnQuZmluZFBhcmVudChlbGVtZW50KSA9PT0gZmlyc3RFbGVtZW50UGFyZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdEVsZW1lbnRQYXJlbnQgJiYgaGFzU2FtZVBhcmVudCAmJiAhYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnRJbmRleCA9IGZpcnN0RWxlbWVudFBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGZpcnN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuQ291bnQgPSBmaXJzdEVsZW1lbnRQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAvLyBhY3RpdmUgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuQ291bnQgPT09IGZpcnN0TGV2ZWxFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRQYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudCA9IGZpcnN0RWxlbWVudFBhcmVudC5jaGlsZHJlbltmaXJzdEVsZW1lbnRJbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgYWN0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8gZW50ZXIgZWRpdCBzdGF0dXNcbiAgICAgICAgICAgIGlmICghaXNWaXJ0dWFsS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50c1swXTtcbiAgICAgICAgICAgICAgICBlbnRlck5vZGVFZGl0aW5nKHNlbGVjdGVkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvYXJkLnNlbGVjdGlvbiAmJiBldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5ZG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmRibGNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBkYmxjbGljayhldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgIGJvYXJkLmNoaWxkcmVuXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IFBsYWl0TWluZC5pc01pbmQodmFsdWUpKVxuICAgICAgICAgICAgLmZvckVhY2gobWluZE1hcCA9PiB7XG4gICAgICAgICAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxNaW5kRWxlbWVudD4oXG4gICAgICAgICAgICAgICAgICAgIG1pbmRNYXAgYXMgTWluZEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkgJiYgaXNIaXRNaW5kRWxlbWVudChib2FyZCwgcG9pbnQsIG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRibGNsaWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuc2V0RnJhZ21lbnQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0Rmlyc3RMZXZlbEVsZW1lbnQoZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgTWluZEVsZW1lbnRbXSk7XG4gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBidWlsZENsaXBib2FyZERhdGEoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YShkYXRhLCBlbGVtZW50cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2V0RnJhZ21lbnQoZGF0YSk7XG4gICAgfTtcblxuICAgIGJvYXJkLmluc2VydEZyYWdtZW50ID0gKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwsIHRhcmdldFBvaW50PzogUG9pbnQpID0+IHtcbiAgICAgICAgaWYgKGJvYXJkLm9wdGlvbnMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIGluc2VydEZyYWdtZW50KGRhdGEsIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0RGF0YUZyb21DbGlwYm9hcmQoZGF0YSk7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGluc2VydENsaXBib2FyZERhdGEoYm9hcmQsIGVsZW1lbnRzLCB0YXJnZXRQb2ludCB8fCBbMCwgMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/LmdldERhdGEoYHRleHQvcGxhaW5gKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFNpemVCeVRleHQoXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpLnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgIGlmICh0ZXh0ICYmIHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaW5zZXJ0Q2xpcGJvYXJkVGV4dChib2FyZCwgc2VsZWN0ZWRFbGVtZW50c1swXSwgdGV4dCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0RnJhZ21lbnQoZGF0YSwgdGFyZ2V0UG9pbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5kZWxldGVGcmFnbWVudCA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBNaW5kRWxlbWVudFtdO1xuICAgICAgICBjb25zdCBkZWxldGFibGVFbGVtZW50cyA9IGdldEZpcnN0TGV2ZWxFbGVtZW50KHNlbGVjdGVkRWxlbWVudHMpLnJldmVyc2UoKTtcbiAgICAgICAgY29uc3QgYWJzdHJhY3RSZWZzID0gZGVsZXRlRWxlbWVudEhhbmRsZUFic3RyYWN0KGJvYXJkLCBkZWxldGFibGVFbGVtZW50cyk7XG4gICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldEFic3RyYWN0c0J5UmVmcyhib2FyZCwgYWJzdHJhY3RSZWZzKTtcblxuICAgICAgICBjb25zdCByZWZzID0gZGVsZXRlRWxlbWVudHNIYW5kbGVSaWdodE5vZGVDb3VudChib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldFJpZ2h0Tm9kZUNvdW50QnlSZWZzKGJvYXJkLCByZWZzKTtcblxuICAgICAgICBNaW5kVHJhbnNmb3Jtcy5yZW1vdmVFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgIGRlbGV0ZUZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gd2l0aE1pbmRFeHRlbmQod2l0aENyZWF0ZU1pbmQod2l0aEFic3RyYWN0KHdpdGhEbmQoYm9hcmQpKSkpO1xufTtcbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy93aXRoLW1pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLFVBQVUsRUFDVixpQkFBaUIsRUFHakIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsY0FBYyxFQUNkLFVBQVUsRUFFVixtQkFBbUIsRUFDbkIsSUFBSSxFQUVQLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMsa0NBQWtDLEVBQ3JDLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8s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R0FBRyxrQ0FBa0MsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RSxjQUFjLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBELGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE9BQU8sY0FBYyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50LFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgaG90a2V5cyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0SGlzdG9yeUJvYXJkLFxuICAgIFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIHJlbW92ZVNlbGVjdGVkRWxlbWVudCxcbiAgICB0b1BvaW50LFxuICAgIHRyYW5zZm9ybVBvaW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgUmFuZ2UsXG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbixcbiAgICBQYXRoLFxuICAgIFBsYWl0RWxlbWVudFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXRTaXplQnlUZXh0IH0gZnJvbSAnQHBsYWl0L3JpY2h0ZXh0JztcbmltcG9ydCB7IE1pbmRFbGVtZW50LCBQbGFpdE1pbmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBsYWl0TWluZENvbXBvbmVudCB9IGZyb20gJy4uL21pbmQuY29tcG9uZW50JztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBpbnNlcnRNaW5kRWxlbWVudCxcbiAgICBnZXRGaXJzdExldmVsRWxlbWVudCxcbiAgICBpc0luUmlnaHRCcmFuY2hPZlN0YW5kYXJkTGF5b3V0LFxuICAgIGluc2VydEVsZW1lbnRIYW5kbGVBYnN0cmFjdCxcbiAgICBkZWxldGVFbGVtZW50SGFuZGxlQWJzdHJhY3QsXG4gICAgaW5zZXJ0RWxlbWVudEhhbmRsZVJpZ2h0Tm9kZUNvdW50LFxuICAgIGRlbGV0ZUVsZW1lbnRzSGFuZGxlUmlnaHROb2RlQ291bnRcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlLCBpc0hpdE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBpc1ZpcnR1YWxLZXkgfSBmcm9tICcuLi91dGlscy9pcy12aXJ0dWFsLWtleSc7XG5pbXBvcnQgeyB3aXRoRG5kIH0gZnJvbSAnLi93aXRoLW5vZGUtZG5kJztcbmltcG9ydCB7IGJ1aWxkQ2xpcGJvYXJkRGF0YSwgZ2V0RGF0YUZyb21DbGlwYm9hcmQsIGluc2VydENsaXBib2FyZERhdGEsIGluc2VydENsaXBib2FyZFRleHQsIHNldENsaXBib2FyZERhdGEgfSBmcm9tICcuLi91dGlscy9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgZmluZE5ld0NoaWxkTm9kZVBhdGgsIGZpbmROZXdTaWJsaW5nTm9kZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRoJztcbmltcG9ydCB7IGVudGVyTm9kZUVkaXRpbmcgfSBmcm9tICcuLi91dGlscy9ub2RlL2NvbW1vbic7XG5pbXBvcnQgeyB3aXRoQWJzdHJhY3QgfSBmcm9tICcuL3dpdGgtYWJzdHJhY3QtcmVzaXplJztcbmltcG9ydCB7IHdpdGhNaW5kRXh0ZW5kIH0gZnJvbSAnLi93aXRoLW1pbmQtZXh0ZW5kJztcbmltcG9ydCB7IFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQgfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZS10b3BpYy1zdHlsZSc7XG5pbXBvcnQgeyBNaW5kVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgd2l0aENyZWF0ZU1pbmQgfSBmcm9tICcuL3dpdGgtbWluZC1jcmVhdGUnO1xuaW1wb3J0IHsgRGVmYXVsdEFic3RyYWN0Tm9kZVN0eWxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL25vZGUtc3R5bGUnO1xuaW1wb3J0IHsgd2l0aE1pbmRIb3RrZXkgfSBmcm9tICcuL3dpdGgtbWluZC1ob3RrZXknO1xuXG5leHBvcnQgY29uc3Qgd2l0aE1pbmQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGRyYXdFbGVtZW50LFxuICAgICAgICBkYmxjbGljayxcbiAgICAgICAga2V5ZG93bixcbiAgICAgICAgaW5zZXJ0RnJhZ21lbnQsXG4gICAgICAgIHNldEZyYWdtZW50LFxuICAgICAgICBkZWxldGVGcmFnbWVudCxcbiAgICAgICAgaXNIaXRTZWxlY3Rpb24sXG4gICAgICAgIGdldFJlY3RhbmdsZSxcbiAgICAgICAgaXNNb3ZhYmxlLFxuICAgICAgICBpc1JlY3Vyc2lvblxuICAgIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmRyYXdFbGVtZW50ID0gKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFBsYWl0TWluZENvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG5cbiAgICBib2FyZC5hcHBseVRoZW1lID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBtaW5kRWxlbWVudCA9IGVsZW1lbnQgYXMgTWluZEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNob3VsZENsZWFyUHJvcGVydHkgPVxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNCb2FyZChlbGVtZW50KSAmJiAobWluZEVsZW1lbnQ/LmJyYW5jaENvbG9yIHx8IG1pbmRFbGVtZW50Py5maWxsIHx8IG1pbmRFbGVtZW50Py5zdHJva2VDb2xvcik7XG4gICAgICAgIGNvbnN0IGlzQWJzdHJhY3QgPSBBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KTtcbiAgICAgICAgaWYgKHNob3VsZENsZWFyUHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKGlzQWJzdHJhY3QpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoXG4gICAgICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgICAgICB7IGZpbGw6IG51bGwsIHN0cm9rZUNvbG9yOiBEZWZhdWx0QWJzdHJhY3ROb2RlU3R5bGUuc3Ryb2tlQ29sb3IsIGJyYW5jaENvbG9yOiBEZWZhdWx0QWJzdHJhY3ROb2RlU3R5bGUuYnJhbmNoQ29sb3IgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBmaWxsOiBudWxsLCBzdHJva2VDb2xvcjogbnVsbCwgYnJhbmNoQ29sb3I6IG51bGwgfSwgcGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYm9hcmQuZ2V0UmVjdGFuZ2xlID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5Tm9kZShNaW5kRWxlbWVudC5nZXROb2RlKGVsZW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc1JlY3Vyc2lvbiA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaXNNaW5kRWxlbWVudChib2FyZCwgZWxlbWVudCkgJiYgZWxlbWVudC5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1JlY3Vyc2lvbihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNIaXRTZWxlY3Rpb24gPSAoZWxlbWVudCwgcmFuZ2U6IFJhbmdlKSA9PiB7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkpO1xuICAgICAgICAgICAgY29uc3QgaXNIaXQgPSBSZWN0YW5nbGVDbGllbnQuaXNIaXQoUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtyYW5nZS5hbmNob3IsIHJhbmdlLmZvY3VzXSksIGNsaWVudCk7XG4gICAgICAgICAgICByZXR1cm4gaXNIaXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzSGl0U2VsZWN0aW9uKGVsZW1lbnQsIHJhbmdlKTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNNb3ZhYmxlID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChQbGFpdE1pbmQuaXNNaW5kKGVsZW1lbnQpICYmIGVsZW1lbnQuaXNSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNNb3ZhYmxlKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5rZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBrZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgTWluZEVsZW1lbnRbXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSAnVGFiJyB8fFxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFzZWxlY3RlZEVsZW1lbnRzWzBdLmlzUm9vdCAmJiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3Qoc2VsZWN0ZWRFbGVtZW50c1swXSkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkRWxlbWVudChib2FyZCwgc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50LmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50OiBQYXJ0aWFsPE1pbmRFbGVtZW50PiA9IHsgaXNDb2xsYXBzZWQ6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEhpc3RvcnlCb2FyZC53aXRob3V0U2F2aW5nKGJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBzZWxlY3RlZEVsZW1lbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluc2VydE1pbmRFbGVtZW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQsIGZpbmROZXdDaGlsZE5vZGVQYXRoKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJblJpZ2h0QnJhbmNoT2ZTdGFuZGFyZExheW91dChzZWxlY3RlZEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZzID0gaW5zZXJ0RWxlbWVudEhhbmRsZVJpZ2h0Tm9kZUNvdW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRQYXRoLnNsaWNlKDAsIDEpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldFJpZ2h0Tm9kZUNvdW50QnlSZWZzKGJvYXJkLCByZWZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic3RyYWN0UmVmcyA9IGluc2VydEVsZW1lbnRIYW5kbGVBYnN0cmFjdChib2FyZCwgUGF0aC5uZXh0KHNlbGVjdGVkRWxlbWVudFBhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0QWJzdHJhY3RzQnlSZWZzKGJvYXJkLCBhYnN0cmFjdFJlZnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGluc2VydE1pbmRFbGVtZW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQsIGZpbmROZXdTaWJsaW5nTm9kZVBhdGgoYm9hcmQsIHNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRGVsZXRlRm9yd2FyZChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0YWJsZUVsZW1lbnRzID0gZ2V0Rmlyc3RMZXZlbEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50cykucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFic3RyYWN0UmVmcyA9IGRlbGV0ZUVsZW1lbnRIYW5kbGVBYnN0cmFjdChib2FyZCwgZGVsZXRhYmxlRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldEFic3RyYWN0c0J5UmVmcyhib2FyZCwgYWJzdHJhY3RSZWZzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZnMgPSBkZWxldGVFbGVtZW50c0hhbmRsZVJpZ2h0Tm9kZUNvdW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRSaWdodE5vZGVDb3VudEJ5UmVmcyhib2FyZCwgcmVmcyk7XG5cbiAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5yZW1vdmVFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlRWxlbWVudDogTWluZEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RMZXZlbEVsZW1lbnRzID0gZ2V0Rmlyc3RMZXZlbEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50cyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoZmlyc3RMZXZlbEVsZW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZmlyc3RMZXZlbEVsZW1lbnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudCA9IHBhcmVudC5jaGlsZHJlbltmaXJzdExldmVsRWxlbWVudHNbMF0uc3RhcnRdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IGZpcnN0TGV2ZWxFbGVtZW50c1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnRQYXJlbnQgPSBNaW5kRWxlbWVudC5maW5kUGFyZW50KGZpcnN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2FtZVBhcmVudCA9IGZpcnN0TGV2ZWxFbGVtZW50cy5ldmVyeShlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1pbmRFbGVtZW50LmZpbmRQYXJlbnQoZWxlbWVudCkgPT09IGZpcnN0RWxlbWVudFBhcmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50UGFyZW50ICYmIGhhc1NhbWVQYXJlbnQgJiYgIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RFbGVtZW50SW5kZXggPSBmaXJzdEVsZW1lbnRQYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihmaXJzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbkNvdW50ID0gZmlyc3RFbGVtZW50UGFyZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWN0aXZlIHBhcmVudCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbkNvdW50ID09PSBmaXJzdExldmVsRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50ID0gZmlyc3RFbGVtZW50UGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RWxlbWVudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRQYXJlbnQuY2hpbGRyZW5bZmlyc3RFbGVtZW50SW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRTZWxlY3RlZEVsZW1lbnQoYm9hcmQsIGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvIGVudGVyIGVkaXQgc3RhdHVzXG4gICAgICAgICAgICBpZiAoIWlzVmlydHVhbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHNbMF07XG4gICAgICAgICAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib2FyZC5zZWxlY3Rpb24gJiYgZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGtleWRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5kYmxjbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgZGJsY2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICBib2FyZC5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiBQbGFpdE1pbmQuaXNNaW5kKHZhbHVlKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKG1pbmRNYXAgPT4ge1xuICAgICAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb248TWluZEVsZW1lbnQ+KFxuICAgICAgICAgICAgICAgICAgICBtaW5kTWFwIGFzIE1pbmRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpICYmIGlzSGl0TWluZEVsZW1lbnQoYm9hcmQsIHBvaW50LCBub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVyTm9kZUVkaXRpbmcobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCBib2FyZC5pc1JlY3Vyc2lvbihub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYmxjbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnNldEZyYWdtZW50ID0gKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldEZpcnN0TGV2ZWxFbGVtZW50KGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIE1pbmRFbGVtZW50W10pO1xuICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRDbGlwYm9hcmREYXRhKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIHNldENsaXBib2FyZERhdGEoZGF0YSwgZWxlbWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICBib2FyZC5pbnNlcnRGcmFnbWVudCA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCB0YXJnZXRQb2ludD86IFBvaW50KSA9PiB7XG4gICAgICAgIGlmIChib2FyZC5vcHRpb25zLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICBpbnNlcnRGcmFnbWVudChkYXRhLCB0YXJnZXRQb2ludCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldERhdGFGcm9tQ2xpcGJvYXJkKGRhdGEpO1xuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbnNlcnRDbGlwYm9hcmREYXRhKGJvYXJkLCBlbGVtZW50cywgdGFyZ2V0UG9pbnQgfHwgWzAsIDBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBkYXRhPy5nZXREYXRhKGB0ZXh0L3BsYWluYCkgYXMgc3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgICAgICBpZiAodGV4dCAmJiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGluc2VydENsaXBib2FyZFRleHQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHNbMF0sIHRleHQsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc2VydEZyYWdtZW50KGRhdGEsIHRhcmdldFBvaW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZGVsZXRlRnJhZ21lbnQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgTWluZEVsZW1lbnRbXTtcbiAgICAgICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBnZXRGaXJzdExldmVsRWxlbWVudChzZWxlY3RlZEVsZW1lbnRzKS5yZXZlcnNlKCk7XG4gICAgICAgIGNvbnN0IGFic3RyYWN0UmVmcyA9IGRlbGV0ZUVsZW1lbnRIYW5kbGVBYnN0cmFjdChib2FyZCwgZGVsZXRhYmxlRWxlbWVudHMpO1xuICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRBYnN0cmFjdHNCeVJlZnMoYm9hcmQsIGFic3RyYWN0UmVmcyk7XG5cbiAgICAgICAgY29uc3QgcmVmcyA9IGRlbGV0ZUVsZW1lbnRzSGFuZGxlUmlnaHROb2RlQ291bnQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRSaWdodE5vZGVDb3VudEJ5UmVmcyhib2FyZCwgcmVmcyk7XG5cbiAgICAgICAgTWluZFRyYW5zZm9ybXMucmVtb3ZlRWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICBkZWxldGVGcmFnbWVudChkYXRhKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdpdGhNaW5kSG90a2V5KHdpdGhNaW5kRXh0ZW5kKHdpdGhDcmVhdGVNaW5kKHdpdGhBYnN0cmFjdCh3aXRoRG5kKGJvYXJkKSkpKSk7XG59O1xuIl19