@posiwise/smart-crm 0.0.15 → 0.0.17
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 +22 -8
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +6 -3
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +5 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +16 -6
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +14 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +14 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +14 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +15 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +25 -12
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +6 -3
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +24 -9
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +19 -9
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +3 -2
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +2 -3
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +13 -6
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +6 -3
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +8 -4
- package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.mjs +3 -3
- package/esm2022/lib/shared/interface/crm-stages.interface.mjs +1 -1
- package/fesm2022/posiwise-smart-crm.mjs +186 -75
- package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
- package/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.d.ts +1 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.d.ts +5 -2
- package/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.d.ts +1 -0
- package/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.d.ts +2 -0
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.d.ts +1 -0
- package/lib/shared/interface/crm-stages.interface.d.ts +1 -1
- package/package.json +1 -1
|
@@ -94,7 +94,8 @@ export class SmartCrmCommunicationsComponent extends AppBaseComponent {
|
|
|
94
94
|
this.crmService.deleteCrmNewsletter(this.subscription?.id, id).subscribe(() => {
|
|
95
95
|
this.getAllCommunications({
|
|
96
96
|
page: this.page,
|
|
97
|
-
page_size: PAGE_SIZE
|
|
97
|
+
page_size: PAGE_SIZE,
|
|
98
|
+
search: this.searchText
|
|
98
99
|
});
|
|
99
100
|
this.toast.success(this.translation.translate('Crm.CommunicationsMessage.DeletedMessage'));
|
|
100
101
|
});
|
|
@@ -147,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
147
148
|
type: Component,
|
|
148
149
|
args: [{ selector: 'pw-smart-crm-communications', template: "<div class=\"row\">\n <div class=\"col-12\">\n <h2>Email Marketing</h2>\n <p>In this section you can create and manage your email marketing strategy.</p>\n </div>\n <div class=\"col-12 col-md-12 text-end\">\n <button class=\"btn btn-sm btn-outline-primary\"\n [routerLink]=\"['/' + subscription?.slug + routers.marketingDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add New Email' }}\n </button>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-3 table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_newsletters\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search communication emails...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"title\">\n {{ 'Crm.CommunicationsMessage.Title' | transloco }}\n <p-sortIcon field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"body\">\n {{ 'Crm.CommunicationsMessage.Body' | transloco }}\n <p-sortIcon field=\"body\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"location\">\n {{ 'Crm.CommunicationsMessage.Location' | transloco }}\n <p-sortIcon field=\"location'\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"send_until\">\n {{ 'Crm.CommunicationsMessage.SendUntil' | transloco }}\n <p-sortIcon field=\"send_until\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_pushed\">\n {{ 'Crm.CommunicationsMessage.Pushed' | transloco }}\n <p-sortIcon field=\"is_pushed\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_sent\">\n {{ 'Crm.CommunicationsMessage.Sent' | transloco }}\n <p-sortIcon field=\"is_sent\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-column\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr class=\"table-row\">\n <td data-head=\"Title\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.marketing, item.id]\">{{\n item.title\n }}</a>\n </td>\n <td data-head=\"Body\"\n [innerHtml]=\"item.body | removeHtml | textTruncate: 200\"></td>\n <td data-head=\"Location\">{{ item.location }}</td>\n <td data-head=\"Send Until\">{{ item.send_until | dateFormat }}</td>\n <td data-head=\"Pushed?\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_pushed }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!item?.is_pushed }}</span>\n </td>\n <td data-head=\"Sent?\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_sent }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!item?.is_sent }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Send test email\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-comment-alt cta1-icon\"\n (click)=\"sendTestEmail(item)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-edit edit-icon\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.marketingDetails,\n item.id\n ]\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(item.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Newsletter recipients\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-fw fa-list\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.marketing,\n item.id\n ]\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n<div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n</div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CommunicationsMessage.NoCommunicationMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\"\n *ngIf=\"isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"communicationsInsight?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"communicationsInsight\"\n [paginator]=\"communicationsInsight.length !== 0\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"communicationsInsight.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Title' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Value' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Reason' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-insight>\n <tr>\n <td data-head=\"Title\">{{ insight.title }}</td>\n <td data-head=\"Value\">{{ insight.value }}</td>\n <td data-head=\"Reason\">{{ insight.reason }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"communicationsInsight.length !== 0\">{{ 'Label.Total' | transloco }}: {{ communicationsInsight.length }}</span>\n </div>\n <div *ngIf=\"!communicationsInsight?.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CommunicationsMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Engagement</h5>\n <div>\n <ng-template [ngIf]=\"communicationEngagement\">\n <plotly-plot [data]=\"communicationEngagement?.data\"\n [layout]=\"communicationEngagement?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!communicationEngagement\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CommunicationsMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".actions-column{min-width:170px}\n"] }]
|
|
149
150
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.CrmService }, { type: i0.ChangeDetectorRef }] });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLW1hcmtldGluZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUtoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLCtCQUNULFNBQVEsZ0JBQWdCO0lBNkJ4QixZQUNJLFFBQWtCLEVBQ1YsVUFBc0IsRUFDdEIsR0FBc0I7UUFFOUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTNCbEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixTQUFJLEdBQTBCO1lBQzFCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFlBQVksRUFBRSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsQ0FBQztTQUN0QixDQUFDO1FBRUYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBUVAsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUlqQixZQUFPLEdBQUcsT0FBTyxDQUFDO0lBUWxCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0I7UUFDM0IsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxXQUFXLENBQUMsU0FBUztZQUMvQixlQUFlLEVBQUUsV0FBVyxDQUFDLFNBQVM7WUFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzFCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQ0FBbUM7SUFDM0IsV0FBVztRQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ2pELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDdEMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCwwQ0FBMEM7SUFDbEMsb0JBQW9CLENBQUMsTUFBYztRQUN2QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7WUFDL0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVO3FCQUNWLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO3FCQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQztxQkFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFFBQVEsQ0FBQyxFQUFVO1FBQ2YsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDMUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO3dCQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2YsU0FBUyxFQUFFLFNBQVM7cUJBQ3ZCLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUN6RSxDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixhQUFhLENBQUMsSUFBbUI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxZQUFZO1lBQ25CLElBQUksRUFBRSxpQ0FBaUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLDZCQUE2QjtZQUNuRixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLElBQUksRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDYixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ25FLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDYixJQUFJLFFBQVEsRUFBRSxDQUFDOzRCQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQ3JFLENBQUM7d0JBQ04sQ0FBQztvQkFDTCxDQUFDO2lCQUNKLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCw2Q0FBNkM7SUFDckMsdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxVQUFVO2FBQ1YsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLHlCQUF5QixDQUFDO2FBQ2pFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGdEQUFnRDtJQUN4QywwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLFVBQVU7YUFDVixlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsMkJBQTJCLENBQUM7YUFDbkUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0ExSlEsK0JBQStCO21HQUEvQiwrQkFBK0IsMEZDOUI1QyxpbVJBdU5BOzs0RkR6TGEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNJLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuXG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQge1xuICAgIENybU5ld3NMZXR0ZXIsXG4gICAgQ3JtTmV3c0xldHRlclJlc3BvbnNlXG59IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvY3JtLW5ld3NsZXR0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luZyB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IFBsb3RseSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0tY29tbXVuaWNhdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNDb21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkXG57XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIGRhdGE6IENybU5ld3NMZXR0ZXJSZXNwb25zZSA9IHtcbiAgICAgICAgY3JtX25ld3NsZXR0ZXJzOiBbXSxcbiAgICAgICAgb2JqZWN0X2NvdW50OiAwLFxuICAgICAgICB1bmZpbHRlcmVkX2NvdW50OiAwXG4gICAgfTtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHVzZXI6IFVzZXI7XG5cbiAgICBjb21tdW5pY2F0aW9uc0luc2lnaHQ7XG5cbiAgICBjb21tdW5pY2F0aW9uRW5nYWdlbWVudDogUGxvdGx5LkZpZ3VyZTtcblxuICAgIHByaXZhdGUgcGFnZSA9IDE7XG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uTGF6eUxvYWQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFnZURldGFpbHMgPSBIZWxwZXJTZXJ2aWNlLm9uVGFibGVMYXp5TG9hZChldmVudCk7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2VEZXRhaWxzLnBhZ2U7XG4gICAgICAgIHRoaXMuZ2V0QWxsQ29tbXVuaWNhdGlvbnMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAvKiogRnVuY3Rpb24gdG8gZ2V0IHVzZXIgaW5mbyAqL1xuICAgIHByaXZhdGUgZ2V0VXNlckluZm8oKSB7XG4gICAgICAgIHRoaXMudXNlclN0b3JlKCkuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzR3JhbnRlZCgnUGFnZXMuQmV0YScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tbXVuaWNhdGlvbkluc2lnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb21tdW5pY2F0aW9uRW5nYWdlbWVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgYWxsIGNvbW11bmljYXRpb25zICovXG4gICAgcHJpdmF0ZSBnZXRBbGxDb21tdW5pY2F0aW9ucyhwYWdpbmc6IFBhZ2luZykge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb25JZCgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QWxsQ3JtTmV3c2xldHRlcnModGhpcy5zdWJzY3JpcHRpb25JZCwgcGFnaW5nKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXM7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBkZWxldGUgY29tbXVuaWNhdGlvbiAqL1xuICAgIG9uRGVsZXRlKGlkOiBudW1iZXIpIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5yYWlzZURlbGV0ZVBvcHVwKCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZS5kZWxldGVDcm1OZXdzbGV0dGVyKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ29tbXVuaWNhdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLkRlbGV0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHNlbmQgbWFpbCAqL1xuICAgIHNlbmRUZXN0RW1haWwoaXRlbTogQ3JtTmV3c0xldHRlcikge1xuICAgICAgICBzd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdTZW5kIEVtYWlsJyxcbiAgICAgICAgICAgIHRleHQ6IGBBIHRlc3QgZW1haWwgd2lsbCBiZSBzZW50IHRvIFwiJHt0aGlzLnVzZXIuZW1haWx9XCIuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlP2AsXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnd2FybmluZydcbiAgICAgICAgfSkudGhlbihzZW5kT2sgPT4ge1xuICAgICAgICAgICAgaWYgKHNlbmRPay52YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZS5zZW5kVGVzdE1haWwodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBpdGVtLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdOZXdzbGV0dGVyIHRlc3QgZW1haWwgc2VudCBjb3JyZWN0bHknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgY29tbXVuaWNhdGlvbiBpbnNpZ2h0ICovXG4gICAgcHJpdmF0ZSBnZXRDb21tdW5pY2F0aW9uSW5zaWdodCgpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Q3JtQW5hbHl0aWNzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgJ2NvbW11bmljYXRpb25zX2luc2lnaHRzJylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbXVuaWNhdGlvbnNJbnNpZ2h0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBjb21tdW5pY2F0aW9uIGVuZ2FnZW1lbnQgKi9cbiAgICBwcml2YXRlIGdldENvbW11bmljYXRpb25FbmdhZ2VtZW50KCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRDcm1BbmFseXRpY3ModGhpcy5zdWJzY3JpcHRpb24/LmlkLCAnY29tbXVuaWNhdGlvbnNfZW5nYWdlbWVudCcpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW11bmljYXRpb25FbmdhZ2VtZW50ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8aDI+RW1haWwgTWFya2V0aW5nPC9oMj5cbiAgICA8cD5JbiB0aGlzIHNlY3Rpb24geW91IGNhbiBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIGVtYWlsIG1hcmtldGluZyBzdHJhdGVneS48L3A+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0xMiB0ZXh0LWVuZFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxuICAgICAgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMubWFya2V0aW5nRGV0YWlscyArICdhZGQnXVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ0FkZCBOZXcgRW1haWwnIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiIWlzTG9hZGVkXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciBtdC0zIHRhYmxlLXJlc3BvbnNpdmVcIlxuICBbY2xhc3MuaGlkZVRhYmxlXT1cImRhdGEudW5maWx0ZXJlZF9jb3VudCA9PT0gMFwiPlxuICA8cC10YWJsZSAjZHRcbiAgICBbdmFsdWVdPVwiZGF0YS5jcm1fbmV3c2xldHRlcnNcIlxuICAgIFtwYWdpbmF0b3JdPVwiZGF0YS5vYmplY3RfY291bnQgIT09IDBcIlxuICAgIFtsYXp5XT1cInRydWVcIlxuICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJkYXRhLm9iamVjdF9jb3VudFwiXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgZmlsdGVyRGVsYXk9XCIxMDAwXCJcbiAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkKCRldmVudClcIlxuICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG10LTIgbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbW11bmljYXRpb24gZW1haWxzLi4uXCJcbiAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICBjbGFzcz1cIm13LTkwXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJ0aXRsZVwiPlxuICAgICAgICAgIHt7ICdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLlRpdGxlJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwidGl0bGVcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImJvZHlcIj5cbiAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5Cb2R5JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiYm9keVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwibG9jYXRpb25cIj5cbiAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5Mb2NhdGlvbicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImxvY2F0aW9uJ1wiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwic2VuZF91bnRpbFwiPlxuICAgICAgICAgIHt7ICdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLlNlbmRVbnRpbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInNlbmRfdW50aWxcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImlzX3B1c2hlZFwiPlxuICAgICAgICAgIHt7ICdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLlB1c2hlZCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImlzX3B1c2hlZFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiaXNfc2VudFwiPlxuICAgICAgICAgIHt7ICdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLlNlbnQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJpc19zZW50XCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtY29sdW1uXCI+e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICBsZXQtaXRlbT5cbiAgICAgIDx0ciBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiVGl0bGVcIj5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5tYXJrZXRpbmcsIGl0ZW0uaWRdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJCb2R5XCJcbiAgICAgICAgICBbaW5uZXJIdG1sXT1cIml0ZW0uYm9keSB8IHJlbW92ZUh0bWwgfCB0ZXh0VHJ1bmNhdGU6IDIwMFwiPjwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJMb2NhdGlvblwiPnt7IGl0ZW0ubG9jYXRpb24gfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiU2VuZCBVbnRpbFwiPnt7IGl0ZW0uc2VuZF91bnRpbCB8IGRhdGVGb3JtYXQgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHVzaGVkP1wiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBpdGVtPy5pc19wdXNoZWQgfVwiXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyAhIWl0ZW0/LmlzX3B1c2hlZCB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlNlbnQ/XCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGl0ZW0/LmlzX3NlbnQgfVwiXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyAhIWl0ZW0/LmlzX3NlbnQgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBY3Rpb25cIj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lXCI+XG4gICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIlNlbmQgdGVzdCBlbWFpbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtY29tbWVudC1hbHQgY3RhMS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRUZXN0RW1haWwoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMubWFya2V0aW5nRGV0YWlscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoaXRlbS5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJOZXdzbGV0dGVyIHJlY2lwaWVudHNcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWZ3IGZhLWxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm1hcmtldGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuPGRpdiAqbmdJZj1cImRhdGEub2JqZWN0X2NvdW50ID09PSAwICYmIGRhdGEudW5maWx0ZXJlZF9jb3VudCAhPT0gMFwiPlxuICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidTZWFyY2guTm9EYXRhTWVzc2FnZSd8IHRyYW5zbG9jb1wiIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiID5cbiAgICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCIgKm5nSWY9XCJkYXRhLm9iamVjdF9jb3VudCAhPT0gMFwiPnt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7IGRhdGEub2JqZWN0X2NvdW50IH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiZGF0YS51bmZpbHRlcmVkX2NvdW50ID09PSAwICYmIGlzTG9hZGVkXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLk5vQ29tbXVuaWNhdGlvbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqcmJhY0FsbG93PVwiJ1BhZ2VzLkJldGEnXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3cgbXQtNVwiXG4gICAgKm5nSWY9XCJpc0xvYWRlZFwiPlxuICAgIDwhLS0gRHJpbGwgRG93biAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02IG1iLTMgYW5hbHl0aWNzXCI+XG4gICAgICA8aDUgY2xhc3M9XCJhY2NvcmRpb24taGVhZGluZ1wiPkRyaWxsIERvd248L2g1PlxuICAgICAgPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciB0YWJsZS1yZXNwb25zaXZlXCJcbiAgICAgICAgKm5nSWY9XCJjb21tdW5pY2F0aW9uc0luc2lnaHQ/Lmxlbmd0aFwiPlxuICAgICAgICA8cC10YWJsZSBjbGFzcz1cInRhYmxlXCJcbiAgICAgICAgICAjZHRcbiAgICAgICAgICBbdmFsdWVdPVwiY29tbXVuaWNhdGlvbnNJbnNpZ2h0XCJcbiAgICAgICAgICBbcGFnaW5hdG9yXT1cImNvbW11bmljYXRpb25zSW5zaWdodC5sZW5ndGggIT09IDBcIlxuICAgICAgICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG5cbiAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImNvbW11bmljYXRpb25zSW5zaWdodC5sZW5ndGhcIlxuICAgICAgICAgIFtsYXp5XT1cInRydWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5UaXRsZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLlZhbHVlJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAge3sgJ0NybS5Db21tdW5pY2F0aW9uc01lc3NhZ2UuUmVhc29uJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgICAgIGxldC1pbnNpZ2h0PlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiVGl0bGVcIj57eyBpbnNpZ2h0LnRpdGxlIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlZhbHVlXCI+e3sgaW5zaWdodC52YWx1ZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJSZWFzb25cIj57eyBpbnNpZ2h0LnJlYXNvbiB9fTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10YWJsZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCIgKm5nSWY9XCJjb21tdW5pY2F0aW9uc0luc2lnaHQubGVuZ3RoICE9PSAwXCI+e3sgJ0xhYmVsLlRvdGFsJyB8IHRyYW5zbG9jbyB9fToge3sgY29tbXVuaWNhdGlvbnNJbnNpZ2h0Lmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cIiFjb21tdW5pY2F0aW9uc0luc2lnaHQ/Lmxlbmd0aFwiPlxuICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5Ob0luc2lnaHRNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICA8L3B3LW5vLWRhdGE+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEdlb2dyYXBoeSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02IG1iLTMgYW5hbHl0aWNzXCI+XG4gICAgICA8aDUgY2xhc3M9XCJhY2NvcmRpb24taGVhZGluZ1wiPkVuZ2FnZW1lbnQ8L2g1PlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImNvbW11bmljYXRpb25FbmdhZ2VtZW50XCI+XG4gICAgICAgICAgPHBsb3RseS1wbG90IFtkYXRhXT1cImNvbW11bmljYXRpb25FbmdhZ2VtZW50Py5kYXRhXCJcbiAgICAgICAgICAgIFtsYXlvdXRdPVwiY29tbXVuaWNhdGlvbkVuZ2FnZW1lbnQ/LmxheW91dFwiPlxuICAgICAgICAgIDwvcGxvdGx5LXBsb3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhY29tbXVuaWNhdGlvbkVuZ2FnZW1lbnRcIj5cbiAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0NybS5Db21tdW5pY2F0aW9uc01lc3NhZ2UuTm9JbnNpZ2h0TWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgPC9wdy1uby1kYXRhPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLW1hcmtldGluZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUtoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLCtCQUNULFNBQVEsZ0JBQWdCO0lBNkJ4QixZQUNJLFFBQWtCLEVBQ1YsVUFBc0IsRUFDdEIsR0FBc0I7UUFFOUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxD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QUFDO29CQUNMLENBQUM7aUJBQ0osQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZDQUE2QztJQUNyQyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLFVBQVU7YUFDVixlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUseUJBQXlCLENBQUM7YUFDakUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ3hDLDBCQUEwQjtRQUM5QixJQUFJLENBQUMsVUFBVTthQUNWLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSwyQkFBMkIsQ0FBQzthQUNuRSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQTNKUSwrQkFBK0I7bUdBQS9CLCtCQUErQiwwRkM5QjVDLGltUkF1TkE7OzRGRHpMYSwrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0ksNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQ3JtU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9zbWFydC1jcm0tc2hhcmVkJztcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IFBBR0VfU0laRSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gICAgQ3JtTmV3c0xldHRlcixcbiAgICBDcm1OZXdzTGV0dGVyUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tbmV3c2xldHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5nIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgUGxvdGx5IH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXNtYXJ0LWNybS1jb21tdW5pY2F0aW9ucycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc21hcnQtY3JtLW1hcmtldGluZy1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1Db21tdW5pY2F0aW9uc0NvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgZGF0YTogQ3JtTmV3c0xldHRlclJlc3BvbnNlID0ge1xuICAgICAgICBjcm1fbmV3c2xldHRlcnM6IFtdLFxuICAgICAgICBvYmplY3RfY291bnQ6IDAsXG4gICAgICAgIHVuZmlsdGVyZWRfY291bnQ6IDBcbiAgICB9O1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdXNlcjogVXNlcjtcblxuICAgIGNvbW11bmljYXRpb25zSW5zaWdodDtcblxuICAgIGNvbW11bmljYXRpb25FbmdhZ2VtZW50OiBQbG90bHkuRmlndXJlO1xuXG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbigpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25MYXp5TG9hZChldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICBjb25zdCBwYWdlRGV0YWlscyA9IEhlbHBlclNlcnZpY2Uub25UYWJsZUxhenlMb2FkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZURldGFpbHMucGFnZTtcbiAgICAgICAgdGhpcy5nZXRBbGxDb21tdW5pY2F0aW9ucyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRSxcbiAgICAgICAgICAgIG9yZGVyX2J5OiBwYWdlRGV0YWlscy5zb3J0RmllbGQsXG4gICAgICAgICAgICBvcmRlcl9kaXJlY3Rpb246IHBhZ2VEZXRhaWxzLnNvcnRPcmRlcixcbiAgICAgICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hUZXh0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC8qKiBGdW5jdGlvbiB0byBnZXQgdXNlciBpbmZvICovXG4gICAgcHJpdmF0ZSBnZXRVc2VySW5mbygpIHtcbiAgICAgICAgdGhpcy51c2VyU3RvcmUoKS5zdWJzY3JpYmUodXNlciA9PiB7XG4gICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNHcmFudGVkKCdQYWdlcy5CZXRhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb21tdW5pY2F0aW9uSW5zaWdodCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbW11bmljYXRpb25FbmdhZ2VtZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBhbGwgY29tbXVuaWNhdGlvbnMgKi9cbiAgICBwcml2YXRlIGdldEFsbENvbW11bmljYXRpb25zKHBhZ2luZzogUGFnaW5nKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbklkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRBbGxDcm1OZXdzbGV0dGVycyh0aGlzLnN1YnNjcmlwdGlvbklkLCBwYWdpbmcpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlcztcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGRlbGV0ZSBjb21tdW5pY2F0aW9uICovXG4gICAgb25EZWxldGUoaWQ6IG51bWJlcikge1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLnJhaXNlRGVsZXRlUG9wdXAoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmRlbGV0ZUNybU5ld3NsZXR0ZXIodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBpZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDb21tdW5pY2F0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5EZWxldGVkTWVzc2FnZScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBzZW5kIG1haWwgKi9cbiAgICBzZW5kVGVzdEVtYWlsKGl0ZW06IENybU5ld3NMZXR0ZXIpIHtcbiAgICAgICAgc3dhbC5maXJlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnU2VuZCBFbWFpbCcsXG4gICAgICAgICAgICB0ZXh0OiBgQSB0ZXN0IGVtYWlsIHdpbGwgYmUgc2VudCB0byBcIiR7dGhpcy51c2VyLmVtYWlsfVwiLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT9gLFxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgIH0pLnRoZW4oc2VuZE9rID0+IHtcbiAgICAgICAgICAgIGlmIChzZW5kT2sudmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNybVNlcnZpY2Uuc2VuZFRlc3RNYWlsKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgaXRlbS5pZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnTmV3c2xldHRlciB0ZXN0IGVtYWlsIHNlbnQgY29ycmVjdGx5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIGNvbW11bmljYXRpb24gaW5zaWdodCAqL1xuICAgIHByaXZhdGUgZ2V0Q29tbXVuaWNhdGlvbkluc2lnaHQoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmdldENybUFuYWx5dGljcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsICdjb21tdW5pY2F0aW9uc19pbnNpZ2h0cycpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW11bmljYXRpb25zSW5zaWdodCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgY29tbXVuaWNhdGlvbiBlbmdhZ2VtZW50ICovXG4gICAgcHJpdmF0ZSBnZXRDb21tdW5pY2F0aW9uRW5nYWdlbWVudCgpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Q3JtQW5hbHl0aWNzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgJ2NvbW11bmljYXRpb25zX2VuZ2FnZW1lbnQnKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tdW5pY2F0aW9uRW5nYWdlbWVudCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPGgyPkVtYWlsIE1hcmtldGluZzwvaDI+XG4gICAgPHA+SW4gdGhpcyBzZWN0aW9uIHlvdSBjYW4gY3JlYXRlIGFuZCBtYW5hZ2UgeW91ciBlbWFpbCBtYXJrZXRpbmcgc3RyYXRlZ3kuPC9wPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMTIgdGV4dC1lbmRcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm1hcmtldGluZ0RldGFpbHMgKyAnYWRkJ11cIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdBZGQgTmV3IEVtYWlsJyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgbXQtMyB0YWJsZS1yZXNwb25zaXZlXCJcbiAgW2NsYXNzLmhpZGVUYWJsZV09XCJkYXRhLnVuZmlsdGVyZWRfY291bnQgPT09IDBcIj5cbiAgPHAtdGFibGUgI2R0XG4gICAgW3ZhbHVlXT1cImRhdGEuY3JtX25ld3NsZXR0ZXJzXCJcbiAgICBbcGFnaW5hdG9yXT1cImRhdGEub2JqZWN0X2NvdW50ICE9PSAwXCJcbiAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgIFt0b3RhbFJlY29yZHNdPVwiZGF0YS5vYmplY3RfY291bnRcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIGZpbHRlckRlbGF5PVwiMTAwMFwiXG4gICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCJcbiAgICBbY3VzdG9tU29ydF09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb21tdW5pY2F0aW9uIGVtYWlscy4uLlwiXG4gICAgICAgICAgKGlucHV0KT1cImR0LmZpbHRlckdsb2JhbCgkZXZlbnQudGFyZ2V0LnZhbHVlLCAnY29udGFpbnMnKVwiXG4gICAgICAgICAgY2xhc3M9XCJtdy05MFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwidGl0bGVcIj5cbiAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5UaXRsZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInRpdGxlXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJib2R5XCI+XG4gICAgICAgICAge3sgJ0NybS5Db21tdW5pY2F0aW9uc01lc3NhZ2UuQm9keScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImJvZHlcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImxvY2F0aW9uXCI+XG4gICAgICAgICAge3sgJ0NybS5Db21tdW5pY2F0aW9uc01lc3NhZ2UuTG9jYXRpb24nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJsb2NhdGlvbidcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInNlbmRfdW50aWxcIj5cbiAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5TZW5kVW50aWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzZW5kX3VudGlsXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJpc19wdXNoZWRcIj5cbiAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5QdXNoZWQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJpc19wdXNoZWRcIj48L3Atc29ydEljb24+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImlzX3NlbnRcIj5cbiAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5TZW50JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiaXNfc2VudFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWNvbHVtblwiPnt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LWl0ZW0+XG4gICAgICA8dHIgY2xhc3M9XCJ0YWJsZS1yb3dcIj5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlRpdGxlXCI+XG4gICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMubWFya2V0aW5nLCBpdGVtLmlkXVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIH19PC9hPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQm9keVwiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJpdGVtLmJvZHkgfCByZW1vdmVIdG1sIHwgdGV4dFRydW5jYXRlOiAyMDBcIj48L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTG9jYXRpb25cIj57eyBpdGVtLmxvY2F0aW9uIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlNlbmQgVW50aWxcIj57eyBpdGVtLnNlbmRfdW50aWwgfCBkYXRlRm9ybWF0IH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlB1c2hlZD9cIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogaXRlbT8uaXNfcHVzaGVkIH1cIlxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgISFpdGVtPy5pc19wdXNoZWQgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJTZW50P1wiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBpdGVtPy5pc19zZW50IH1cIlxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgISFpdGVtPy5pc19zZW50IH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZVwiPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJTZW5kIHRlc3QgZW1haWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWNvbW1lbnQtYWx0IGN0YTEtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kVGVzdEVtYWlsKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm1hcmtldGluZ0RldGFpbHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEZWxldGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGl0ZW0uaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiTmV3c2xldHRlciByZWNpcGllbnRzXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1mdyBmYS1saXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5tYXJrZXRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbjxkaXYgKm5nSWY9XCJkYXRhLm9iamVjdF9jb3VudCA9PT0gMCAmJiBkYXRhLnVuZmlsdGVyZWRfY291bnQgIT09IDBcIj5cbiAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnfCB0cmFuc2xvY29cIiBbZGVzY3JpcHRpb25dPVwiJ1NlYXJjaC5Ob0RhdGFEZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiA+XG4gICAgPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4gIDxzcGFuIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiICpuZ0lmPVwiZGF0YS5vYmplY3RfY291bnQgIT09IDBcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyBkYXRhLm9iamVjdF9jb3VudCB9fTwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImRhdGEudW5maWx0ZXJlZF9jb3VudCA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5Ob0NvbW11bmljYXRpb25NZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKnJiYWNBbGxvdz1cIidQYWdlcy5CZXRhJ1wiPlxuICA8ZGl2IGNsYXNzPVwicm93IG10LTVcIlxuICAgICpuZ0lmPVwiaXNMb2FkZWRcIj5cbiAgICA8IS0tIERyaWxsIERvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNiBtYi0zIGFuYWx5dGljc1wiPlxuICAgICAgPGg1IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRpbmdcIj5EcmlsbCBEb3duPC9oNT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZVwiXG4gICAgICAgICpuZ0lmPVwiY29tbXVuaWNhdGlvbnNJbnNpZ2h0Py5sZW5ndGhcIj5cbiAgICAgICAgPHAtdGFibGUgY2xhc3M9XCJ0YWJsZVwiXG4gICAgICAgICAgI2R0XG4gICAgICAgICAgW3ZhbHVlXT1cImNvbW11bmljYXRpb25zSW5zaWdodFwiXG4gICAgICAgICAgW3BhZ2luYXRvcl09XCJjb21tdW5pY2F0aW9uc0luc2lnaHQubGVuZ3RoICE9PSAwXCJcbiAgICAgICAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuXG4gICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJjb21tdW5pY2F0aW9uc0luc2lnaHQubGVuZ3RoXCJcbiAgICAgICAgICBbbGF6eV09XCJ0cnVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAge3sgJ0NybS5Db21tdW5pY2F0aW9uc01lc3NhZ2UuVGl0bGUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICB7eyAnQ3JtLkNvbW11bmljYXRpb25zTWVzc2FnZS5WYWx1ZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLlJlYXNvbicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICAgICAgICBsZXQtaW5zaWdodD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlRpdGxlXCI+e3sgaW5zaWdodC50aXRsZSB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJWYWx1ZVwiPnt7IGluc2lnaHQudmFsdWUgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUmVhc29uXCI+e3sgaW5zaWdodC5yZWFzb24gfX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtdGFibGU+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiICpuZ0lmPVwiY29tbXVuaWNhdGlvbnNJbnNpZ2h0Lmxlbmd0aCAhPT0gMFwiPnt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7IGNvbW11bmljYXRpb25zSW5zaWdodC5sZW5ndGggfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhY29tbXVuaWNhdGlvbnNJbnNpZ2h0Py5sZW5ndGhcIj5cbiAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0NybS5Db21tdW5pY2F0aW9uc01lc3NhZ2UuTm9JbnNpZ2h0TWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgPC9wdy1uby1kYXRhPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBHZW9ncmFwaHkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNiBtYi0zIGFuYWx5dGljc1wiPlxuICAgICAgPGg1IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRpbmdcIj5FbmdhZ2VtZW50PC9oNT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb21tdW5pY2F0aW9uRW5nYWdlbWVudFwiPlxuICAgICAgICAgIDxwbG90bHktcGxvdCBbZGF0YV09XCJjb21tdW5pY2F0aW9uRW5nYWdlbWVudD8uZGF0YVwiXG4gICAgICAgICAgICBbbGF5b3V0XT1cImNvbW11bmljYXRpb25FbmdhZ2VtZW50Py5sYXlvdXRcIj5cbiAgICAgICAgICA8L3Bsb3RseS1wbG90PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIWNvbW11bmljYXRpb25FbmdhZ2VtZW50XCI+XG4gICAgICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uQ29tbXVuaWNhdGlvbnNNZXNzYWdlLk5vSW5zaWdodE1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -113,7 +113,7 @@ export class SmartCrmBoardComponent extends AppBaseComponent {
|
|
|
113
113
|
this.opportunitiesGroup = [];
|
|
114
114
|
this.stages = this.masterStages;
|
|
115
115
|
if (val !== undefined && val !== 0) {
|
|
116
|
-
this.stages = this.stages.filter(stage => stage.crm_opportunity_category_ids.includes(val
|
|
116
|
+
this.stages = this.stages.filter(stage => stage.crm_opportunity_category_ids.includes(val));
|
|
117
117
|
}
|
|
118
118
|
this.stages = this.stages.sort((a, b) => (a.id > b.id ? 1 : b.id > a.id ? -1 : 0));
|
|
119
119
|
const temp = this.treefy(this.stages);
|
|
@@ -215,7 +215,6 @@ export class SmartCrmBoardComponent extends AppBaseComponent {
|
|
|
215
215
|
});
|
|
216
216
|
}
|
|
217
217
|
hasOpportunities() {
|
|
218
|
-
console.log(this.opportunitiesGroup);
|
|
219
218
|
return this.opportunitiesGroup.some(group => group.opportunities.length > 0);
|
|
220
219
|
}
|
|
221
220
|
ngOnDestroy() {
|
|
@@ -228,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
228
227
|
type: Component,
|
|
229
228
|
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\n<div class=\"row mb-4\" *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\" (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\" [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\" data-cy=\"add-opportunities\" [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 && !hasOpportunities()\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoOpportunitiesMessage' | transloco\">\n </pw-no-data>\n</div>\n<div *ngIf=\"isLoaded && hasOpportunities()\" class=\"list-container d-flex\" cdkDropList [cdkDropListData]=\"opportunitiesGroup\" (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup class=\"opportunities-container main-div crm-board-primary\" [class.dynamic-columns-wrapper]=\"group.stage.collapsed\" [style.--border-color]=\"group.stage.color_code\" *ngFor=\"let group of opportunitiesGroup; let i = index\" cdkDrag [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\" [ngClass]=\"{'fa-angle-right': !group.stage.collapsed, 'fa-angle-down': group.stage.collapsed}\" (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\" [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\" [queryParams]=\"{ stage_id: group?.stage?.id, category: group.stage.crm_opportunity_category_ids }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div class=\"opportunities-list items-container\" cdkDropList [id]=\"group.stage.name\" [cdkDropListData]=\"group.opportunities\" (cdkDropListDropped)=\"dropItem($event)\" [cdkDropListConnectedTo]=\"getConnectedList()\" (scroll)=\"onColumnScroll(i)\">\n <div *ngFor=\"let item of group.opportunities; let idx = index\">\n <div class=\"opportunities-box mb-3\" cdkDrag [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\" class=\"float-end edit-button\" [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\" [routerLink]=\"['/' + subscription?.slug + routers.accountInfo, item?.crm_account_id ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">{{ (item?.one_time_amount / 100 | currency) }} One-time / {{ (item?.monthly_amount / 100 | currency) }} MRR</p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\" [routerLink]=\"['/members', item?.owner[0]?.slug]\">\n <img alt=\"member image\" [src]=\"item?.owner[0]?.user_avatar[0]?.url\" [width]=\"'30'\" class=\"squared_logo float-end\" [height]=\"'30'\" onerror=\"this.onerror=null;this.src='assets/img/icons/male.png';\" />\n </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 class=\"w-100 text-center mt-3\" *ngIf=\"(idx + 1) % 5 === 0 && group.isLoadingMore\">\n <div class=\"custom-loader\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n <div class=\"loading-text\">Loading opportunities...</div>\n </div>\n </div>\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", 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"] }]
|
|
230
229
|
}], ctorParameters: () => [{ type: i1.CrmService }, { type: i0.Injector }] });
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFnQnhELFlBQ1ksVUFBc0IsRUFDOUIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWJsQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFeEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ1IsMkJBQXNCLEdBQUcsRUFBRSxD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QUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVU7YUFDVixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDL0MsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTO1NBQ3JDLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBNVBRLHNCQUFzQjttR0FBdEIsc0JBQXNCLGlGQ2ZuQyxtd0pBMkVBOzs0RkQ1RGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQ3JtU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9zbWFydC1jcm0tc2hhcmVkJztcbmltcG9ydCB7IENybU9wcG9ydHVuaXR5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tb3Bwb3J0dW5pdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IENybVN0YWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tc3RhZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0tYm9hcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZHJhZ2dlZE9wcG9ydHVuaXR5OiBDcm1PcHBvcnR1bml0eTtcbiAgICBzdGFnZXM6IENybVN0YWdlW107XG4gICAgYWxsT3Bwb3J0dW5pdGllczogQ3JtT3Bwb3J0dW5pdHlbXTtcbiAgICBvcHBvcnR1bml0aWVzR3JvdXAgPSBbXTtcbiAgICBwcml2YXRlIGNoYW5nZWRTdGFnZTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGlzTG9hZGVkID0gZmFsc2U7XG4gICAgY2F0ZWdvcmllcyA9IFtdO1xuICAgIHByaXZhdGUgYXZhaWxhYmxlT3Bwb3J0dW5pdGllcyA9IFtdO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICByb3V0ZXJzID0gUk9VVEVSUztcbiAgICBtYXN0ZXJTdGFnZXM6IENybVN0YWdlW10gPSBbXTtcbiAgICBzZWxlY3RlZENhdGVnb3J5SWQgPSAwO1xuICAgIHByaXZhdGUgcGFnZVNpemUgPSA1OyAvLyBTaG93IDUgY2FyZHMgaW5pdGlhbGx5XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcyB8fCBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkID0gdGhpcy5jYXRlZ29yaWVzWzBdLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0YWdlcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEF2YWlsYWJsZU9wcG9ydHVuaXR5U3RhZ2VzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NybV9vcHBvcnR1bml0eV9zdGFnZXM7XG4gICAgICAgICAgICB0aGlzLm1hc3RlclN0YWdlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV9jcm1fb3Bwb3J0dW5pdHlfc3RhZ2VzO1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0aWVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdGllcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsT3Bwb3J0dW5pdGllcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXRpZXMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzID0gcmVzcG9uc2U/LmNybV9vcHBvcnR1bml0aWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcy5maWx0ZXIob3Bwb3J0dW5pdHkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkIHx8IG51bGwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmVlZnkobGlzdCkge1xuICAgICAgICBjb25zdCBpZEF0dHIgPSAnaWQnO1xuICAgICAgICBjb25zdCBwYXJlbnRBdHRyID0gJ3ByZXZpb3VzX3N0YWdlX2lkJztcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BdHRyID0gJ2NoaWxkcmVuJztcblxuICAgICAgICBjb25zdCB0cmVlTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBsb29rdXAgPSB7fTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBsb29rdXBbb2JqW2lkQXR0cl1dID0gb2JqO1xuICAgICAgICAgICAgb2JqW2NoaWxkcmVuQXR0cl0gPSBbXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpc3QuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgICAgaWYgKG9ialtwYXJlbnRBdHRyXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb29rdXBbb2JqW3BhcmVudEF0dHJdXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cFtvYmpbcGFyZW50QXR0cl1dW2NoaWxkcmVuQXR0cl0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyZWVMaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbihhcnIpIHtcbiAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZmxhdHRlbihjdXJyZW50LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3Bwb3J0dW5pdGllc0dyb3Vwcyh2YWw/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLm1hc3RlclN0YWdlcztcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLnN0YWdlcy5maWx0ZXIoc3RhZ2UgPT5cbiAgICAgICAgICAgICAgICBzdGFnZS5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzLmluY2x1ZGVzKHZhbC50b1N0cmluZygpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLnNvcnQoKGEsIGIpID0+IChhLmlkID4gYi5pZCA/IDEgOiBiLmlkID4gYS5pZCA/IC0xIDogMCkpO1xuICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy50cmVlZnkodGhpcy5zdGFnZXMpO1xuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuZmxhdHRlbih0ZW1wKTtcblxuICAgICAgICB0aGlzLnN0YWdlcy5mb3JFYWNoKHN0YWdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wcG9ydHVuaXRpZXMgPSB7XG4gICAgICAgICAgICAgICAgc3RhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdGllczogW10sXG4gICAgICAgICAgICAgICAgdG90YWxzOiB7IG9uZVRpbWU6IDAsIG1ycjogMCwgY291bnQ6IDAgfSxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmdNb3JlOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5ID0+IG9wcG9ydHVuaXR5LmNybV9vcHBvcnR1bml0eV9zdGFnZV9pZCA9PT0gc3RhZ2UuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLm9wcG9ydHVuaXRpZXMgPSBkYXRhLnNsaWNlKDAsIHRoaXMucGFnZVNpemUpOyAvLyBMb2FkIGluaXRpYWwgaXRlbXNcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMuc3RhZ2UgPSBzdGFnZTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMudG90YWxzLm9uZVRpbWUgPSBkYXRhLnJlZHVjZSgoc3VtLCBvcHApID0+IHN1bSArIG9wcC5vbmVfdGltZV9hbW91bnQsIDApO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy50b3RhbHMubXJyID0gZGF0YS5yZWR1Y2UoKHN1bSwgb3BwKSA9PiBzdW0gKyBvcHAubW9udGhseV9hbW91bnQsIDApO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy50b3RhbHMuY291bnQgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwLnB1c2gob3Bwb3J0dW5pdGllcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IE51bWJlcihldmVudCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkID0gY2F0ZWdvcmllcztcbiAgICAgICAgaWYgKGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcy5maWx0ZXIob3Bwb3J0dW5pdHkgPT5cbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0eT8uY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcz8uaW5jbHVkZXMoY2F0ZWdvcmllcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXM/Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwcyhjYXRlZ29yaWVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcztcbiAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtblNjcm9sbChjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBbY29sdW1uSW5kZXhdO1xuICAgICAgICBpZiAoZ3JvdXAuaXNMb2FkaW5nTW9yZSB8fCBncm91cC5vcHBvcnR1bml0aWVzLmxlbmd0aCA+PSBncm91cC50b3RhbHMuY291bnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGdyb3VwLmlzTG9hZGluZ01vcmUgPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudExlbmd0aCA9IGdyb3VwLm9wcG9ydHVuaXRpZXMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbW9yZU9wcG9ydHVuaXRpZXMgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG9wcG9ydHVuaXR5ID0+IG9wcG9ydHVuaXR5LmNybV9vcHBvcnR1bml0eV9zdGFnZV9pZCA9PT0gZ3JvdXAuc3RhZ2UuaWQpXG4gICAgICAgICAgICAgICAgLnNsaWNlKGN1cnJlbnRMZW5ndGgsIGN1cnJlbnRMZW5ndGggKyB0aGlzLnBhZ2VTaXplKTtcblxuICAgICAgICAgICAgZ3JvdXAub3Bwb3J0dW5pdGllcyA9IGdyb3VwLm9wcG9ydHVuaXRpZXMuY29uY2F0KG1vcmVPcHBvcnR1bml0aWVzKTtcbiAgICAgICAgICAgIGdyb3VwLmlzTG9hZGluZ01vcmUgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwMCk7IC8vIFNob3cgbG9hZGVyIGZvciAyIHNlY29uZHNcbiAgICB9XG5cbiAgICBkcm9wSXRlbShldmVudDogQ2RrRHJhZ0Ryb3A8b2JqZWN0W10+KSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFycmF5SXRlbShcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxuICAgICAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkgPSBldmVudD8uaXRlbT8uZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFN0YWdlID0gdGhpcy5zdGFnZXMuZmluZChzdGFnZSA9PiBzdGFnZS5uYW1lID09PSBldmVudD8uY29udGFpbmVyPy5pZCk/LmlkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dlZE9wcG9ydHVuaXR5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3Bwb3J0dW5pdGllc0RldGFpbHMgPSB7IC4uLnRoaXMuZHJhZ2dlZE9wcG9ydHVuaXR5IH07XG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdGllc0RldGFpbHNbJ2NybV9vcHBvcnR1bml0eV9zdGFnZV9pZCddID0gdGhpcy5jaGFuZ2VkU3RhZ2U7XG4gICAgICAgICAgICAgICAgSGVscGVyU2VydmljZS5kZWxldGVQcm9wcyhvcHBvcnR1bml0aWVzRGV0YWlscywgW1xuICAgICAgICAgICAgICAgICAgICAnY3JtX2FjY291bnQnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX29wcG9ydHVuaXR5X3N0YWdlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NybV9vcHBvcnR1bml0eV9jYXRlZ29yaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NybV9jb250YWN0JyxcbiAgICAgICAgICAgICAgICAgICAgJ293bmVyJ1xuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlT3Bwb3J0dW5pdGllcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXNEZXRhaWxzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3J0dW5pdGllc0RldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXRpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5VcGRhdGVkTWVzc2FnZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXRpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZFN0YWdlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb25uZWN0ZWRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwLm1hcCh4ID0+IGAke3guc3RhZ2UubmFtZX1gKTtcbiAgICB9XG5cbiAgICBkcm9wR3JvdXAoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5vcHBvcnR1bml0aWVzR3JvdXAsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29sdW1uKGV2ZW50LCBncm91cCkge1xuICAgICAgICAkKGV2ZW50LnRhcmdldCkudG9nZ2xlQ2xhc3MoJ2ZhLWFuZ2xlLXJpZ2h0IGZhLWFuZ2xlLWRvd24nKTtcbiAgICAgICAgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5tYWluLWRpdicpLnRvZ2dsZUNsYXNzKCdkeW5hbWljLWNvbHVtbnMtd3JhcHBlcicpO1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5lZGl0U3RhZ2UodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBncm91cC5zdGFnZT8uaWQsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6ICFncm91cC5zdGFnZT8uY29sbGFwc2VkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdGFnZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc09wcG9ydHVuaXRpZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwLnNvbWUoZ3JvdXAgPT4gZ3JvdXAub3Bwb3J0dW5pdGllcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTG9hZGVkXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJvdyBtYi00XCIgKm5nSWY9XCJpc0xvYWRlZFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgKGNoYW5nZSk9XCJvbkNoYW5nZUNhdGVnb3J5KCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY2F0ZWdvcmllc1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIj57eyBvcHRpb24ubmFtZSB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tOCBtdC0yIG10LXNtLTAgbWItM1wiPlxuICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiIGRhdGEtY3k9XCJhZGQtb3Bwb3J0dW5pdGllc1wiIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm9wcG9ydHVuaXR5QWRkXVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgIHt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQWRkT3Bwb3J0dW5pdHknIHwgdHJhbnNsb2NvIH19XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzTG9hZGVkICYmICFoYXNPcHBvcnR1bml0aWVzKClcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Ob09wcG9ydHVuaXRpZXNNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc0xvYWRlZCAmJiBoYXNPcHBvcnR1bml0aWVzKClcIiBjbGFzcz1cImxpc3QtY29udGFpbmVyIGQtZmxleFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwib3Bwb3J0dW5pdGllc0dyb3VwXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wR3JvdXAoJGV2ZW50KVwiPlxuICA8ZGl2IGNka0Ryb3BMaXN0R3JvdXAgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWNvbnRhaW5lciBtYWluLWRpdiBjcm0tYm9hcmQtcHJpbWFyeVwiIFtjbGFzcy5keW5hbWljLWNvbHVtbnMtd3JhcHBlcl09XCJncm91cC5zdGFnZS5jb2xsYXBzZWRcIiBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiZ3JvdXAuc3RhZ2UuY29sb3JfY29kZVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBvcHBvcnR1bml0aWVzR3JvdXA7IGxldCBpID0gaW5kZXhcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWJvYXJkLXRpdGxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2xsYXBzZS1jb2x1bW4tdG9nZ2xlXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwieydmYS1hbmdsZS1yaWdodCc6ICFncm91cC5zdGFnZS5jb2xsYXBzZWQsICdmYS1hbmdsZS1kb3duJzogZ3JvdXAuc3RhZ2UuY29sbGFwc2VkfVwiIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oJGV2ZW50LCBncm91cClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cInN0YWdlLW5hbWUgbWItMCBweS0yIHBzLTRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC13aGl0ZSBweC0zXCIgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJncm91cC5zdGFnZS5jb2xvcl9jb2RlXCI+e3sgZ3JvdXAuc3RhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byBtZS00IGFkZC1vcHBvcnR1bml0eS1pY29uXCI+XG4gICAgICAgIDxhIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5vcHBvcnR1bml0eUFkZF1cIiBbcXVlcnlQYXJhbXNdPVwieyBzdGFnZV9pZDogZ3JvdXA/LnN0YWdlPy5pZCwgY2F0ZWdvcnk6IGdyb3VwLnN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMgfVwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cy1zcXVhcmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWxpc3QgaXRlbXMtY29udGFpbmVyXCIgY2RrRHJvcExpc3QgW2lkXT1cImdyb3VwLnN0YWdlLm5hbWVcIiBbY2RrRHJvcExpc3REYXRhXT1cImdyb3VwLm9wcG9ydHVuaXRpZXNcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BJdGVtKCRldmVudClcIiBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJnZXRDb25uZWN0ZWRMaXN0KClcIiAoc2Nyb2xsKT1cIm9uQ29sdW1uU2Nyb2xsKGkpXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLm9wcG9ydHVuaXRpZXM7IGxldCBpZHggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3Bwb3J0dW5pdGllcy1ib3ggbWItM1wiIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIj5cbiAgICAgICAgICA8c3BhbiBuZ2JUb29sdGlwPVwiRWRpdFwiIGNsYXNzPVwiZmxvYXQtZW5kIGVkaXQtYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdGllcywgaXRlbS5pZF1cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZnctYm9sZCBtYi0xXCI+e3sgaXRlbS50aXRsZSB9fTwvcD5cbiAgICAgICAgICA8YSBjbGFzcz1cIm1iLTFcIiBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5hY2NvdW50SW5mbywgaXRlbT8uY3JtX2FjY291bnRfaWQgXVwiPnt7IGl0ZW0/LmNybV9hY2NvdW50Py5uYW1lIH19PC9hPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IChpdGVtPy5vbmVfdGltZV9hbW91bnQgLyAxMDAgfCBjdXJyZW5jeSkgfX0gT25lLXRpbWUgLyB7eyAoaXRlbT8ubW9udGhseV9hbW91bnQgLyAxMDAgfCBjdXJyZW5jeSkgfX0gTVJSPC9wPlxuICAgICAgICAgIDxhICpuZ0lmPVwiaXRlbT8ub3duZXJbMF0/LnVzZXJfYXZhdGFyXCIgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIGl0ZW0/Lm93bmVyWzBdPy5zbHVnXVwiPlxuICAgICAgICAgICAgPGltZyBhbHQ9XCJtZW1iZXIgaW1hZ2VcIiBbc3JjXT1cIml0ZW0/Lm93bmVyWzBdPy51c2VyX2F2YXRhclswXT8udXJsXCIgW3dpZHRoXT1cIiczMCdcIiBjbGFzcz1cInNxdWFyZWRfbG9nbyBmbG9hdC1lbmRcIiBbaGVpZ2h0XT1cIiczMCdcIiBvbmVycm9yPVwidGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J2Fzc2V0cy9pbWcvaWNvbnMvbWFsZS5wbmcnO1wiIC8+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IGl0ZW0uc3RhcnRpbmdfYXQgfCBkYXRlRm9ybWF0IH19PC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBiYWRnZSBiZy13YXJuaW5nXCI+e3sgaXRlbT8uY3JtX29wcG9ydHVuaXR5X3N0YWdlPy5uYW1lIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIiAqbmdJZj1cIihpZHggKyAxKSAlIDUgPT09IDAgJiYgZ3JvdXAuaXNMb2FkaW5nTW9yZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbG9hZGVyXCI+XG4gICAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIG9wcG9ydHVuaXRpZXMuLi48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIGZvb3Rlci1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWl0ZW1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBPbmUtVGltZTo8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLm9uZVRpbWUgLyAxMDAgfCBjdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLWxhYmVsXCI+VG90YWwgTVJSOjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMubXJyIC8gMTAwIHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvb3Rlci1sYWJlbFwiPlRvdGFsIENvdW50Ojwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMuY291bnQgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFnQnhELFlBQ1ksVUFBc0IsRUFDOUIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWJsQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFeEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ1IsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBR3BDLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFDbEIsaUJBQVksR0FBZSxFQUFFLENBQUM7UUFDOUIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsYUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtJQU8vQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BGLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxFQUFFLDBCQUEwQixJQUFJLEVBQUUsQ0FBQztZQUM3RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFNBQVM7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RGLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO1lBQzlELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsVUFBVTthQUNWLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7WUFFaEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDckUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDL0UsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7WUFDcEQsQ0FBQztZQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUFJO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxPQUFPLENBQUMsR0FBRztRQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBWTtRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNoQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDckMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDbkQsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxhQUFhLEdBQUc7Z0JBQ2xCLEtBQUssRUFBRSxJQUFJO2dCQUNYLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDeEMsYUFBYSxFQUFFLEtBQUs7YUFDdkIsQ0FBQztZQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLHdCQUF3QixLQUFLLEtBQUssQ0FBQyxFQUFFLENBQ25FLENBQUM7WUFDRixhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUNqRixhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUM1QixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBQ3JDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNyRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUNsRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO1lBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO1lBQ2hELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLFdBQW1CO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxRSxPQUFPO1FBQ1gsQ0FBQztRQUVELEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTNCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNqRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7aUJBQzFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDOUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXpELEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNwRSxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7SUFDMUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUE0QjtRQUNqQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ0osaUJBQWlCLENBQ2IsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVELG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDckUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtvQkFDNUMsYUFBYTtvQkFDYix1QkFBdUI7b0JBQ3ZCLDRCQUE0QjtvQkFDNUIsYUFBYTtvQkFDYixPQUFPO2lCQUNWLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVTtxQkFDVixtQkFBbUIsQ0FDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQ3JCLG9CQUFvQixDQUFDLEVBQUUsRUFDdkIsb0JBQW9CLENBQ3ZCO3FCQUNBLFNBQVMsQ0FBQztvQkFDUCxJQUFJLEVBQUUsR0FBRyxFQUFFO3dCQUNQLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDdEIseUNBQXlDLENBQzVDLENBQ0osQ0FBQztvQkFDTixDQUFDO29CQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7d0JBQ1IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQy9CLENBQUM7aUJBQ0osQ0FBQyxDQUFDO2dCQUNQLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBNEI7UUFDbEMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVU7YUFDVixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDL0MsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTO1NBQ3JDLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQTNQUSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpRkNmbkMsbXdKQTJFQTs7NEZENURhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDSSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5pbXBvcnQgeyBDcm1PcHBvcnR1bml0eSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvY3JtLW9wcG9ydHVuaXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDcm1TdGFnZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvY3JtLXN0YWdlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc21hcnQtY3JtLWJvYXJkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydENybUJvYXJkQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIGRyYWdnZWRPcHBvcnR1bml0eTogQ3JtT3Bwb3J0dW5pdHk7XG4gICAgc3RhZ2VzOiBDcm1TdGFnZVtdO1xuICAgIGFsbE9wcG9ydHVuaXRpZXM6IENybU9wcG9ydHVuaXR5W107XG4gICAgb3Bwb3J0dW5pdGllc0dyb3VwID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VkU3RhZ2U6IG51bWJlciB8IHN0cmluZztcbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuICAgIGNhdGVnb3JpZXMgPSBbXTtcbiAgICBwcml2YXRlIGF2YWlsYWJsZU9wcG9ydHVuaXRpZXMgPSBbXTtcbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG4gICAgbWFzdGVyU3RhZ2VzOiBDcm1TdGFnZVtdID0gW107XG4gICAgc2VsZWN0ZWRDYXRlZ29yeUlkID0gMDtcbiAgICBwcml2YXRlIHBhZ2VTaXplID0gNTsgLy8gU2hvdyA1IGNhcmRzIGluaXRpYWxseVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY3JtU2VydmljZTogQ3JtU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5nZXRVc2VyU3Vic2NyaXB0aW9uKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0eUNhdGVnb3JpZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YWdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXR5X2NhdGVnb3JpZXMgfHwgW107XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCA9IHRoaXMuY2F0ZWdvcmllc1swXS5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdGFnZXMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRBdmFpbGFibGVPcHBvcnR1bml0eVN0YWdlcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV9jcm1fb3Bwb3J0dW5pdHlfc3RhZ2VzO1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdGFnZXMgPSByZXNwb25zZS5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcztcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbE9wcG9ydHVuaXRpZXMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmdldEFsbE9wcG9ydHVuaXRpZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gcmVzcG9uc2U/LmNybV9vcHBvcnR1bml0aWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdGllcyB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXM/Lmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSB0aGlzLmF2YWlsYWJsZU9wcG9ydHVuaXRpZXMuZmlsdGVyKG9wcG9ydHVuaXR5ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHBvcnR1bml0eT8uY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcz8uaW5jbHVkZXModGhpcy5zZWxlY3RlZENhdGVnb3J5SWQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0dyb3Vwcyh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCB8fCBudWxsKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJlZWZ5KGxpc3QpIHtcbiAgICAgICAgY29uc3QgaWRBdHRyID0gJ2lkJztcbiAgICAgICAgY29uc3QgcGFyZW50QXR0ciA9ICdwcmV2aW91c19zdGFnZV9pZCc7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuQXR0ciA9ICdjaGlsZHJlbic7XG5cbiAgICAgICAgY29uc3QgdHJlZUxpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgbG9va3VwID0ge307XG4gICAgICAgIGxpc3QuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgICAgbG9va3VwW29ialtpZEF0dHJdXSA9IG9iajtcbiAgICAgICAgICAgIG9ialtjaGlsZHJlbkF0dHJdID0gW107XG4gICAgICAgIH0pO1xuICAgICAgICBsaXN0LmZvckVhY2gob2JqID0+IHtcbiAgICAgICAgICAgIGlmIChvYmpbcGFyZW50QXR0cl0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9va3VwW29ialtwYXJlbnRBdHRyXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsb29rdXBbb2JqW3BhcmVudEF0dHJdXVtjaGlsZHJlbkF0dHJdLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cmVlTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmVlTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlTGlzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsYXR0ZW4oYXJyKSB7XG4gICAgICAgIHJldHVybiBhcnIucmVkdWNlKChyZXN1bHQsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmZsYXR0ZW4oY3VycmVudC5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wcG9ydHVuaXRpZXNHcm91cHModmFsPzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwID0gW107XG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5tYXN0ZXJTdGFnZXM7XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5zdGFnZXMuZmlsdGVyKHN0YWdlID0+XG4gICAgICAgICAgICAgICAgc3RhZ2UuY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcy5pbmNsdWRlcyh2YWwpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5zdGFnZXMuc29ydCgoYSwgYikgPT4gKGEuaWQgPiBiLmlkID8gMSA6IGIuaWQgPiBhLmlkID8gLTEgOiAwKSk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLnRyZWVmeSh0aGlzLnN0YWdlcyk7XG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5mbGF0dGVuKHRlbXApO1xuXG4gICAgICAgIHRoaXMuc3RhZ2VzLmZvckVhY2goc3RhZ2UgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3Bwb3J0dW5pdGllcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzOiBbXSxcbiAgICAgICAgICAgICAgICB0b3RhbHM6IHsgb25lVGltZTogMCwgbXJyOiAwLCBjb3VudDogMCB9LFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZ01vcmU6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3Bwb3J0dW5pdHkgPT4gb3Bwb3J0dW5pdHkuY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkID09PSBzdGFnZS5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMub3Bwb3J0dW5pdGllcyA9IGRhdGEuc2xpY2UoMCwgdGhpcy5wYWdlU2l6ZSk7IC8vIExvYWQgaW5pdGlhbCBpdGVtc1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5zdGFnZSA9IHN0YWdlO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy50b3RhbHMub25lVGltZSA9IGRhdGEucmVkdWNlKChzdW0sIG9wcCkgPT4gc3VtICsgb3BwLm9uZV90aW1lX2Ftb3VudCwgMCk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5tcnIgPSBkYXRhLnJlZHVjZSgoc3VtLCBvcHApID0+IHN1bSArIG9wcC5tb250aGx5X2Ftb3VudCwgMCk7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5jb3VudCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAucHVzaChvcHBvcnR1bml0aWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VDYXRlZ29yeShldmVudCkge1xuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gTnVtYmVyKGV2ZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSBjYXRlZ29yaWVzO1xuICAgICAgICBpZiAoY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzLmZpbHRlcihvcHBvcnR1bml0eSA9PlxuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyhjYXRlZ29yaWVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKGNhdGVnb3JpZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uU2Nyb2xsKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cFtjb2x1bW5JbmRleF07XG4gICAgICAgIGlmIChncm91cC5pc0xvYWRpbmdNb3JlIHx8IGdyb3VwLm9wcG9ydHVuaXRpZXMubGVuZ3RoID49IGdyb3VwLnRvdGFscy5jb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXAuaXNMb2FkaW5nTW9yZSA9IHRydWU7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gZ3JvdXAub3Bwb3J0dW5pdGllcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtb3JlT3Bwb3J0dW5pdGllcyA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIob3Bwb3J0dW5pdHkgPT4gb3Bwb3J0dW5pdHkuY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkID09PSBncm91cC5zdGFnZS5pZClcbiAgICAgICAgICAgICAgICAuc2xpY2UoY3VycmVudExlbmd0aCwgY3VycmVudExlbmd0aCArIHRoaXMucGFnZVNpemUpO1xuXG4gICAgICAgICAgICBncm91cC5vcHBvcnR1bml0aWVzID0gZ3JvdXAub3Bwb3J0dW5pdGllcy5jb25jYXQobW9yZU9wcG9ydHVuaXRpZXMpO1xuICAgICAgICAgICAgZ3JvdXAuaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwKTsgLy8gU2hvdyBsb2FkZXIgZm9yIDIgc2Vjb25kc1xuICAgIH1cblxuICAgIGRyb3BJdGVtKGV2ZW50OiBDZGtEcmFnRHJvcDxvYmplY3RbXT4pIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSA9IGV2ZW50Py5pdGVtPy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhZ2UgPSB0aGlzLnN0YWdlcy5maW5kKHN0YWdlID0+IHN0YWdlLm5hbWUgPT09IGV2ZW50Py5jb250YWluZXI/LmlkKT8uaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHBvcnR1bml0aWVzRGV0YWlscyA9IHsgLi4udGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkgfTtcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlsc1snY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkJ10gPSB0aGlzLmNoYW5nZWRTdGFnZTtcbiAgICAgICAgICAgICAgICBIZWxwZXJTZXJ2aWNlLmRlbGV0ZVByb3BzKG9wcG9ydHVuaXRpZXNEZXRhaWxzLCBbXG4gICAgICAgICAgICAgICAgICAgICdjcm1fYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fb3Bwb3J0dW5pdHlfc3RhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX29wcG9ydHVuaXR5X2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX2NvbnRhY3QnLFxuICAgICAgICAgICAgICAgICAgICAnb3duZXInXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGVPcHBvcnR1bml0aWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3J0dW5pdGllc0RldGFpbHMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlVwZGF0ZWRNZXNzYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhZ2UgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbm5lY3RlZExpc3QoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAubWFwKHggPT4gYCR7eC5zdGFnZS5uYW1lfWApO1xuICAgIH1cblxuICAgIGRyb3BHcm91cChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm9wcG9ydHVuaXRpZXNHcm91cCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICB0b2dnbGVDb2x1bW4oZXZlbnQsIGdyb3VwKSB7XG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS50b2dnbGVDbGFzcygnZmEtYW5nbGUtcmlnaHQgZmEtYW5nbGUtZG93bicpO1xuICAgICAgICAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLm1haW4tZGl2JykudG9nZ2xlQ2xhc3MoJ2R5bmFtaWMtY29sdW1ucy13cmFwcGVyJyk7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmVkaXRTdGFnZSh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIGdyb3VwLnN0YWdlPy5pZCwge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogIWdyb3VwLnN0YWdlPy5jb2xsYXBzZWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YWdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzT3Bwb3J0dW5pdGllcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3Bwb3J0dW5pdGllc0dyb3VwLnNvbWUoZ3JvdXAgPT4gZ3JvdXAub3Bwb3J0dW5pdGllcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTG9hZGVkXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJvdyBtYi00XCIgKm5nSWY9XCJpc0xvYWRlZFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgKGNoYW5nZSk9XCJvbkNoYW5nZUNhdGVnb3J5KCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY2F0ZWdvcmllc1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIj57eyBvcHRpb24ubmFtZSB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tOCBtdC0yIG10LXNtLTAgbWItM1wiPlxuICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiIGRhdGEtY3k9XCJhZGQtb3Bwb3J0dW5pdGllc1wiIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm9wcG9ydHVuaXR5QWRkXVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgIHt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQWRkT3Bwb3J0dW5pdHknIHwgdHJhbnNsb2NvIH19XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzTG9hZGVkICYmICFoYXNPcHBvcnR1bml0aWVzKClcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Ob09wcG9ydHVuaXRpZXNNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc0xvYWRlZCAmJiBoYXNPcHBvcnR1bml0aWVzKClcIiBjbGFzcz1cImxpc3QtY29udGFpbmVyIGQtZmxleFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwib3Bwb3J0dW5pdGllc0dyb3VwXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wR3JvdXAoJGV2ZW50KVwiPlxuICA8ZGl2IGNka0Ryb3BMaXN0R3JvdXAgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWNvbnRhaW5lciBtYWluLWRpdiBjcm0tYm9hcmQtcHJpbWFyeVwiIFtjbGFzcy5keW5hbWljLWNvbHVtbnMtd3JhcHBlcl09XCJncm91cC5zdGFnZS5jb2xsYXBzZWRcIiBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiZ3JvdXAuc3RhZ2UuY29sb3JfY29kZVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBvcHBvcnR1bml0aWVzR3JvdXA7IGxldCBpID0gaW5kZXhcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWJvYXJkLXRpdGxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2xsYXBzZS1jb2x1bW4tdG9nZ2xlXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwieydmYS1hbmdsZS1yaWdodCc6ICFncm91cC5zdGFnZS5jb2xsYXBzZWQsICdmYS1hbmdsZS1kb3duJzogZ3JvdXAuc3RhZ2UuY29sbGFwc2VkfVwiIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oJGV2ZW50LCBncm91cClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cInN0YWdlLW5hbWUgbWItMCBweS0yIHBzLTRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC13aGl0ZSBweC0zXCIgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJncm91cC5zdGFnZS5jb2xvcl9jb2RlXCI+e3sgZ3JvdXAuc3RhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byBtZS00IGFkZC1vcHBvcnR1bml0eS1pY29uXCI+XG4gICAgICAgIDxhIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5vcHBvcnR1bml0eUFkZF1cIiBbcXVlcnlQYXJhbXNdPVwieyBzdGFnZV9pZDogZ3JvdXA/LnN0YWdlPy5pZCwgY2F0ZWdvcnk6IGdyb3VwLnN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMgfVwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cy1zcXVhcmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWxpc3QgaXRlbXMtY29udGFpbmVyXCIgY2RrRHJvcExpc3QgW2lkXT1cImdyb3VwLnN0YWdlLm5hbWVcIiBbY2RrRHJvcExpc3REYXRhXT1cImdyb3VwLm9wcG9ydHVuaXRpZXNcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BJdGVtKCRldmVudClcIiBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJnZXRDb25uZWN0ZWRMaXN0KClcIiAoc2Nyb2xsKT1cIm9uQ29sdW1uU2Nyb2xsKGkpXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLm9wcG9ydHVuaXRpZXM7IGxldCBpZHggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3Bwb3J0dW5pdGllcy1ib3ggbWItM1wiIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIj5cbiAgICAgICAgICA8c3BhbiBuZ2JUb29sdGlwPVwiRWRpdFwiIGNsYXNzPVwiZmxvYXQtZW5kIGVkaXQtYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdGllcywgaXRlbS5pZF1cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZnctYm9sZCBtYi0xXCI+e3sgaXRlbS50aXRsZSB9fTwvcD5cbiAgICAgICAgICA8YSBjbGFzcz1cIm1iLTFcIiBbcm91dGVyTGlua109XCJbJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5hY2NvdW50SW5mbywgaXRlbT8uY3JtX2FjY291bnRfaWQgXVwiPnt7IGl0ZW0/LmNybV9hY2NvdW50Py5uYW1lIH19PC9hPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IChpdGVtPy5vbmVfdGltZV9hbW91bnQgLyAxMDAgfCBjdXJyZW5jeSkgfX0gT25lLXRpbWUgLyB7eyAoaXRlbT8ubW9udGhseV9hbW91bnQgLyAxMDAgfCBjdXJyZW5jeSkgfX0gTVJSPC9wPlxuICAgICAgICAgIDxhICpuZ0lmPVwiaXRlbT8ub3duZXJbMF0/LnVzZXJfYXZhdGFyXCIgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIGl0ZW0/Lm93bmVyWzBdPy5zbHVnXVwiPlxuICAgICAgICAgICAgPGltZyBhbHQ9XCJtZW1iZXIgaW1hZ2VcIiBbc3JjXT1cIml0ZW0/Lm93bmVyWzBdPy51c2VyX2F2YXRhclswXT8udXJsXCIgW3dpZHRoXT1cIiczMCdcIiBjbGFzcz1cInNxdWFyZWRfbG9nbyBmbG9hdC1lbmRcIiBbaGVpZ2h0XT1cIiczMCdcIiBvbmVycm9yPVwidGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J2Fzc2V0cy9pbWcvaWNvbnMvbWFsZS5wbmcnO1wiIC8+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IGl0ZW0uc3RhcnRpbmdfYXQgfCBkYXRlRm9ybWF0IH19PC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBiYWRnZSBiZy13YXJuaW5nXCI+e3sgaXRlbT8uY3JtX29wcG9ydHVuaXR5X3N0YWdlPy5uYW1lIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIiAqbmdJZj1cIihpZHggKyAxKSAlIDUgPT09IDAgJiYgZ3JvdXAuaXNMb2FkaW5nTW9yZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbG9hZGVyXCI+XG4gICAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIG9wcG9ydHVuaXRpZXMuLi48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIGZvb3Rlci1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWl0ZW1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBPbmUtVGltZTo8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLm9uZVRpbWUgLyAxMDAgfCBjdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLWxhYmVsXCI+VG90YWwgTVJSOjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMubXJyIC8gMTAwIHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvb3Rlci1sYWJlbFwiPlRvdGFsIENvdW50Ojwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItdmFsdWVcIj57eyBncm91cC50b3RhbHMuY291bnQgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|