vcomply-workflow-engine 6.1.68 → 6.1.69

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.
@@ -16,7 +16,6 @@ import * as i11 from "../checkbox/checkbox.component";
16
16
  import * as i12 from "../floating-bar/floating-bar.component";
17
17
  import * as i13 from "../define-framework-listing/pipes/tooltip-message.pipe";
18
18
  import * as i14 from "../pipes/search.pipe";
19
- import * as i15 from "../pipes/filter.pipe";
20
19
  export class UserGroupListComponent {
21
20
  set approvalType(value) {
22
21
  this.approvalWorkflowType = value;
@@ -347,11 +346,11 @@ export class UserGroupListComponent {
347
346
  }
348
347
  }
349
348
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserGroupListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
350
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserGroupListComponent, selector: "user-group-list", inputs: { groupEnabled: "groupEnabled", panelTitle: "panelTitle", singleSelect: "singleSelect", selectedReviewer: "selectedReviewer", featureflag: "featureflag", reviewerWorkflowType: "reviewerWorkflowType", mode: "mode", fieldType: "fieldType", fromResponsibility: "fromResponsibility", assignorId: "assignorId", assigneeIds: "assigneeIds", reviewerIds: "reviewerIds", overseerIds: "overseerIds", FromProgram: "FromProgram", userListInfo: "userListInfo", groupListInfo: "groupListInfo", fromApprovalWorkflow: "fromApprovalWorkflow", approvalType: "approvalType", showFutureUsersSwitch: "showFutureUsersSwitch", futureUsersWillSelect: "futureUsersWillSelect", isAllDisabled: "isAllDisabled", isGroupTabShow: "isGroupTabShow", disabledIds: "disabledIds", nonRemovableUserIds: "nonRemovableUserIds", allUserSelectedDisabled: "allUserSelectedDisabled", nonRemovableGroupIds: "nonRemovableGroupIds", loading: "loading", setUserList: ["userlist", "setUserList"], setSelectedUser: ["selectedUsers", "setSelectedUser"], setDefaultSelectedUsers: ["defaultSelectedUsers", "setDefaultSelectedUsers"], userType: "userType", setGroupList: ["groupList", "setGroupList"], setSelectedGroup: ["selectedGroups", "setSelectedGroup"] }, outputs: { save: "save", cancel: "cancel", reviewerWorkflowTypeChange: "reviewerWorkflowTypeChange", fetchUserData: "fetchUserData" }, ngImport: i0, template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div\n class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"groupEnabled\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | filter : searchKey)?.length\n : usersList?.length || userListInfo?.total_items\n }}</span\n >\n </button>\n <button\n *ngIf=\"isGroupTabShow\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span\n >\n </button>\n </div>\n\n <div\n class=\"future-user vx-d-flex vx-align-center\"\n *ngIf=\"showFutureUsersSwitch\"\n >\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i\n class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\"\n [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n >\n <app-cs-switch\n [ngValue]=\"futureUsersWillSelect\"\n (ngValueChange)=\"setAllUsersSelected($event)\"\n >\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n *ngIf=\"!featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\"\n />\n <input\n *ngIf=\"featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | filter : searchKey as users\">\n <vui-pagination\n *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \"\n [currentPage]=\"userCurrentPage\"\n [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"\n ></vui-pagination>\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n *ngIf=\"!singleSelect\"\n #user\n [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n (change)=\"selectAllUser($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li\n class=\"vx-mb-3\"\n *ngIf=\"!singleSelect\"\n [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"true\"\n >\n <vui-checkbox\n (change)=\"selectItem($event, user)\"\n [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \"\n ><div class=\"user-name\">\n {{ user?.member_name }}\n </div></vui-checkbox\n >\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio\n [name]=\"'radio-selector'\"\n (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\"\n [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container\n *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\"\n >\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n #group\n [checked]=\"allGroupSelected\"\n [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox\n (change)=\"selectGroup($event, group)\"\n [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \"\n [checked]=\"selectedGroupIds?.includes(group?.group_id)\"\n >\n <div\n class=\"user-name vx-d-flex vx-align-center vx-w-100\"\n [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\"\n >{{ group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span\n >\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar\n *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\"\n [showWorkflow]=\"selectedReviewer\"\n [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <ng-container *ngIf=\"!groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\"\n >&#xe9ae;</i\n >\n <div\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"element?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ element?.member_name }}</span\n >\n <button\n *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover\n (click)=\"groupDisable.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div\n class=\"user-group-chip\"\n *ngIf=\"selectedUsers?.length && groupEnabled\"\n >\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"counter\"\n *ngIf=\"selectedUsers?.length > 1\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\"\n >User {{ selectedGroups?.length > 0 ? \" & \" : \" selected\" }}</span\n >\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\"\n >Users {{ selectedGroups?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div\n class=\"counter group\"\n *ngIf=\"selectedGroups?.length > 1\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let element of selectedUsers | slice : 1; let i = index\"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n <span\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar\n *ngIf=\"singleSelect && !loading\"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i\n class=\"icons\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe90d;</i\n >\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.PaginationComponent, selector: "vui-pagination", inputs: ["from", "to", "total", "showPageDetail", "totalPage", "currentPage", "pageInSingleView"], outputs: ["pageChanged"] }, { kind: "component", type: i4.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closePopoverEvent"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NoDataComponentUI, selector: "app-no-data", inputs: ["action", "secondaryAction", "noDataImage", "noDataText", "noDataButton", "secondaryButton", "noDataSecButton", "altText", "smallButton"], outputs: ["buttonAction", "secondaryActionButton"] }, { kind: "component", type: i8.CsRadioComponentUI, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "component", type: i9.CsSwitchComponentUI, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "component", type: i10.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i11.CheckboxComponent, selector: "vui-checkbox", inputs: ["disabled", "checked", "indeterminateEnabled"] }, { kind: "component", type: i12.VuiFloatingBarComponent, selector: "vui-floating-bar", inputs: ["selectedData", "groupSelected", "displayElementKey", "elementId", "singularText", "pluralText", "showNextButton", "showFrequencyText", "showWorkflow", "workflowText", "currentFrequency", "isDisabled", "workflowList", "selectedWorkflow", "workflowPlaceHolder", "mode", "nextDisabled", "nonRemovableUsersList", "removePosition"], outputs: ["closeEvent", "deleteEvent", "closeList", "workflowTypeChanged"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i13.TooltipMessagePipe, name: "tooltipMessage" }, { kind: "pipe", type: i14.SearchPipe, name: "search" }, { kind: "pipe", type: i15.FilterPipe, name: "filter" }] }); }
349
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserGroupListComponent, selector: "user-group-list", inputs: { groupEnabled: "groupEnabled", panelTitle: "panelTitle", singleSelect: "singleSelect", selectedReviewer: "selectedReviewer", featureflag: "featureflag", reviewerWorkflowType: "reviewerWorkflowType", mode: "mode", fieldType: "fieldType", fromResponsibility: "fromResponsibility", assignorId: "assignorId", assigneeIds: "assigneeIds", reviewerIds: "reviewerIds", overseerIds: "overseerIds", FromProgram: "FromProgram", userListInfo: "userListInfo", groupListInfo: "groupListInfo", fromApprovalWorkflow: "fromApprovalWorkflow", approvalType: "approvalType", showFutureUsersSwitch: "showFutureUsersSwitch", futureUsersWillSelect: "futureUsersWillSelect", isAllDisabled: "isAllDisabled", isGroupTabShow: "isGroupTabShow", disabledIds: "disabledIds", nonRemovableUserIds: "nonRemovableUserIds", allUserSelectedDisabled: "allUserSelectedDisabled", nonRemovableGroupIds: "nonRemovableGroupIds", loading: "loading", setUserList: ["userlist", "setUserList"], setSelectedUser: ["selectedUsers", "setSelectedUser"], setDefaultSelectedUsers: ["defaultSelectedUsers", "setDefaultSelectedUsers"], userType: "userType", setGroupList: ["groupList", "setGroupList"], setSelectedGroup: ["selectedGroups", "setSelectedGroup"] }, outputs: { save: "save", cancel: "cancel", reviewerWorkflowTypeChange: "reviewerWorkflowTypeChange", fetchUserData: "fetchUserData" }, ngImport: i0, template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\" *ngIf=\"groupEnabled\">\n <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\">\n USERS\n <span class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | search : searchKey : 'member_name')?.length\n : usersList?.length || userListInfo?.total_items\n }}</span>\n </button>\n <button *ngIf=\"isGroupTabShow\" (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\">\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span>\n </button>\n </div>\n\n <div class=\"future-user vx-d-flex vx-align-center\" *ngIf=\"showFutureUsersSwitch\">\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\" [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i>\n <app-cs-switch [ngValue]=\"futureUsersWillSelect\" (ngValueChange)=\"setAllUsersSelected($event)\">\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input *ngIf=\"!featureflag\" [(ngModel)]=\"searchKey\" type=\"text\" placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\" />\n <input *ngIf=\"featureflag\" [(ngModel)]=\"searchKey\" type=\"text\" placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\" />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | search : searchKey : 'member_name' as users\">\n <vui-pagination *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \" [currentPage]=\"userCurrentPage\" [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"></vui-pagination>\n <div class=\"user-group-list-mid\" [class.with-pagination]=\"isPagination\">\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox *ngIf=\"!singleSelect\" #user [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \" (change)=\"selectAllUser($event)\">\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li class=\"vx-mb-3\" *ngIf=\"!singleSelect\" [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">\n <vui-checkbox (change)=\"selectItem($event, user)\" [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \" [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \">\n <div class=\"user-name\">\n {{ user?.member_name }}\n </div>\n </vui-checkbox>\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio [name]=\"'radio-selector'\" (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\" [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\" placement=\"bottom-left\" delay=\"0\" [tooltipMandatory]=\"true\">\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data *ngIf=\"!loading\" [noDataImage]=\"ASSETS.search_data\" [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\">\n <div class=\"user-group-list-mid\" [class.with-pagination]=\"isPagination\">\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox #group [checked]=\"allGroupSelected\" [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\">\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox (change)=\"selectGroup($event, group)\" [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \" [checked]=\"selectedGroupIds?.includes(group?.group_id)\">\n <div class=\"user-name vx-d-flex vx-align-center vx-w-100\" [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\" delay=\"0\" [tooltipMandatory]=\"true\">\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\">{{\n group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span>\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data *ngIf=\"!loading\" [noDataImage]=\"ASSETS.search_data\" [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \" (closeEvent)=\"saveList()\" (closeList)=\"closeList()\" (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\" [showWorkflow]=\"selectedReviewer\" [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\" [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\">\n <ng-container *ngIf=\"!groupEnabled\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\">&#xe9ae;</i>\n <div *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"element?.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ element?.member_name }}</span>\n <button *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover (click)=\"groupDisable.popover()\" placement=\"left\">\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div class=\"user-group-chip\" *ngIf=\"selectedUsers?.length && groupEnabled\">\n <i class=\"icons cross\" *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\" (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \">&#xe9ae;</i>\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div class=\"counter\" *ngIf=\"selectedUsers?.length > 1\" appPopover (click)=\"userCount.popover()\"\n placement=\"left\">\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\">User {{ selectedGroups?.length > 0 ? \" & \" :\n \" selected\" }}</span>\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\">Users {{ selectedGroups?.length > 0 ? \" & \" :\n \"selected\" }}</span>\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i class=\"icons cross\" *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\" (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \">&#xe9ae;</i>\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div class=\"counter group\" *ngIf=\"selectedGroups?.length > 1\" appPopover (click)=\"groupCount.popover()\"\n placement=\"left\">\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers | slice : 1; let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"\n selectItem({ target: { checked: false } }, element)\n \">&#xe90d;</i>\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"\n selectItem({ target: { checked: false } }, element)\n \">&#xe90d;</i>\n <span *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span>\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\" (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \">&#xe90d;</i>\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar *ngIf=\"singleSelect && !loading\" (closeEvent)=\"saveList()\" (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\">\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i class=\"icons\" (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \">&#xe90d;</i>\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.PaginationComponent, selector: "vui-pagination", inputs: ["from", "to", "total", "showPageDetail", "totalPage", "currentPage", "pageInSingleView"], outputs: ["pageChanged"] }, { kind: "component", type: i4.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closePopoverEvent"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NoDataComponentUI, selector: "app-no-data", inputs: ["action", "secondaryAction", "noDataImage", "noDataText", "noDataButton", "secondaryButton", "noDataSecButton", "altText", "smallButton"], outputs: ["buttonAction", "secondaryActionButton"] }, { kind: "component", type: i8.CsRadioComponentUI, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "component", type: i9.CsSwitchComponentUI, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "component", type: i10.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i11.CheckboxComponent, selector: "vui-checkbox", inputs: ["disabled", "checked", "indeterminateEnabled"] }, { kind: "component", type: i12.VuiFloatingBarComponent, selector: "vui-floating-bar", inputs: ["selectedData", "groupSelected", "displayElementKey", "elementId", "singularText", "pluralText", "showNextButton", "showFrequencyText", "showWorkflow", "workflowText", "currentFrequency", "isDisabled", "workflowList", "selectedWorkflow", "workflowPlaceHolder", "mode", "nextDisabled", "nonRemovableUsersList", "removePosition"], outputs: ["closeEvent", "deleteEvent", "closeList", "workflowTypeChanged"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i13.TooltipMessagePipe, name: "tooltipMessage" }, { kind: "pipe", type: i14.SearchPipe, name: "search" }] }); }
351
350
  }
352
351
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserGroupListComponent, decorators: [{
353
352
  type: Component,
354
- args: [{ selector: 'user-group-list', template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div\n class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"groupEnabled\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | filter : searchKey)?.length\n : usersList?.length || userListInfo?.total_items\n }}</span\n >\n </button>\n <button\n *ngIf=\"isGroupTabShow\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span\n >\n </button>\n </div>\n\n <div\n class=\"future-user vx-d-flex vx-align-center\"\n *ngIf=\"showFutureUsersSwitch\"\n >\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i\n class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\"\n [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n >\n <app-cs-switch\n [ngValue]=\"futureUsersWillSelect\"\n (ngValueChange)=\"setAllUsersSelected($event)\"\n >\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n *ngIf=\"!featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\"\n />\n <input\n *ngIf=\"featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | filter : searchKey as users\">\n <vui-pagination\n *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \"\n [currentPage]=\"userCurrentPage\"\n [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"\n ></vui-pagination>\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n *ngIf=\"!singleSelect\"\n #user\n [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n (change)=\"selectAllUser($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li\n class=\"vx-mb-3\"\n *ngIf=\"!singleSelect\"\n [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"true\"\n >\n <vui-checkbox\n (change)=\"selectItem($event, user)\"\n [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \"\n ><div class=\"user-name\">\n {{ user?.member_name }}\n </div></vui-checkbox\n >\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio\n [name]=\"'radio-selector'\"\n (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\"\n [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container\n *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\"\n >\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n #group\n [checked]=\"allGroupSelected\"\n [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox\n (change)=\"selectGroup($event, group)\"\n [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \"\n [checked]=\"selectedGroupIds?.includes(group?.group_id)\"\n >\n <div\n class=\"user-name vx-d-flex vx-align-center vx-w-100\"\n [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\"\n >{{ group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span\n >\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar\n *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\"\n [showWorkflow]=\"selectedReviewer\"\n [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <ng-container *ngIf=\"!groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\"\n >&#xe9ae;</i\n >\n <div\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"element?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ element?.member_name }}</span\n >\n <button\n *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover\n (click)=\"groupDisable.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div\n class=\"user-group-chip\"\n *ngIf=\"selectedUsers?.length && groupEnabled\"\n >\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"counter\"\n *ngIf=\"selectedUsers?.length > 1\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\"\n >User {{ selectedGroups?.length > 0 ? \" & \" : \" selected\" }}</span\n >\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\"\n >Users {{ selectedGroups?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div\n class=\"counter group\"\n *ngIf=\"selectedGroups?.length > 1\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let element of selectedUsers | slice : 1; let i = index\"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n <span\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar\n *ngIf=\"singleSelect && !loading\"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i\n class=\"icons\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe90d;</i\n >\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"] }]
353
+ args: [{ selector: 'user-group-list', template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\" *ngIf=\"groupEnabled\">\n <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\">\n USERS\n <span class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | search : searchKey : 'member_name')?.length\n : usersList?.length || userListInfo?.total_items\n }}</span>\n </button>\n <button *ngIf=\"isGroupTabShow\" (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\">\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span>\n </button>\n </div>\n\n <div class=\"future-user vx-d-flex vx-align-center\" *ngIf=\"showFutureUsersSwitch\">\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\" [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i>\n <app-cs-switch [ngValue]=\"futureUsersWillSelect\" (ngValueChange)=\"setAllUsersSelected($event)\">\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input *ngIf=\"!featureflag\" [(ngModel)]=\"searchKey\" type=\"text\" placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\" />\n <input *ngIf=\"featureflag\" [(ngModel)]=\"searchKey\" type=\"text\" placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\" />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | search : searchKey : 'member_name' as users\">\n <vui-pagination *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \" [currentPage]=\"userCurrentPage\" [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"></vui-pagination>\n <div class=\"user-group-list-mid\" [class.with-pagination]=\"isPagination\">\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox *ngIf=\"!singleSelect\" #user [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \" (change)=\"selectAllUser($event)\">\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li class=\"vx-mb-3\" *ngIf=\"!singleSelect\" [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">\n <vui-checkbox (change)=\"selectItem($event, user)\" [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \" [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \">\n <div class=\"user-name\">\n {{ user?.member_name }}\n </div>\n </vui-checkbox>\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio [name]=\"'radio-selector'\" (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\" [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\" placement=\"bottom-left\" delay=\"0\" [tooltipMandatory]=\"true\">\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data *ngIf=\"!loading\" [noDataImage]=\"ASSETS.search_data\" [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\">\n <div class=\"user-group-list-mid\" [class.with-pagination]=\"isPagination\">\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox #group [checked]=\"allGroupSelected\" [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\">\n <div class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\">\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox (change)=\"selectGroup($event, group)\" [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \" [checked]=\"selectedGroupIds?.includes(group?.group_id)\">\n <div class=\"user-name vx-d-flex vx-align-center vx-w-100\" [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\" delay=\"0\" [tooltipMandatory]=\"true\">\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\">{{\n group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span>\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data *ngIf=\"!loading\" [noDataImage]=\"ASSETS.search_data\" [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \" (closeEvent)=\"saveList()\" (closeList)=\"closeList()\" (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\" [showWorkflow]=\"selectedReviewer\" [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\" [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\">\n <ng-container *ngIf=\"!groupEnabled\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\">&#xe9ae;</i>\n <div *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"element?.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ element?.member_name }}</span>\n <button *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover (click)=\"groupDisable.popover()\" placement=\"left\">\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div class=\"user-group-chip\" *ngIf=\"selectedUsers?.length && groupEnabled\">\n <i class=\"icons cross\" *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\" (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \">&#xe9ae;</i>\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div class=\"counter\" *ngIf=\"selectedUsers?.length > 1\" appPopover (click)=\"userCount.popover()\"\n placement=\"left\">\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\">User {{ selectedGroups?.length > 0 ? \" & \" :\n \" selected\" }}</span>\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\">Users {{ selectedGroups?.length > 0 ? \" & \" :\n \"selected\" }}</span>\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i class=\"icons cross\" *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\" (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \">&#xe9ae;</i>\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div class=\"counter group\" *ngIf=\"selectedGroups?.length > 1\" appPopover (click)=\"groupCount.popover()\"\n placement=\"left\">\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers | slice : 1; let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"\n selectItem({ target: { checked: false } }, element)\n \">&#xe90d;</i>\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"\n selectItem({ target: { checked: false } }, element)\n \">&#xe90d;</i>\n <span *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span>\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\" (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \">&#xe90d;</i>\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar *ngIf=\"singleSelect && !loading\" (closeEvent)=\"saveList()\" (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\">\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i class=\"icons\" (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \">&#xe90d;</i>\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"] }]
355
354
  }], ctorParameters: function () { return []; }, propDecorators: { save: [{
356
355
  type: Output
357
356
  }], cancel: [{
@@ -432,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
432
431
  type: Input,
433
432
  args: ['selectedGroups']
434
433
  }] } });
435
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXByb2dyYW0vY3JlYXRlLXByb2dyYW0tdWkvdXNlci1ncm91cC1saXN0L3VzZXItZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL2NyZWF0ZS1wcm9ncmFtLXVpL3VzZXItZ3JvdXAtbGlzdC91c2VyLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU83RCxNQUFNLE9BQU8sc0JBQXNCO0lBMkJqQyxJQUFhLFlBQVksQ0FBQyxLQUE2QztRQUNyRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUE0QkQsSUFBdUIsV0FBVyxDQUFDLEtBQVU7UUFDM0MsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLHFCQUFx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c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ08sWUFBWTtzQkFBeEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBVUcsT0FBTztzQkFBZixLQUFLO2dCQUVpQixXQUFXO3NCQUFqQyxLQUFLO3VCQUFDLFVBQVU7Z0JBU1csZUFBZTtzQkFBMUMsS0FBSzt1QkFBQyxlQUFlO2dCQWdCYSx1QkFBdUI7c0JBQXpELEtBQUs7dUJBQUMsc0JBQXNCO2dCQVNwQixRQUFRO3NCQUFoQixLQUFLO2dCQTBCa0IsWUFBWTtzQkFBbkMsS0FBSzt1QkFBQyxXQUFXO2dCQVNXLGdCQUFnQjtzQkFBNUMsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hQaXBlIH0gZnJvbSAnLi4vcGlwZXMvc2VhcmNoLnBpcGUnO1xuaW1wb3J0IHsgQVNTRVRTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1c2VyLWdyb3VwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5sZXNzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJHcm91cExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBBU1NFVFMgPSBBU1NFVFM7XG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBncm91cEVuYWJsZWQhOiBmYWxzZTtcbiAgQElucHV0KCkgcGFuZWxUaXRsZSA9ICdTZWxlY3QgVXNlcihzKSc7XG4gIEBJbnB1dCgpIHNpbmdsZVNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RlZFJldmlld2VyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZlYXR1cmVmbGFnID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJldmlld2VyV29ya2Zsb3dUeXBlOiBzdHJpbmcgPSAnU0VRVUVOVElBTCc7XG4gIEBPdXRwdXQoKSByZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbW9kZTogc3RyaW5nID0gJ0NSRUFURSc7XG4gIEBJbnB1dCgpIGZpZWxkVHlwZSA9ICcnO1xuICBzZWFyY2hLZXkgPSAnJztcbiAgaXNQYWdpbmF0aW9uOiBhbnk7XG4gIGFwcHJvdmFsV29ya2Zsb3dUeXBlOiAnQU5ZT05FJyB8ICdST1VORFJPQklOJyB8ICdTRVFVRU5USUFMJyA9ICdTRVFVRU5USUFMJztcbiAgdXNlcnNMaXN0OiBhbnkgPSBbXTtcbiAgZ3JvdXBzTGlzdDogYW55ID0gW107XG4gIEBJbnB1dCgpIGZyb21SZXNwb25zaWJpbGl0eTogYW55O1xuICBASW5wdXQoKSBhc3NpZ25vcklkOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhc3NpZ25lZUlkczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgcmV2aWV3ZXJJZHM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIG92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBGcm9tUHJvZ3JhbSA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VyTGlzdEluZm8hOiBhbnk7XG4gIEBJbnB1dCgpIGdyb3VwTGlzdEluZm8hOiBhbnk7XG4gIEBJbnB1dCgpIGZyb21BcHByb3ZhbFdvcmtmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCBhcHByb3ZhbFR5cGUodmFsdWU6ICdBTllPTkUnIHwgJ1JPVU5EUk9CSU4nIHwgJ1NFUVVFTlRJQUwnKSB7XG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93VHlwZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHNob3dGdXR1cmVVc2Vyc1N3aXRjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmdXR1cmVVc2Vyc1dpbGxTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNBbGxEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0dyb3VwVGFiU2hvdzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGZldGNoVXNlckRhdGEgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZGlzYWJsZWRJZHM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBub25SZW1vdmFibGVVc2VySWRzOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgYWxsVXNlclNlbGVjdGVkRGlzYWJsZWQgPSBmYWxzZTtcbiAgc2VsZWN0ZWRVc2VyczogYW55ID0gW107XG4gIHNlbGVjdGVkVXNlcklkczogYW55ID0gW107XG4gIGFsbFVzZXJzSWRzOiBhbnkgPSBbXTtcbiAgYWxsVXNlclNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbm9uUmVtb3ZhYmxlR3JvdXBJZHM6IGFueSA9IFtdO1xuICBzZWxlY3RlZEdyb3VwczogYW55ID0gW107XG4gIHNlbGVjdGVkR3JvdXBJZHM6IGFueSA9IFtdO1xuICBhbGxHcm91cHNJZHM6IGFueSA9IFtdO1xuICBhbGxHcm91cFNlbGVjdGVkID0gZmFsc2U7XG4gIGFsbEdyb3VwU2VsZWN0ZWREaXNhYmxlZCA9IGZhbHNlO1xuICBzZWFyY2hQaXBlID0gbmV3IFNlYXJjaFBpcGUoKTtcblxuICB1c2VyQ3VycmVudFBhZ2UgPSAxO1xuICBncm91cEN1cnJlbnRQYWdlID0gMTtcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBub25EaXNhYmxlZFVzZXJzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoJ3VzZXJsaXN0Jykgc2V0IHNldFVzZXJMaXN0KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgdGhpcy51c2Vyc0xpc3QgPSBbLi4udmFsdWVdO1xuICAgICAgdGhpcy5hbGxVc2Vyc0lkcyA9IHRoaXMudXNlcnNMaXN0Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkKTtcbiAgICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gICAgICB0aGlzLnNldFVzZXJMaXN0SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnc2VsZWN0ZWRVc2VycycpIHNldCBzZXRTZWxlY3RlZFVzZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRVc2VycywgLi4udmFsdWVdLFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gICAgICB0aGlzLnNldFVzZXJMaXN0SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGRlZmF1bHRTZWxlY3RlZFVzZXJzOiBhbnkgPSBbXTtcbiAgZGVmYXVsdFNlbGVjdGVkVXNlcklkczogYW55ID0gW107XG4gIEBJbnB1dCgnZGVmYXVsdFNlbGVjdGVkVXNlcnMnKSBzZXQgc2V0RGVmYXVsdFNlbGVjdGVkVXNlcnModmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgIFsuLi50aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJzLCAuLi52YWx1ZV0sXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VySWRzID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2Vycy5tYXAoXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkXG4gICAgKTtcbiAgfVxuICBASW5wdXQoKSB1c2VyVHlwZTogc3RyaW5nID0gJ2Fzc2lnbmVlcyc7XG4gIHNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcblxuICBzZXRVc2VyTGlzdEluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlckN1cnJlbnRQYWdlID09PSAxKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRVc2VycztcbiAgICAgIGNvbnN0IG90aGVyVXNlciA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgKGVsZTogYW55KSA9PiAhdGhpcy5zZWxlY3RlZFVzZXJJZHMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy51c2Vyc0xpc3QgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnNlbGVjdGVkPy5zb3J0KCksIC4uLm90aGVyVXNlcj8uc29ydCgpXSxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGFsbFVzZXJTZWxlY3RlZFN0YXR1cygpIHtcbiAgICB0aGlzLmFsbFVzZXJTZWxlY3RlZCA9XG4gICAgICB0aGlzLmFsbFVzZXJzSWRzLnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMuc29ydCgpPy50b1N0cmluZygpO1xuICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkRGlzYWJsZWQgPVxuICAgICAgdGhpcy5hbGxVc2Vyc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzLnNvcnQoKT8udG9TdHJpbmcoKSAmJlxuICAgICAgdGhpcy5hbGxVc2Vyc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcklkcy5zb3J0KCk/LnRvU3RyaW5nKCk7XG4gIH1cblxuICBASW5wdXQoJ2dyb3VwTGlzdCcpIHNldCBzZXRHcm91cExpc3QodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdyb3Vwc0xpc3QgPSBbLi4udmFsdWVdO1xuICAgICAgdGhpcy5hbGxHcm91cHNJZHMgPSB0aGlzLmdyb3Vwc0xpc3QubWFwKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCk7XG4gICAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0R3JvdXBMaXN0SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnc2VsZWN0ZWRHcm91cHMnKSBzZXQgc2V0U2VsZWN0ZWRHcm91cCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRHcm91cHMsIC4uLnZhbHVlXSxcbiAgICAgICdncm91cF9pZCdcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMubWFwKFxuICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkXG4gICAgKTtcbiAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICB0aGlzLnNldEdyb3VwTGlzdEluaXQoKTtcbiAgfVxuXG4gIHNldEdyb3VwTGlzdEluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlckN1cnJlbnRQYWdlID09PSAxKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRHcm91cHM7XG4gICAgICBjb25zdCBvdGhlckdyb3VwID0gdGhpcy5ncm91cHNMaXN0LmZpbHRlcihcbiAgICAgICAgKGVsZTogYW55KSA9PiAhdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5ncm91cHNMaXN0ID0gdGhpcy51bmlxdWVCeVByb3AoXG4gICAgICAgIFsuLi5zZWxlY3RlZD8uc29ydCgpLCAuLi5vdGhlckdyb3VwPy5zb3J0KCldLFxuICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBhbGxHcm91cFNlbGVjdGVkU3RhdHVzKCkge1xuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZCA9XG4gICAgICB0aGlzLmFsbEdyb3Vwc0lkcz8uc29ydCgpPy50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzPy5zb3J0KCk/LnRvU3RyaW5nKCk7XG4gICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkRGlzYWJsZWQgPVxuICAgICAgdGhpcy5hbGxHcm91cHNJZHMuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuc29ydCgpPy50b1N0cmluZygpICYmXG4gICAgICB0aGlzLmFsbEdyb3Vwc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMubm9uUmVtb3ZhYmxlR3JvdXBJZHMuc29ydCgpPy50b1N0cmluZygpO1xuICB9XG5cbiAgdXNlclBhZ2VDaGFuZ2UocGFnZTogYW55KSB7XG4gICAgdGhpcy51c2VyQ3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIHRoaXMuZmV0Y2hVc2VyRGF0YS5lbWl0KHsgcGFnZSwgc2VhcmNoS2V5OiB0aGlzLnNlYXJjaEtleSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMjIERlc2NyaXB0aW9uXG4gICAqIFNlbGVjdHMgaXRlbSBvciBkZXNlbGVjdCBhIGl0bWVcbiAgICogQHBhcmFtIGV2dFxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgc2VsZWN0SXRlbShldnQ6IGFueSwgcGF5bG9hZDogYW55KSB7XG4gICAgZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWVcbiAgICAgID8gdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRVc2VyKCdBREQnLCBwYXlsb2FkKVxuICAgICAgOiB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZFVzZXIoJ0RFTEVURScsIHBheWxvYWQpO1xuICB9XG5cbiAgc2VsZWN0SXRlbVJhZGlvKGV2dDogYW55LCBwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAoZXZ0Py50YXJnZXQ/LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRVc2VyKCdBREQnLCBwYXlsb2FkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW5pcHVsYXRlcyBzZWxlY3RlZCBpdGVtcyBpbiByb2xlIGxpc3RcbiAgICogQHBhcmFtIGFjdGlvbiA6J0FERCcgfCAnREVMRVRFJ1xuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgbWFuaXB1bGF0ZVNlbGVjdGVkVXNlcihhY3Rpb246ICdBREQnIHwgJ0RFTEVURScsIHBheWxvYWQ6IGFueSkge1xuICAgIGlmIChhY3Rpb24gPT09ICdBREQnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRVc2VycywgLi4uW3BheWxvYWRdXSxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5tYXAoXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdERUxFVEUnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmluZEluZGV4KFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkID09PSBwYXlsb2FkPy5tZW1iZXJfaWRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmlsdGVyKFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IHBheWxvYWQ/Lm1lbWJlcl9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2VySWRzLmZpbHRlcihcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZSAhPT0gcGF5bG9hZD8ubWVtYmVyX2lkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gIH1cbiAgc2VsZWN0QWxsVXNlcihldnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2dD8udGFyZ2V0Py5jaGVja2VkID09PSB0cnVlO1xuICAgIGNvbnN0IHNvdXJjZVVzZXJzID0gdGhpcy5mcm9tUmVzcG9uc2liaWxpdHkgPyB0aGlzLmRpc2FibGVVc2VycygpIDogdGhpcy51c2Vyc0xpc3Q7XG4gICAgXG4gICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gc291cmNlVXNlcnM7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5tYXAoKHVzZXI6IHsgbWVtYmVyX2lkOiBzdHJpbmcgfCBudW1iZXIgfSkgPT4gdXNlcj8ubWVtYmVyX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKCh1c2VyOiB7IG1lbWJlcl9pZDogc3RyaW5nIHwgbnVtYmVyIH0pID0+IFxuICAgICAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJJZHMuaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogeyBtZW1iZXJfaWQ6IHN0cmluZyB8IG51bWJlciB9KSA9PiB1c2VyPy5tZW1iZXJfaWQpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmFsbFVzZXJTZWxlY3RlZFN0YXR1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyMgRGVzY3JpcHRpb25cbiAgICogU2VsZWN0cyBpdGVtIG9yIGRlc2VsZWN0IGEgaXRtZVxuICAgKiBAcGFyYW0gZXZ0XG4gICAqIEBwYXJhbSBwYXlsb2FkXG4gICAqL1xuICBzZWxlY3RHcm91cChldnQ6IGFueSwgcGF5bG9hZDogYW55KSB7XG4gICAgZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWVcbiAgICAgID8gdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRHcm91cCgnQUREJywgcGF5bG9hZClcbiAgICAgIDogdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRHcm91cCgnREVMRVRFJywgcGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW5pcHVsYXRlcyBzZWxlY3RlZCBpdGVtcyBpbiByb2xlIGxpc3RcbiAgICogQHBhcmFtIGFjdGlvbiA6J0FERCcgfCAnREVMRVRFJ1xuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgbWFuaXB1bGF0ZVNlbGVjdGVkR3JvdXAoYWN0aW9uOiAnQUREJyB8ICdERUxFVEUnLCBwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnQUREJykge1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4udGhpcy5zZWxlY3RlZEdyb3VwcywgLi4uW3BheWxvYWRdXSxcbiAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdERUxFVEUnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkR3JvdXBzLmZpbmRJbmRleChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkID09PSBwYXlsb2FkPy5ncm91cF9pZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLnNlbGVjdGVkR3JvdXBzLmZpbHRlcihcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IHBheWxvYWQ/Lmdyb3VwX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cElkcy5maWx0ZXIoXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUgIT09IHBheWxvYWQ/Lmdyb3VwX2lkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpO1xuICB9XG4gIHNlbGVjdEFsbEdyb3VwKGV2dDogYW55KSB7XG4gICAgY29uc3QgZ3JvdXBEYXRhID0gdGhpcy5zZWFyY2hQaXBlLnRyYW5zZm9ybShcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCxcbiAgICAgIHRoaXMuc2VhcmNoS2V5LFxuICAgICAgJ2dyb3VwX25hbWUnXG4gICAgKTtcbiAgICBpZiAoZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSBncm91cERhdGE7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSBncm91cERhdGEubWFwKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmdyb3Vwc0xpc3QuZmlsdGVyKChlbGU6IGFueSkgPT5cbiAgICAgICAgdGhpcy5ub25SZW1vdmFibGVHcm91cElkcy5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpO1xuICB9XG5cbiAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBsZXQgZGlzYWJsZWRJZHMgPSBbLi4udGhpcy5kaXNhYmxlZElkcywgLi4udGhpcy5ub25SZW1vdmFibGVVc2VySWRzXTtcbiAgICB0aGlzLmRpc2FibGVkSWRzID0gWy4uLm5ldyBTZXQoZGlzYWJsZWRJZHMpXTtcbiAgICB0aGlzLnBhZ2luYXRpb25WaXNpYmxlKCk7XG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICB9LCAzMDApO1xuICB9XG4gIGN1cnJlbnRUYWIgPSAnVVNFUic7XG4gIHN3aXRjaFRhYih0YWI6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcbiAgICB0aGlzLnNlYXJjaEtleSA9ICcnO1xuICB9XG5cbiAgc2F2ZUxpc3QoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VySWRzICYmXG4gICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJJZHM/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzPy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcklkcz8uZm9yRWFjaCgoaWQ6IG51bWJlcik6IGFueSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dDb25maXJtYXRpb24pXG4gICAgICB0aGlzLnNhdmUuZW1pdCh7XG4gICAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkVXNlcnMsXG4gICAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZEdyb3VwcyxcbiAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0OiB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCxcbiAgICAgIH0pO1xuICB9XG5cbiAgY29uZmlybUFjdGlvbihldnQ6ICdZRVMnIHwgJ05PJykge1xuICAgIGlmIChldnQgPT09ICdZRVMnKSB7XG4gICAgICB0aGlzLnNhdmUuZW1pdCh7XG4gICAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkVXNlcnMsXG4gICAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZEdyb3VwcyxcbiAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0OiB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXZ0ID09PSAnTk8nKSB7XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjbG9zZUxpc3QoKSB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgLy9cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcbiAgICogQHBhcmFtIGFycmF5XG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHVuaXF1ZUJ5UHJvcChhcnJheTogYW55LCBrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgYXJyYXlcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxuICAgICAgICAgICAgaXRlbSAmJiBpdGVtW2tleV0gJiYgYWNjLnNldChpdGVtW2tleV0sIGl0ZW0pLCBhY2NcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBNYXAoKVxuICAgICAgICApXG4gICAgICAgIC52YWx1ZXMoKVxuICAgICk7XG4gIH1cblxuICBwYWdpbmF0aW9uVmlzaWJsZSgpIHtcbiAgICBpZiAodGhpcy51c2VyTGlzdEluZm8/LnRvdGFsX3BhZ2VzID4gMSkge1xuICAgICAgdGhpcy5pc1BhZ2luYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICB3b3JrZmxvd1R5cGVDaGFuZ2VkKGV2ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJldmlld2VyV29ya2Zsb3dUeXBlID0gZXZlbnQ7XG4gICAgdGhpcy5yZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGRpc2FibGVVc2VycygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZnJvbVJlc3BvbnNpYmlsaXR5KSB7XG4gICAgICBjYXNlICdBc3NpZ25lZSc6XG4gICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLm92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmV2aWV3ZXInOlxuICAgICAgICB0aGlzLm5vbkRpc2FibGVkVXNlcnMgPSB0aGlzLnVzZXJzTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5hc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ092ZXJzZWVyJzpcbiAgICAgICAgdGhpcy5ub25EaXNhYmxlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKFxuICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbm9ySWQ/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb2xsYWJvcmF0b3InOlxuICAgICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZElkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ub25EaXNhYmxlZFVzZXJzO1xuICB9XG5cbiAgc2V0QWxsVXNlcnNTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5mdXR1cmVVc2Vyc1dpbGxTZWxlY3QgPSBldmVudDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdFwiIFtjbGFzcy5hbmltYXRlXT1cImFuaW1hdGlvblwiPlxuICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LWhlYWRcIj5cbiAgICA8aDMgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtdGl0bGVcIj57eyBwYW5lbFRpdGxlIH19PC9oMz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtYm9keS1pbm5lclwiPlxuICAgICAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGluZ1wiPjwvYXBwLWxvYWRlci1pbmxpbmU+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidXNlci1ncm91cC1saXN0LXRhYiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tYi0yXCJcbiAgICAgICAgKm5nSWY9XCJncm91cEVuYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ1VTRVInKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYi1idG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnVVNFUidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFVTRVJTXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cInZ4LXBsLTEgdngtcHItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LW1sLTIgdngtbGgtNFwiXG4gICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgIHNlYXJjaEtleT8ubGVuZ3RoICYmIGN1cnJlbnRUYWIgPT09IFwiVVNFUlwiXG4gICAgICAgICAgICAgICAgICA/ICh1c2Vyc0xpc3QgfCBmaWx0ZXIgOiBzZWFyY2hLZXkpPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogdXNlcnNMaXN0Py5sZW5ndGggfHwgdXNlckxpc3RJbmZvPy50b3RhbF9pdGVtc1xuICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNHcm91cFRhYlNob3dcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYignR1JPVVAnKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYi1idG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnR1JPVVAnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBmZWF0dXJlZmxhZyA/IFwiVVNFUiBHUk9VUFNcIiA6IFwiR1JPVVBTXCIgfX1cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCJcbiAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggJiYgY3VycmVudFRhYiA9PT0gXCJHUk9VUFwiXG4gICAgICAgICAgICAgICAgICA/IChncm91cHNMaXN0IHwgc2VhcmNoIDogc2VhcmNoS2V5IDogXCJncm91cF9uYW1lXCIpPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogZ3JvdXBzTGlzdD8ubGVuZ3RoIHx8IGdyb3VwTGlzdEluZm8/LnRvdGFsX2l0ZW1zXG4gICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZ1dHVyZS11c2VyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICpuZ0lmPVwic2hvd0Z1dHVyZVVzZXJzU3dpdGNoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZVwiPlxuICAgICAgICAgICAgVmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyc1xuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb25zIGluZm8gdngtZnMtMTIgdngtdHh0LWJsdWUgdngtbWwtMSB2eC1tci0xXCJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAnSWYgc2VsZWN0ZWQsIHRoaXMgcG9saWN5IHdpbGwgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbiB5b3VyIFZDb21wbHkgYWNjb3VudCBhbmQgdXNlcnMgdGhhdCBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgID4mI3hlOTFmOzwvaVxuICAgICAgICAgID5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgW25nVmFsdWVdPVwiZnV0dXJlVXNlcnNXaWxsU2VsZWN0XCJcbiAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNldEFsbFVzZXJzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ibG9jayB2eC1tYi0yXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgKm5nSWY9XCIhZmVhdHVyZWZsYWdcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoS2V5XCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgY3VycmVudFRhYiA9PT0gJ1VTRVInID8gJ1NlYXJjaCBVc2VyJyA6ICdTZWFyY2ggR3JvdXAnXG4gICAgICAgICAgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdJZj1cImZlYXR1cmVmbGFnXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEtleVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcbiAgICAgICAgICAgIGN1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcicgOiAnU2VhcmNoIFVzZXIgR3JvdXAnXG4gICAgICAgICAgfX1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnVVNFUicgJiYgIWxvYWRpbmdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJzTGlzdCB8IGZpbHRlciA6IHNlYXJjaEtleSBhcyB1c2Vyc1wiPlxuICAgICAgICAgIDx2dWktcGFnaW5hdGlvblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgdXNlckxpc3RJbmZvPy50b3RhbF9wYWdlcyA+IDEgJiZcbiAgICAgICAgICAgICAgdXNlcnNMaXN0Py5sZW5ndGggIT09IHVzZXJMaXN0SW5mbz8udG90YWxfaXRlbXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwidXNlckN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgIFt0b3RhbFBhZ2VdPVwidXNlckxpc3RJbmZvPy50b3RhbF9wYWdlc1wiXG4gICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwidXNlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvdnVpLXBhZ2luYXRpb24+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtbWlkXCJcbiAgICAgICAgICAgIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwiaXNQYWdpbmF0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlcnM/Lmxlbmd0aCA+IDA7IGVsc2Ugbm91c2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzaW5nbGVTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgI3VzZXJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFVzZXJTZWxlY3RlZCB8fCBmdXR1cmVVc2Vyc1dpbGxTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICBhbGxVc2VyU2VsZWN0ZWREaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNBbGxEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsVXNlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1uYW1lIHZ4LWZzLTEyIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtbm9uZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7ICF1c2VyPy5jaGVja2VkID8gXCJTZWxlY3QgQWxsXCIgOiBcIkRlc2VsZWN0IEFsbFwiIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LW0tMCB2eC1wLTAgdngtZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtbWItM1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2luZ2xlU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0b29sdGlwTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZnJvbVJlc3BvbnNpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXZpZXdlcklkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3ZlcnNlZXJJZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2lnbm9ySWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2lnbmVlSWRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGlzYWJsZWRJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZyb21Qcm9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHZ1aS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RJdGVtKCRldmVudCwgdXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZElkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbGxEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ2eC1tYi0zXCIgKm5nSWY9XCJzaW5nbGVTZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIncmFkaW8tc2VsZWN0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwic2VsZWN0SXRlbVJhZGlvKCRldmVudCwgdXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3J4LWNhdGVnb3J5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwidXNlcj8ubWVtYmVyX2VtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm91c2VyPlxuICAgICAgICAgICAgICA8YXBwLW5vLWRhdGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBbbm9EYXRhSW1hZ2VdPVwiQVNTRVRTLnNlYXJjaF9kYXRhXCJcbiAgICAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEtleT8ubGVuZ3RoID4gMCA/ICdObyBtYXRjaCBmb3VuZC4nIDogJ05vIFVzZXJzIGZvdW5kLidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9hcHAtbm8tZGF0YT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnR1JPVVAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImdyb3Vwc0xpc3QgfCBzZWFyY2ggOiBzZWFyY2hLZXkgOiAnZ3JvdXBfbmFtZScgYXMgZ3JvdXBzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidXNlci1ncm91cC1saXN0LW1pZFwiXG4gICAgICAgICAgICBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cImlzUGFnaW5hdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID4gMDsgZWxzZSBub2dyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAjZ3JvdXBcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbEdyb3VwU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbEdyb3VwU2VsZWN0ZWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEFsbEdyb3VwKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZnMtMTIgdngtZnctNjAwIHZ4LWxhYmVsLXR4dCB2eC10dC1ub25lXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgIWdyb3VwPy5jaGVja2VkID8gXCJTZWxlY3QgQWxsXCIgOiBcIkRlc2VsZWN0IEFsbFwiIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LW0tMCB2eC1wLTAgdngtZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ2eC1tYi0zXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RHcm91cCgkZXZlbnQsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVtb3ZhYmxlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC13LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJncm91cD8uZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLW5hbWVcIj57eyBncm91cD8uZ3JvdXBfbmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC0zIHZ4LXR0LXVwcGVyY2FzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID57eyBncm91cD8ubWVtYmVyX2NvdW50IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5tZW1iZXJfY291bnQgPiAxID8gXCJVU0VSU1wiIDogXCJVU0VSXCIgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC92dWktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vZ3JvdXA+XG4gICAgICAgICAgICAgIDxhcHAtbm8tZGF0YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtub0RhdGFJbWFnZV09XCJBU1NFVFMuc2VhcmNoX2RhdGFcIlxuICAgICAgICAgICAgICAgIFtub0RhdGFUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gJ05vIG1hdGNoIGZvdW5kLidcbiAgICAgICAgICAgICAgICAgICAgOiAnTm8gZGF0YSB0byBkaXNwbGF5LidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9hcHAtbm8tZGF0YT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LWZvb3RlclwiPlxuICAgICAgPHZ1aS1mbG9hdGluZy1iYXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoIXNpbmdsZVNlbGVjdCB8fCAoIXNpbmdsZVNlbGVjdCAmJiBzZWxlY3RlZFJldmlld2VyKSkgJiYgIWxvYWRpbmdcbiAgICAgICAgXCJcbiAgICAgICAgKGNsb3NlRXZlbnQpPVwic2F2ZUxpc3QoKVwiXG4gICAgICAgIChjbG9zZUxpc3QpPVwiY2xvc2VMaXN0KClcIlxuICAgICAgICAod29ya2Zsb3dUeXBlQ2hhbmdlZCk9XCJ3b3JrZmxvd1R5cGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbc2VsZWN0ZWRXb3JrZmxvd109XCJyZXZpZXdlcldvcmtmbG93VHlwZVwiXG4gICAgICAgIFtzaG93V29ya2Zsb3ddPVwic2VsZWN0ZWRSZXZpZXdlclwiXG4gICAgICAgIFtncm91cFNlbGVjdGVkXT1cInNlbGVjdGVkR3JvdXBzXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtuZXh0RGlzYWJsZWRdPVwiZnJvbUFwcHJvdmFsV29ya2Zsb3cgJiYgc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID09PSAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cEVuYWJsZWRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTIgdngtbXItMlwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZFVzZXJzPy5zbGljZSgwLCAxKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5tZW1iZXJfaWQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGZyb21BcHByb3ZhbFdvcmtmbG93ICYmXG4gICAgICAgICAgICAgICAgYXBwcm92YWxXb3JrZmxvd1R5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IDEgPT0gc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID8gXCJGaW5hbFwiIDogMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImVsZW1lbnQ/Lm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgID57eyBlbGVtZW50Py5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdyb3VwRGlzYWJsZS5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3t7IHNlbGVjdGVkVXNlcnM/LnNsaWNlKDEpPy5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnM/LnNsaWNlKDAsMSk7bGV0IGkgPSBpbmRleFwiPjxpICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIiAoY2xpY2spPVwic2VsZWN0SXRlbSh7dGFyZ2V0OntjaGVja2VkOmZhbHNlfX0sZWxlbWVudClcIiBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+IDxzcGFuPnt7ZWxlbWVudD8ubWVtYmVyX25hbWV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aD4xXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBEaXNhYmxlLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIj4re3tzZWxlY3RlZFVzZXJzPy5zbGljZSgxKT8ubGVuZ3RofX08L2Rpdj4gLS0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ1c2VyLWdyb3VwLWNoaXBcIlxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRVc2Vycz8ubGVuZ3RoICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zc1wiXG4gICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhzZWxlY3RlZFVzZXJzWzBdPy5tZW1iZXJfaWQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgc2VsZWN0SXRlbSh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIHNlbGVjdGVkVXNlcnNbMF0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLW5hbWVcIj57eyBzZWxlY3RlZFVzZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cEVuYWJsZWRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAoY2xpY2spPVwidXNlckNvdW50LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB1c2VyR3JvdXAtbmFtZVwiPlxuICAgICAgICAgIDwhLS0ge3tzZWxlY3RlZEdyb3VwcyAmJiBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/JyAmICc6Jyd9fSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJHcm91cC10ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPT09IDFcIlxuICAgICAgICAgICAgPlVzZXIge3sgc2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCA+IDAgPyBcIiAmIFwiIDogXCIgc2VsZWN0ZWRcIiB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJHcm91cC10ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgID5Vc2VycyB7eyBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOiBcInNlbGVjdGVkXCIgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWNoaXBcIiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zc1wiXG4gICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVHcm91cElkcz8uaW5jbHVkZXMoc2VsZWN0ZWRHcm91cHNbMF0/Lmdyb3VwX2lkKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIHNlbGVjdEdyb3VwKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgc2VsZWN0ZWRHcm91cHNbMF0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLW5hbWVcIj57eyBzZWxlY3RlZEdyb3Vwc1swXT8uZ3JvdXBfbmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY291bnRlciBncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgIChjbGljayk9XCJncm91cENvdW50LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAre3sgc2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lIHVzZXJHcm91cC1uYW1lXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID09PSAxXCI+e3tcbiAgICAgICAgICAgIGZlYXR1cmVmbGFnID8gXCJVc2VyIEdyb3VwIHNlbGVjdGVkXCIgOiBcIkdyb3VwIHNlbGVjdGVkXCJcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAxXCI+e3tcbiAgICAgICAgICAgIGZlYXR1cmVmbGFnID8gXCJVc2VyIEdyb3VwcyBzZWxlY3RlZFwiIDogXCJHcm91cHMgc2VsZWN0ZWRcIlxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZFVzZXJzIHwgc2xpY2UgOiAxOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudD8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNncm91cERpc2FibGUgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnMuc2xpY2UoMSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5tZW1iZXJfaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgZWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21BcHByb3ZhbFdvcmtmbG93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbFdvcmtmbG93VHlwZS50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICsgMSA9PT0gc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoIC0gMSA/IFwiRmluYWxcIiA6IGkgKyAyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCBvZiBzZWxlY3RlZEdyb3VwcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9uUmVtb3ZhYmxlR3JvdXBJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0R3JvdXAoeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudD8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgIDwvdnVpLWZsb2F0aW5nLWJhcj5cbiAgICAgIDx2dWktZmxvYXRpbmctYmFyXG4gICAgICAgICpuZ0lmPVwic2luZ2xlU2VsZWN0ICYmICFsb2FkaW5nXCJcbiAgICAgICAgKGNsb3NlRXZlbnQpPVwic2F2ZUxpc3QoKVwiXG4gICAgICAgIChjbG9zZUxpc3QpPVwiY2xvc2VMaXN0KClcIlxuICAgICAgICBbbmV4dERpc2FibGVkXT1cImZyb21BcHByb3ZhbFdvcmtmbG93ICYmIHNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwXCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgc2VsZWN0ZWRVc2Vyc1swXSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+IHt7IHNlbGVjdGVkVXNlcnNbMF0/Lm1lbWJlcl9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdnVpLWZsb2F0aW5nLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1jb25maXJtYXRpb25cIiAqbmdJZj1cInNob3dDb25maXJtYXRpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLXRvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb24tYmxvY2tcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkzMDs8L2k+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiPlxuICAgICAgICBUaGlzIGFjdGlvbiB3aWxsIHJlc2V0IHRoZSBkZWZhdWx0IHt7IHVzZXJUeXBlIH19IHNlbGVjdGVkIGZvciB0aGVcbiAgICAgICAgUHJvZ3JhbS5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tYm90dG9tXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkPzwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm8tYnRuXCIgKGNsaWNrKT1cImNvbmZpcm1BY3Rpb24oJ05PJylcIj5OTzwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwieWVzLWJ0blwiIChjbGljayk9XCJjb25maXJtQWN0aW9uKCdZRVMnKVwiPllFUzwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXByb2dyYW0vY3JlYXRlLXByb2dyYW0tdWkvdXNlci1ncm91cC1saXN0L3VzZXItZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL2NyZWF0ZS1wcm9ncmFtLXVpL3VzZXItZ3JvdXAtbGlzdC91c2VyLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxzQkFBc0I7SUEyQmpDLElBQWEsWUFBWSxDQUFDLEtBQTZDO1FBQ3JFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQTRCRCxJQUF1QixXQUFXLENBQUMsS0FBVTtRQUMzQyxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMscUJBQXFC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QkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDTyxZQUFZO3NCQUF4QixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFVRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRWlCLFdBQVc7c0JBQWpDLEtBQUs7dUJBQUMsVUFBVTtnQkFTVyxlQUFlO3NCQUExQyxLQUFLO3VCQUFDLGVBQWU7Z0JBZ0JhLHVCQUF1QjtzQkFBekQsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBU3BCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBMEJrQixZQUFZO3NCQUFuQyxLQUFLO3VCQUFDLFdBQVc7Z0JBU1csZ0JBQWdCO3NCQUE1QyxLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlYXJjaFBpcGUgfSBmcm9tICcuLi9waXBlcy9zZWFyY2gucGlwZSc7XG5pbXBvcnQgeyBBU1NFVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYXNzZXRzLmNvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VzZXItZ3JvdXAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLWdyb3VwLWxpc3QuY29tcG9uZW50Lmxlc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlckdyb3VwTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEFTU0VUUyA9IEFTU0VUUztcbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIGdyb3VwRW5hYmxlZCE6IGZhbHNlO1xuICBASW5wdXQoKSBwYW5lbFRpdGxlID0gJ1NlbGVjdCBVc2VyKHMpJztcbiAgQElucHV0KCkgc2luZ2xlU2VsZWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUmV2aWV3ZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgZmVhdHVyZWZsYWcgPSBmYWxzZTtcbiAgQElucHV0KCkgcmV2aWV3ZXJXb3JrZmxvd1R5cGU6IHN0cmluZyA9ICdTRVFVRU5USUFMJztcbiAgQE91dHB1dCgpIHJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBtb2RlOiBzdHJpbmcgPSAnQ1JFQVRFJztcbiAgQElucHV0KCkgZmllbGRUeXBlID0gJyc7XG4gIHNlYXJjaEtleSA9ICcnO1xuICBpc1BhZ2luYXRpb246IGFueTtcbiAgYXBwcm92YWxXb3JrZmxvd1R5cGU6ICdBTllPTkUnIHwgJ1JPVU5EUk9CSU4nIHwgJ1NFUVVFTlRJQUwnID0gJ1NFUVVFTlRJQUwnO1xuICB1c2Vyc0xpc3Q6IGFueSA9IFtdO1xuICBncm91cHNMaXN0OiBhbnkgPSBbXTtcbiAgQElucHV0KCkgZnJvbVJlc3BvbnNpYmlsaXR5OiBhbnk7XG4gIEBJbnB1dCgpIGFzc2lnbm9ySWQ6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFzc2lnbmVlSWRzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSByZXZpZXdlcklkczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgb3ZlcnNlZXJJZHM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIEZyb21Qcm9ncmFtID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZXJMaXN0SW5mbyE6IGFueTtcbiAgQElucHV0KCkgZ3JvdXBMaXN0SW5mbyE6IGFueTtcbiAgQElucHV0KCkgZnJvbUFwcHJvdmFsV29ya2Zsb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGFwcHJvdmFsVHlwZSh2YWx1ZTogJ0FOWU9ORScgfCAnUk9VTkRST0JJTicgfCAnU0VRVUVOVElBTCcpIHtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dUeXBlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2hvd0Z1dHVyZVVzZXJzU3dpdGNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZ1dHVyZVVzZXJzV2lsbFNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0FsbERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzR3JvdXBUYWJTaG93OiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZmV0Y2hVc2VyRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBkaXNhYmxlZElkczogYW55ID0gW107XG4gIEBJbnB1dCgpIG5vblJlbW92YWJsZVVzZXJJZHM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBhbGxVc2VyU2VsZWN0ZWREaXNhYmxlZCA9IGZhbHNlO1xuICBzZWxlY3RlZFVzZXJzOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRVc2VySWRzOiBhbnkgPSBbXTtcbiAgYWxsVXNlcnNJZHM6IGFueSA9IFtdO1xuICBhbGxVc2VyU2VsZWN0ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBub25SZW1vdmFibGVHcm91cElkczogYW55ID0gW107XG4gIHNlbGVjdGVkR3JvdXBzOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRHcm91cElkczogYW55ID0gW107XG4gIGFsbEdyb3Vwc0lkczogYW55ID0gW107XG4gIGFsbEdyb3VwU2VsZWN0ZWQgPSBmYWxzZTtcbiAgYWxsR3JvdXBTZWxlY3RlZERpc2FibGVkID0gZmFsc2U7XG4gIHNlYXJjaFBpcGUgPSBuZXcgU2VhcmNoUGlwZSgpO1xuXG4gIHVzZXJDdXJyZW50UGFnZSA9IDE7XG4gIGdyb3VwQ3VycmVudFBhZ2UgPSAxO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG5vbkRpc2FibGVkVXNlcnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgndXNlcmxpc3QnKSBzZXQgc2V0VXNlckxpc3QodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnVzZXJzTGlzdCA9IFsuLi52YWx1ZV07XG4gICAgICB0aGlzLmFsbFVzZXJzSWRzID0gdGhpcy51c2Vyc0xpc3QubWFwKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0VXNlckxpc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdzZWxlY3RlZFVzZXJzJykgc2V0IHNldFNlbGVjdGVkVXNlcih2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4udGhpcy5zZWxlY3RlZFVzZXJzLCAuLi52YWx1ZV0sXG4gICAgICAgICdtZW1iZXJfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcnMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkXG4gICAgICApO1xuICAgICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0VXNlckxpc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdFNlbGVjdGVkVXNlcnM6IGFueSA9IFtdO1xuICBkZWZhdWx0U2VsZWN0ZWRVc2VySWRzOiBhbnkgPSBbXTtcbiAgQElucHV0KCdkZWZhdWx0U2VsZWN0ZWRVc2VycycpIHNldCBzZXREZWZhdWx0U2VsZWN0ZWRVc2Vycyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VycyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgWy4uLnRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcnMsIC4uLnZhbHVlXSxcbiAgICAgICdtZW1iZXJfaWQnXG4gICAgKTtcbiAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJJZHMgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJzLm1hcChcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWRcbiAgICApO1xuICB9XG4gIEBJbnB1dCgpIHVzZXJUeXBlOiBzdHJpbmcgPSAnYXNzaWduZWVzJztcbiAgc2hvd0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuXG4gIHNldFVzZXJMaXN0SW5pdCgpIHtcbiAgICBpZiAodGhpcy51c2VyQ3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFVzZXJzO1xuICAgICAgY29uc3Qgb3RoZXJVc2VyID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKFxuICAgICAgICAoZWxlOiBhbnkpID0+ICF0aGlzLnNlbGVjdGVkVXNlcklkcy5pbmNsdWRlcyhlbGU/Lm1lbWJlcl9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLnVzZXJzTGlzdCA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4uc2VsZWN0ZWQ/LnNvcnQoKSwgLi4ub3RoZXJVc2VyPy5zb3J0KCldLFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgYWxsVXNlclNlbGVjdGVkU3RhdHVzKCkge1xuICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkID1cbiAgICAgIHRoaXMuYWxsVXNlcnNJZHMuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcy5zb3J0KCk/LnRvU3RyaW5nKCk7XG4gICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWREaXNhYmxlZCA9XG4gICAgICB0aGlzLmFsbFVzZXJzSWRzLnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMuc29ydCgpPy50b1N0cmluZygpICYmXG4gICAgICB0aGlzLmFsbFVzZXJzSWRzLnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5ub25SZW1vdmFibGVVc2VySWRzLnNvcnQoKT8udG9TdHJpbmcoKTtcbiAgfVxuXG4gIEBJbnB1dCgnZ3JvdXBMaXN0Jykgc2V0IHNldEdyb3VwTGlzdCh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IFsuLi52YWx1ZV07XG4gICAgICB0aGlzLmFsbEdyb3Vwc0lkcyA9IHRoaXMuZ3JvdXBzTGlzdC5tYXAoKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkKTtcbiAgICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpO1xuICAgICAgdGhpcy5zZXRHcm91cExpc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdzZWxlY3RlZEdyb3VwcycpIHNldCBzZXRTZWxlY3RlZEdyb3VwKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gdGhpcy51bmlxdWVCeVByb3AoXG4gICAgICBbLi4udGhpcy5zZWxlY3RlZEdyb3VwcywgLi4udmFsdWVdLFxuICAgICAgJ2dyb3VwX2lkJ1xuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gdGhpcy5zZWxlY3RlZEdyb3Vwcy5tYXAoXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWRcbiAgICApO1xuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpO1xuICAgIHRoaXMuc2V0R3JvdXBMaXN0SW5pdCgpO1xuICB9XG5cbiAgc2V0R3JvdXBMaXN0SW5pdCgpIHtcbiAgICBpZiAodGhpcy51c2VyQ3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEdyb3VwcztcbiAgICAgIGNvbnN0IG90aGVyR3JvdXAgPSB0aGlzLmdyb3Vwc0xpc3QuZmlsdGVyKFxuICAgICAgICAoZWxlOiBhbnkpID0+ICF0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoZWxlPy5ncm91cF9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLmdyb3Vwc0xpc3QgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnNlbGVjdGVkPy5zb3J0KCksIC4uLm90aGVyR3JvdXA/LnNvcnQoKV0sXG4gICAgICAgICdncm91cF9pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKSB7XG4gICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkID1cbiAgICAgIHRoaXMuYWxsR3JvdXBzSWRzPy5zb3J0KCk/LnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHM/LnNvcnQoKT8udG9TdHJpbmcoKTtcbiAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWREaXNhYmxlZCA9XG4gICAgICB0aGlzLmFsbEdyb3Vwc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5zb3J0KCk/LnRvU3RyaW5nKCkgJiZcbiAgICAgIHRoaXMuYWxsR3JvdXBzSWRzLnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5ub25SZW1vdmFibGVHcm91cElkcy5zb3J0KCk/LnRvU3RyaW5nKCk7XG4gIH1cblxuICB1c2VyUGFnZUNoYW5nZShwYWdlOiBhbnkpIHtcbiAgICB0aGlzLnVzZXJDdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5mZXRjaFVzZXJEYXRhLmVtaXQoeyBwYWdlLCBzZWFyY2hLZXk6IHRoaXMuc2VhcmNoS2V5IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyMgRGVzY3JpcHRpb25cbiAgICogU2VsZWN0cyBpdGVtIG9yIGRlc2VsZWN0IGEgaXRtZVxuICAgKiBAcGFyYW0gZXZ0XG4gICAqIEBwYXJhbSBwYXlsb2FkXG4gICAqL1xuICBzZWxlY3RJdGVtKGV2dDogYW55LCBwYXlsb2FkOiBhbnkpIHtcbiAgICBldnQ/LnRhcmdldD8uY2hlY2tlZCA9PT0gdHJ1ZVxuICAgICAgPyB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZFVzZXIoJ0FERCcsIHBheWxvYWQpXG4gICAgICA6IHRoaXMubWFuaXB1bGF0ZVNlbGVjdGVkVXNlcignREVMRVRFJywgcGF5bG9hZCk7XG4gIH1cblxuICBzZWxlY3RJdGVtUmFkaW8oZXZ0OiBhbnksIHBheWxvYWQ6IGFueSkge1xuICAgIGlmIChldnQ/LnRhcmdldD8uY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XG4gICAgICB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZFVzZXIoJ0FERCcsIHBheWxvYWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMjIERlc2NyaXB0aW9uXG4gICAqXG4gICAqIE1hbmlwdWxhdGVzIHNlbGVjdGVkIGl0ZW1zIGluIHJvbGUgbGlzdFxuICAgKiBAcGFyYW0gYWN0aW9uIDonQUREJyB8ICdERUxFVEUnXG4gICAqIEBwYXJhbSBwYXlsb2FkXG4gICAqL1xuICBtYW5pcHVsYXRlU2VsZWN0ZWRVc2VyKGFjdGlvbjogJ0FERCcgfCAnREVMRVRFJywgcGF5bG9hZDogYW55KSB7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ0FERCcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4udGhpcy5zZWxlY3RlZFVzZXJzLCAuLi5bcGF5bG9hZF1dLFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ0RFTEVURScpIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5maW5kSW5kZXgoXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgPT09IHBheWxvYWQ/Lm1lbWJlcl9pZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5maWx0ZXIoXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCAhPT0gcGF5bG9hZD8ubWVtYmVyX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJJZHMuZmlsdGVyKFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlICE9PSBwYXlsb2FkPy5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKTtcbiAgfVxuICBzZWxlY3RBbGxVc2VyKGV2dDogYW55KSB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWU7XG4gICAgY29uc3Qgc291cmNlVXNlcnMgPSB0aGlzLmZyb21SZXNwb25zaWJpbGl0eSA/IHRoaXMuZGlzYWJsZVVzZXJzKCkgOiB0aGlzLnVzZXJzTGlzdDtcbiAgICBcbiAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBzb3VyY2VVc2VycztcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogeyBtZW1iZXJfaWQ6IHN0cmluZyB8IG51bWJlciB9KSA9PiB1c2VyPy5tZW1iZXJfaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnVzZXJzTGlzdC5maWx0ZXIoKHVzZXI6IHsgbWVtYmVyX2lkOiBzdHJpbmcgfCBudW1iZXIgfSkgPT4gXG4gICAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcklkcy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcnMubWFwKCh1c2VyOiB7IG1lbWJlcl9pZDogc3RyaW5nIHwgbnVtYmVyIH0pID0+IHVzZXI/Lm1lbWJlcl9pZCk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKiBTZWxlY3RzIGl0ZW0gb3IgZGVzZWxlY3QgYSBpdG1lXG4gICAqIEBwYXJhbSBldnRcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICovXG4gIHNlbGVjdEdyb3VwKGV2dDogYW55LCBwYXlsb2FkOiBhbnkpIHtcbiAgICBldnQ/LnRhcmdldD8uY2hlY2tlZCA9PT0gdHJ1ZVxuICAgICAgPyB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZEdyb3VwKCdBREQnLCBwYXlsb2FkKVxuICAgICAgOiB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZEdyb3VwKCdERUxFVEUnLCBwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMjIERlc2NyaXB0aW9uXG4gICAqXG4gICAqIE1hbmlwdWxhdGVzIHNlbGVjdGVkIGl0ZW1zIGluIHJvbGUgbGlzdFxuICAgKiBAcGFyYW0gYWN0aW9uIDonQUREJyB8ICdERUxFVEUnXG4gICAqIEBwYXJhbSBwYXlsb2FkXG4gICAqL1xuICBtYW5pcHVsYXRlU2VsZWN0ZWRHcm91cChhY3Rpb246ICdBREQnIHwgJ0RFTEVURScsIHBheWxvYWQ6IGFueSkge1xuICAgIGlmIChhY3Rpb24gPT09ICdBREQnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gdGhpcy51bmlxdWVCeVByb3AoXG4gICAgICAgIFsuLi50aGlzLnNlbGVjdGVkR3JvdXBzLCAuLi5bcGF5bG9hZF1dLFxuICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gdGhpcy5zZWxlY3RlZEdyb3Vwcy5tYXAoXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ0RFTEVURScpIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRHcm91cHMuZmluZEluZGV4KFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgPT09IHBheWxvYWQ/Lmdyb3VwX2lkXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMuZmlsdGVyKFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCAhPT0gcGF5bG9hZD8uZ3JvdXBfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmZpbHRlcihcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZSAhPT0gcGF5bG9hZD8uZ3JvdXBfaWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkU3RhdHVzKCk7XG4gIH1cbiAgc2VsZWN0QWxsR3JvdXAoZXZ0OiBhbnkpIHtcbiAgICBjb25zdCBncm91cERhdGEgPSB0aGlzLnNlYXJjaFBpcGUudHJhbnNmb3JtKFxuICAgICAgdGhpcy5ncm91cHNMaXN0LFxuICAgICAgdGhpcy5zZWFyY2hLZXksXG4gICAgICAnZ3JvdXBfbmFtZSdcbiAgICApO1xuICAgIGlmIChldnQ/LnRhcmdldD8uY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IGdyb3VwRGF0YTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IGdyb3VwRGF0YS5tYXAoKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzTGlzdC5maWx0ZXIoKGVsZTogYW55KSA9PlxuICAgICAgICB0aGlzLm5vblJlbW92YWJsZUdyb3VwSWRzLmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gdGhpcy5zZWxlY3RlZEdyb3Vwcy5tYXAoXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkU3RhdHVzKCk7XG4gIH1cblxuICBhbmltYXRpb24gPSB0cnVlO1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGxldCBkaXNhYmxlZElkcyA9IFsuLi50aGlzLmRpc2FibGVkSWRzLCAuLi50aGlzLm5vblJlbW92YWJsZVVzZXJJZHNdO1xuICAgIHRoaXMuZGlzYWJsZWRJZHMgPSBbLi4ubmV3IFNldChkaXNhYmxlZElkcyldO1xuICAgIHRoaXMucGFnaW5hdGlvblZpc2libGUoKTtcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIH0sIDMwMCk7XG4gIH1cbiAgY3VycmVudFRhYiA9ICdVU0VSJztcbiAgc3dpdGNoVGFiKHRhYjogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50VGFiID0gdGFiO1xuICAgIHRoaXMuc2VhcmNoS2V5ID0gJyc7XG4gIH1cblxuICBzYXZlTGlzdCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJJZHMgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcklkcz8ubGVuZ3RoICYmXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHM/Lmxlbmd0aFxuICAgICkge1xuICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VySWRzPy5mb3JFYWNoKChpZDogbnVtYmVyKTogYW55ID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVXNlcklkcz8uaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2hvd0NvbmZpcm1hdGlvbilcbiAgICAgIHRoaXMuc2F2ZS5lbWl0KHtcbiAgICAgICAgdXNlcnM6IHRoaXMuc2VsZWN0ZWRVc2VycyxcbiAgICAgICAgZ3JvdXBzOiB0aGlzLnNlbGVjdGVkR3JvdXBzLFxuICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3Q6IHRoaXMuZnV0dXJlVXNlcnNXaWxsU2VsZWN0LFxuICAgICAgfSk7XG4gIH1cblxuICBjb25maXJtQWN0aW9uKGV2dDogJ1lFUycgfCAnTk8nKSB7XG4gICAgaWYgKGV2dCA9PT0gJ1lFUycpIHtcbiAgICAgIHRoaXMuc2F2ZS5lbWl0KHtcbiAgICAgICAgdXNlcnM6IHRoaXMuc2VsZWN0ZWRVc2VycyxcbiAgICAgICAgZ3JvdXBzOiB0aGlzLnNlbGVjdGVkR3JvdXBzLFxuICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3Q6IHRoaXMuZnV0dXJlVXNlcnNXaWxsU2VsZWN0LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChldnQgPT09ICdOTycpIHtcbiAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTGlzdCgpIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICAvL1xuXG4gIC8qKlxuICAgKiAjIyMjIERlc2NyaXB0aW9uXG4gICAqXG4gICAqIFJldHVybnMgdGhlIHVuaXF1ZSBhcnJheSBvZiBvYmplY3QgYmFzZWQgb24gdW5pcXVlIGtleVxuICAgKiBAcGFyYW0gYXJyYXlcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdW5pcXVlQnlQcm9wKGFycmF5OiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBhcnJheVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChhY2M6IGFueSwgaXRlbTogYW55KSA9PiAoXG4gICAgICAgICAgICBpdGVtICYmIGl0ZW1ba2V5XSAmJiBhY2Muc2V0KGl0ZW1ba2V5XSwgaXRlbSksIGFjY1xuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IE1hcCgpXG4gICAgICAgIClcbiAgICAgICAgLnZhbHVlcygpXG4gICAgKTtcbiAgfVxuXG4gIHBhZ2luYXRpb25WaXNpYmxlKCkge1xuICAgIGlmICh0aGlzLnVzZXJMaXN0SW5mbz8udG90YWxfcGFnZXMgPiAxKSB7XG4gICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdvcmtmbG93VHlwZUNoYW5nZWQoZXZlbnQ6IHN0cmluZykge1xuICAgIHRoaXMucmV2aWV3ZXJXb3JrZmxvd1R5cGUgPSBldmVudDtcbiAgICB0aGlzLnJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZGlzYWJsZVVzZXJzKCkge1xuICAgIHN3aXRjaCAodGhpcy5mcm9tUmVzcG9uc2liaWxpdHkpIHtcbiAgICAgIGNhc2UgJ0Fzc2lnbmVlJzpcbiAgICAgICAgdGhpcy5ub25EaXNhYmxlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKFxuICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICB0aGlzLnJldmlld2VySWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpIHx8XG4gICAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSZXZpZXdlcic6XG4gICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgdGhpcy5vdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnT3ZlcnNlZXInOlxuICAgICAgICB0aGlzLm5vbkRpc2FibGVkVXNlcnMgPSB0aGlzLnVzZXJzTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHRoaXMuYXNzaWdub3JJZD8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLnJldmlld2VySWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpIHx8XG4gICAgICAgICAgICAgIHRoaXMuYXNzaWduZWVJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbGxhYm9yYXRvcic6XG4gICAgICAgICAgdGhpcy5ub25EaXNhYmxlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKFxuICAgICAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vbkRpc2FibGVkVXNlcnM7XG4gIH1cblxuICBzZXRBbGxVc2Vyc1NlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCA9IGV2ZW50O1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gW107XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0XCIgW2NsYXNzLmFuaW1hdGVdPVwiYW5pbWF0aW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtaGVhZFwiPlxuICAgIDxoMyBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC10aXRsZVwiPnt7IHBhbmVsVGl0bGUgfX08L2gzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1ib2R5LWlubmVyXCI+XG4gICAgICA8YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJsb2FkaW5nXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtdGFiIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIiAqbmdJZj1cImdyb3VwRW5hYmxlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInN3aXRjaFRhYignVVNFUicpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBiLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdVU0VSJ1wiPlxuICAgICAgICAgICAgVVNFUlNcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3tcbiAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggJiYgY3VycmVudFRhYiA9PT0gXCJVU0VSXCJcbiAgICAgICAgICAgICAgPyAodXNlcnNMaXN0IHwgc2VhcmNoIDogc2VhcmNoS2V5IDogJ21lbWJlcl9uYW1lJyk/Lmxlbmd0aFxuICAgICAgICAgICAgICA6IHVzZXJzTGlzdD8ubGVuZ3RoIHx8IHVzZXJMaXN0SW5mbz8udG90YWxfaXRlbXNcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzR3JvdXBUYWJTaG93XCIgKGNsaWNrKT1cInN3aXRjaFRhYignR1JPVVAnKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYi1idG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnR1JPVVAnXCI+XG4gICAgICAgICAgICB7eyBmZWF0dXJlZmxhZyA/IFwiVVNFUiBHUk9VUFNcIiA6IFwiR1JPVVBTXCIgfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3tcbiAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggJiYgY3VycmVudFRhYiA9PT0gXCJHUk9VUFwiXG4gICAgICAgICAgICAgID8gKGdyb3Vwc0xpc3QgfCBzZWFyY2ggOiBzZWFyY2hLZXkgOiBcImdyb3VwX25hbWVcIik/Lmxlbmd0aFxuICAgICAgICAgICAgICA6IGdyb3Vwc0xpc3Q/Lmxlbmd0aCB8fCBncm91cExpc3RJbmZvPy50b3RhbF9pdGVtc1xuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZ1dHVyZS11c2VyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiAqbmdJZj1cInNob3dGdXR1cmVVc2Vyc1N3aXRjaFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZVwiPlxuICAgICAgICAgICAgVmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyc1xuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgaW5mbyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTFcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCB0aGlzIHBvbGljeSB3aWxsIGJlIHZpc2libGUgdG8gYWxsIHVzZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgaW4geW91ciBWQ29tcGx5IGFjY291bnQgYW5kIHVzZXJzIHRoYXQgbWlnaHQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4nXG4gICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiBkZWxheT1cIjBcIiB0eXBlPVwid2hpdGVcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2ggW25nVmFsdWVdPVwiZnV0dXJlVXNlcnNXaWxsU2VsZWN0XCIgKG5nVmFsdWVDaGFuZ2UpPVwic2V0QWxsVXNlcnNTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9hcHAtY3Mtc3dpdGNoPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJsb2NrIHZ4LW1iLTJcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGI7PC9pPlxuICAgICAgICA8aW5wdXQgKm5nSWY9XCIhZmVhdHVyZWZsYWdcIiBbKG5nTW9kZWwpXT1cInNlYXJjaEtleVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgY3VycmVudFRhYiA9PT0gJ1VTRVInID8gJ1NlYXJjaCBVc2VyJyA6ICdTZWFyY2ggR3JvdXAnXG4gICAgICAgICAgfX1cIiAvPlxuICAgICAgICA8aW5wdXQgKm5nSWY9XCJmZWF0dXJlZmxhZ1wiIFsobmdNb2RlbCldPVwic2VhcmNoS2V5XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7XG4gICAgICAgICAgICBjdXJyZW50VGFiID09PSAnVVNFUicgPyAnU2VhcmNoIFVzZXInIDogJ1NlYXJjaCBVc2VyIEdyb3VwJ1xuICAgICAgICAgIH19XCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFRhYiA9PT0gJ1VTRVInICYmICFsb2FkaW5nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2Vyc0xpc3QgfCBzZWFyY2ggOiBzZWFyY2hLZXkgOiAnbWVtYmVyX25hbWUnIGFzIHVzZXJzXCI+XG4gICAgICAgICAgPHZ1aS1wYWdpbmF0aW9uICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHVzZXJMaXN0SW5mbz8udG90YWxfcGFnZXMgPiAxICYmXG4gICAgICAgICAgICAgIHVzZXJzTGlzdD8ubGVuZ3RoICE9PSB1c2VyTGlzdEluZm8/LnRvdGFsX2l0ZW1zXG4gICAgICAgICAgICBcIiBbY3VycmVudFBhZ2VdPVwidXNlckN1cnJlbnRQYWdlXCIgW3RvdGFsUGFnZV09XCJ1c2VyTGlzdEluZm8/LnRvdGFsX3BhZ2VzXCJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1c2VyUGFnZUNoYW5nZSgkZXZlbnQpXCI+PC92dWktcGFnaW5hdGlvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LW1pZFwiIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwiaXNQYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlcnM/Lmxlbmd0aCA+IDA7IGVsc2Ugbm91c2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94ICpuZ0lmPVwiIXNpbmdsZVNlbGVjdFwiICN1c2VyIFtjaGVja2VkXT1cImFsbFVzZXJTZWxlY3RlZCB8fCBmdXR1cmVVc2Vyc1dpbGxTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICBhbGxVc2VyU2VsZWN0ZWREaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNBbGxEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgXCIgKGNoYW5nZSk9XCJzZWxlY3RBbGxVc2VyKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZnMtMTIgdngtZnctNjAwIHZ4LWxhYmVsLXR4dCB2eC10dC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICF1c2VyPy5jaGVja2VkID8gXCJTZWxlY3QgQWxsXCIgOiBcIkRlc2VsZWN0IEFsbFwiIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LW0tMCB2eC1wLTAgdngtZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInZ4LW1iLTNcIiAqbmdJZj1cIiFzaW5nbGVTZWxlY3RcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0b29sdGlwTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZnJvbVJlc3BvbnNpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXZpZXdlcklkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3ZlcnNlZXJJZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2lnbm9ySWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2lnbmVlSWRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGlzYWJsZWRJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZyb21Qcm9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHZ1aS1jaGVja2JveCAoY2hhbmdlKT1cInNlbGVjdEl0ZW0oJGV2ZW50LCB1c2VyKVwiIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWxsRGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdnVpLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ2eC1tYi0zXCIgKm5nSWY9XCJzaW5nbGVTZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvIFtuYW1lXT1cIidyYWRpby1zZWxlY3RvcidcIiAoY2hlY2tlZEV2ZW50KT1cInNlbGVjdEl0ZW1SYWRpbygkZXZlbnQsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidyeC1jYXRlZ29yeSdcIiBbY2hlY2tlZF09XCJzZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwidXNlcj8ubWVtYmVyX2VtYWlsXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm91c2VyPlxuICAgICAgICAgICAgICA8YXBwLW5vLWRhdGEgKm5nSWY9XCIhbG9hZGluZ1wiIFtub0RhdGFJbWFnZV09XCJBU1NFVFMuc2VhcmNoX2RhdGFcIiBbbm9EYXRhVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEtleT8ubGVuZ3RoID4gMCA/ICdObyBtYXRjaCBmb3VuZC4nIDogJ05vIFVzZXJzIGZvdW5kLidcbiAgICAgICAgICAgICAgICBcIj48L2FwcC1uby1kYXRhPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdHUk9VUCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwc0xpc3QgfCBzZWFyY2ggOiBzZWFyY2hLZXkgOiAnZ3JvdXBfbmFtZScgYXMgZ3JvdXBzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1taWRcIiBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cImlzUGFnaW5hdGlvblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID4gMDsgZWxzZSBub2dyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94ICNncm91cCBbY2hlY2tlZF09XCJhbGxHcm91cFNlbGVjdGVkXCIgW2Rpc2FibGVkXT1cImFsbEdyb3VwU2VsZWN0ZWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEFsbEdyb3VwKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZnMtMTIgdngtZnctNjAwIHZ4LWxhYmVsLXR4dCB2eC10dC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICFncm91cD8uY2hlY2tlZCA/IFwiU2VsZWN0IEFsbFwiIDogXCJEZXNlbGVjdCBBbGxcIiB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92dWktY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJ2eC1tLTAgdngtcC0wIHZ4LWQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidngtbWItM1wiICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZ1aS1jaGVja2JveCAoY2hhbmdlKT1cInNlbGVjdEdyb3VwKCRldmVudCwgZ3JvdXApXCIgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVtb3ZhYmxlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICAgICAgICAgICAgICBcIiBbY2hlY2tlZF09XCJzZWxlY3RlZEdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbmFtZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXctMTAwXCIgW2FwcFRvb2x0aXBdPVwiZ3JvdXA/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtbmFtZVwiPnt7IGdyb3VwPy5ncm91cF9uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50ZXIgdngtZnMtOSB2eC1mdy02MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTMgdngtdHQtdXBwZXJjYXNlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA/Lm1lbWJlcl9jb3VudCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cD8ubWVtYmVyX2NvdW50ID4gMSA/IFwiVVNFUlNcIiA6IFwiVVNFUlwiIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ncm91cD5cbiAgICAgICAgICAgICAgPGFwcC1uby1kYXRhICpuZ0lmPVwiIWxvYWRpbmdcIiBbbm9EYXRhSW1hZ2VdPVwiQVNTRVRTLnNlYXJjaF9kYXRhXCIgW25vRGF0YVRleHRdPVwiXG4gICAgICAgICAgICAgICAgICBzZWFyY2hLZXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnTm8gbWF0Y2ggZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICA6ICdObyBkYXRhIHRvIGRpc3BsYXkuJ1xuICAgICAgICAgICAgICAgIFwiPjwvYXBwLW5vLWRhdGE+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1mb290ZXJcIj5cbiAgICAgIDx2dWktZmxvYXRpbmctYmFyICpuZ0lmPVwiXG4gICAgICAgICAgKCFzaW5nbGVTZWxlY3QgfHwgKCFzaW5nbGVTZWxlY3QgJiYgc2VsZWN0ZWRSZXZpZXdlcikpICYmICFsb2FkaW5nXG4gICAgICAgIFwiIChjbG9zZUV2ZW50KT1cInNhdmVMaXN0KClcIiAoY2xvc2VMaXN0KT1cImNsb3NlTGlzdCgpXCIgKHdvcmtmbG93VHlwZUNoYW5nZWQpPVwid29ya2Zsb3dUeXBlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3NlbGVjdGVkV29ya2Zsb3ddPVwicmV2aWV3ZXJXb3JrZmxvd1R5cGVcIiBbc2hvd1dvcmtmbG93XT1cInNlbGVjdGVkUmV2aWV3ZXJcIiBbZ3JvdXBTZWxlY3RlZF09XCJzZWxlY3RlZEdyb3Vwc1wiXG4gICAgICAgIFttb2RlXT1cIm1vZGVcIiBbbmV4dERpc2FibGVkXT1cImZyb21BcHByb3ZhbFdvcmtmbG93ICYmIHNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2Ygc2VsZWN0ZWRVc2Vycz8uc2xpY2UoMCwgMSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbm9uUmVtb3ZhYmxlVXNlcklkcz8uaW5jbHVkZXMoZWxlbWVudD8ubWVtYmVyX2lkKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJdGVtKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgZWxlbWVudClcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBmcm9tQXBwcm92YWxXb3JrZmxvdyAmJlxuICAgICAgICAgICAgICAgIGFwcHJvdmFsV29ya2Zsb3dUeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdzZXF1ZW50aWFsJ1xuICAgICAgICAgICAgICBcIiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAge3sgMSA9PSBzZWxlY3RlZFVzZXJzPy5sZW5ndGggPyBcIkZpbmFsXCIgOiAxIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiZWxlbWVudD8ubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgZWxlbWVudD8ubWVtYmVyX25hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBEaXNhYmxlLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIj5cbiAgICAgICAgICAgICAgK3t7IHNlbGVjdGVkVXNlcnM/LnNsaWNlKDEpPy5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnM/LnNsaWNlKDAsMSk7bGV0IGkgPSBpbmRleFwiPjxpICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIiAoY2xpY2spPVwic2VsZWN0SXRlbSh7dGFyZ2V0OntjaGVja2VkOmZhbHNlfX0sZWxlbWVudClcIiBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+IDxzcGFuPnt7ZWxlbWVudD8ubWVtYmVyX25hbWV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aD4xXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBEaXNhYmxlLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIj4re3tzZWxlY3RlZFVzZXJzPy5zbGljZSgxKT8ubGVuZ3RofX08L2Rpdj4gLS0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1jaGlwXCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggJiYgZ3JvdXBFbmFibGVkXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zc1wiICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKHNlbGVjdGVkVXNlcnNbMF0/Lm1lbWJlcl9pZClcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIHNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBzZWxlY3RlZFVzZXJzWzBdKVxuICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbmFtZVwiPnt7IHNlbGVjdGVkVXNlcnNbMF0/Lm1lbWJlcl9uYW1lIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwRW5hYmxlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA+IDFcIiBhcHBQb3BvdmVyIChjbGljayk9XCJ1c2VyQ291bnQucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiPlxuICAgICAgICAgICAgICAre3sgc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB1c2VyR3JvdXAtbmFtZVwiPlxuICAgICAgICAgIDwhLS0ge3tzZWxlY3RlZEdyb3VwcyAmJiBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/JyAmICc6Jyd9fSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJHcm91cC10ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPT09IDFcIj5Vc2VyIHt7IHNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAwID8gXCIgJiBcIiA6XG4gICAgICAgICAgICBcIiBzZWxlY3RlZFwiIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlckdyb3VwLXRleHRcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA+IDFcIj5Vc2VycyB7eyBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOlxuICAgICAgICAgICAgXCJzZWxlY3RlZFwiIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1jaGlwXCIgKm5nSWY9XCJzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zc1wiICpuZ0lmPVwiIW5vblJlbW92YWJsZUdyb3VwSWRzPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3Vwc1swXT8uZ3JvdXBfaWQpXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBzZWxlY3RHcm91cCh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIHNlbGVjdGVkR3JvdXBzWzBdKVxuICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbmFtZVwiPnt7IHNlbGVjdGVkR3JvdXBzWzBdPy5ncm91cF9uYW1lIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXIgZ3JvdXBcIiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAxXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBDb3VudC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiPlxuICAgICAgICAgICAgK3t7IHNlbGVjdGVkR3JvdXBzPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB1c2VyR3JvdXAtbmFtZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCA9PT0gMVwiPnt7XG4gICAgICAgICAgICBmZWF0dXJlZmxhZyA/IFwiVXNlciBHcm91cCBzZWxlY3RlZFwiIDogXCJHcm91cCBzZWxlY3RlZFwiXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAxXCI+e3tcbiAgICAgICAgICAgIGZlYXR1cmVmbGFnID8gXCJVc2VyIEdyb3VwcyBzZWxlY3RlZFwiIDogXCJHcm91cHMgc2VsZWN0ZWRcIlxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjdXNlckNvdW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZFVzZXJzIHwgc2xpY2UgOiAxOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5tZW1iZXJfaWQpXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQ/Lm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXBEaXNhYmxlIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZFVzZXJzLnNsaWNlKDEpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5tZW1iZXJfaWQpXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tQXBwcm92YWxXb3JrZmxvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxXb3JrZmxvd1R5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBpICsgMSA9PT0gc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoIC0gMSA/IFwiRmluYWxcIiA6IGkgKyAyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQ/Lm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXBDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCBvZiBzZWxlY3RlZEdyb3VwcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiICpuZ0lmPVwiIW5vblJlbW92YWJsZUdyb3VwSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZClcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RHcm91cCh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQ/Lmdyb3VwX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICA8L3Z1aS1mbG9hdGluZy1iYXI+XG4gICAgICA8dnVpLWZsb2F0aW5nLWJhciAqbmdJZj1cInNpbmdsZVNlbGVjdCAmJiAhbG9hZGluZ1wiIChjbG9zZUV2ZW50KT1cInNhdmVMaXN0KClcIiAoY2xvc2VMaXN0KT1cImNsb3NlTGlzdCgpXCJcbiAgICAgICAgW25leHREaXNhYmxlZF09XCJmcm9tQXBwcm92YWxXb3JrZmxvdyAmJiBzZWxlY3RlZFVzZXJzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBzZWxlY3RlZFVzZXJzWzBdKVxuICAgICAgICAgICAgICBcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj4ge3sgc2VsZWN0ZWRVc2Vyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92dWktZmxvYXRpbmctYmFyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LWNvbmZpcm1hdGlvblwiICpuZ0lmPVwic2hvd0NvbmZpcm1hdGlvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ibG9ja1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+XG4gICAgICAgIFRoaXMgYWN0aW9uIHdpbGwgcmVzZXQgdGhlIGRlZmF1bHQge3sgdXNlclR5cGUgfX0gc2VsZWN0ZWQgZm9yIHRoZVxuICAgICAgICBQcm9ncmFtLlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1ib3R0b21cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQ/PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJuby1idG5cIiAoY2xpY2spPVwiY29uZmlybUFjdGlvbignTk8nKVwiPk5PPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ5ZXMtYnRuXCIgKGNsaWNrKT1cImNvbmZpcm1BY3Rpb24oJ1lFUycpXCI+WUVTPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=