@posiwise/smart-crm 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +7 -7
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +7 -7
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-insight.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.mjs +4 -4
- package/esm2022/lib/private/smart-crm-private.module.mjs +5 -5
- package/esm2022/lib/private/smart-crm-private.routing.module.mjs +5 -5
- package/esm2022/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.mjs +4 -4
- package/esm2022/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.mjs +4 -4
- package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +4 -4
- package/esm2022/lib/public/smart-crm-public.module.mjs +5 -5
- package/esm2022/lib/public/smart-crm-public.routing.module.mjs +5 -5
- package/fesm2022/posiwise-smart-crm.mjs +150 -150
- package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
- package/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.d.ts +1 -1
- package/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.d.ts +1 -1
- package/package.json +3 -3
|
@@ -207,11 +207,11 @@ export class SmartCrmBoardComponent extends AppBaseComponent {
|
|
|
207
207
|
ngOnDestroy() {
|
|
208
208
|
super.ngOnDestroy();
|
|
209
209
|
}
|
|
210
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
211
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: SmartCrmBoardComponent, selector: "pw-smart-crm-board", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row mb-4\"\n *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\"\n (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\"\n [value]=\"option.id\">{{ option.name }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-8 mt-2 mt-sm-0 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n</div>\n<div *ngIf=\"isLoaded\"\n class=\"list-container d-flex\"\n cdkDropList\n [cdkDropListData]=\"opportunitiesGroup\"\n (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup\n class=\"opportunities-container main-div crm-board-primary\"\n [class.dynamic-columns-wrapper]=\"group.stage.collapsed\"\n [style.--border-color]=\"group.stage.color_code\"\n *ngFor=\"let group of opportunitiesGroup\"\n cdkDrag\n [cdkDragData]=\"group\">\n <div class=\"opportunities-board-title d-flex align-items-center py-1\">\n <span class=\"collapse-column-toggle\">\n <i class=\"fas\"\n [ngClass]=\"{\n 'fa-angle-right': !group.stage.collapsed,\n 'fa-angle-down': group.stage.collapsed\n }\" (click)=\"toggleColumn($event, group)\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"stage-name mb-0 py-2 ps-4\">\n <span class=\"badge rounded-pill text-white px-3\" [style.--background-color]=\"group.stage.color_code\">{{ group.stage.name }}</span>\n </p>\n <span class=\"ms-auto me-4 add-opportunity-icon\">\n <a class=\"text-secondary\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{\n stage_id: group?.stage?.id,\n category: group.stage.crm_opportunity_category_ids\n }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div cdkDropList\n class=\"opportunities-list items-container\"\n [id]=\"group.stage.name\"\n [cdkDropListData]=\"group.opportunities\"\n (cdkDropListDropped)=\"dropItem($event)\"\n [cdkDropListConnectedTo]=\"getConnectedList()\">\n\n <div class=\"opportunities-box mb-3\"\n *ngFor=\"let item of group.opportunities\"\n cdkDrag\n [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\"\n class=\"float-end edit-button\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunities, item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"fw-bold mb-1\">{{ item.title }}</p>\n <a class=\"mb-1\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n item?.crm_account_id\n ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">\n {{ (item?.one_time_amount / 100 | currency) }} One-time / {{ (item?.monthly_amount / 100 | currency) }} MRR\n </p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\"\n [routerLink]=\"['/members', item?.owner[0]?.slug]\"><img alt=\"member image\"\n [src]=\"item?.owner[0]?.user_avatar[0]?.url\"\n [width]=\"'30'\"\n class=\"squared_logo float-end\"\n [height]=\"'30'\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/male.png';\" /></a>\n <p class=\"mb-1\">{{ item.starting_at | dateFormat }}</p>\n <p class=\"mb-1 badge bg-warning\">{{ item?.crm_opportunity_stage?.name }}</p>\n </div>\n </div>\n <div class=\"footer footer-list\">\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total One-Time:</span>\n <span class=\"footer-value\">{{ group.totals.oneTime / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total MRR:</span>\n <span class=\"footer-value\">{{ group.totals.mrr / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total Count:</span>\n <span class=\"footer-value\">{{ group.totals.count }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!masterStages?.length && isLoaded\">\n <pw-no-data [withImage]=\"false\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStages' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'categories']\">Take me to the configuration page.</a>\n </pw-no-data>\n</div>\n\n<div *ngIf=\"totalCount === 0 && !masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n\n<div *ngIf=\"!opportunitiesGroup.length && isLoaded && masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStageAssociated' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'stage']\">Please add some in the configuration section.</a>\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.card{box-shadow:2px 3px gray;padding-bottom:0}.main-div{border:1px solid rgb(175,175,175);border-radius:5px;margin-right:10px}.opportunities-board-title{background-color:#fafafa}.opportunities-board-title h4{color:#fff}.edit-button{cursor:pointer}.items-container{height:500px;overflow-y:scroll}.list-container{overflow:auto;width:100%}.opportunities-container{display:inline-block;margin:0 13px 13px 0;max-width:80%;min-width:280px;vertical-align:top}.opportunities-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:450px}.footer-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:10px}.opportunities-box{align-items:center;background:#fff;border:solid 1px rgb(204,204,204);box-sizing:border-box;color:#000000de;cursor:move;display:block;flex-direction:row;font-size:14px;justify-content:space-between;margin:5px;padding:10px 20px}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.opportunities-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.footer-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.add-opportunity-icon{color:#fff;font-size:16px}.collapse-column-toggle{background:#e6dfdf;border-radius:2px;cursor:pointer;font-size:16px;margin-left:10px}.collapse-column-toggle i{padding:0 8px}.dynamic-columns-wrapper{min-width:50px;width:50px!important}.dynamic-columns-wrapper .opportunities-list,.dynamic-columns-wrapper .footer-list{display:none}.dynamic-columns-wrapper .opportunities-board-title{flex-direction:column;height:100%;min-height:450px}.dynamic-columns-wrapper .opportunities-board-title .collapse-column-toggle{margin-left:0}.dynamic-columns-wrapper .opportunities-board-title .stage-name{padding-left:0!important;writing-mode:vertical-lr}.dynamic-columns-wrapper .opportunities-board-title .stage-name .badge{padding:8px 4px!important}.dynamic-columns-wrapper .opportunities-board-title .add-opportunity-icon{margin:0 auto!important}.crm-board-success{border-top:3px solid rgb(69,210,146)}.crm-board-success .stage-name .badge{background-color:#45d292}.crm-board-info{border-top:3px solid rgb(28,188,216)}.crm-board-info .stage-name .badge{background-color:#1cbcd8}.crm-board-danger{border-top:3px solid rgb(255,88,107)}.crm-board-danger .stage-name .badge{background-color:#ff586b}.crm-board-warning{border-top:3px solid rgb(251,171,0)}.crm-board-warning .stage-name .badge{background-color:#fbab00}.footer{background-color:#f8f9fa;padding:10px;display:flex;justify-content:space-between;flex-direction:row;align-items:center;border-radius:8px}.footer-item{display:flex;flex-direction:column;align-items:center}.footer-label{font-weight:700;color:#6c757d}.footer-value{color:#212529;font-size:1.1em}.crm-board-primary{border-top:3px solid var(--border-color, var(--tabs_bg))}.crm-board-primary .stage-name .badge{background-color:var(--background-color, var(--tabs_bg))}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.LazyImgDirective, selector: "img" }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i10.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i11.TranslocoPipe, name: "transloco" }] }); }
|
|
210
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmBoardComponent, deps: [{ token: i1.CrmService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
211
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmBoardComponent, selector: "pw-smart-crm-board", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row mb-4\"\n *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\"\n (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\"\n [value]=\"option.id\">{{ option.name }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-8 mt-2 mt-sm-0 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n</div>\n<div *ngIf=\"isLoaded\"\n class=\"list-container d-flex\"\n cdkDropList\n [cdkDropListData]=\"opportunitiesGroup\"\n (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup\n class=\"opportunities-container main-div crm-board-primary\"\n [class.dynamic-columns-wrapper]=\"group.stage.collapsed\"\n [style.--border-color]=\"group.stage.color_code\"\n *ngFor=\"let group of opportunitiesGroup\"\n cdkDrag\n [cdkDragData]=\"group\">\n <div class=\"opportunities-board-title d-flex align-items-center py-1\">\n <span class=\"collapse-column-toggle\">\n <i class=\"fas\"\n [ngClass]=\"{\n 'fa-angle-right': !group.stage.collapsed,\n 'fa-angle-down': group.stage.collapsed\n }\" (click)=\"toggleColumn($event, group)\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"stage-name mb-0 py-2 ps-4\">\n <span class=\"badge rounded-pill text-white px-3\" [style.--background-color]=\"group.stage.color_code\">{{ group.stage.name }}</span>\n </p>\n <span class=\"ms-auto me-4 add-opportunity-icon\">\n <a class=\"text-secondary\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{\n stage_id: group?.stage?.id,\n category: group.stage.crm_opportunity_category_ids\n }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div cdkDropList\n class=\"opportunities-list items-container\"\n [id]=\"group.stage.name\"\n [cdkDropListData]=\"group.opportunities\"\n (cdkDropListDropped)=\"dropItem($event)\"\n [cdkDropListConnectedTo]=\"getConnectedList()\">\n\n <div class=\"opportunities-box mb-3\"\n *ngFor=\"let item of group.opportunities\"\n cdkDrag\n [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\"\n class=\"float-end edit-button\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunities, item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"fw-bold mb-1\">{{ item.title }}</p>\n <a class=\"mb-1\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n item?.crm_account_id\n ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">\n {{ (item?.one_time_amount / 100 | currency) }} One-time / {{ (item?.monthly_amount / 100 | currency) }} MRR\n </p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\"\n [routerLink]=\"['/members', item?.owner[0]?.slug]\"><img alt=\"member image\"\n [src]=\"item?.owner[0]?.user_avatar[0]?.url\"\n [width]=\"'30'\"\n class=\"squared_logo float-end\"\n [height]=\"'30'\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/male.png';\" /></a>\n <p class=\"mb-1\">{{ item.starting_at | dateFormat }}</p>\n <p class=\"mb-1 badge bg-warning\">{{ item?.crm_opportunity_stage?.name }}</p>\n </div>\n </div>\n <div class=\"footer footer-list\">\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total One-Time:</span>\n <span class=\"footer-value\">{{ group.totals.oneTime / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total MRR:</span>\n <span class=\"footer-value\">{{ group.totals.mrr / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total Count:</span>\n <span class=\"footer-value\">{{ group.totals.count }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!masterStages?.length && isLoaded\">\n <pw-no-data [withImage]=\"false\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStages' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'categories']\">Take me to the configuration page.</a>\n </pw-no-data>\n</div>\n\n<div *ngIf=\"totalCount === 0 && !masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n\n<div *ngIf=\"!opportunitiesGroup.length && isLoaded && masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStageAssociated' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'stage']\">Please add some in the configuration section.</a>\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.card{box-shadow:2px 3px gray;padding-bottom:0}.main-div{border:1px solid rgb(175,175,175);border-radius:5px;margin-right:10px}.opportunities-board-title{background-color:#fafafa}.opportunities-board-title h4{color:#fff}.edit-button{cursor:pointer}.items-container{height:500px;overflow-y:scroll}.list-container{overflow:auto;width:100%}.opportunities-container{display:inline-block;margin:0 13px 13px 0;max-width:80%;min-width:280px;vertical-align:top}.opportunities-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:450px}.footer-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:10px}.opportunities-box{align-items:center;background:#fff;border:solid 1px rgb(204,204,204);box-sizing:border-box;color:#000000de;cursor:move;display:block;flex-direction:row;font-size:14px;justify-content:space-between;margin:5px;padding:10px 20px}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.opportunities-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.footer-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.add-opportunity-icon{color:#fff;font-size:16px}.collapse-column-toggle{background:#e6dfdf;border-radius:2px;cursor:pointer;font-size:16px;margin-left:10px}.collapse-column-toggle i{padding:0 8px}.dynamic-columns-wrapper{min-width:50px;width:50px!important}.dynamic-columns-wrapper .opportunities-list,.dynamic-columns-wrapper .footer-list{display:none}.dynamic-columns-wrapper .opportunities-board-title{flex-direction:column;height:100%;min-height:450px}.dynamic-columns-wrapper .opportunities-board-title .collapse-column-toggle{margin-left:0}.dynamic-columns-wrapper .opportunities-board-title .stage-name{padding-left:0!important;writing-mode:vertical-lr}.dynamic-columns-wrapper .opportunities-board-title .stage-name .badge{padding:8px 4px!important}.dynamic-columns-wrapper .opportunities-board-title .add-opportunity-icon{margin:0 auto!important}.crm-board-success{border-top:3px solid rgb(69,210,146)}.crm-board-success .stage-name .badge{background-color:#45d292}.crm-board-info{border-top:3px solid rgb(28,188,216)}.crm-board-info .stage-name .badge{background-color:#1cbcd8}.crm-board-danger{border-top:3px solid rgb(255,88,107)}.crm-board-danger .stage-name .badge{background-color:#ff586b}.crm-board-warning{border-top:3px solid rgb(251,171,0)}.crm-board-warning .stage-name .badge{background-color:#fbab00}.footer{background-color:#f8f9fa;padding:10px;display:flex;justify-content:space-between;flex-direction:row;align-items:center;border-radius:8px}.footer-item{display:flex;flex-direction:column;align-items:center}.footer-label{font-weight:700;color:#6c757d}.footer-value{color:#212529;font-size:1.1em}.crm-board-primary{border-top:3px solid var(--border-color, var(--tabs_bg))}.crm-board-primary .stage-name .badge{background-color:var(--background-color, var(--tabs_bg))}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.LazyImgDirective, selector: "img" }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i10.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i11.TranslocoPipe, name: "transloco" }] }); }
|
|
212
212
|
}
|
|
213
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmBoardComponent, decorators: [{
|
|
214
214
|
type: Component,
|
|
215
215
|
args: [{ selector: 'pw-smart-crm-board', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row mb-4\"\n *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\"\n (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\"\n [value]=\"option.id\">{{ option.name }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-8 mt-2 mt-sm-0 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n</div>\n<div *ngIf=\"isLoaded\"\n class=\"list-container d-flex\"\n cdkDropList\n [cdkDropListData]=\"opportunitiesGroup\"\n (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup\n class=\"opportunities-container main-div crm-board-primary\"\n [class.dynamic-columns-wrapper]=\"group.stage.collapsed\"\n [style.--border-color]=\"group.stage.color_code\"\n *ngFor=\"let group of opportunitiesGroup\"\n cdkDrag\n [cdkDragData]=\"group\">\n <div class=\"opportunities-board-title d-flex align-items-center py-1\">\n <span class=\"collapse-column-toggle\">\n <i class=\"fas\"\n [ngClass]=\"{\n 'fa-angle-right': !group.stage.collapsed,\n 'fa-angle-down': group.stage.collapsed\n }\" (click)=\"toggleColumn($event, group)\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"stage-name mb-0 py-2 ps-4\">\n <span class=\"badge rounded-pill text-white px-3\" [style.--background-color]=\"group.stage.color_code\">{{ group.stage.name }}</span>\n </p>\n <span class=\"ms-auto me-4 add-opportunity-icon\">\n <a class=\"text-secondary\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{\n stage_id: group?.stage?.id,\n category: group.stage.crm_opportunity_category_ids\n }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div cdkDropList\n class=\"opportunities-list items-container\"\n [id]=\"group.stage.name\"\n [cdkDropListData]=\"group.opportunities\"\n (cdkDropListDropped)=\"dropItem($event)\"\n [cdkDropListConnectedTo]=\"getConnectedList()\">\n\n <div class=\"opportunities-box mb-3\"\n *ngFor=\"let item of group.opportunities\"\n cdkDrag\n [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\"\n class=\"float-end edit-button\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunities, item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"fw-bold mb-1\">{{ item.title }}</p>\n <a class=\"mb-1\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n item?.crm_account_id\n ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">\n {{ (item?.one_time_amount / 100 | currency) }} One-time / {{ (item?.monthly_amount / 100 | currency) }} MRR\n </p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\"\n [routerLink]=\"['/members', item?.owner[0]?.slug]\"><img alt=\"member image\"\n [src]=\"item?.owner[0]?.user_avatar[0]?.url\"\n [width]=\"'30'\"\n class=\"squared_logo float-end\"\n [height]=\"'30'\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/male.png';\" /></a>\n <p class=\"mb-1\">{{ item.starting_at | dateFormat }}</p>\n <p class=\"mb-1 badge bg-warning\">{{ item?.crm_opportunity_stage?.name }}</p>\n </div>\n </div>\n <div class=\"footer footer-list\">\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total One-Time:</span>\n <span class=\"footer-value\">{{ group.totals.oneTime / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total MRR:</span>\n <span class=\"footer-value\">{{ group.totals.mrr / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total Count:</span>\n <span class=\"footer-value\">{{ group.totals.count }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!masterStages?.length && isLoaded\">\n <pw-no-data [withImage]=\"false\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStages' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'categories']\">Take me to the configuration page.</a>\n </pw-no-data>\n</div>\n\n<div *ngIf=\"totalCount === 0 && !masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n\n<div *ngIf=\"!opportunitiesGroup.length && isLoaded && masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStageAssociated' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'stage']\">Please add some in the configuration section.</a>\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.card{box-shadow:2px 3px gray;padding-bottom:0}.main-div{border:1px solid rgb(175,175,175);border-radius:5px;margin-right:10px}.opportunities-board-title{background-color:#fafafa}.opportunities-board-title h4{color:#fff}.edit-button{cursor:pointer}.items-container{height:500px;overflow-y:scroll}.list-container{overflow:auto;width:100%}.opportunities-container{display:inline-block;margin:0 13px 13px 0;max-width:80%;min-width:280px;vertical-align:top}.opportunities-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:450px}.footer-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:10px}.opportunities-box{align-items:center;background:#fff;border:solid 1px rgb(204,204,204);box-sizing:border-box;color:#000000de;cursor:move;display:block;flex-direction:row;font-size:14px;justify-content:space-between;margin:5px;padding:10px 20px}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.opportunities-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.footer-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.add-opportunity-icon{color:#fff;font-size:16px}.collapse-column-toggle{background:#e6dfdf;border-radius:2px;cursor:pointer;font-size:16px;margin-left:10px}.collapse-column-toggle i{padding:0 8px}.dynamic-columns-wrapper{min-width:50px;width:50px!important}.dynamic-columns-wrapper .opportunities-list,.dynamic-columns-wrapper .footer-list{display:none}.dynamic-columns-wrapper .opportunities-board-title{flex-direction:column;height:100%;min-height:450px}.dynamic-columns-wrapper .opportunities-board-title .collapse-column-toggle{margin-left:0}.dynamic-columns-wrapper .opportunities-board-title .stage-name{padding-left:0!important;writing-mode:vertical-lr}.dynamic-columns-wrapper .opportunities-board-title .stage-name .badge{padding:8px 4px!important}.dynamic-columns-wrapper .opportunities-board-title .add-opportunity-icon{margin:0 auto!important}.crm-board-success{border-top:3px solid rgb(69,210,146)}.crm-board-success .stage-name .badge{background-color:#45d292}.crm-board-info{border-top:3px solid rgb(28,188,216)}.crm-board-info .stage-name .badge{background-color:#1cbcd8}.crm-board-danger{border-top:3px solid rgb(255,88,107)}.crm-board-danger .stage-name .badge{background-color:#ff586b}.crm-board-warning{border-top:3px solid rgb(251,171,0)}.crm-board-warning .stage-name .badge{background-color:#fbab00}.footer{background-color:#f8f9fa;padding:10px;display:flex;justify-content:space-between;flex-direction:row;align-items:center;border-radius:8px}.footer-item{display:flex;flex-direction:column;align-items:center}.footer-label{font-weight:700;color:#6c757d}.footer-value{color:#212529;font-size:1.1em}.crm-board-primary{border-top:3px solid var(--border-color, var(--tabs_bg))}.crm-board-primary .stage-name .badge{background-color:var(--background-color, var(--tabs_bg))}\n"] }]
|
|
216
216
|
}], ctorParameters: () => [{ type: i1.CrmService }, { type: i0.Injector }] });
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUEyQnhELFlBQ1ksVUFBc0IsRUFDOUIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXJCbEMsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBSXhCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVSLDJCQUFzQixHQUFHLEVBQUUs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eyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5cbmltcG9ydCB7IENybU9wcG9ydHVuaXR5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tb3Bwb3J0dW5pdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IENybVN0YWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tc3RhZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0tYm9hcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZHJhZ2dlZE9wcG9ydHVuaXR5OiBhbnk7XG5cbiAgICBzdGFnZXM6IENybVN0YWdlW107XG5cbiAgICBhbGxPcHBvcnR1bml0aWVzOiBDcm1PcHBvcnR1bml0eVtdO1xuXG4gICAgb3Bwb3J0dW5pdGllc0dyb3VwID0gW107XG5cbiAgICBwcml2YXRlIGNoYW5nZWRTdGFnZTogYW55O1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGNhdGVnb3JpZXMgPSBbXTtcblxuICAgIHByaXZhdGUgYXZhaWxhYmxlT3Bwb3J0dW5pdGllcyA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICB0b3RhbENvdW50OiBudW1iZXI7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcblxuICAgIG1hc3RlclN0YWdlczogQ3JtU3RhZ2VbXSA9IFtdO1xuXG4gICAgc2VsZWN0ZWRDYXRlZ29yeUlkID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbigpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdGFnZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhbGwgY2F0ZWdvcmllcyAqL1xuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcyB8fCBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkID0gdGhpcy5jYXRlZ29yaWVzWzBdLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gb3QgZ2V0IG9wcG9ydHVuaXR5IHN0YWdlcyAqL1xuICAgIHByaXZhdGUgZ2V0U3RhZ2VzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QXZhaWxhYmxlT3Bwb3J0dW5pdHlTdGFnZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFnZXMgPSByZXNwb25zZS5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcztcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU3RhZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NybV9vcHBvcnR1bml0eV9zdGFnZXM7XG4gICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXRpZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhbGwgb3Bwb3J0dW5pdGllcyAqL1xuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdGllcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsT3Bwb3J0dW5pdGllcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXRpZXMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzID0gcmVzcG9uc2U/LmNybV9vcHBvcnR1bml0aWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcy5maWx0ZXIob3Bwb3J0dW5pdHkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkIHx8IG51bGwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmVlZnkobGlzdCkge1xuICAgICAgICBjb25zdCBpZEF0dHIgPSAnaWQnO1xuICAgICAgICBjb25zdCBwYXJlbnRBdHRyID0gJ3ByZXZpb3VzX3N0YWdlX2lkJztcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BdHRyID0gJ2NoaWxkcmVuJztcblxuICAgICAgICBjb25zdCB0cmVlTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBsb29rdXAgPSB7fTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBsb29rdXBbb2JqW2lkQXR0cl1dID0gb2JqO1xuICAgICAgICAgICAgb2JqW2NoaWxkcmVuQXR0cl0gPSBbXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpc3QuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgICAgaWYgKG9ialtwYXJlbnRBdHRyXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb29rdXBbb2JqW3BhcmVudEF0dHJdXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cFtvYmpbcGFyZW50QXR0cl1dW2NoaWxkcmVuQXR0cl0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyZWVMaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbihhcnIpIHtcbiAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZmxhdHRlbihjdXJyZW50LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIG9wcG9ydHVuaXRpZXMgZ3JvdXAgYnkgc3RhZ2VzICovXG4gICAgcHJpdmF0ZSBvcHBvcnR1bml0aWVzR3JvdXBzKHZhbD86IGFueSkge1xuICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cCA9IFtdO1xuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMubWFzdGVyU3RhZ2VzO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLmZpbHRlcih4ID0+IHguY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcy5pbmNsdWRlcyh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGEuaWQgPiBiLmlkID8gMSA6IGIuaWQgPiBhLmlkID8gLTEgOiAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLnRyZWVmeSh0aGlzLnN0YWdlcyk7XG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5mbGF0dGVuKHRlbXApO1xuXG4gICAgICAgIHRoaXMuc3RhZ2VzLmZvckVhY2goc3RhZ2UgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3Bwb3J0dW5pdGllcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzOiBbXSxcbiAgICAgICAgICAgICAgICB0b3RhbHM6IHsgb25lVGltZTogMCwgbXJyOiAwLCBjb3VudDogMCB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdHkgPT4gb3Bwb3J0dW5pdHkuY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkID09PSBzdGFnZS5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMub3Bwb3J0dW5pdGllcyA9IGRhdGEuc29ydCgoYSwgYikgPT4gYi5tb250aGx5X2Ftb3VudCAtIGEubW9udGhseV9hbW91bnQpO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5zdGFnZSA9IHN0YWdlO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy50b3RhbHMub25lVGltZSA9IGRhdGEucmVkdWNlKChzdW0sIG9wcCkgPT4gc3VtICsgb3BwLm9uZV90aW1lX2Ftb3VudCwgMCk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5tcnIgPSBkYXRhLnJlZHVjZSgoc3VtLCBvcHApID0+IHN1bSArIG9wcC5tb250aGx5X2Ftb3VudCwgMCk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5jb3VudCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAucHVzaChvcHBvcnR1bml0aWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGZpbHRlciBvcHBvcnR1bml0aWVzIGJ5IGNhdGVnb3JpZXMgKi9cbiAgICBvbkNoYW5nZUNhdGVnb3J5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBOdW1iZXIoZXZlbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCA9IGNhdGVnb3JpZXM7XG4gICAgICAgIGlmIChjYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSB0aGlzLmF2YWlsYWJsZU9wcG9ydHVuaXRpZXMuZmlsdGVyKG9wcG9ydHVuaXR5ID0+XG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdHk/LmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHM/LmluY2x1ZGVzKGNhdGVnb3JpZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cHMoY2F0ZWdvcmllcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSB0aGlzLmF2YWlsYWJsZU9wcG9ydHVuaXRpZXM7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXM/Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJvcEl0ZW0oZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xuICAgICAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE9wcG9ydHVuaXR5ID0gZXZlbnQ/Lml0ZW0/LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRTdGFnZSA9IHRoaXMuc3RhZ2VzLmZpbmQoc3RhZ2UgPT4gc3RhZ2UubmFtZSA9PT0gZXZlbnQ/LmNvbnRhaW5lcj8uaWQpPy5pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wcG9ydHVuaXRpZXNEZXRhaWxzID0geyAuLi50aGlzLmRyYWdnZWRPcHBvcnR1bml0eSB9O1xuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXNEZXRhaWxzWydjcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQnXSA9IHRoaXMuY2hhbmdlZFN0YWdlO1xuICAgICAgICAgICAgICAgIEhlbHBlclNlcnZpY2UuZGVsZXRlUHJvcHMob3Bwb3J0dW5pdGllc0RldGFpbHMsIFtcbiAgICAgICAgICAgICAgICAgICAgJ2NybV9hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2NybV9vcHBvcnR1bml0eV9zdGFnZScsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fY29udGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICdvd25lcidcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZU9wcG9ydHVuaXRpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlscy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXNEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0aWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVXBkYXRlZE1lc3NhZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0aWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE9wcG9ydHVuaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRTdGFnZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q29ubmVjdGVkTGlzdCgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cC5tYXAoeCA9PiBgJHt4LnN0YWdlLm5hbWV9YCk7XG4gICAgfVxuXG4gICAgZHJvcEdyb3VwKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH1cblxuICAgIHRvZ2dsZUNvbHVtbihldmVudCwgZ3JvdXApIHtcbiAgICAgICAgJChldmVudC50YXJnZXQpLnRvZ2dsZUNsYXNzKCdmYS1hbmdsZS1yaWdodCBmYS1hbmdsZS1kb3duJyk7XG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcubWFpbi1kaXYnKS50b2dnbGVDbGFzcygnZHluYW1pYy1jb2x1bW5zLXdyYXBwZXInKTtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZWRpdFN0YWdlKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgZ3JvdXAuc3RhZ2U/LmlkLCB7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkOiAhZ3JvdXAuc3RhZ2U/LmNvbGxhcHNlZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTG9hZGVkXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicm93IG1iLTRcIlxuICAqbmdJZj1cImlzTG9hZGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUNhdGVnb3J5KCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY2F0ZWdvcmllc1wiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj57eyBvcHRpb24ubmFtZSB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tOCBtdC0yIG10LXNtLTAgbWItM1wiPlxuICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICBkYXRhLWN5PVwiYWRkLW9wcG9ydHVuaXRpZXNcIlxuICAgICAgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdHlBZGRdXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAge3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5BZGRPcHBvcnR1bml0eScgfCB0cmFuc2xvY28gfX1cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNMb2FkZWRcIlxuICBjbGFzcz1cImxpc3QtY29udGFpbmVyIGQtZmxleFwiXG4gIGNka0Ryb3BMaXN0XG4gIFtjZGtEcm9wTGlzdERhdGFdPVwib3Bwb3J0dW5pdGllc0dyb3VwXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wR3JvdXAoJGV2ZW50KVwiPlxuICA8ZGl2IGNka0Ryb3BMaXN0R3JvdXBcbiAgICBjbGFzcz1cIm9wcG9ydHVuaXRpZXMtY29udGFpbmVyIG1haW4tZGl2IGNybS1ib2FyZC1wcmltYXJ5XCJcbiAgICBbY2xhc3MuZHluYW1pYy1jb2x1bW5zLXdyYXBwZXJdPVwiZ3JvdXAuc3RhZ2UuY29sbGFwc2VkXCJcbiAgICBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiZ3JvdXAuc3RhZ2UuY29sb3JfY29kZVwiXG4gICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIG9wcG9ydHVuaXRpZXNHcm91cFwiXG4gICAgY2RrRHJhZ1xuICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWJvYXJkLXRpdGxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2xsYXBzZS1jb2x1bW4tdG9nZ2xlXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdmYS1hbmdsZS1yaWdodCc6ICFncm91cC5zdGFnZS5jb2xsYXBzZWQsXG4gICAgICAgICAgJ2ZhLWFuZ2xlLWRvd24nOiBncm91cC5zdGFnZS5jb2xsYXBzZWRcbiAgICAgICAgfVwiIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oJGV2ZW50LCBncm91cClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cInN0YWdlLW5hbWUgbWItMCBweS0yIHBzLTRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC13aGl0ZSBweC0zXCIgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJncm91cC5zdGFnZS5jb2xvcl9jb2RlXCI+e3sgZ3JvdXAuc3RhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byBtZS00IGFkZC1vcHBvcnR1bml0eS1pY29uXCI+XG4gICAgICAgIDxhIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm9wcG9ydHVuaXR5QWRkXVwiXG4gICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlX2lkOiBncm91cD8uc3RhZ2U/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGdyb3VwLnN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHNcbiAgICAgICAgICAgICAgICAgICAgfVwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cy1zcXVhcmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2RrRHJvcExpc3RcbiAgICAgIGNsYXNzPVwib3Bwb3J0dW5pdGllcy1saXN0IGl0ZW1zLWNvbnRhaW5lclwiXG4gICAgICBbaWRdPVwiZ3JvdXAuc3RhZ2UubmFtZVwiXG4gICAgICBbY2RrRHJvcExpc3REYXRhXT1cImdyb3VwLm9wcG9ydHVuaXRpZXNcIlxuICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wSXRlbSgkZXZlbnQpXCJcbiAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImdldENvbm5lY3RlZExpc3QoKVwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwib3Bwb3J0dW5pdGllcy1ib3ggbWItM1wiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLm9wcG9ydHVuaXRpZXNcIlxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCI+XG4gICAgICAgIDxzcGFuIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICBjbGFzcz1cImZsb2F0LWVuZCBlZGl0LWJ1dHRvblwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdGllcywgaXRlbS5pZF1cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxwIGNsYXNzPVwiZnctYm9sZCBtYi0xXCI+e3sgaXRlbS50aXRsZSB9fTwvcD5cbiAgICAgICAgPGEgY2xhc3M9XCJtYi0xXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLmFjY291bnRJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY3JtX2FjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgXVwiPnt7IGl0ZW0/LmNybV9hY2NvdW50Py5uYW1lIH19PC9hPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAge3sgKGl0ZW0/Lm9uZV90aW1lX2Ftb3VudCAvIDEwMCB8IGN1cnJlbmN5KSB9fSBPbmUtdGltZSAvIHt7IChpdGVtPy5tb250aGx5X2Ftb3VudCAvIDEwMCB8IGN1cnJlbmN5KSB9fSBNUlJcbiAgICAgICAgICA8L3A+XG4gICAgICAgIDxhICpuZ0lmPVwiaXRlbT8ub3duZXJbMF0/LnVzZXJfYXZhdGFyXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgaXRlbT8ub3duZXJbMF0/LnNsdWddXCI+PGltZyBhbHQ9XCJtZW1iZXIgaW1hZ2VcIlxuICAgICAgICAgICAgW3NyY109XCJpdGVtPy5vd25lclswXT8udXNlcl9hdmF0YXJbMF0/LnVybFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzMwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNxdWFyZWRfbG9nbyBmbG9hdC1lbmRcIlxuICAgICAgICAgICAgW2hlaWdodF09XCInMzAnXCJcbiAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nYXNzZXRzL2ltZy9pY29ucy9tYWxlLnBuZyc7XCIgLz48L2E+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IGl0ZW0uc3RhcnRpbmdfYXQgfCBkYXRlRm9ybWF0IH19PC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTEgYmFkZ2UgYmctd2FybmluZ1wiPnt7IGl0ZW0/LmNybV9vcHBvcnR1bml0eV9zdGFnZT8ubmFtZSB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgZm9vdGVyLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBPbmUtVGltZTo8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMub25lVGltZSAvIDEwMCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBNUlI6PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLm1yciAvIDEwMCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBDb3VudDo8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMuY291bnQgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIiFtYXN0ZXJTdGFnZXM/Lmxlbmd0aCAmJiBpc0xvYWRlZFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cImZhbHNlXCIgW21lc3NhZ2VdPVwiJ0NybS5PcHBvcnR1bml0aWVzQm9hcmRNZXNzYWdlcy5Ob1N0YWdlcycgfCB0cmFuc2xvY29cIj5cbiAgICA8YSAjY29udGVudCBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5jb25maWd1cmF0aW9ucywgJ2NhdGVnb3JpZXMnXVwiPlRha2UgbWUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFnZS48L2E+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwidG90YWxDb3VudCA9PT0gMCAmJiAhbWFzdGVyU3RhZ2VzLmxlbmd0aCAmJiBjYXRlZ29yaWVzLmxlbmd0aFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQ3JtLk9wcG9ydHVuaXRpZXNCb2FyZE1lc3NhZ2VzLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIW9wcG9ydHVuaXRpZXNHcm91cC5sZW5ndGggJiYgaXNMb2FkZWQgJiYgbWFzdGVyU3RhZ2VzLmxlbmd0aCAmJiBjYXRlZ29yaWVzLmxlbmd0aFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQ3JtLk9wcG9ydHVuaXRpZXNCb2FyZE1lc3NhZ2VzLk5vU3RhZ2VBc3NvY2lhdGVkJyB8IHRyYW5zbG9jb1wiPlxuICAgIDxhICNjb250ZW50IFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLmNvbmZpZ3VyYXRpb25zLCAnc3RhZ2UnXVwiPlBsZWFzZSBhZGQgc29tZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uLjwvYT5cbiAgPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4iXX0=
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUEyQnhELFlBQ1ksVUFBc0IsRUFDOUIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXJCbEMsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBSXhCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVSLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQU1wQyxZQUFPLEdBQUcsT0FBTyxDQUFDO1FBRWxCLGlCQUFZLEdBQWUsRUFBRSxDQUFDO1FBRTlCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztJQU92QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFDQUFxQztJQUM3QiwyQkFBMkI7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwRixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsRUFBRSwwQkFBMEIsSUFBSSxFQUFFLENBQUM7WUFDN0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx5Q0FBeUM7SUFDakMsU0FBUztRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsZ0NBQWdDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsZ0NBQWdDLENBQUM7WUFDOUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0NBQXdDO0lBQ2hDLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsVUFBVTthQUNWLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7WUFFaEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDckUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDL0UsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7WUFDcEQsQ0FBQztZQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUFJO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxPQUFPLENBQUMsR0FBRztRQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ3hDLG1CQUFtQixDQUFDLEdBQVM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDaEMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLDZDQUE2QztRQUM3QyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sYUFBYSxHQUFHO2dCQUNsQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxhQUFhLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDM0MsQ0FBQztZQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLHdCQUF3QixLQUFLLEtBQUssQ0FBQyxFQUFFLENBQ25FLENBQUM7WUFDRixhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2RixhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUM1QixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztRQUNyQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDckUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDbEUsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztZQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztZQUNoRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUE0QjtRQUNqQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ0osaUJBQWlCLENBQ2IsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVELG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDckUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtvQkFDNUMsYUFBYTtvQkFDYix1QkFBdUI7b0JBQ3ZCLDRCQUE0QjtvQkFDNUIsYUFBYTtvQkFDYixPQUFPO2lCQUNWLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVTtxQkFDVixtQkFBbUIsQ0FDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQ3JCLG9CQUFvQixDQUFDLEVBQUUsRUFDdkIsb0JBQW9CLENBQ3ZCO3FCQUNBLFNBQVMsQ0FBQztvQkFDUCxJQUFJLEVBQUUsR0FBRyxFQUFFO3dCQUNQLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDdEIseUNBQXlDLENBQzVDLENBQ0osQ0FBQztvQkFDTixDQUFDO29CQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7d0JBQ1IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQy9CLENBQUM7aUJBQ0osQ0FBQyxDQUFDO2dCQUNQLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBNEI7UUFDbEMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVU7YUFDVixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDL0MsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTO1NBQ3JDLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBclBRLHNCQUFzQjttR0FBdEIsc0JBQXNCLGlGQ2hCbkMsOC9LQTRIQTs7NEZENUdhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDSSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5cbmltcG9ydCB7IENybU9wcG9ydHVuaXR5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tb3Bwb3J0dW5pdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IENybVN0YWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tc3RhZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0tYm9hcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZHJhZ2dlZE9wcG9ydHVuaXR5OiBhbnk7XG5cbiAgICBzdGFnZXM6IENybVN0YWdlW107XG5cbiAgICBhbGxPcHBvcnR1bml0aWVzOiBDcm1PcHBvcnR1bml0eVtdO1xuXG4gICAgb3Bwb3J0dW5pdGllc0dyb3VwID0gW107XG5cbiAgICBwcml2YXRlIGNoYW5nZWRTdGFnZTogYW55O1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGNhdGVnb3JpZXMgPSBbXTtcblxuICAgIHByaXZhdGUgYXZhaWxhYmxlT3Bwb3J0dW5pdGllcyA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICB0b3RhbENvdW50OiBudW1iZXI7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcblxuICAgIG1hc3RlclN0YWdlczogQ3JtU3RhZ2VbXSA9IFtdO1xuXG4gICAgc2VsZWN0ZWRDYXRlZ29yeUlkID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbigpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdGFnZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhbGwgY2F0ZWdvcmllcyAqL1xuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcyB8fCBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkID0gdGhpcy5jYXRlZ29yaWVzWzBdLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gb3QgZ2V0IG9wcG9ydHVuaXR5IHN0YWdlcyAqL1xuICAgIHByaXZhdGUgZ2V0U3RhZ2VzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QXZhaWxhYmxlT3Bwb3J0dW5pdHlTdGFnZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFnZXMgPSByZXNwb25zZS5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcztcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU3RhZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NybV9vcHBvcnR1bml0eV9zdGFnZXM7XG4gICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXRpZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhbGwgb3Bwb3J0dW5pdGllcyAqL1xuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdGllcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsT3Bwb3J0dW5pdGllcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXRpZXMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzID0gcmVzcG9uc2U/LmNybV9vcHBvcnR1bml0aWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcy5maWx0ZXIob3Bwb3J0dW5pdHkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkIHx8IG51bGwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmVlZnkobGlzdCkge1xuICAgICAgICBjb25zdCBpZEF0dHIgPSAnaWQnO1xuICAgICAgICBjb25zdCBwYXJlbnRBdHRyID0gJ3ByZXZpb3VzX3N0YWdlX2lkJztcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BdHRyID0gJ2NoaWxkcmVuJztcblxuICAgICAgICBjb25zdCB0cmVlTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBsb29rdXAgPSB7fTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBsb29rdXBbb2JqW2lkQXR0cl1dID0gb2JqO1xuICAgICAgICAgICAgb2JqW2NoaWxkcmVuQXR0cl0gPSBbXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpc3QuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgICAgaWYgKG9ialtwYXJlbnRBdHRyXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb29rdXBbb2JqW3BhcmVudEF0dHJdXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cFtvYmpbcGFyZW50QXR0cl1dW2NoaWxkcmVuQXR0cl0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyZWVMaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbihhcnIpIHtcbiAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZmxhdHRlbihjdXJyZW50LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIG9wcG9ydHVuaXRpZXMgZ3JvdXAgYnkgc3RhZ2VzICovXG4gICAgcHJpdmF0ZSBvcHBvcnR1bml0aWVzR3JvdXBzKHZhbD86IGFueSkge1xuICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cCA9IFtdO1xuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMubWFzdGVyU3RhZ2VzO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLmZpbHRlcih4ID0+IHguY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcy5pbmNsdWRlcyh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGEuaWQgPiBiLmlkID8gMSA6IGIuaWQgPiBhLmlkID8gLTEgOiAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLnRyZWVmeSh0aGlzLnN0YWdlcyk7XG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5mbGF0dGVuKHRlbXApO1xuXG4gICAgICAgIHRoaXMuc3RhZ2VzLmZvckVhY2goc3RhZ2UgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3Bwb3J0dW5pdGllcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzOiBbXSxcbiAgICAgICAgICAgICAgICB0b3RhbHM6IHsgb25lVGltZTogMCwgbXJyOiAwLCBjb3VudDogMCB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdHkgPT4gb3Bwb3J0dW5pdHkuY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkID09PSBzdGFnZS5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMub3Bwb3J0dW5pdGllcyA9IGRhdGEuc29ydCgoYSwgYikgPT4gYi5tb250aGx5X2Ftb3VudCAtIGEubW9udGhseV9hbW91bnQpO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5zdGFnZSA9IHN0YWdlO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy50b3RhbHMub25lVGltZSA9IGRhdGEucmVkdWNlKChzdW0sIG9wcCkgPT4gc3VtICsgb3BwLm9uZV90aW1lX2Ftb3VudCwgMCk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5tcnIgPSBkYXRhLnJlZHVjZSgoc3VtLCBvcHApID0+IHN1bSArIG9wcC5tb250aGx5X2Ftb3VudCwgMCk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5jb3VudCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAucHVzaChvcHBvcnR1bml0aWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGZpbHRlciBvcHBvcnR1bml0aWVzIGJ5IGNhdGVnb3JpZXMgKi9cbiAgICBvbkNoYW5nZUNhdGVnb3J5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBOdW1iZXIoZXZlbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCA9IGNhdGVnb3JpZXM7XG4gICAgICAgIGlmIChjYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSB0aGlzLmF2YWlsYWJsZU9wcG9ydHVuaXRpZXMuZmlsdGVyKG9wcG9ydHVuaXR5ID0+XG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdHk/LmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHM/LmluY2x1ZGVzKGNhdGVnb3JpZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cHMoY2F0ZWdvcmllcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSB0aGlzLmF2YWlsYWJsZU9wcG9ydHVuaXRpZXM7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXM/Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJvcEl0ZW0oZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xuICAgICAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE9wcG9ydHVuaXR5ID0gZXZlbnQ/Lml0ZW0/LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRTdGFnZSA9IHRoaXMuc3RhZ2VzLmZpbmQoc3RhZ2UgPT4gc3RhZ2UubmFtZSA9PT0gZXZlbnQ/LmNvbnRhaW5lcj8uaWQpPy5pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wcG9ydHVuaXRpZXNEZXRhaWxzID0geyAuLi50aGlzLmRyYWdnZWRPcHBvcnR1bml0eSB9O1xuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXNEZXRhaWxzWydjcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQnXSA9IHRoaXMuY2hhbmdlZFN0YWdlO1xuICAgICAgICAgICAgICAgIEhlbHBlclNlcnZpY2UuZGVsZXRlUHJvcHMob3Bwb3J0dW5pdGllc0RldGFpbHMsIFtcbiAgICAgICAgICAgICAgICAgICAgJ2NybV9hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2NybV9vcHBvcnR1bml0eV9zdGFnZScsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fY29udGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICdvd25lcidcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZU9wcG9ydHVuaXRpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlscy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXNEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0aWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVXBkYXRlZE1lc3NhZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0aWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE9wcG9ydHVuaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRTdGFnZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q29ubmVjdGVkTGlzdCgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cC5tYXAoeCA9PiBgJHt4LnN0YWdlLm5hbWV9YCk7XG4gICAgfVxuXG4gICAgZHJvcEdyb3VwKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH1cblxuICAgIHRvZ2dsZUNvbHVtbihldmVudCwgZ3JvdXApIHtcbiAgICAgICAgJChldmVudC50YXJnZXQpLnRvZ2dsZUNsYXNzKCdmYS1hbmdsZS1yaWdodCBmYS1hbmdsZS1kb3duJyk7XG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcubWFpbi1kaXYnKS50b2dnbGVDbGFzcygnZHluYW1pYy1jb2x1bW5zLXdyYXBwZXInKTtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZWRpdFN0YWdlKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgZ3JvdXAuc3RhZ2U/LmlkLCB7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkOiAhZ3JvdXAuc3RhZ2U/LmNvbGxhcHNlZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTG9hZGVkXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicm93IG1iLTRcIlxuICAqbmdJZj1cImlzTG9hZGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUNhdGVnb3J5KCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY2F0ZWdvcmllc1wiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj57eyBvcHRpb24ubmFtZSB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tOCBtdC0yIG10LXNtLTAgbWItM1wiPlxuICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICBkYXRhLWN5PVwiYWRkLW9wcG9ydHVuaXRpZXNcIlxuICAgICAgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdHlBZGRdXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAge3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5BZGRPcHBvcnR1bml0eScgfCB0cmFuc2xvY28gfX1cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNMb2FkZWRcIlxuICBjbGFzcz1cImxpc3QtY29udGFpbmVyIGQtZmxleFwiXG4gIGNka0Ryb3BMaXN0XG4gIFtjZGtEcm9wTGlzdERhdGFdPVwib3Bwb3J0dW5pdGllc0dyb3VwXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wR3JvdXAoJGV2ZW50KVwiPlxuICA8ZGl2IGNka0Ryb3BMaXN0R3JvdXBcbiAgICBjbGFzcz1cIm9wcG9ydHVuaXRpZXMtY29udGFpbmVyIG1haW4tZGl2IGNybS1ib2FyZC1wcmltYXJ5XCJcbiAgICBbY2xhc3MuZHluYW1pYy1jb2x1bW5zLXdyYXBwZXJdPVwiZ3JvdXAuc3RhZ2UuY29sbGFwc2VkXCJcbiAgICBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiZ3JvdXAuc3RhZ2UuY29sb3JfY29kZVwiXG4gICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIG9wcG9ydHVuaXRpZXNHcm91cFwiXG4gICAgY2RrRHJhZ1xuICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWJvYXJkLXRpdGxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2xsYXBzZS1jb2x1bW4tdG9nZ2xlXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdmYS1hbmdsZS1yaWdodCc6ICFncm91cC5zdGFnZS5jb2xsYXBzZWQsXG4gICAgICAgICAgJ2ZhLWFuZ2xlLWRvd24nOiBncm91cC5zdGFnZS5jb2xsYXBzZWRcbiAgICAgICAgfVwiIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oJGV2ZW50LCBncm91cClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cInN0YWdlLW5hbWUgbWItMCBweS0yIHBzLTRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC13aGl0ZSBweC0zXCIgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJncm91cC5zdGFnZS5jb2xvcl9jb2RlXCI+e3sgZ3JvdXAuc3RhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byBtZS00IGFkZC1vcHBvcnR1bml0eS1pY29uXCI+XG4gICAgICAgIDxhIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm9wcG9ydHVuaXR5QWRkXVwiXG4gICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlX2lkOiBncm91cD8uc3RhZ2U/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGdyb3VwLnN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHNcbiAgICAgICAgICAgICAgICAgICAgfVwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cy1zcXVhcmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2RrRHJvcExpc3RcbiAgICAgIGNsYXNzPVwib3Bwb3J0dW5pdGllcy1saXN0IGl0ZW1zLWNvbnRhaW5lclwiXG4gICAgICBbaWRdPVwiZ3JvdXAuc3RhZ2UubmFtZVwiXG4gICAgICBbY2RrRHJvcExpc3REYXRhXT1cImdyb3VwLm9wcG9ydHVuaXRpZXNcIlxuICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wSXRlbSgkZXZlbnQpXCJcbiAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImdldENvbm5lY3RlZExpc3QoKVwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwib3Bwb3J0dW5pdGllcy1ib3ggbWItM1wiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLm9wcG9ydHVuaXRpZXNcIlxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCI+XG4gICAgICAgIDxzcGFuIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICBjbGFzcz1cImZsb2F0LWVuZCBlZGl0LWJ1dHRvblwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdGllcywgaXRlbS5pZF1cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxwIGNsYXNzPVwiZnctYm9sZCBtYi0xXCI+e3sgaXRlbS50aXRsZSB9fTwvcD5cbiAgICAgICAgPGEgY2xhc3M9XCJtYi0xXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLmFjY291bnRJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY3JtX2FjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgXVwiPnt7IGl0ZW0/LmNybV9hY2NvdW50Py5uYW1lIH19PC9hPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAge3sgKGl0ZW0/Lm9uZV90aW1lX2Ftb3VudCAvIDEwMCB8IGN1cnJlbmN5KSB9fSBPbmUtdGltZSAvIHt7IChpdGVtPy5tb250aGx5X2Ftb3VudCAvIDEwMCB8IGN1cnJlbmN5KSB9fSBNUlJcbiAgICAgICAgICA8L3A+XG4gICAgICAgIDxhICpuZ0lmPVwiaXRlbT8ub3duZXJbMF0/LnVzZXJfYXZhdGFyXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgaXRlbT8ub3duZXJbMF0/LnNsdWddXCI+PGltZyBhbHQ9XCJtZW1iZXIgaW1hZ2VcIlxuICAgICAgICAgICAgW3NyY109XCJpdGVtPy5vd25lclswXT8udXNlcl9hdmF0YXJbMF0/LnVybFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzMwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNxdWFyZWRfbG9nbyBmbG9hdC1lbmRcIlxuICAgICAgICAgICAgW2hlaWdodF09XCInMzAnXCJcbiAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nYXNzZXRzL2ltZy9pY29ucy9tYWxlLnBuZyc7XCIgLz48L2E+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IGl0ZW0uc3RhcnRpbmdfYXQgfCBkYXRlRm9ybWF0IH19PC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTEgYmFkZ2UgYmctd2FybmluZ1wiPnt7IGl0ZW0/LmNybV9vcHBvcnR1bml0eV9zdGFnZT8ubmFtZSB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgZm9vdGVyLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBPbmUtVGltZTo8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMub25lVGltZSAvIDEwMCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBNUlI6PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLm1yciAvIDEwMCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBDb3VudDo8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMuY291bnQgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIiFtYXN0ZXJTdGFnZXM/Lmxlbmd0aCAmJiBpc0xvYWRlZFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cImZhbHNlXCIgW21lc3NhZ2VdPVwiJ0NybS5PcHBvcnR1bml0aWVzQm9hcmRNZXNzYWdlcy5Ob1N0YWdlcycgfCB0cmFuc2xvY29cIj5cbiAgICA8YSAjY29udGVudCBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5jb25maWd1cmF0aW9ucywgJ2NhdGVnb3JpZXMnXVwiPlRha2UgbWUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFnZS48L2E+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwidG90YWxDb3VudCA9PT0gMCAmJiAhbWFzdGVyU3RhZ2VzLmxlbmd0aCAmJiBjYXRlZ29yaWVzLmxlbmd0aFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQ3JtLk9wcG9ydHVuaXRpZXNCb2FyZE1lc3NhZ2VzLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIW9wcG9ydHVuaXRpZXNHcm91cC5sZW5ndGggJiYgaXNMb2FkZWQgJiYgbWFzdGVyU3RhZ2VzLmxlbmd0aCAmJiBjYXRlZ29yaWVzLmxlbmd0aFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQ3JtLk9wcG9ydHVuaXRpZXNCb2FyZE1lc3NhZ2VzLk5vU3RhZ2VBc3NvY2lhdGVkJyB8IHRyYW5zbG9jb1wiPlxuICAgIDxhICNjb250ZW50IFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLmNvbmZpZ3VyYXRpb25zLCAnc3RhZ2UnXVwiPlBsZWFzZSBhZGQgc29tZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uLjwvYT5cbiAgPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4iXX0=
|