@ieeesa-npm/groups 0.12.1 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -680,7 +680,7 @@ export class TreeViewComponent {
680
680
  this.destroy$.unsubscribe();
681
681
  }
682
682
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeViewComponent, deps: [{ token: Groups }, { token: i0.ElementRef }, { token: i1.GroupsService }, { token: i2.BreakpointObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
683
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo", userGroupPermissions: "userGroupPermissions" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick", viewRosterClick: "viewRosterClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n class=\"ieeesa-body-md-16\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n [ngClass]=\"[\r\n treeControl.isExpanded(node) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n ]\"\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex ieeesa-tree__group-actions\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [button]=\"constants?.viewGroups?.groupActionsMenu\"\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"ieeesa-tree__node-group-desc\">\r\n {{ node?.item?.groupTypeInfo?.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree .ieeesa-icon-button{padding:0}.ieeesa-tree .ieeesa-icon-button__svg{height:1.5em;width:1.5em}.ieeesa-tree .ieeesa-icon-button__2 .ieeesa-icon-button__svg{height:1em}.ieeesa-tree .mat-tree-node{margin-bottom:.0625em;box-shadow:0 .0625em .125em #0003}.ieeesa-tree .mat-mdc-icon-button{padding:0!important;position:absolute;right:1.7em}.ieeesa-tree__group-actions{margin-left:auto}.ieeesa-tree__group-info-wrapper{width:80%;max-width:60%;padding-left:.375em}.ieeesa-tree__group-info{margin-bottom:.125em}.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:69%}.ieeesa-tree__node-group-name{text-overflow:ellipsis;white-space:pre;overflow:hidden;max-width:67%;min-width:0;padding-right:.375em}.ieeesa-tree__node-group-acronym{color:#63666a!important;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:auto;max-width:100%;min-width:0}.ieeesa-tree__node-group-desc{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#4a4d50;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ieeesa-tree__node-group-desc:hover{white-space:normal}.ieeesa-tree__node{background:#f4f8fe;padding:.5em .75em .5em .5em}.ieeesa-tree__root-node-white-bg{background:#fff}.ieeesa-tree__expanded{box-shadow:0 .0625em #00629b inset;background:#fff}.ieeesa-tree__collapse-icon{min-width:1.5em}@media (max-width: 992px){.ieeesa-tree__group-info-wrapper{max-width:60%}.ieeesa-tree__node-group-acronym{max-width:90%}}@media (max-width: 576px){.ieeesa-tree__group-info-wrapper,.ieeesa-tree__node-group-acronym,.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:90%}.ieeesa-tree__node-group-name{max-width:80%}}.ieeesa-menu .mat-mdc-menu-content{padding:1.25em 1.25em 1.25em .5em!important}.ieeesa-menu__item__icon{background-color:unset!important;box-shadow:none!important;height:1.5em!important;width:1.5em!important;margin-right:.5em!important}.ieeesa-menu__item:not(:last-of-type){margin-bottom:1.5em!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems", "button", "defaultIconSize", "isMarginBottomZero"], outputs: ["menuToggleButtonElement", "menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: TextTruncatedDirective, selector: "[matTooltip][ieeesaTextTruncated]" }], encapsulation: i0.ViewEncapsulation.None }); }
683
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo", userGroupPermissions: "userGroupPermissions" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick", viewRosterClick: "viewRosterClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n class=\"ieeesa-body-md-16\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n [ngClass]=\"[\r\n treeControl.isExpanded(node) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n ]\"\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex ieeesa-tree__group-actions\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [button]=\"constants?.viewGroups?.groupActionsMenu\"\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"ieeesa-tree__node-group-desc\">\r\n {{ node?.item?.groupTypeInfo?.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree .ieeesa-icon-button{padding:0}.ieeesa-tree .ieeesa-icon-button__svg{height:1.5em;width:1.5em}.ieeesa-tree .ieeesa-icon-button__2 .ieeesa-icon-button__svg{height:1em}.ieeesa-tree .mat-tree-node{margin-bottom:.0625em;box-shadow:0 1px 2px #0003}.ieeesa-tree .mat-mdc-icon-button{padding:0!important;position:absolute;right:1.7em}.ieeesa-tree__group-actions{margin-left:auto}.ieeesa-tree__group-info-wrapper{width:80%;max-width:60%;padding-left:.375em}.ieeesa-tree__group-info{margin-bottom:.125em}.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:69%}.ieeesa-tree__node-group-name{text-overflow:ellipsis;white-space:pre;overflow:hidden;max-width:67%;min-width:0;padding-right:.375em}.ieeesa-tree__node-group-acronym{color:#63666a!important;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:auto;max-width:100%;min-width:0}.ieeesa-tree__node-group-desc{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#4a4d50;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ieeesa-tree__node-group-desc:hover{white-space:normal}.ieeesa-tree__node{background:#f4f8fe;padding:.5em .75em .5em .5em}.ieeesa-tree__root-node-white-bg{background:#fff}.ieeesa-tree__expanded{box-shadow:0 .0625em #00629b inset;background:#fff}.ieeesa-tree__collapse-icon{min-width:1.5em}@media (max-width: 992px){.ieeesa-tree__group-info-wrapper{max-width:60%}.ieeesa-tree__node-group-acronym{max-width:90%}}@media (max-width: 576px){.ieeesa-tree__group-info-wrapper,.ieeesa-tree__node-group-acronym,.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:90%}.ieeesa-tree__node-group-name{max-width:80%}}.ieeesa-menu .mat-mdc-menu-content{padding:1.25em 1.25em 1.25em .5em!important}.ieeesa-menu__item__icon{background-color:unset!important;box-shadow:none!important;height:1.5em!important;width:1.5em!important;margin-right:.5em!important}.ieeesa-menu__item:not(:last-of-type){margin-bottom:1.5em!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems", "button", "defaultIconSize", "isMarginBottomZero"], outputs: ["menuToggleButtonElement", "menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: TextTruncatedDirective, selector: "[matTooltip][ieeesaTextTruncated]" }], encapsulation: i0.ViewEncapsulation.None }); }
684
684
  }
685
685
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeViewComponent, decorators: [{
686
686
  type: Component,
@@ -693,7 +693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
693
693
  IconButtonComponent,
694
694
  MatTooltipModule,
695
695
  TextTruncatedDirective,
696
- ], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n class=\"ieeesa-body-md-16\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n [ngClass]=\"[\r\n treeControl.isExpanded(node) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n ]\"\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex ieeesa-tree__group-actions\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [button]=\"constants?.viewGroups?.groupActionsMenu\"\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"ieeesa-tree__node-group-desc\">\r\n {{ node?.item?.groupTypeInfo?.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree .ieeesa-icon-button{padding:0}.ieeesa-tree .ieeesa-icon-button__svg{height:1.5em;width:1.5em}.ieeesa-tree .ieeesa-icon-button__2 .ieeesa-icon-button__svg{height:1em}.ieeesa-tree .mat-tree-node{margin-bottom:.0625em;box-shadow:0 .0625em .125em #0003}.ieeesa-tree .mat-mdc-icon-button{padding:0!important;position:absolute;right:1.7em}.ieeesa-tree__group-actions{margin-left:auto}.ieeesa-tree__group-info-wrapper{width:80%;max-width:60%;padding-left:.375em}.ieeesa-tree__group-info{margin-bottom:.125em}.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:69%}.ieeesa-tree__node-group-name{text-overflow:ellipsis;white-space:pre;overflow:hidden;max-width:67%;min-width:0;padding-right:.375em}.ieeesa-tree__node-group-acronym{color:#63666a!important;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:auto;max-width:100%;min-width:0}.ieeesa-tree__node-group-desc{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#4a4d50;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ieeesa-tree__node-group-desc:hover{white-space:normal}.ieeesa-tree__node{background:#f4f8fe;padding:.5em .75em .5em .5em}.ieeesa-tree__root-node-white-bg{background:#fff}.ieeesa-tree__expanded{box-shadow:0 .0625em #00629b inset;background:#fff}.ieeesa-tree__collapse-icon{min-width:1.5em}@media (max-width: 992px){.ieeesa-tree__group-info-wrapper{max-width:60%}.ieeesa-tree__node-group-acronym{max-width:90%}}@media (max-width: 576px){.ieeesa-tree__group-info-wrapper,.ieeesa-tree__node-group-acronym,.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:90%}.ieeesa-tree__node-group-name{max-width:80%}}.ieeesa-menu .mat-mdc-menu-content{padding:1.25em 1.25em 1.25em .5em!important}.ieeesa-menu__item__icon{background-color:unset!important;box-shadow:none!important;height:1.5em!important;width:1.5em!important;margin-right:.5em!important}.ieeesa-menu__item:not(:last-of-type){margin-bottom:1.5em!important}\n"] }]
696
+ ], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n class=\"ieeesa-body-md-16\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\r\n [ngStyle]=\"getIndentation(node)\"\r\n >\r\n <div\r\n [ngClass]=\"[\r\n treeControl.isExpanded(node) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n ]\"\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex ieeesa-tree__group-actions\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [button]=\"constants?.viewGroups?.groupActionsMenu\"\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"ieeesa-tree__node-group-desc\">\r\n {{ node?.item?.groupTypeInfo?.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree .ieeesa-icon-button{padding:0}.ieeesa-tree .ieeesa-icon-button__svg{height:1.5em;width:1.5em}.ieeesa-tree .ieeesa-icon-button__2 .ieeesa-icon-button__svg{height:1em}.ieeesa-tree .mat-tree-node{margin-bottom:.0625em;box-shadow:0 1px 2px #0003}.ieeesa-tree .mat-mdc-icon-button{padding:0!important;position:absolute;right:1.7em}.ieeesa-tree__group-actions{margin-left:auto}.ieeesa-tree__group-info-wrapper{width:80%;max-width:60%;padding-left:.375em}.ieeesa-tree__group-info{margin-bottom:.125em}.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:69%}.ieeesa-tree__node-group-name{text-overflow:ellipsis;white-space:pre;overflow:hidden;max-width:67%;min-width:0;padding-right:.375em}.ieeesa-tree__node-group-acronym{color:#63666a!important;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:auto;max-width:100%;min-width:0}.ieeesa-tree__node-group-desc{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#4a4d50;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ieeesa-tree__node-group-desc:hover{white-space:normal}.ieeesa-tree__node{background:#f4f8fe;padding:.5em .75em .5em .5em}.ieeesa-tree__root-node-white-bg{background:#fff}.ieeesa-tree__expanded{box-shadow:0 .0625em #00629b inset;background:#fff}.ieeesa-tree__collapse-icon{min-width:1.5em}@media (max-width: 992px){.ieeesa-tree__group-info-wrapper{max-width:60%}.ieeesa-tree__node-group-acronym{max-width:90%}}@media (max-width: 576px){.ieeesa-tree__group-info-wrapper,.ieeesa-tree__node-group-acronym,.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:90%}.ieeesa-tree__node-group-name{max-width:80%}}.ieeesa-menu .mat-mdc-menu-content{padding:1.25em 1.25em 1.25em .5em!important}.ieeesa-menu__item__icon{background-color:unset!important;box-shadow:none!important;height:1.5em!important;width:1.5em!important;margin-right:.5em!important}.ieeesa-menu__item:not(:last-of-type){margin-bottom:1.5em!important}\n"] }]
697
697
  }], ctorParameters: function () { return [{ type: Groups }, { type: i0.ElementRef }, { type: i1.GroupsService }, { type: i2.BreakpointObserverService }]; }, propDecorators: { parentGroupsInfo: [{
698
698
  type: Input
699
699
  }], childGroupsInfo: [{
@@ -715,4 +715,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
715
715
  }], viewRosterClick: [{
716
716
  type: Output
717
717
  }] } });
718
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixHQUN2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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QkFDYixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN2QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJO3VMQXlCakMsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBVUYsMkJBQTJCO3NCQUQ5QixLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1lbnVDb21wb25lbnQsXHJcbiAgTWVudSxcclxuICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIEljb25CdXR0b24sXHJcbiAgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlTWFyZ2luSW5kZW50OiBudW1iZXIgPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8udHJlZU1hcmdpbkluZGVudDtcclxuICBzZWxlY3RlZEdyb3VwITogR3JvdXBOb2RlO1xyXG4gIHNlbGVjdGVkR3JvdXBBY3Rpb24hOiBNZW51IHwgSWNvbkJ1dHRvbjtcclxuICB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+O1xyXG4gIGRhdGFTb3VyY2UhOiBHcm91cHNEYXRhU291cmNlO1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBtYXRUcmVlTm9kZVBhZGRpbmchOiBNYXRUcmVlTm9kZVBhZGRpbmc8R3JvdXBOb2RlPjtcclxuICBwbHVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s0XTtcclxuICBtaW51c0NpcmNsZUljb25CdXR0b246IEljb25CdXR0b24gPSB0aGlzLmJ1dHRvbnNbNV07XHJcbiAgZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvITogRWRpdEdyb3VwQW5kUGFyZW50SW5mbztcclxuICBwZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25UeXBlO1xyXG5cclxuICBtZW51SXRlbXM6IE1lbnVbXSA9IHRoaXMuYnV0dG9ucz8uZmlsdGVyKFxyXG4gICAgKGUpID0+XHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5FWFBBTkRfR1JPVVBfVklFVyAmJlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbj8uQ09MTEFQU0VfR1JPVVBfVklFV1xyXG4gICk7XHJcbiAgcHJpdmF0ZSBwYXJlbnRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYXJlbnRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5wYXJlbnRHcm91cHMgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgZ2V0IHBhcmVudEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50R3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGNoaWxkR3JvdXBzITogR3JvdXBJbmZvW107XHJcbiAgQElucHV0KClcclxuICBzZXQgY2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkQ2hpbGRHcm91cHMoKTtcclxuICB9XHJcbiAgZ2V0IGNoaWxkR3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZEdyb3VwcztcclxuICB9XHJcbiAgcHJpdmF0ZSBpc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZGVsZXRlZEdyb3VwSWQhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgZGVsZXRlZEdyb3VwSWRJbmZvKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSBpZDtcclxuICAgIHRoaXMuZGVsZXRlR3JvdXBOb2RlKHRoaXMuZGVsZXRlZEdyb3VwSWQpO1xyXG4gIH1cclxuICBnZXQgZGVsZXRlZEdyb3VwSWRJbmZvKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVkR3JvdXBJZDtcclxuICB9XHJcbiAgQElucHV0KClcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG5cclxuICBAT3V0cHV0KCkgdG9nZ2xlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGVkaXRHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFZGl0R3JvdXBBbmRQYXJlbnRJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIHZpZXdSb3N0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIGlzTW9iaWxlVmlldyA9IGZhbHNlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZGF0YWJhc2U6IEdyb3VwcyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2U6IEJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG4gICAgICAuZ2V0QnJlYWtwb2ludCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiB7IG1hdGNoZXM6IGJvb2xlYW4gfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gcmVzdWx0Py5tYXRjaGVzO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRyZWUgdmlldyBjb21wb25lbnRcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0R3JvdXBEYXRhU291cmNlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEFzc2lnbiBBUklBIHJvbGUgZm9yIGFsbCBtYXQgdHJlZSBub2RlcyBhcyBcInJvd1wiXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU291cmNlPy5kYXRhQ2hhbmdlXHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZXMgPVxyXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT10cmVlaXRlbV0nKTtcclxuICAgICAgICB0cmVlSXRlbU5vZGVzPy5mb3JFYWNoKChub2RlOiBIVE1MRWxlbWVudCkgPT4gKG5vZGUucm9sZSA9ICdyb3cnKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsZXZlbCBvZiB0aGUgbm9kZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlPy5sZXZlbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlPy5leHBhbmRhYmxlO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgcGFzc2VkIG5vZGUgaGFzIGNoaWxkcmVuIG90aGVyd2lzZSBmYWxzZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYXNDaGlsZEdyb3VwcyA9IChpbmRleDogbnVtYmVyLCBfbm9kZURhdGE6IEdyb3VwTm9kZSkgPT5cclxuICAgIF9ub2RlRGF0YS5leHBhbmRhYmxlO1xyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBncm91cCBpbmZvIHdoZW4gdGhlIHRvZ2dsZSBncm91cCBpcyBjbGlja2VkIG9yIHRvZ2dsZXMgdGhlIGdyb3VwIHZpZXdcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB2aWV3Q2hpbGRHcm91cHMobm9kZTogR3JvdXBOb2RlKSB7XHJcbiAgICBpZiAoIW5vZGU/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZShub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5zZXRHcm91cEZ1bmN0aW9uVHlwZShHcm91cEZ1bmN0aW9uVHlwZS5UT0dHTEUpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUdyb3VwQ2xpY2suZW1pdChub2RlPy5pdGVtKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gbm9kZTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYm94IHNoYWRvdyBiYXNlZCBvbiB0aGUgZ3JvdXAgdHlwZSBsZWdlbmQgY29sb3JcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0Qm94U2hhZG93KCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3hTaGFkb3c6ICcwcHggMXB4IDBweCAwcHggI2M5Y2JkMCBpbnNldCcsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdpdGggcGFyZW50IGdyb3VwcyBkYXRhXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0R3JvdXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkNSRUFURVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucGFyZW50R3JvdXBzSW5mbz8uZm9yRWFjaCgocGFyZW50R3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlPy5pdGVtPy5ncm91cElkID09PSBwYXJlbnRHcm91cE5vZGU/Lmdyb3VwSWRcclxuICAgICAgICAgICkgPT09IC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdHcm91cE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICBwYXJlbnRHcm91cE5vZGUsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKHBhcmVudEdyb3VwTm9kZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZT8ucHVzaChuZXdHcm91cE5vZGUpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgICB0aGlzLnNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPihcclxuICAgICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBHcm91cHNEYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMuZGF0YWJhc2UpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YWJhc2U/LmluaXRpYWxEYXRhKHRoaXMucGFyZW50R3JvdXBzSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVwZGF0ZWQgbm9kZSBpbmZvcm1hdGlvblxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGdyb3Vwc0luZm9cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBlZGl0R3JvdXAoZ3JvdXBzSW5mbzogR3JvdXBJbmZvW10pIHtcclxuICAgIGNvbnN0IGdyb3VwTm9kZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgIGNvbnN0IGVkaXRlZE5vZGUgPSBncm91cHNJbmZvPy5maW5kKFxyXG4gICAgICAobm9kZSkgPT5cclxuICAgICAgICBub2RlPy5ncm91cElkID09PSB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICApO1xyXG4gICAgZ3JvdXBOb2RlUmVmZXJlbmNlPy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBub2RlPy5pdGVtPy5ncm91cElkID09PVxyXG4gICAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvPy5ncm91cEluZm8/Lmdyb3VwSWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3Qgbm9PZkNoaWxkcmVuUmVmZXJlbmNlID0gbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbjtcclxuICAgICAgICBub2RlLml0ZW0gPSBlZGl0ZWROb2RlIGFzIEdyb3VwSW5mbztcclxuICAgICAgICBub2RlLml0ZW0ubm9PZkNoaWxkcmVuID0gbm9PZkNoaWxkcmVuUmVmZXJlbmNlO1xyXG4gICAgICAgIG5vZGUuZXhwYW5kYWJsZSA9IHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKG5vZGU/Lml0ZW0pO1xyXG4gICAgICAgIGlmIChub2RlLml0ZW0uaGFzQ2hpbGRyZW4gJiYgdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVSZWZlcmVuY2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExvYWRzIHRoZSBjaGlsZCBncm91cHMgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBsb2FkQ2hpbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmRhdGFiYXNlPy5zZXRDaGlsZEdyb3Vwc0luZm8odGhpcy5jaGlsZEdyb3Vwc0luZm8pO1xyXG4gICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkNSRUFURVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLmhhc0NoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBncm91cFBhcmVudE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0sXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuaW5kZXhPZih0aGlzLnNlbGVjdGVkR3JvdXApLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIGdyb3VwUGFyZW50Tm9kZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQoZ3JvdXBQYXJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKHRoaXMuc2VsZWN0ZWRHcm91cCkpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2UuZ2V0Q2hpbGRHcm91cHNJbmZvKCk7XHJcbiAgICAgICAgY2hpbGRyZW4/LmZvckVhY2goKGdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gZ3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICAgICkgPT09IC0xXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgICBncm91cE5vZGUsXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwPy5sZXZlbCArIDEsXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKGdyb3VwTm9kZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vZGUuaXRlbS5ncm91cElkID09PSB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5ncm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLml0ZW0ubm9PZkNoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2Uuc3BsaWNlKFxyXG4gICAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuaW5kZXhPZih0aGlzLnNlbGVjdGVkR3JvdXApICsgMSxcclxuICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgIG5ld0dyb3VwTm9kZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGdyb3VwTm9kZXNSZWZlcmVuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5pdGVtLmdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zb3J0Q2hpbGRHcm91cHNBbHBoYWJldGljYWxseShcclxuICAgICAgICBzZWxlY3RlZEdyb3VwSW5kZXggKyAxLFxyXG4gICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKHNlbGVjdGVkR3JvdXBJbmRleCwgdGhpcy5kYXRhU291cmNlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5pdGVtLmdyb3VwUGFyZW50SWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zb3J0Q2hpbGRHcm91cHNBbHBoYWJldGljYWxseShcclxuICAgICAgICBzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXggKyAxLFxyXG4gICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCwgdGhpcy5kYXRhU291cmNlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFXHJcbiAgICApIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbD8udG9nZ2xlKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlbGV0ZWRHcm91cElkXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZGVsZXRlR3JvdXBOb2RlKGRlbGV0ZWRHcm91cElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sICYmIGRlbGV0ZWRHcm91cElkKSB7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gZGVsZXRlZEdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGVsZXRlZEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoZGVsZXRlZEdyb3VwSW5kZXgpO1xyXG4gICAgICBjb25zdCBkYXRhU291cmNlUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgIGlmIChkZWxldGVkR3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoZGVsZXRlZEdyb3VwPy5pdGVtLmdyb3VwUGFyZW50SWQgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5hdChcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXBJbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwICYmIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbiA9XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gLSAxO1xyXG4gICAgICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLmhhc0NoaWxkcmVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCAtIDEsIDIsIG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2Uuc3BsaWNlKGRlbGV0ZWRHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlUmVmZXJlbmNlO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRHcm91cElkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBuZXh0IGdyb3VwIGF0IHRoZSBzYW1lIGxldmVsLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWxlY3RlZEdyb3VwSW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBkYXRhU291cmNlXHJcbiAgICogQHJldHVybiB7Kn0gIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TmV4dEdyb3VwKHNlbGVjdGVkR3JvdXBJbmRleDogbnVtYmVyLCBkYXRhU291cmNlOiBHcm91cE5vZGVbXSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwQWNyb255bSA9XHJcbiAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5pdGVtLmdyb3VwQWNyb255bTtcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGluZGV4ID0gc2VsZWN0ZWRHcm91cEluZGV4ICsgMTsgaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBpZiAoZGF0YVNvdXJjZVtpbmRleF0uaXRlbS5ncm91cEFjcm9ueW0uaW5jbHVkZXMoc2VsZWN0ZWRHcm91cEFjcm9ueW0pKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0ubGV2ZWwgPT09IGRhdGFTb3VyY2VbaW5kZXhdLmxldmVsXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgdGhlIGdyb3VwcyBhbHBoYWJldGljYWxseSBmcm9tIGdpdmVuIHN0YXJ0IGluZGV4IHRvIGVuZCBpbmRleC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJbmRleFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRJbmRleFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRDaGlsZEdyb3Vwc0FscGhhYmV0aWNhbGx5KHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgZGF0YVNvdXJjZS5zcGxpY2UoXHJcbiAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgIGVuZEluZGV4IC0gc3RhcnRJbmRleCxcclxuICAgICAgLi4udGhpcy5ncm91cHNTb3J0aW5nKHRoaXMuZGF0YVNvdXJjZS5kYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSlcclxuICAgICk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGFTb3VyY2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgdGhlIHJvb3QgbGV2ZWwgcGFyZW50IGdyb3VwcyBhbHBoYWJldGljYWxseS5cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBzb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgZm9yIChcclxuICAgICAgbGV0IGdyb3VwQSA9IDA7XHJcbiAgICAgIGdyb3VwQSA8IGRhdGFTb3VyY2UubGVuZ3RoO1xyXG4gICAgICBncm91cEEgPSB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpXHJcbiAgICApIHtcclxuICAgICAgbGV0IGxvd2VzdEdyb3VwID0gZ3JvdXBBO1xyXG4gICAgICBmb3IgKFxyXG4gICAgICAgIGxldCBncm91cEIgPSB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIGdyb3VwQiA8IGRhdGFTb3VyY2UubGVuZ3RoO1xyXG4gICAgICAgIGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQiwgZGF0YVNvdXJjZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgbG93ZXN0R3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5ncm91cHNTb3J0aW5nKFtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVtncm91cEJdLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlW2xvd2VzdEdyb3VwXSxcclxuICAgICAgICAgIF0pWzBdID09PSBkYXRhU291cmNlW2dyb3VwQl1cclxuICAgICAgICAgICAgPyBncm91cEJcclxuICAgICAgICAgICAgOiBsb3dlc3RHcm91cDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobG93ZXN0R3JvdXAgIT09IGdyb3VwQSkge1xyXG4gICAgICAgIGNvbnN0IGxlZnRHcm91cCA9IGRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICBncm91cEEsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByaWdodEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGxvd2VzdEdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5nZXROZXh0R3JvdXAobG93ZXN0R3JvdXAsIGRhdGFTb3VyY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlUmVmZXJlbmNlID0gZGF0YVNvdXJjZS5zbGljZSgwLCBncm91cEEpO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaCguLi5yaWdodEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpLFxyXG4gICAgICAgICAgICBsb3dlc3RHcm91cFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLmxlZnRHcm91cCk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKFxyXG4gICAgICAgICAgLi4uZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgICAgdGhpcy5nZXROZXh0R3JvdXAobG93ZXN0R3JvdXAsIGRhdGFTb3VyY2UpLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlLmxlbmd0aFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VSZWZlcmVuY2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXRpbGl0eSBtZXRob2QgdG8gc29ydCBncm91cHMgYnkgZ3JvdXAgYWNyb255bSBpbiBhc2NlbmRpbmcgb3JkZXIuXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZ3JvdXBzXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cE5vZGVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBncm91cHNTb3J0aW5nKGdyb3VwczogR3JvdXBOb2RlW10pOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gZ3JvdXBzLnNvcnQoKGdyb3VwQTogR3JvdXBOb2RlLCBncm91cEI6IEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBsb3dlckdyb3VwQSA9IGdyb3VwQS5pdGVtLmdyb3VwQWNyb255bS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBsb3dlckdyb3VwQiA9IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAobG93ZXJHcm91cEEgPCBsb3dlckdyb3VwQikgcmV0dXJuIC0xO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA+IGxvd2VyR3JvdXBCKSByZXR1cm4gMTtcclxuICAgICAgZWxzZSBpZiAobG93ZXJHcm91cEEgPT09IGxvd2VyR3JvdXBCKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICB3aGlsZSAoaW5kZXggPCBncm91cEE/Lml0ZW0/Lmdyb3VwQWNyb255bT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA8IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF0pXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGdyb3VwQS5pdGVtLmdyb3VwQWNyb255bVtpbmRleF0gPiBncm91cEIuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIG1lbnUgZ3JvdXAgYWN0aW9uXHJcbiAgICogQHBhcmFtIHtNZW51fSBtZW51XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Hcm91cEFjdGlvbnNDbGljayhtZW51OiBNZW51IHwgSWNvbkJ1dHRvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uID0gbWVudTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgZXhwYW5kL2NvbGxhcHNlIGljb24gYmFzZWQgb24gdGhlIHRvZ2dsZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4geyp9ICB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRUb2dnbGVCdXR0b25JbmZvKGdyb3VwOiBHcm91cE5vZGUpOiBJY29uQnV0dG9uIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKGdyb3VwKSkgcmV0dXJuIHRoaXMubWludXNDaXJjbGVJY29uQnV0dG9uO1xyXG4gICAgcmV0dXJuIHRoaXMucGx1c0NpcmNsZUljb25CdXR0b247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGVtaXR0ZWQgZ3JvdXAgYWN0aW9ucyBldmVudFxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uVklFV19ST1NURVIpIHtcclxuICAgICAgdGhpcy52aWV3Um9zdGVyQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIHRoaXMuY3JlYXRlR3JvdXBDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uRURJVF9HUk9VUCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgY29uc3QgZWRpdEdyb3VwUGFyZW50SW5mbyA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmlsdGVyKFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8uaXRlbT8uZ3JvdXBJZCA9PT0gZ3JvdXA/Lml0ZW0/Lmdyb3VwUGFyZW50SWRcclxuICAgICAgKVswXT8uaXRlbTtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8gPSB7XHJcbiAgICAgICAgZ3JvdXBJbmZvOiBncm91cD8uaXRlbSxcclxuICAgICAgICBwYXJlbnRHcm91cEluZm86IGVkaXRHcm91cFBhcmVudEluZm8sXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQ2xpY2suZW1pdCh0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGZpbHRlcmVkIG1lbnUgaXRlbXMgYmFzZWQgb24gZ3JvdXBzIGhhc0NoaWxkcmVuLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4ge01lbnVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogTWVudVtdIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkTWVudTogTWVudVtdID0gW107XHJcbiAgICBjb25zdCBpc0FkbWluR3JvdXBUeXBlID0gZ3JvdXA/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/LmJ1c2luZXNzUnVsZT8uaXNBZG1pbjtcclxuICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBncm91cD8uaXRlbT8ucGVybWlzc2lvbnM7XHJcbiAgICB0aGlzLm1lbnVJdGVtcz8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBlLmlzVG9vbFRpcE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUiAmJlxyXG4gICAgICAgICAgKChpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMsXHJcbiAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICApKSB8fFxyXG4gICAgICAgICAgICAoIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX09GRklDRVJTLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9ST1NURVJTXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkpKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5FRElUX0dST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpKSB8fFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5ERUxFVEVfR1JPVVAsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkgJiZcclxuICAgICAgICAgICFncm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQICYmXHJcbiAgICAgICAgICBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5hbGxvd1N1Ykdyb3VwICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkNSRUFURV9TVUJHUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZpbHRlcmVkTWVudS5wdXNoKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZE1lbnU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHRoZSBpbmRleCBhbmQgdGhlIGljb24gYnV0dG9uIGFzIGFyZ3VtZW50cyBhbmQgbmVlZHMgdG8gcmV0dXJuIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpY29uIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0ljb25CdXR0b259IGljb25CdXR0b25cclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGljb25CdXR0b246IEljb25CdXR0b24pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGljb25CdXR0b24uaWQ7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgaW5kZW50YXRpb24gYmFzZWQgb24gdGhlIG5vZGUgbGV2ZWwgYW5kIGRldmljZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAcmV0dXJuIHt7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9fVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEluZGVudGF0aW9uKG5vZGU6IEdyb3VwTm9kZSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgbWFyZ2luVmFsdWUgPVxyXG4gICAgICBub2RlLmxldmVsID4gMCA/IGAke3RoaXMudHJlZU1hcmdpbkluZGVudCAqIG5vZGUubGV2ZWx9cHhgIDogJzAnO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2JpbGVWaWV3XHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgJ21hcmdpbi1sZWZ0JzogbWFyZ2luVmFsdWUsXHJcbiAgICAgICAgfVxyXG4gICAgICA6IHtcclxuICAgICAgICAgICdtYXJnaW4tbGVmdCc6IG1hcmdpblZhbHVlLFxyXG4gICAgICAgICAgJ21hcmdpbi1yaWdodCc6IG1hcmdpblZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZVwiPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fcm9vdFwiXHJcbiAgICAjcm9vdFNlbGVjdG9yXHJcbiAgICByb2xlPVwidHJlZWdyaWRcIlxyXG4gID5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNlwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cImdldEluZGVudGF0aW9uKG5vZGUpXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4XCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID8gJ2llZWVzYS10cmVlX19jb2xsYXBzZS1pY29uJyA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2IGllZWVzYS10cmVlX19wYXJlbnQtbm9kZS13cmFwcGVyXCJcclxuICAgICAgW25nU3R5bGVdPVwiZ2V0SW5kZW50YXRpb24obm9kZSlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdpZWVlc2EtdHJlZV9fZXhwYW5kZWQnIDogJycsXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXVwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXhcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cImdyaWRjZWxsXCI+XHJcbiAgICAgICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZVwiXHJcbiAgICAgICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwidmlld0NoaWxkR3JvdXBzKG5vZGUpXCJcclxuICAgICAgICAgICAgW2ljb25CdXR0b25dPVwiZ2V0VG9nZ2xlQnV0dG9uSW5mbyhub2RlKVwiXHJcbiAgICAgICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwTm9kZU91dGxldCBsZXQtbm9kZT5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWVlZXNhR3JvdXBJbmZvT3V0bGV0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZC1ub25lIGdhcC0zIGQtc20tZmxleCBkLW1kLWZsZXggZC1sZy1mbGV4IGllZWVzYS10cmVlX19ncm91cC1hY3Rpb25zXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgIFtidXR0b25dPVwiY29uc3RhbnRzPy52aWV3R3JvdXBzPy5ncm91cEFjdGlvbnNNZW51XCJcclxuICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAobWVudUl0ZW1DbGljayk9XCJvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJkLWxnLW5vbmUgZC1tZC1ub25lIGQtc20tbm9uZVwiXHJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cEluZm9PdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mby13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvIGQtZmxleCBhbGlnbi1pdGVtcy1iYXNlbGluZVwiPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1uYW1lIGllZWVzYS10aXRsZS1tZC0xOFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm5vZGU/Lml0ZW0/Lmdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgIGllZWVzYVRleHRUcnVuY2F0ZWRcclxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICAgID57eyBub2RlPy5pdGVtPy5ncm91cE5hbWUgfX08L3A+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWFjcm9ueW0gaWVlZXNhLXRpdGxlLXNtLTE2XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bSB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtZGVzY1wiPlxyXG4gICAgICAgICAge3sgbm9kZT8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8ubmFtZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwQWN0aW9uc091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIml0ZW1cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwiXHJcbiAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbWF0LXRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=
718
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixHQUN2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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QkFDYixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN2QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJO3VMQXlCakMsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBVUYsMkJBQTJCO3NCQUQ5QixLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1lbnVDb21wb25lbnQsXHJcbiAgTWVudSxcclxuICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIEljb25CdXR0b24sXHJcbiAgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlTWFyZ2luSW5kZW50OiBudW1iZXIgPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8udHJlZU1hcmdpbkluZGVudDtcclxuICBzZWxlY3RlZEdyb3VwITogR3JvdXBOb2RlO1xyXG4gIHNlbGVjdGVkR3JvdXBBY3Rpb24hOiBNZW51IHwgSWNvbkJ1dHRvbjtcclxuICB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+O1xyXG4gIGRhdGFTb3VyY2UhOiBHcm91cHNEYXRhU291cmNlO1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBtYXRUcmVlTm9kZVBhZGRpbmchOiBNYXRUcmVlTm9kZVBhZGRpbmc8R3JvdXBOb2RlPjtcclxuICBwbHVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s0XTtcclxuICBtaW51c0NpcmNsZUljb25CdXR0b246IEljb25CdXR0b24gPSB0aGlzLmJ1dHRvbnNbNV07XHJcbiAgZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvITogRWRpdEdyb3VwQW5kUGFyZW50SW5mbztcclxuICBwZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25UeXBlO1xyXG5cclxuICBtZW51SXRlbXM6IE1lbnVbXSA9IHRoaXMuYnV0dG9ucz8uZmlsdGVyKFxyXG4gICAgKGUpID0+XHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5FWFBBTkRfR1JPVVBfVklFVyAmJlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbj8uQ09MTEFQU0VfR1JPVVBfVklFV1xyXG4gICk7XHJcbiAgcHJpdmF0ZSBwYXJlbnRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYXJlbnRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5wYXJlbnRHcm91cHMgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgZ2V0IHBhcmVudEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50R3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGNoaWxkR3JvdXBzITogR3JvdXBJbmZvW107XHJcbiAgQElucHV0KClcclxuICBzZXQgY2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkQ2hpbGRHcm91cHMoKTtcclxuICB9XHJcbiAgZ2V0IGNoaWxkR3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZEdyb3VwcztcclxuICB9XHJcbiAgcHJpdmF0ZSBpc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZGVsZXRlZEdyb3VwSWQhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgZGVsZXRlZEdyb3VwSWRJbmZvKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSBpZDtcclxuICAgIHRoaXMuZGVsZXRlR3JvdXBOb2RlKHRoaXMuZGVsZXRlZEdyb3VwSWQpO1xyXG4gIH1cclxuICBnZXQgZGVsZXRlZEdyb3VwSWRJbmZvKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVkR3JvdXBJZDtcclxuICB9XHJcbiAgQElucHV0KClcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG5cclxuICBAT3V0cHV0KCkgdG9nZ2xlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGVkaXRHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFZGl0R3JvdXBBbmRQYXJlbnRJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIHZpZXdSb3N0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIGlzTW9iaWxlVmlldyA9IGZhbHNlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZGF0YWJhc2U6IEdyb3VwcyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2U6IEJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG4gICAgICAuZ2V0QnJlYWtwb2ludCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiB7IG1hdGNoZXM6IGJvb2xlYW4gfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gcmVzdWx0Py5tYXRjaGVzO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRyZWUgdmlldyBjb21wb25lbnRcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0R3JvdXBEYXRhU291cmNlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEFzc2lnbiBBUklBIHJvbGUgZm9yIGFsbCBtYXQgdHJlZSBub2RlcyBhcyBcInJvd1wiXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU291cmNlPy5kYXRhQ2hhbmdlXHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZXMgPVxyXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT10cmVlaXRlbV0nKTtcclxuICAgICAgICB0cmVlSXRlbU5vZGVzPy5mb3JFYWNoKChub2RlOiBIVE1MRWxlbWVudCkgPT4gKG5vZGUucm9sZSA9ICdyb3cnKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsZXZlbCBvZiB0aGUgbm9kZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlPy5sZXZlbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlPy5leHBhbmRhYmxlO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgcGFzc2VkIG5vZGUgaGFzIGNoaWxkcmVuIG90aGVyd2lzZSBmYWxzZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYXNDaGlsZEdyb3VwcyA9IChpbmRleDogbnVtYmVyLCBfbm9kZURhdGE6IEdyb3VwTm9kZSkgPT5cclxuICAgIF9ub2RlRGF0YS5leHBhbmRhYmxlO1xyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBncm91cCBpbmZvIHdoZW4gdGhlIHRvZ2dsZSBncm91cCBpcyBjbGlja2VkIG9yIHRvZ2dsZXMgdGhlIGdyb3VwIHZpZXdcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB2aWV3Q2hpbGRHcm91cHMobm9kZTogR3JvdXBOb2RlKSB7XHJcbiAgICBpZiAoIW5vZGU/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZShub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5zZXRHcm91cEZ1bmN0aW9uVHlwZShHcm91cEZ1bmN0aW9uVHlwZS5UT0dHTEUpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUdyb3VwQ2xpY2suZW1pdChub2RlPy5pdGVtKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gbm9kZTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYm94IHNoYWRvdyBiYXNlZCBvbiB0aGUgZ3JvdXAgdHlwZSBsZWdlbmQgY29sb3JcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0Qm94U2hhZG93KCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3hTaGFkb3c6ICcwcHggMXB4IDBweCAwcHggI2M5Y2JkMCBpbnNldCcsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdpdGggcGFyZW50IGdyb3VwcyBkYXRhXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0R3JvdXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkNSRUFURVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucGFyZW50R3JvdXBzSW5mbz8uZm9yRWFjaCgocGFyZW50R3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlPy5pdGVtPy5ncm91cElkID09PSBwYXJlbnRHcm91cE5vZGU/Lmdyb3VwSWRcclxuICAgICAgICAgICkgPT09IC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdHcm91cE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICBwYXJlbnRHcm91cE5vZGUsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKHBhcmVudEdyb3VwTm9kZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZT8ucHVzaChuZXdHcm91cE5vZGUpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgICB0aGlzLnNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPihcclxuICAgICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBHcm91cHNEYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMuZGF0YWJhc2UpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YWJhc2U/LmluaXRpYWxEYXRhKHRoaXMucGFyZW50R3JvdXBzSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVwZGF0ZWQgbm9kZSBpbmZvcm1hdGlvblxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGdyb3Vwc0luZm9cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBlZGl0R3JvdXAoZ3JvdXBzSW5mbzogR3JvdXBJbmZvW10pIHtcclxuICAgIGNvbnN0IGdyb3VwTm9kZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgIGNvbnN0IGVkaXRlZE5vZGUgPSBncm91cHNJbmZvPy5maW5kKFxyXG4gICAgICAobm9kZSkgPT5cclxuICAgICAgICBub2RlPy5ncm91cElkID09PSB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICApO1xyXG4gICAgZ3JvdXBOb2RlUmVmZXJlbmNlPy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBub2RlPy5pdGVtPy5ncm91cElkID09PVxyXG4gICAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvPy5ncm91cEluZm8/Lmdyb3VwSWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3Qgbm9PZkNoaWxkcmVuUmVmZXJlbmNlID0gbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbjtcclxuICAgICAgICBub2RlLml0ZW0gPSBlZGl0ZWROb2RlIGFzIEdyb3VwSW5mbztcclxuICAgICAgICBub2RlLml0ZW0ubm9PZkNoaWxkcmVuID0gbm9PZkNoaWxkcmVuUmVmZXJlbmNlO1xyXG4gICAgICAgIG5vZGUuZXhwYW5kYWJsZSA9IHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKG5vZGU/Lml0ZW0pO1xyXG4gICAgICAgIGlmIChub2RlLml0ZW0uaGFzQ2hpbGRyZW4gJiYgdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVSZWZlcmVuY2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExvYWRzIHRoZSBjaGlsZCBncm91cHMgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBsb2FkQ2hpbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmRhdGFiYXNlPy5zZXRDaGlsZEdyb3Vwc0luZm8odGhpcy5jaGlsZEdyb3Vwc0luZm8pO1xyXG4gICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkNSRUFURVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLmhhc0NoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBncm91cFBhcmVudE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0sXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuaW5kZXhPZih0aGlzLnNlbGVjdGVkR3JvdXApLFxyXG4gICAgICAgICAgMSxcclxuICAgICAgICAgIGdyb3VwUGFyZW50Tm9kZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQoZ3JvdXBQYXJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKHRoaXMuc2VsZWN0ZWRHcm91cCkpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2UuZ2V0Q2hpbGRHcm91cHNJbmZvKCk7XHJcbiAgICAgICAgY2hpbGRyZW4/LmZvckVhY2goKGdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gZ3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICAgICkgPT09IC0xXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgICBncm91cE5vZGUsXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwPy5sZXZlbCArIDEsXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKGdyb3VwTm9kZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vZGUuaXRlbS5ncm91cElkID09PSB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5ncm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLml0ZW0ubm9PZkNoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2Uuc3BsaWNlKFxyXG4gICAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuaW5kZXhPZih0aGlzLnNlbGVjdGVkR3JvdXApICsgMSxcclxuICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgIG5ld0dyb3VwTm9kZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGdyb3VwTm9kZXNSZWZlcmVuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5pdGVtLmdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zb3J0Q2hpbGRHcm91cHNBbHBoYWJldGljYWxseShcclxuICAgICAgICBzZWxlY3RlZEdyb3VwSW5kZXggKyAxLFxyXG4gICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKHNlbGVjdGVkR3JvdXBJbmRleCwgdGhpcy5kYXRhU291cmNlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5pdGVtLmdyb3VwUGFyZW50SWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zb3J0Q2hpbGRHcm91cHNBbHBoYWJldGljYWxseShcclxuICAgICAgICBzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXggKyAxLFxyXG4gICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCwgdGhpcy5kYXRhU291cmNlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFXHJcbiAgICApIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbD8udG9nZ2xlKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlbGV0ZWRHcm91cElkXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZGVsZXRlR3JvdXBOb2RlKGRlbGV0ZWRHcm91cElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sICYmIGRlbGV0ZWRHcm91cElkKSB7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gZGVsZXRlZEdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGVsZXRlZEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoZGVsZXRlZEdyb3VwSW5kZXgpO1xyXG4gICAgICBjb25zdCBkYXRhU291cmNlUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgIGlmIChkZWxldGVkR3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoZGVsZXRlZEdyb3VwPy5pdGVtLmdyb3VwUGFyZW50SWQgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5hdChcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXBJbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwICYmIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbiA9XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gLSAxO1xyXG4gICAgICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLmhhc0NoaWxkcmVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCAtIDEsIDIsIG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2Uuc3BsaWNlKGRlbGV0ZWRHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlUmVmZXJlbmNlO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRHcm91cElkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBuZXh0IGdyb3VwIGF0IHRoZSBzYW1lIGxldmVsLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWxlY3RlZEdyb3VwSW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBkYXRhU291cmNlXHJcbiAgICogQHJldHVybiB7Kn0gIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TmV4dEdyb3VwKHNlbGVjdGVkR3JvdXBJbmRleDogbnVtYmVyLCBkYXRhU291cmNlOiBHcm91cE5vZGVbXSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwQWNyb255bSA9XHJcbiAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5pdGVtLmdyb3VwQWNyb255bTtcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGluZGV4ID0gc2VsZWN0ZWRHcm91cEluZGV4ICsgMTsgaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBpZiAoZGF0YVNvdXJjZVtpbmRleF0uaXRlbS5ncm91cEFjcm9ueW0uaW5jbHVkZXMoc2VsZWN0ZWRHcm91cEFjcm9ueW0pKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0ubGV2ZWwgPT09IGRhdGFTb3VyY2VbaW5kZXhdLmxldmVsXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgdGhlIGdyb3VwcyBhbHBoYWJldGljYWxseSBmcm9tIGdpdmVuIHN0YXJ0IGluZGV4IHRvIGVuZCBpbmRleC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJbmRleFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRJbmRleFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRDaGlsZEdyb3Vwc0FscGhhYmV0aWNhbGx5KHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgZGF0YVNvdXJjZS5zcGxpY2UoXHJcbiAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgIGVuZEluZGV4IC0gc3RhcnRJbmRleCxcclxuICAgICAgLi4udGhpcy5ncm91cHNTb3J0aW5nKHRoaXMuZGF0YVNvdXJjZS5kYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSlcclxuICAgICk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGFTb3VyY2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgdGhlIHJvb3QgbGV2ZWwgcGFyZW50IGdyb3VwcyBhbHBoYWJldGljYWxseS5cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBzb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgZm9yIChcclxuICAgICAgbGV0IGdyb3VwQSA9IDA7XHJcbiAgICAgIGdyb3VwQSA8IGRhdGFTb3VyY2UubGVuZ3RoO1xyXG4gICAgICBncm91cEEgPSB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpXHJcbiAgICApIHtcclxuICAgICAgbGV0IGxvd2VzdEdyb3VwID0gZ3JvdXBBO1xyXG4gICAgICBmb3IgKFxyXG4gICAgICAgIGxldCBncm91cEIgPSB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIGdyb3VwQiA8IGRhdGFTb3VyY2UubGVuZ3RoO1xyXG4gICAgICAgIGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQiwgZGF0YVNvdXJjZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgbG93ZXN0R3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5ncm91cHNTb3J0aW5nKFtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVtncm91cEJdLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlW2xvd2VzdEdyb3VwXSxcclxuICAgICAgICAgIF0pWzBdID09PSBkYXRhU291cmNlW2dyb3VwQl1cclxuICAgICAgICAgICAgPyBncm91cEJcclxuICAgICAgICAgICAgOiBsb3dlc3RHcm91cDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobG93ZXN0R3JvdXAgIT09IGdyb3VwQSkge1xyXG4gICAgICAgIGNvbnN0IGxlZnRHcm91cCA9IGRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICBncm91cEEsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByaWdodEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGxvd2VzdEdyb3VwLFxyXG4gICAgICAgICAgdGhpcy5nZXROZXh0R3JvdXAobG93ZXN0R3JvdXAsIGRhdGFTb3VyY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlUmVmZXJlbmNlID0gZGF0YVNvdXJjZS5zbGljZSgwLCBncm91cEEpO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaCguLi5yaWdodEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChncm91cEEsIGRhdGFTb3VyY2UpLFxyXG4gICAgICAgICAgICBsb3dlc3RHcm91cFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLmxlZnRHcm91cCk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKFxyXG4gICAgICAgICAgLi4uZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgICAgdGhpcy5nZXROZXh0R3JvdXAobG93ZXN0R3JvdXAsIGRhdGFTb3VyY2UpLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlLmxlbmd0aFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VSZWZlcmVuY2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXRpbGl0eSBtZXRob2QgdG8gc29ydCBncm91cHMgYnkgZ3JvdXAgYWNyb255bSBpbiBhc2NlbmRpbmcgb3JkZXIuXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZ3JvdXBzXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cE5vZGVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBncm91cHNTb3J0aW5nKGdyb3VwczogR3JvdXBOb2RlW10pOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gZ3JvdXBzLnNvcnQoKGdyb3VwQTogR3JvdXBOb2RlLCBncm91cEI6IEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBsb3dlckdyb3VwQSA9IGdyb3VwQS5pdGVtLmdyb3VwQWNyb255bS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBsb3dlckdyb3VwQiA9IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAobG93ZXJHcm91cEEgPCBsb3dlckdyb3VwQikgcmV0dXJuIC0xO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA+IGxvd2VyR3JvdXBCKSByZXR1cm4gMTtcclxuICAgICAgZWxzZSBpZiAobG93ZXJHcm91cEEgPT09IGxvd2VyR3JvdXBCKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICB3aGlsZSAoaW5kZXggPCBncm91cEE/Lml0ZW0/Lmdyb3VwQWNyb255bT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA8IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF0pXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGdyb3VwQS5pdGVtLmdyb3VwQWNyb255bVtpbmRleF0gPiBncm91cEIuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIG1lbnUgZ3JvdXAgYWN0aW9uXHJcbiAgICogQHBhcmFtIHtNZW51fSBtZW51XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Hcm91cEFjdGlvbnNDbGljayhtZW51OiBNZW51IHwgSWNvbkJ1dHRvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uID0gbWVudTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgZXhwYW5kL2NvbGxhcHNlIGljb24gYmFzZWQgb24gdGhlIHRvZ2dsZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4geyp9ICB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRUb2dnbGVCdXR0b25JbmZvKGdyb3VwOiBHcm91cE5vZGUpOiBJY29uQnV0dG9uIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKGdyb3VwKSkgcmV0dXJuIHRoaXMubWludXNDaXJjbGVJY29uQnV0dG9uO1xyXG4gICAgcmV0dXJuIHRoaXMucGx1c0NpcmNsZUljb25CdXR0b247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGVtaXR0ZWQgZ3JvdXAgYWN0aW9ucyBldmVudFxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uVklFV19ST1NURVIpIHtcclxuICAgICAgdGhpcy52aWV3Um9zdGVyQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIHRoaXMuY3JlYXRlR3JvdXBDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uRURJVF9HUk9VUCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgY29uc3QgZWRpdEdyb3VwUGFyZW50SW5mbyA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmlsdGVyKFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8uaXRlbT8uZ3JvdXBJZCA9PT0gZ3JvdXA/Lml0ZW0/Lmdyb3VwUGFyZW50SWRcclxuICAgICAgKVswXT8uaXRlbTtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8gPSB7XHJcbiAgICAgICAgZ3JvdXBJbmZvOiBncm91cD8uaXRlbSxcclxuICAgICAgICBwYXJlbnRHcm91cEluZm86IGVkaXRHcm91cFBhcmVudEluZm8sXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQ2xpY2suZW1pdCh0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGZpbHRlcmVkIG1lbnUgaXRlbXMgYmFzZWQgb24gZ3JvdXBzIGhhc0NoaWxkcmVuLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4ge01lbnVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogTWVudVtdIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkTWVudTogTWVudVtdID0gW107XHJcbiAgICBjb25zdCBpc0FkbWluR3JvdXBUeXBlID0gZ3JvdXA/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/LmJ1c2luZXNzUnVsZT8uaXNBZG1pbjtcclxuICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBncm91cD8uaXRlbT8ucGVybWlzc2lvbnM7XHJcbiAgICB0aGlzLm1lbnVJdGVtcz8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBlLmlzVG9vbFRpcE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUiAmJlxyXG4gICAgICAgICAgKChpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMsXHJcbiAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICApKSB8fFxyXG4gICAgICAgICAgICAoIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX09GRklDRVJTLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9ST1NURVJTXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkpKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5FRElUX0dST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpKSB8fFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5ERUxFVEVfR1JPVVAsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkgJiZcclxuICAgICAgICAgICFncm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQICYmXHJcbiAgICAgICAgICBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5hbGxvd1N1Ykdyb3VwICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkNSRUFURV9TVUJHUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZpbHRlcmVkTWVudS5wdXNoKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZE1lbnU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHRoZSBpbmRleCBhbmQgdGhlIGljb24gYnV0dG9uIGFzIGFyZ3VtZW50cyBhbmQgbmVlZHMgdG8gcmV0dXJuIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpY29uIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0ljb25CdXR0b259IGljb25CdXR0b25cclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGljb25CdXR0b246IEljb25CdXR0b24pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGljb25CdXR0b24uaWQ7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgaW5kZW50YXRpb24gYmFzZWQgb24gdGhlIG5vZGUgbGV2ZWwgYW5kIGRldmljZXMuXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAcmV0dXJuIHt7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9fVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEluZGVudGF0aW9uKG5vZGU6IEdyb3VwTm9kZSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgbWFyZ2luVmFsdWUgPVxyXG4gICAgICBub2RlLmxldmVsID4gMCA/IGAke3RoaXMudHJlZU1hcmdpbkluZGVudCAqIG5vZGUubGV2ZWx9cHhgIDogJzAnO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2JpbGVWaWV3XHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgJ21hcmdpbi1sZWZ0JzogbWFyZ2luVmFsdWUsXHJcbiAgICAgICAgfVxyXG4gICAgICA6IHtcclxuICAgICAgICAgICdtYXJnaW4tbGVmdCc6IG1hcmdpblZhbHVlLFxyXG4gICAgICAgICAgJ21hcmdpbi1yaWdodCc6IG1hcmdpblZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZVwiPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fcm9vdFwiXHJcbiAgICAjcm9vdFNlbGVjdG9yXHJcbiAgICByb2xlPVwidHJlZWdyaWRcIlxyXG4gID5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNlwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cImdldEluZGVudGF0aW9uKG5vZGUpXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4XCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID8gJ2llZWVzYS10cmVlX19jb2xsYXBzZS1pY29uJyA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2IGllZWVzYS10cmVlX19wYXJlbnQtbm9kZS13cmFwcGVyXCJcclxuICAgICAgW25nU3R5bGVdPVwiZ2V0SW5kZW50YXRpb24obm9kZSlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdpZWVlc2EtdHJlZV9fZXhwYW5kZWQnIDogJycsXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXVwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXhcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cImdyaWRjZWxsXCI+XHJcbiAgICAgICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZVwiXHJcbiAgICAgICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwidmlld0NoaWxkR3JvdXBzKG5vZGUpXCJcclxuICAgICAgICAgICAgW2ljb25CdXR0b25dPVwiZ2V0VG9nZ2xlQnV0dG9uSW5mbyhub2RlKVwiXHJcbiAgICAgICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwTm9kZU91dGxldCBsZXQtbm9kZT5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWVlZXNhR3JvdXBJbmZvT3V0bGV0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZC1ub25lIGdhcC0zIGQtc20tZmxleCBkLW1kLWZsZXggZC1sZy1mbGV4IGllZWVzYS10cmVlX19ncm91cC1hY3Rpb25zXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgIFtidXR0b25dPVwiY29uc3RhbnRzPy52aWV3R3JvdXBzPy5ncm91cEFjdGlvbnNNZW51XCJcclxuICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAobWVudUl0ZW1DbGljayk9XCJvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJkLWxnLW5vbmUgZC1tZC1ub25lIGQtc20tbm9uZVwiXHJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cEluZm9PdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mby13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvIGQtZmxleCBhbGlnbi1pdGVtcy1iYXNlbGluZVwiPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1uYW1lIGllZWVzYS10aXRsZS1tZC0xOFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm5vZGU/Lml0ZW0/Lmdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgIGllZWVzYVRleHRUcnVuY2F0ZWRcclxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICAgID57eyBub2RlPy5pdGVtPy5ncm91cE5hbWUgfX08L3A+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWFjcm9ueW0gaWVlZXNhLXRpdGxlLXNtLTE2XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bSB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtZGVzY1wiPlxyXG4gICAgICAgICAge3sgbm9kZT8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8ubmFtZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwQWN0aW9uc091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIml0ZW1cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwiXHJcbiAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbWF0LXRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=