ng-kinintel 0.0.397 → 20.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-kinintel.mjs +11874 -0
- package/fesm2022/ng-kinintel.mjs.map +1 -0
- package/index.d.ts +2818 -5
- package/package.json +6 -14
- package/esm2020/lib/components/alert-groups/alert-groups.component.mjs +0 -76
- package/esm2020/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.mjs +0 -83
- package/esm2020/lib/components/dashboard-editor/configure-item/configure-item.component.mjs +0 -853
- package/esm2020/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.mjs +0 -56
- package/esm2020/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.mjs +0 -114
- package/esm2020/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.mjs +0 -163
- package/esm2020/lib/components/dashboard-editor/configure-item/vis-network-options.json +0 -135
- package/esm2020/lib/components/dashboard-editor/dashboard-editor.component.mjs +0 -580
- package/esm2020/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.mjs +0 -15
- package/esm2020/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.mjs +0 -50
- package/esm2020/lib/components/dashboard-editor/item-component/item-component.component.mjs +0 -1226
- package/esm2020/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.mjs +0 -111
- package/esm2020/lib/components/dashboards/dashboards.component.mjs +0 -163
- package/esm2020/lib/components/dashboards/view-dashboard/view-dashboard.component.mjs +0 -429
- package/esm2020/lib/components/data-explorer/change-source-warning/change-source-warning.component.mjs +0 -20
- package/esm2020/lib/components/data-explorer/data-explorer.component.mjs +0 -243
- package/esm2020/lib/components/data-explorer/export-data/export-data.component.mjs +0 -62
- package/esm2020/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.mjs +0 -70
- package/esm2020/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.mjs +0 -190
- package/esm2020/lib/components/data-picker/data-picker.component.mjs +0 -79
- package/esm2020/lib/components/data-search/data-search.component.mjs +0 -11
- package/esm2020/lib/components/data-sharing-invite/data-sharing-invite.component.mjs +0 -52
- package/esm2020/lib/components/dataset/create-dataset/create-dataset.component.mjs +0 -47
- package/esm2020/lib/components/dataset/dataset-editor/available-columns/available-columns.component.mjs +0 -28
- package/esm2020/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.mjs +0 -344
- package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.mjs +0 -80
- package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.mjs +0 -54
- package/esm2020/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.mjs +0 -67
- package/esm2020/lib/components/dataset/dataset-editor/dataset-editor.component.mjs +0 -1134
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.mjs +0 -201
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.mjs +0 -25
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.mjs +0 -72
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.mjs +0 -62
- package/esm2020/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.mjs +0 -41
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.mjs +0 -78
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.mjs +0 -39
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.mjs +0 -75
- package/esm2020/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.mjs +0 -107
- package/esm2020/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.mjs +0 -58
- package/esm2020/lib/components/dataset/dataset-editor/share-query/share-query.component.mjs +0 -110
- package/esm2020/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset.component.mjs +0 -294
- package/esm2020/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.mjs +0 -130
- package/esm2020/lib/components/datasource/create-datasource/api-access/api-access.component.mjs +0 -132
- package/esm2020/lib/components/datasource/create-datasource/create-datasource.component.mjs +0 -729
- package/esm2020/lib/components/datasource/create-datasource/import-data/import-data.component.mjs +0 -146
- package/esm2020/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.mjs +0 -165
- package/esm2020/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.mjs +0 -145
- package/esm2020/lib/components/datasource/datasource.component.mjs +0 -162
- package/esm2020/lib/components/datasource/document-datasource/document-datasource.component.mjs +0 -297
- package/esm2020/lib/components/export-project/export-project.component.mjs +0 -29
- package/esm2020/lib/components/feeds/feed/feed.component.mjs +0 -92
- package/esm2020/lib/components/feeds/feeds.component.mjs +0 -145
- package/esm2020/lib/components/job-tasks/job-tasks.component.mjs +0 -25
- package/esm2020/lib/components/marketplace/marketplace.component.mjs +0 -65
- package/esm2020/lib/components/metadata/metadata.component.mjs +0 -65
- package/esm2020/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.mjs +0 -113
- package/esm2020/lib/components/notification-groups/notification-groups.component.mjs +0 -86
- package/esm2020/lib/components/project-picker/project-picker.component.mjs +0 -118
- package/esm2020/lib/components/project-settings/project-link-selection/project-link-selection.component.mjs +0 -104
- package/esm2020/lib/components/project-settings/project-settings.component.mjs +0 -155
- package/esm2020/lib/components/query-caching/edit-query-cache/edit-query-cache.component.mjs +0 -51
- package/esm2020/lib/components/query-caching/query-cache-view/query-cache-view.component.mjs +0 -121
- package/esm2020/lib/components/query-caching/query-caching.component.mjs +0 -162
- package/esm2020/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.mjs +0 -45
- package/esm2020/lib/components/shared-with-me/shared-with-me.component.mjs +0 -174
- package/esm2020/lib/components/snapshots/snapshots.component.mjs +0 -244
- package/esm2020/lib/components/tag-picker/tag-picker.component.mjs +0 -74
- package/esm2020/lib/components/task-time-periods/task-time-periods.component.mjs +0 -55
- package/esm2020/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.mjs +0 -40
- package/esm2020/lib/guards/dashboard-changes.guard.mjs +0 -22
- package/esm2020/lib/kinintel-config.mjs +0 -3
- package/esm2020/lib/ng-kinintel.module.mjs +0 -437
- package/esm2020/lib/objects/action-event.mjs +0 -16
- package/esm2020/lib/services/alert.service.mjs +0 -52
- package/esm2020/lib/services/dashboard.service.mjs +0 -75
- package/esm2020/lib/services/data-processor.service.mjs +0 -56
- package/esm2020/lib/services/data-search.service.mjs +0 -36
- package/esm2020/lib/services/dataset.service.mjs +0 -187
- package/esm2020/lib/services/datasource.service.mjs +0 -93
- package/esm2020/lib/services/external.service.mjs +0 -33
- package/esm2020/lib/services/feed.service.mjs +0 -50
- package/esm2020/lib/services/notification.service.mjs +0 -41
- package/esm2020/lib/services/project.service.mjs +0 -130
- package/esm2020/lib/services/tag.service.mjs +0 -63
- package/esm2020/ng-kinintel.mjs +0 -5
- package/esm2020/public-api.mjs +0 -43
- package/fesm2015/ng-kinintel.mjs +0 -12182
- package/fesm2015/ng-kinintel.mjs.map +0 -1
- package/fesm2020/ng-kinintel.mjs +0 -11872
- package/fesm2020/ng-kinintel.mjs.map +0 -1
- package/lib/components/alert-groups/alert-groups.component.d.ts +0 -30
- package/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.d.ts +0 -28
- package/lib/components/dashboard-editor/configure-item/configure-item.component.d.ts +0 -256
- package/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.d.ts +0 -16
- package/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.d.ts +0 -59
- package/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.d.ts +0 -26
- package/lib/components/dashboard-editor/dashboard-editor.component.d.ts +0 -85
- package/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.d.ts +0 -8
- package/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.d.ts +0 -22
- package/lib/components/dashboard-editor/item-component/item-component.component.d.ts +0 -264
- package/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.d.ts +0 -30
- package/lib/components/dashboards/dashboards.component.d.ts +0 -56
- package/lib/components/dashboards/view-dashboard/view-dashboard.component.d.ts +0 -81
- package/lib/components/data-explorer/change-source-warning/change-source-warning.component.d.ts +0 -11
- package/lib/components/data-explorer/data-explorer.component.d.ts +0 -61
- package/lib/components/data-explorer/export-data/export-data.component.d.ts +0 -17
- package/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.d.ts +0 -25
- package/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.d.ts +0 -44
- package/lib/components/data-picker/data-picker.component.d.ts +0 -32
- package/lib/components/data-search/data-search.component.d.ts +0 -5
- package/lib/components/data-sharing-invite/data-sharing-invite.component.d.ts +0 -21
- package/lib/components/dataset/create-dataset/create-dataset.component.d.ts +0 -17
- package/lib/components/dataset/dataset-editor/available-columns/available-columns.component.d.ts +0 -12
- package/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.d.ts +0 -61
- package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.d.ts +0 -21
- package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.d.ts +0 -20
- package/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.d.ts +0 -19
- package/lib/components/dataset/dataset-editor/dataset-editor.component.d.ts +0 -131
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.d.ts +0 -63
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.d.ts +0 -20
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.d.ts +0 -16
- package/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.d.ts +0 -18
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.d.ts +0 -23
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.d.ts +0 -13
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.d.ts +0 -22
- package/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.d.ts +0 -27
- package/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.d.ts +0 -25
- package/lib/components/dataset/dataset-editor/share-query/share-query.component.d.ts +0 -41
- package/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.d.ts +0 -11
- package/lib/components/dataset/dataset.component.d.ts +0 -74
- package/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.d.ts +0 -26
- package/lib/components/datasource/create-datasource/api-access/api-access.component.d.ts +0 -31
- package/lib/components/datasource/create-datasource/create-datasource.component.d.ts +0 -112
- package/lib/components/datasource/create-datasource/import-data/import-data.component.d.ts +0 -28
- package/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.d.ts +0 -40
- package/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.d.ts +0 -34
- package/lib/components/datasource/datasource.component.d.ts +0 -46
- package/lib/components/datasource/document-datasource/document-datasource.component.d.ts +0 -64
- package/lib/components/export-project/export-project.component.d.ts +0 -9
- package/lib/components/feeds/feed/feed.component.d.ts +0 -30
- package/lib/components/feeds/feeds.component.d.ts +0 -47
- package/lib/components/job-tasks/job-tasks.component.d.ts +0 -11
- package/lib/components/marketplace/marketplace.component.d.ts +0 -42
- package/lib/components/metadata/metadata.component.d.ts +0 -24
- package/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.d.ts +0 -37
- package/lib/components/notification-groups/notification-groups.component.d.ts +0 -28
- package/lib/components/project-picker/project-picker.component.d.ts +0 -37
- package/lib/components/project-settings/project-link-selection/project-link-selection.component.d.ts +0 -32
- package/lib/components/project-settings/project-settings.component.d.ts +0 -40
- package/lib/components/query-caching/edit-query-cache/edit-query-cache.component.d.ts +0 -17
- package/lib/components/query-caching/query-cache-view/query-cache-view.component.d.ts +0 -35
- package/lib/components/query-caching/query-caching.component.d.ts +0 -38
- package/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.d.ts +0 -21
- package/lib/components/shared-with-me/shared-with-me.component.d.ts +0 -43
- package/lib/components/snapshots/snapshots.component.d.ts +0 -52
- package/lib/components/tag-picker/tag-picker.component.d.ts +0 -27
- package/lib/components/task-time-periods/task-time-periods.component.d.ts +0 -20
- package/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.d.ts +0 -17
- package/lib/guards/dashboard-changes.guard.d.ts +0 -11
- package/lib/kinintel-config.d.ts +0 -10
- package/lib/ng-kinintel.module.d.ts +0 -116
- package/lib/objects/action-event.d.ts +0 -12
- package/lib/services/alert.service.d.ts +0 -17
- package/lib/services/dashboard.service.d.ts +0 -25
- package/lib/services/data-processor.service.d.ts +0 -18
- package/lib/services/data-search.service.d.ts +0 -14
- package/lib/services/dataset.service.d.ts +0 -56
- package/lib/services/datasource.service.d.ts +0 -34
- package/lib/services/external.service.d.ts +0 -12
- package/lib/services/feed.service.d.ts +0 -19
- package/lib/services/notification.service.d.ts +0 -16
- package/lib/services/project.service.d.ts +0 -27
- package/lib/services/tag.service.d.ts +0 -19
- package/public-api.d.ts +0 -38
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { ExportProjectComponent as KAExportProjectComponent } from 'ng-kiniauth';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "@angular/forms";
|
|
6
|
-
export class ExportProjectComponent extends KAExportProjectComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.alertGroupIds = {};
|
|
10
|
-
this.alertGroupUpdateindicators = {};
|
|
11
|
-
}
|
|
12
|
-
export(exportConfig = {}) {
|
|
13
|
-
exportConfig.includedAlertGroupIdUpdateIndicators = {};
|
|
14
|
-
Object.keys(this.alertGroupIds).forEach(groupId => {
|
|
15
|
-
if (this.alertGroupIds[groupId]) {
|
|
16
|
-
exportConfig.includedAlertGroupIdUpdateIndicators[groupId] = this.alertGroupUpdateindicators[groupId] || false;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
// Perform parent export
|
|
20
|
-
super.export(exportConfig);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
ExportProjectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExportProjectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
-
ExportProjectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ExportProjectComponent, selector: "ki-export-project", usesInheritance: true, ngImport: i0, template: "<div class=\"p-6 bg-white border-b border-gray-200\">\n <div class=\"md:flex md:items-center md:justify-between md:space-x-5\">\n <div class=\"flex items-start flex-1\">\n <div class=\"pt-1.5\">\n <h1 class=\"text-2xl font-bold text-gray-900 mb-0\">Export Project</h1>\n <p class=\"text-sm font-medium text-gray-500\">\n Export the current project as a downloadable file for import into other projects\n </p>\n </div>\n </div>\n <div class=\"mt-6 flex flex-col-reverse justify-stretch\">\n <button type=\"button\" (click)=\"export()\"\n class=\"disabled:opacity-50 ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-primary focus:outline-none\">\n Export Project\n </button>\n </div>\n </div>\n</div>\n\n<div class=\"bg-white border-b border-gray-200\">\n <ng-template [ngIf]=\"exportableResources\">\n\n <div class=\"\" *ngIf=\"exportableResources.datasources && exportableResources.datasources.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b uppercase text-xs tracking-widest font-medium\">\n My Data\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let datasource of exportableResources.datasources\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'datasource-' + datasource.identifier\"\n [(ngModel)]=\"exportConfig.datasources[datasource.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"datasource.title\">{{ datasource.title }}</label>\n </div>\n <div class=\"flex items-center h-5 w-12\"\n *ngIf=\"exportConfig.datasources[datasource.identifier].included\">\n <input type=\"checkbox\"\n [name]=\"'datasource-update-' + datasource.identifier\"\n [(ngModel)]=\"exportConfig.datasources[datasource.identifier].includeData\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\" *ngIf=\"exportConfig.datasources[datasource.identifier].included\">\n <label class=\"font-medium text-gray-500\">Include data in export</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.datasets && exportableResources.datasets.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Stored Queries\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let dataset of exportableResources.datasets\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dataset-' + dataset.identifier\"\n [(ngModel)]=\"exportConfig.datasets[dataset.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dataset.title\">{{ dataset.title }}</label>\n </div>\n </div>\n\n </div>\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.dashboards && exportableResources.dashboards.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Dashboards\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let dashboard of exportableResources.dashboards\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dashboard-' + dashboard.identifier\"\n [(ngModel)]=\"exportConfig.dashboards[dashboard.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dashboard.title\">{{ dashboard.title }}</label>\n </div>\n <div class=\"flex items-center h-5 w-12\" *ngIf=\"exportConfig.dashboards[dashboard.identifier].included\">\n <input type=\"checkbox\"\n [name]=\"'dashboard-include-alerts-' + dashboard.identifier\"\n [(ngModel)]=\"exportConfig.dashboards[dashboard.identifier].includeAlerts\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\" *ngIf=\"exportConfig.dashboards[dashboard.identifier].included\">\n <label class=\"font-medium text-gray-500\">Include Alerts</label>\n </div>\n <div class=\"flex items-center h-5 w-12\"\n *ngIf=\"exportConfig.dashboards[dashboard.identifier].included && exportConfig.dashboards[dashboard.identifier].includeAlerts\">\n <input type=\"checkbox\"\n [name]=\"'dashboard-include-alerts-' + dashboard.identifier\"\n [(ngModel)]=\"exportConfig.dashboards[dashboard.identifier].updateAlertTemplates\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\"\n *ngIf=\"exportConfig.dashboards[dashboard.identifier].included && exportConfig.dashboards[dashboard.identifier].includeAlerts\">\n <label class=\"font-medium text-gray-500\">Update Alert Templates</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.feeds && exportableResources.feeds.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Feeds\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let feed of exportableResources.feeds\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'feed-' + feed.identifier\"\n [(ngModel)]=\"exportConfig.feeds[feed.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"feed.title\">/{{ feed.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\"\n *ngIf=\"exportableResources.dataProcessors && _.filter(exportableResources.dataProcessors, {'category': 'snapshot'}).length > 0\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Snapshots\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\"\n *ngFor=\"let dataProcessor of _.filter(exportableResources.dataProcessors, {'category': 'snapshot'})\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dataProcessor-' + dataProcessor.identifier\"\n [(ngModel)]=\"exportConfig.dataProcessors[dataProcessor.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dataProcessor.title\">{{ dataProcessor.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\"\n *ngIf=\"exportableResources.dataProcessors && _.filter(exportableResources.dataProcessors, {'category': 'querycaching'}).length > 0\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Query Caches\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\"\n *ngFor=\"let dataProcessor of _.filter(exportableResources.dataProcessors, {'category': 'querycaching'})\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dataProcessor-' + dataProcessor.identifier\"\n [(ngModel)]=\"exportConfig.dataProcessors[dataProcessor.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dataProcessor.title\">{{ dataProcessor.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.hooks && exportableResources.hooks.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Hooks\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let hook of exportableResources.hooks\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'hook-' + hook.identifier\"\n [(ngModel)]=\"exportConfig.hooks[hook.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"hook.title\">{{ hook.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.apiKeys && exportableResources.apiKeys.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n API Keys\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let apiKey of exportableResources.apiKeys\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'apikey-' + apiKey.identifier\"\n [(ngModel)]=\"exportConfig.apiKeys[apiKey.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"apiKey.title\">{{ apiKey.title }}</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.keyPairs && exportableResources.keyPairs.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Key Pairs\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let keyPair of exportableResources.keyPairs\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'keyPair-' + keyPair.identifier\"\n [(ngModel)]=\"exportConfig.keyPairs[keyPair.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"keyPair.title\">{{ keyPair.title }}</label>\n </div>\n </div>\n\n </div>\n\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.alertGroups && exportableResources.alertGroups.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Alert Groups\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let alertGroup of exportableResources.alertGroups\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'alert-' + alertGroup.identifier\"\n [(ngModel)]=\"exportConfig.alertGroups[alertGroup.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"alertGroup.title\">{{ alertGroup.title }}</label>\n </div>\n <div class=\"flex items-center h-5 w-12\"\n *ngIf=\"exportConfig.alertGroups[alertGroup.identifier].included\">\n <input type=\"checkbox\"\n [name]=\"'alert-update-' + alertGroup.identifier\"\n [(ngModel)]=\"exportConfig.alertGroups[alertGroup.identifier].update\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\" *ngIf=\"exportConfig.alertGroups[alertGroup.identifier].included\">\n <label class=\"font-medium text-gray-500\">Update content on import</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.notificationGroups && exportableResources.notificationGroups.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Notification Groups\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let notificationGroup of exportableResources.notificationGroups\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'notification-' + notificationGroup.identifier\"\n [(ngModel)]=\"exportConfig.notificationGroups[notificationGroup.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"notificationGroup.title\">{{ notificationGroup.title }}</label>\n </div>\n </div>\n\n </div>\n\n </ng-template>\n\n <hr class=\"my-8\">\n\n <div class=\"p-5\">\n <div class=\"flex justify-end\">\n <button type=\"button\" (click)=\"export()\"\n class=\"disabled:opacity-50 ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-primary focus:outline-none\">\n Export Project\n </button>\n </div>\n </div>\n\n</div>\n\n\n\n\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExportProjectComponent, decorators: [{
|
|
26
|
-
type: Component,
|
|
27
|
-
args: [{ selector: 'ki-export-project', template: "<div class=\"p-6 bg-white border-b border-gray-200\">\n <div class=\"md:flex md:items-center md:justify-between md:space-x-5\">\n <div class=\"flex items-start flex-1\">\n <div class=\"pt-1.5\">\n <h1 class=\"text-2xl font-bold text-gray-900 mb-0\">Export Project</h1>\n <p class=\"text-sm font-medium text-gray-500\">\n Export the current project as a downloadable file for import into other projects\n </p>\n </div>\n </div>\n <div class=\"mt-6 flex flex-col-reverse justify-stretch\">\n <button type=\"button\" (click)=\"export()\"\n class=\"disabled:opacity-50 ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-primary focus:outline-none\">\n Export Project\n </button>\n </div>\n </div>\n</div>\n\n<div class=\"bg-white border-b border-gray-200\">\n <ng-template [ngIf]=\"exportableResources\">\n\n <div class=\"\" *ngIf=\"exportableResources.datasources && exportableResources.datasources.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b uppercase text-xs tracking-widest font-medium\">\n My Data\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let datasource of exportableResources.datasources\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'datasource-' + datasource.identifier\"\n [(ngModel)]=\"exportConfig.datasources[datasource.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"datasource.title\">{{ datasource.title }}</label>\n </div>\n <div class=\"flex items-center h-5 w-12\"\n *ngIf=\"exportConfig.datasources[datasource.identifier].included\">\n <input type=\"checkbox\"\n [name]=\"'datasource-update-' + datasource.identifier\"\n [(ngModel)]=\"exportConfig.datasources[datasource.identifier].includeData\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\" *ngIf=\"exportConfig.datasources[datasource.identifier].included\">\n <label class=\"font-medium text-gray-500\">Include data in export</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.datasets && exportableResources.datasets.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Stored Queries\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let dataset of exportableResources.datasets\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dataset-' + dataset.identifier\"\n [(ngModel)]=\"exportConfig.datasets[dataset.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dataset.title\">{{ dataset.title }}</label>\n </div>\n </div>\n\n </div>\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.dashboards && exportableResources.dashboards.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Dashboards\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let dashboard of exportableResources.dashboards\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dashboard-' + dashboard.identifier\"\n [(ngModel)]=\"exportConfig.dashboards[dashboard.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dashboard.title\">{{ dashboard.title }}</label>\n </div>\n <div class=\"flex items-center h-5 w-12\" *ngIf=\"exportConfig.dashboards[dashboard.identifier].included\">\n <input type=\"checkbox\"\n [name]=\"'dashboard-include-alerts-' + dashboard.identifier\"\n [(ngModel)]=\"exportConfig.dashboards[dashboard.identifier].includeAlerts\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\" *ngIf=\"exportConfig.dashboards[dashboard.identifier].included\">\n <label class=\"font-medium text-gray-500\">Include Alerts</label>\n </div>\n <div class=\"flex items-center h-5 w-12\"\n *ngIf=\"exportConfig.dashboards[dashboard.identifier].included && exportConfig.dashboards[dashboard.identifier].includeAlerts\">\n <input type=\"checkbox\"\n [name]=\"'dashboard-include-alerts-' + dashboard.identifier\"\n [(ngModel)]=\"exportConfig.dashboards[dashboard.identifier].updateAlertTemplates\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\"\n *ngIf=\"exportConfig.dashboards[dashboard.identifier].included && exportConfig.dashboards[dashboard.identifier].includeAlerts\">\n <label class=\"font-medium text-gray-500\">Update Alert Templates</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.feeds && exportableResources.feeds.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Feeds\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let feed of exportableResources.feeds\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'feed-' + feed.identifier\"\n [(ngModel)]=\"exportConfig.feeds[feed.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"feed.title\">/{{ feed.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\"\n *ngIf=\"exportableResources.dataProcessors && _.filter(exportableResources.dataProcessors, {'category': 'snapshot'}).length > 0\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Snapshots\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\"\n *ngFor=\"let dataProcessor of _.filter(exportableResources.dataProcessors, {'category': 'snapshot'})\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dataProcessor-' + dataProcessor.identifier\"\n [(ngModel)]=\"exportConfig.dataProcessors[dataProcessor.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dataProcessor.title\">{{ dataProcessor.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\"\n *ngIf=\"exportableResources.dataProcessors && _.filter(exportableResources.dataProcessors, {'category': 'querycaching'}).length > 0\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Query Caches\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\"\n *ngFor=\"let dataProcessor of _.filter(exportableResources.dataProcessors, {'category': 'querycaching'})\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'dataProcessor-' + dataProcessor.identifier\"\n [(ngModel)]=\"exportConfig.dataProcessors[dataProcessor.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"dataProcessor.title\">{{ dataProcessor.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.hooks && exportableResources.hooks.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Hooks\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let hook of exportableResources.hooks\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'hook-' + hook.identifier\"\n [(ngModel)]=\"exportConfig.hooks[hook.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"hook.title\">{{ hook.title }}</label>\n </div>\n </div>\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.apiKeys && exportableResources.apiKeys.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n API Keys\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let apiKey of exportableResources.apiKeys\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'apikey-' + apiKey.identifier\"\n [(ngModel)]=\"exportConfig.apiKeys[apiKey.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"apiKey.title\">{{ apiKey.title }}</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.keyPairs && exportableResources.keyPairs.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Key Pairs\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let keyPair of exportableResources.keyPairs\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'keyPair-' + keyPair.identifier\"\n [(ngModel)]=\"exportConfig.keyPairs[keyPair.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"keyPair.title\">{{ keyPair.title }}</label>\n </div>\n </div>\n\n </div>\n\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.alertGroups && exportableResources.alertGroups.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Alert Groups\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let alertGroup of exportableResources.alertGroups\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'alert-' + alertGroup.identifier\"\n [(ngModel)]=\"exportConfig.alertGroups[alertGroup.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"alertGroup.title\">{{ alertGroup.title }}</label>\n </div>\n <div class=\"flex items-center h-5 w-12\"\n *ngIf=\"exportConfig.alertGroups[alertGroup.identifier].included\">\n <input type=\"checkbox\"\n [name]=\"'alert-update-' + alertGroup.identifier\"\n [(ngModel)]=\"exportConfig.alertGroups[alertGroup.identifier].update\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\" *ngIf=\"exportConfig.alertGroups[alertGroup.identifier].included\">\n <label class=\"font-medium text-gray-500\">Update content on import</label>\n </div>\n </div>\n\n </div>\n\n\n <div class=\"mt-6\" *ngIf=\"exportableResources.notificationGroups && exportableResources.notificationGroups.length\">\n <div class=\"mb-4 bg-gray-100 w-full px-4 py-3 border-b border-t uppercase text-xs tracking-widest font-medium\">\n Notification Groups\n </div>\n\n <div class=\"my-3 mx-2 flex items-start\" *ngFor=\"let notificationGroup of exportableResources.notificationGroups\">\n <div class=\"flex items-center h-5 w-12\">\n <input type=\"checkbox\"\n [name]=\"'notification-' + notificationGroup.identifier\"\n [(ngModel)]=\"exportConfig.notificationGroups[notificationGroup.identifier].included\"\n class=\"focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded\">\n </div>\n <div class=\"ml-3 text-sm w-48\">\n <label class=\"font-medium text-gray-700 truncate block\" [title]=\"notificationGroup.title\">{{ notificationGroup.title }}</label>\n </div>\n </div>\n\n </div>\n\n </ng-template>\n\n <hr class=\"my-8\">\n\n <div class=\"p-5\">\n <div class=\"flex justify-end\">\n <button type=\"button\" (click)=\"export()\"\n class=\"disabled:opacity-50 ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-primary focus:outline-none\">\n Export Project\n </button>\n </div>\n </div>\n\n</div>\n\n\n\n\n\n\n" }]
|
|
28
|
-
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXByb2plY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1wcm9qZWN0L2V4cG9ydC1wcm9qZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWtpbmludGVsL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtcHJvamVjdC9leHBvcnQtcHJvamVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSx3QkFBd0IsRUFBQyxNQUFNLGFBQWEsQ0FBQzs7OztBQVEvRSxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsd0JBQXdCO0lBTHBFOztRQU1XLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLCtCQUEwQixHQUFHLEVBQUUsQ0FBQztLQWlCMUM7SUFkRyxNQUFNLENBQUMsZUFBb0IsRUFBRTtRQUV6QixZQUFZLENBQUMsb0NBQW9DLEdBQUcsRUFBRSxDQUFDO1FBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM5QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUM7Z0JBQzVCLFlBQVksQ0FBQyxvQ0FBb0MsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDO2FBQ2xIO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFHSCx3QkFBd0I7UUFDeEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixDQUFDOztvSEFsQlEsc0JBQXNCO3dHQUF0QixzQkFBc0IsZ0ZDVG5DLDh3Z0JBNlNBOzRGRHBTYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0V4cG9ydFByb2plY3RDb21wb25lbnQgYXMgS0FFeHBvcnRQcm9qZWN0Q29tcG9uZW50fSBmcm9tICduZy1raW5pYXV0aCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2ktZXhwb3J0LXByb2plY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhwb3J0LXByb2plY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leHBvcnQtcHJvamVjdC5jb21wb25lbnQuc2FzcyddXG59KVxuZXhwb3J0IGNsYXNzIEV4cG9ydFByb2plY3RDb21wb25lbnQgZXh0ZW5kcyBLQUV4cG9ydFByb2plY3RDb21wb25lbnR7XG4gICAgcHVibGljIGFsZXJ0R3JvdXBJZHMgPSB7fTtcbiAgICBwdWJsaWMgYWxlcnRHcm91cFVwZGF0ZWluZGljYXRvcnMgPSB7fTtcblxuXG4gICAgZXhwb3J0KGV4cG9ydENvbmZpZzogYW55ID0ge30pIHtcblxuICAgICAgICBleHBvcnRDb25maWcuaW5jbHVkZWRBbGVydEdyb3VwSWRVcGRhdGVJbmRpY2F0b3JzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5hbGVydEdyb3VwSWRzKS5mb3JFYWNoKGdyb3VwSWQgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxlcnRHcm91cElkc1tncm91cElkXSl7XG4gICAgICAgICAgICAgICAgZXhwb3J0Q29uZmlnLmluY2x1ZGVkQWxlcnRHcm91cElkVXBkYXRlSW5kaWNhdG9yc1tncm91cElkXSA9IHRoaXMuYWxlcnRHcm91cFVwZGF0ZWluZGljYXRvcnNbZ3JvdXBJZF0gfHwgZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgLy8gUGVyZm9ybSBwYXJlbnQgZXhwb3J0XG4gICAgICAgIHN1cGVyLmV4cG9ydChleHBvcnRDb25maWcpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTYgYmctd2hpdGUgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1kOmZsZXggbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBtZDpzcGFjZS14LTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMS41XCI+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgbWItMFwiPkV4cG9ydCBQcm9qZWN0PC9oMT5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBFeHBvcnQgdGhlIGN1cnJlbnQgcHJvamVjdCBhcyBhIGRvd25sb2FkYWJsZSBmaWxlIGZvciBpbXBvcnQgaW50byBvdGhlciBwcm9qZWN0c1xuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTYgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGp1c3RpZnktc3RyZXRjaFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydCgpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkaXNhYmxlZDpvcGFjaXR5LTUwIG1sLTMgaW5saW5lLWZsZXgganVzdGlmeS1jZW50ZXIgcHktMiBweC00IGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgc2hhZG93LXNtIHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1tZCB0ZXh0LXdoaXRlIGJnLXByaW1hcnkgZm9jdXM6b3V0bGluZS1ub25lXCI+XG4gICAgICAgICAgICAgICAgRXhwb3J0IFByb2plY3RcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYmctd2hpdGUgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImV4cG9ydGFibGVSZXNvdXJjZXNcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJleHBvcnRhYmxlUmVzb3VyY2VzLmRhdGFzb3VyY2VzICYmIGV4cG9ydGFibGVSZXNvdXJjZXMuZGF0YXNvdXJjZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNCBiZy1ncmF5LTEwMCB3LWZ1bGwgcHgtNCBweS0zIGJvcmRlci1iIHVwcGVyY2FzZSB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgIE15IERhdGFcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBteC0yIGZsZXggaXRlbXMtc3RhcnRcIiAqbmdGb3I9XCJsZXQgZGF0YXNvdXJjZSBvZiBleHBvcnRhYmxlUmVzb3VyY2VzLmRhdGFzb3VyY2VzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtNSB3LTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2RhdGFzb3VyY2UtJyArIGRhdGFzb3VyY2UuaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydENvbmZpZy5kYXRhc291cmNlc1tkYXRhc291cmNlLmlkZW50aWZpZXJdLmluY2x1ZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXM6cmluZy1pbmRpZ28tNTAwIGgtNCB3LTQgdGV4dC1pbmRpZ28tNjAwIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTMgdGV4dC1zbSB3LTQ4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgdHJ1bmNhdGUgYmxvY2tcIiBbdGl0bGVdPVwiZGF0YXNvdXJjZS50aXRsZVwiPnt7IGRhdGFzb3VyY2UudGl0bGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTUgdy0xMlwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cG9ydENvbmZpZy5kYXRhc291cmNlc1tkYXRhc291cmNlLmlkZW50aWZpZXJdLmluY2x1ZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2RhdGFzb3VyY2UtdXBkYXRlLScgKyBkYXRhc291cmNlLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuZGF0YXNvdXJjZXNbZGF0YXNvdXJjZS5pZGVudGlmaWVyXS5pbmNsdWRlRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvY3VzOnJpbmctaW5kaWdvLTUwMCBoLTQgdy00IHRleHQtaW5kaWdvLTYwMCBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zIHRleHQtc20gdy00OFwiICpuZ0lmPVwiZXhwb3J0Q29uZmlnLmRhdGFzb3VyY2VzW2RhdGFzb3VyY2UuaWRlbnRpZmllcl0uaW5jbHVkZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMFwiPkluY2x1ZGUgZGF0YSBpbiBleHBvcnQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiICpuZ0lmPVwiZXhwb3J0YWJsZVJlc291cmNlcy5kYXRhc2V0cyAmJiBleHBvcnRhYmxlUmVzb3VyY2VzLmRhdGFzZXRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYmctZ3JheS0xMDAgdy1mdWxsIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItdCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICBTdG9yZWQgUXVlcmllc1xuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIG14LTIgZmxleCBpdGVtcy1zdGFydFwiICpuZ0Zvcj1cImxldCBkYXRhc2V0IG9mIGV4cG9ydGFibGVSZXNvdXJjZXMuZGF0YXNldHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgaC01IHctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInZGF0YXNldC0nICsgZGF0YXNldC5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0Q29uZmlnLmRhdGFzZXRzW2RhdGFzZXQuaWRlbnRpZmllcl0uaW5jbHVkZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb2N1czpyaW5nLWluZGlnby01MDAgaC00IHctNCB0ZXh0LWluZGlnby02MDAgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMyB0ZXh0LXNtIHctNDhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCB0cnVuY2F0ZSBibG9ja1wiIFt0aXRsZV09XCJkYXRhc2V0LnRpdGxlXCI+e3sgZGF0YXNldC50aXRsZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiICpuZ0lmPVwiZXhwb3J0YWJsZVJlc291cmNlcy5kYXNoYm9hcmRzICYmIGV4cG9ydGFibGVSZXNvdXJjZXMuZGFzaGJvYXJkcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IGJnLWdyYXktMTAwIHctZnVsbCBweC00IHB5LTMgYm9yZGVyLWIgYm9yZGVyLXQgdXBwZXJjYXNlIHRleHQteHMgdHJhY2tpbmctd2lkZXN0IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgRGFzaGJvYXJkc1xuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIG14LTIgZmxleCBpdGVtcy1zdGFydFwiICpuZ0Zvcj1cImxldCBkYXNoYm9hcmQgb2YgZXhwb3J0YWJsZVJlc291cmNlcy5kYXNoYm9hcmRzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtNSB3LTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2Rhc2hib2FyZC0nICsgZGFzaGJvYXJkLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuZGFzaGJvYXJkc1tkYXNoYm9hcmQuaWRlbnRpZmllcl0uaW5jbHVkZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb2N1czpyaW5nLWluZGlnby01MDAgaC00IHctNCB0ZXh0LWluZGlnby02MDAgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMyB0ZXh0LXNtIHctNDhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCB0cnVuY2F0ZSBibG9ja1wiIFt0aXRsZV09XCJkYXNoYm9hcmQudGl0bGVcIj57eyBkYXNoYm9hcmQudGl0bGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTUgdy0xMlwiICpuZ0lmPVwiZXhwb3J0Q29uZmlnLmRhc2hib2FyZHNbZGFzaGJvYXJkLmlkZW50aWZpZXJdLmluY2x1ZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2Rhc2hib2FyZC1pbmNsdWRlLWFsZXJ0cy0nICsgZGFzaGJvYXJkLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuZGFzaGJvYXJkc1tkYXNoYm9hcmQuaWRlbnRpZmllcl0uaW5jbHVkZUFsZXJ0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvY3VzOnJpbmctaW5kaWdvLTUwMCBoLTQgdy00IHRleHQtaW5kaWdvLTYwMCBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zIHRleHQtc20gdy00OFwiICpuZ0lmPVwiZXhwb3J0Q29uZmlnLmRhc2hib2FyZHNbZGFzaGJvYXJkLmlkZW50aWZpZXJdLmluY2x1ZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDBcIj5JbmNsdWRlIEFsZXJ0czwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtNSB3LTEyXCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwb3J0Q29uZmlnLmRhc2hib2FyZHNbZGFzaGJvYXJkLmlkZW50aWZpZXJdLmluY2x1ZGVkICYmIGV4cG9ydENvbmZpZy5kYXNoYm9hcmRzW2Rhc2hib2FyZC5pZGVudGlmaWVyXS5pbmNsdWRlQWxlcnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2Rhc2hib2FyZC1pbmNsdWRlLWFsZXJ0cy0nICsgZGFzaGJvYXJkLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuZGFzaGJvYXJkc1tkYXNoYm9hcmQuaWRlbnRpZmllcl0udXBkYXRlQWxlcnRUZW1wbGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb2N1czpyaW5nLWluZGlnby01MDAgaC00IHctNCB0ZXh0LWluZGlnby02MDAgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMyB0ZXh0LXNtIHctNDhcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBvcnRDb25maWcuZGFzaGJvYXJkc1tkYXNoYm9hcmQuaWRlbnRpZmllcl0uaW5jbHVkZWQgJiYgZXhwb3J0Q29uZmlnLmRhc2hib2FyZHNbZGFzaGJvYXJkLmlkZW50aWZpZXJdLmluY2x1ZGVBbGVydHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMFwiPlVwZGF0ZSBBbGVydCBUZW1wbGF0ZXM8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiICpuZ0lmPVwiZXhwb3J0YWJsZVJlc291cmNlcy5mZWVkcyAmJiBleHBvcnRhYmxlUmVzb3VyY2VzLmZlZWRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYmctZ3JheS0xMDAgdy1mdWxsIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItdCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICBGZWVkc1xuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIG14LTIgZmxleCBpdGVtcy1zdGFydFwiICpuZ0Zvcj1cImxldCBmZWVkIG9mIGV4cG9ydGFibGVSZXNvdXJjZXMuZmVlZHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgaC01IHctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInZmVlZC0nICsgZmVlZC5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0Q29uZmlnLmZlZWRzW2ZlZWQuaWRlbnRpZmllcl0uaW5jbHVkZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb2N1czpyaW5nLWluZGlnby01MDAgaC00IHctNCB0ZXh0LWluZGlnby02MDAgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMyB0ZXh0LXNtIHctNDhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCB0cnVuY2F0ZSBibG9ja1wiIFt0aXRsZV09XCJmZWVkLnRpdGxlXCI+L3t7IGZlZWQudGl0bGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTZcIlxuICAgICAgICAgICAgICpuZ0lmPVwiZXhwb3J0YWJsZVJlc291cmNlcy5kYXRhUHJvY2Vzc29ycyAmJiBfLmZpbHRlcihleHBvcnRhYmxlUmVzb3VyY2VzLmRhdGFQcm9jZXNzb3JzLCB7J2NhdGVnb3J5JzogJ3NuYXBzaG90J30pLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IGJnLWdyYXktMTAwIHctZnVsbCBweC00IHB5LTMgYm9yZGVyLWIgYm9yZGVyLXQgdXBwZXJjYXNlIHRleHQteHMgdHJhY2tpbmctd2lkZXN0IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgU25hcHNob3RzXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgbXgtMiBmbGV4IGl0ZW1zLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGFQcm9jZXNzb3Igb2YgXy5maWx0ZXIoZXhwb3J0YWJsZVJlc291cmNlcy5kYXRhUHJvY2Vzc29ycywgeydjYXRlZ29yeSc6ICdzbmFwc2hvdCd9KVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTUgdy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidkYXRhUHJvY2Vzc29yLScgKyBkYXRhUHJvY2Vzc29yLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuZGF0YVByb2Nlc3NvcnNbZGF0YVByb2Nlc3Nvci5pZGVudGlmaWVyXS5pbmNsdWRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvY3VzOnJpbmctaW5kaWdvLTUwMCBoLTQgdy00IHRleHQtaW5kaWdvLTYwMCBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zIHRleHQtc20gdy00OFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHRydW5jYXRlIGJsb2NrXCIgW3RpdGxlXT1cImRhdGFQcm9jZXNzb3IudGl0bGVcIj57eyBkYXRhUHJvY2Vzc29yLnRpdGxlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC02XCJcbiAgICAgICAgICAgICAqbmdJZj1cImV4cG9ydGFibGVSZXNvdXJjZXMuZGF0YVByb2Nlc3NvcnMgJiYgXy5maWx0ZXIoZXhwb3J0YWJsZVJlc291cmNlcy5kYXRhUHJvY2Vzc29ycywgeydjYXRlZ29yeSc6ICdxdWVyeWNhY2hpbmcnfSkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYmctZ3JheS0xMDAgdy1mdWxsIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItdCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICBRdWVyeSBDYWNoZXNcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBteC0yIGZsZXggaXRlbXMtc3RhcnRcIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YVByb2Nlc3NvciBvZiBfLmZpbHRlcihleHBvcnRhYmxlUmVzb3VyY2VzLmRhdGFQcm9jZXNzb3JzLCB7J2NhdGVnb3J5JzogJ3F1ZXJ5Y2FjaGluZyd9KVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTUgdy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidkYXRhUHJvY2Vzc29yLScgKyBkYXRhUHJvY2Vzc29yLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuZGF0YVByb2Nlc3NvcnNbZGF0YVByb2Nlc3Nvci5pZGVudGlmaWVyXS5pbmNsdWRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvY3VzOnJpbmctaW5kaWdvLTUwMCBoLTQgdy00IHRleHQtaW5kaWdvLTYwMCBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zIHRleHQtc20gdy00OFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHRydW5jYXRlIGJsb2NrXCIgW3RpdGxlXT1cImRhdGFQcm9jZXNzb3IudGl0bGVcIj57eyBkYXRhUHJvY2Vzc29yLnRpdGxlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC02XCIgKm5nSWY9XCJleHBvcnRhYmxlUmVzb3VyY2VzLmhvb2tzICYmIGV4cG9ydGFibGVSZXNvdXJjZXMuaG9va3MubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNCBiZy1ncmF5LTEwMCB3LWZ1bGwgcHgtNCBweS0zIGJvcmRlci1iIGJvcmRlci10IHVwcGVyY2FzZSB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgIEhvb2tzXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgbXgtMiBmbGV4IGl0ZW1zLXN0YXJ0XCIgKm5nRm9yPVwibGV0IGhvb2sgb2YgZXhwb3J0YWJsZVJlc291cmNlcy5ob29rc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTUgdy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidob29rLScgKyBob29rLmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuaG9va3NbaG9vay5pZGVudGlmaWVyXS5pbmNsdWRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvY3VzOnJpbmctaW5kaWdvLTUwMCBoLTQgdy00IHRleHQtaW5kaWdvLTYwMCBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zIHRleHQtc20gdy00OFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHRydW5jYXRlIGJsb2NrXCIgW3RpdGxlXT1cImhvb2sudGl0bGVcIj57eyBob29rLnRpdGxlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC02XCIgKm5nSWY9XCJleHBvcnRhYmxlUmVzb3VyY2VzLmFwaUtleXMgJiYgZXhwb3J0YWJsZVJlc291cmNlcy5hcGlLZXlzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYmctZ3JheS0xMDAgdy1mdWxsIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItdCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICBBUEkgS2V5c1xuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIG14LTIgZmxleCBpdGVtcy1zdGFydFwiICpuZ0Zvcj1cImxldCBhcGlLZXkgb2YgZXhwb3J0YWJsZVJlc291cmNlcy5hcGlLZXlzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtNSB3LTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2FwaWtleS0nICsgYXBpS2V5LmlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRDb25maWcuYXBpS2V5c1thcGlLZXkuaWRlbnRpZmllcl0uaW5jbHVkZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb2N1czpyaW5nLWluZGlnby01MDAgaC00IHctNCB0ZXh0LWluZGlnby02MDAgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMyB0ZXh0LXNtIHctNDhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCB0cnVuY2F0ZSBibG9ja1wiIFt0aXRsZV09XCJhcGlLZXkudGl0bGVcIj57eyBhcGlLZXkudGl0bGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiICpuZ0lmPVwiZXhwb3J0YWJsZVJlc291cmNlcy5rZXlQYWlycyAmJiBleHBvcnRhYmxlUmVzb3VyY2VzLmtleVBhaXJzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYmctZ3JheS0xMDAgdy1mdWxsIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItdCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICBLZXkgUGFpcnNcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBteC0yIGZsZXggaXRlbXMtc3RhcnRcIiAqbmdGb3I9XCJsZXQga2V5UGFpciBvZiBleHBvcnRhYmxlUmVzb3VyY2VzLmtleVBhaXJzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtNSB3LTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2tleVBhaXItJyArIGtleVBhaXIuaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydENvbmZpZy5rZXlQYWlyc1trZXlQYWlyLmlkZW50aWZpZXJdLmluY2x1ZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXM6cmluZy1pbmRpZ28tNTAwIGgtNCB3LTQgdGV4dC1pbmRpZ28tNjAwIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTMgdGV4dC1zbSB3LTQ4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgdHJ1bmNhdGUgYmxvY2tcIiBbdGl0bGVdPVwia2V5UGFpci50aXRsZVwiPnt7IGtleVBhaXIudGl0bGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC02XCIgKm5nSWY9XCJleHBvcnRhYmxlUmVzb3VyY2VzLmFsZXJ0R3JvdXBzICYmIGV4cG9ydGFibGVSZXNvdXJjZXMuYWxlcnRHcm91cHMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNCBiZy1ncmF5LTEwMCB3LWZ1bGwgcHgtNCBweS0zIGJvcmRlci1iIGJvcmRlci10IHVwcGVyY2FzZSB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgIEFsZXJ0IEdyb3Vwc1xuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIG14LTIgZmxleCBpdGVtcy1zdGFydFwiICpuZ0Zvcj1cImxldCBhbGVydEdyb3VwIG9mIGV4cG9ydGFibGVSZXNvdXJjZXMuYWxlcnRHcm91cHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgaC01IHctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInYWxlcnQtJyArIGFsZXJ0R3JvdXAuaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydENvbmZpZy5hbGVydEdyb3Vwc1thbGVydEdyb3VwLmlkZW50aWZpZXJdLmluY2x1ZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXM6cmluZy1pbmRpZ28tNTAwIGgtNCB3LTQgdGV4dC1pbmRpZ28tNjAwIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTMgdGV4dC1zbSB3LTQ4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgdHJ1bmNhdGUgYmxvY2tcIiBbdGl0bGVdPVwiYWxlcnRHcm91cC50aXRsZVwiPnt7IGFsZXJ0R3JvdXAudGl0bGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTUgdy0xMlwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cG9ydENvbmZpZy5hbGVydEdyb3Vwc1thbGVydEdyb3VwLmlkZW50aWZpZXJdLmluY2x1ZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2FsZXJ0LXVwZGF0ZS0nICsgYWxlcnRHcm91cC5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0Q29uZmlnLmFsZXJ0R3JvdXBzW2FsZXJ0R3JvdXAuaWRlbnRpZmllcl0udXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXM6cmluZy1pbmRpZ28tNTAwIGgtNCB3LTQgdGV4dC1pbmRpZ28tNjAwIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTMgdGV4dC1zbSB3LTQ4XCIgKm5nSWY9XCJleHBvcnRDb25maWcuYWxlcnRHcm91cHNbYWxlcnRHcm91cC5pZGVudGlmaWVyXS5pbmNsdWRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwXCI+VXBkYXRlIGNvbnRlbnQgb24gaW1wb3J0PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTZcIiAqbmdJZj1cImV4cG9ydGFibGVSZXNvdXJjZXMubm90aWZpY2F0aW9uR3JvdXBzICYmIGV4cG9ydGFibGVSZXNvdXJjZXMubm90aWZpY2F0aW9uR3JvdXBzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYmctZ3JheS0xMDAgdy1mdWxsIHB4LTQgcHktMyBib3JkZXItYiBib3JkZXItdCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24gR3JvdXBzXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgbXgtMiBmbGV4IGl0ZW1zLXN0YXJ0XCIgKm5nRm9yPVwibGV0IG5vdGlmaWNhdGlvbkdyb3VwIG9mIGV4cG9ydGFibGVSZXNvdXJjZXMubm90aWZpY2F0aW9uR3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtNSB3LTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ25vdGlmaWNhdGlvbi0nICsgbm90aWZpY2F0aW9uR3JvdXAuaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydENvbmZpZy5ub3RpZmljYXRpb25Hcm91cHNbbm90aWZpY2F0aW9uR3JvdXAuaWRlbnRpZmllcl0uaW5jbHVkZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb2N1czpyaW5nLWluZGlnby01MDAgaC00IHctNCB0ZXh0LWluZGlnby02MDAgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMyB0ZXh0LXNtIHctNDhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCB0cnVuY2F0ZSBibG9ja1wiIFt0aXRsZV09XCJub3RpZmljYXRpb25Hcm91cC50aXRsZVwiPnt7IG5vdGlmaWNhdGlvbkdyb3VwLnRpdGxlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxociBjbGFzcz1cIm15LThcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJleHBvcnQoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGlzYWJsZWQ6b3BhY2l0eS01MCBtbC0zIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIHB5LTIgcHgtNCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHNoYWRvdy1zbSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBiZy1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZVwiPlxuICAgICAgICAgICAgICAgIEV4cG9ydCBQcm9qZWN0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG5cblxuXG5cblxuIl19
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
|
|
3
|
-
import { BehaviorSubject, merge } from 'rxjs';
|
|
4
|
-
import { debounceTime, map, switchMap } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/legacy-dialog";
|
|
7
|
-
import * as i2 from "../../../services/feed.service";
|
|
8
|
-
import * as i3 from "../../../services/dataset.service";
|
|
9
|
-
import * as i4 from "@angular/common";
|
|
10
|
-
import * as i5 from "@angular/material/legacy-button";
|
|
11
|
-
import * as i6 from "@angular/material/icon";
|
|
12
|
-
import * as i7 from "@angular/cdk/drag-drop";
|
|
13
|
-
import * as i8 from "@angular/forms";
|
|
14
|
-
import * as i9 from "@angular/material/legacy-core";
|
|
15
|
-
import * as i10 from "@angular/material/legacy-checkbox";
|
|
16
|
-
import * as i11 from "@angular/material/legacy-list";
|
|
17
|
-
import * as i12 from "@angular/material/legacy-autocomplete";
|
|
18
|
-
export class FeedComponent {
|
|
19
|
-
constructor(dialogRef, data, feedService, datasetService) {
|
|
20
|
-
this.dialogRef = dialogRef;
|
|
21
|
-
this.data = data;
|
|
22
|
-
this.feedService = feedService;
|
|
23
|
-
this.datasetService = datasetService;
|
|
24
|
-
this.feed = {};
|
|
25
|
-
this.datasets = [];
|
|
26
|
-
this.searchText = new BehaviorSubject('');
|
|
27
|
-
this.parameters = [];
|
|
28
|
-
this.error = '';
|
|
29
|
-
this.cacheEnabled = false;
|
|
30
|
-
}
|
|
31
|
-
async ngOnInit() {
|
|
32
|
-
this.feed = this.data.feed ? Object.assign({}, this.data.feed) : {};
|
|
33
|
-
if (!this.feed.exporterConfiguration || Array.isArray(this.feed.exporterConfiguration)) {
|
|
34
|
-
this.feed.exporterConfiguration = { includeHeaderRow: true, separator: ',' };
|
|
35
|
-
}
|
|
36
|
-
if (this.feed.datasetInstanceId) {
|
|
37
|
-
this.feedDataset = await this.datasetService.getDataset(this.feed.datasetInstanceId);
|
|
38
|
-
this.parameters = await this.datasetService.getEvaluatedParameters(this.feedDataset);
|
|
39
|
-
}
|
|
40
|
-
this.feedUrl = this.data.feedUrl;
|
|
41
|
-
if (!this.feed.cacheTimeSeconds) {
|
|
42
|
-
this.feed.cacheTimeSeconds = 0;
|
|
43
|
-
}
|
|
44
|
-
merge(this.searchText)
|
|
45
|
-
.pipe(debounceTime(300),
|
|
46
|
-
// distinctUntilChanged(),
|
|
47
|
-
switchMap(() => this.getDatasets())).subscribe((datasets) => {
|
|
48
|
-
this.datasets = datasets;
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
updateCacheEnabled(value) {
|
|
52
|
-
if (!value) {
|
|
53
|
-
this.feed.cacheTimeSeconds = 0;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
displayFn(dataset) {
|
|
57
|
-
return dataset && dataset.title ? dataset.title : '';
|
|
58
|
-
}
|
|
59
|
-
async updateFeedDataset(event) {
|
|
60
|
-
const dataset = event.source.value;
|
|
61
|
-
this.feed.datasetInstanceId = dataset.id;
|
|
62
|
-
this.feed.datasetLabel = dataset;
|
|
63
|
-
this.parameters = [];
|
|
64
|
-
this.feedDataset = await this.datasetService.getDataset(this.feed.datasetInstanceId);
|
|
65
|
-
this.parameters = await this.datasetService.getEvaluatedParameters(this.feedDataset);
|
|
66
|
-
}
|
|
67
|
-
saveFeed() {
|
|
68
|
-
this.feedService.saveFeed(this.feed).then(res => {
|
|
69
|
-
this.dialogRef.close();
|
|
70
|
-
}).catch(err => {
|
|
71
|
-
const validationErrors = err.error ? (err.error.validationErrors || {}) : {};
|
|
72
|
-
if (validationErrors.path && validationErrors.path.duplicatePath) {
|
|
73
|
-
this.error = 'Path name is not available. Please enter a different path.';
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
getDatasets() {
|
|
78
|
-
return this.datasetService.getDatasets(this.searchText.getValue() || '', '10', '0').pipe(map((datasets) => {
|
|
79
|
-
return datasets;
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
FeedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FeedComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FeedService }, { token: i3.DatasetService }], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
-
FeedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FeedComponent, selector: "ki-feed", host: { classAttribute: "dialog-wrapper" }, ngImport: i0, template: "<div class=\"dialog\" cdkDrag cdkDragRootElement=\".cdk-overlay-pane\">\n\n <div class=\"dialog-title\" cdkDragHandle>\n <h2 mat-dialog-title>\n {{feed.id ? 'Edit API Connection' : 'Create API Connection'}}\n </h2>\n\n <button mat-icon-button mat-dialog-close>\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content\">\n <div class=\"space-y-8 divide-y divide-gray-200\">\n <div class=\"space-y-8 divide-y divide-gray-200 sm:space-y-5\">\n\n <div class=\"space-y-6 sm:space-y-5\">\n <div>\n <h3 class=\"text-lg font-medium leading-6 text-gray-900\">Setup API Connection</h3>\n <p class=\"mt-1 max-w-2xl text-sm text-gray-500\">Enter the following information in order to\n configure your API endpoint.</p>\n </div>\n <div class=\"space-y-6 sm:space-y-5\">\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n API Path\n </label>\n <div class=\"mt-1 sm:col-span-2 sm:mt-0\">\n <div class=\"flex\">\n <span\n class=\"inline-flex items-center px-3 rounded-l border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n {{feedUrl}}\n </span>\n <input type=\"text\" class=\"w-full rounded-l-none\"\n [ngClass]=\"{'border-red-600': !!error}\"\n placeholder=\"my-new-data-feed\" [(ngModel)]=\"feed.path\">\n </div>\n <small *ngIf=\"!error\" class=\"font-normal\">The path used to identify this API\n Connection</small>\n <small *ngIf=\"error\" class=\"font-normal text-red-600\">{{error}}</small>\n\n </div>\n </div>\n\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n API Data\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <input type=\"text\" class=\"w-full\" [matAutocomplete]=\"autoDatasets\"\n [value]=\"feed.datasetLabel ? feed.datasetLabel.title : ''\"\n (keyup)=\"searchText.next($event.target.value)\" placeholder=\"Search for a query\">\n <mat-autocomplete #autoDatasets=\"matAutocomplete\" [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let dataset of datasets\" [value]=\"dataset\"\n (onSelectionChange)=\"updateFeedDataset($event)\">\n {{dataset.title}}\n </mat-option>\n </mat-autocomplete>\n <small class=\"font-normal\">Start typing name to view available stored queries</small>\n </div>\n </div>\n\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Caching Options\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <mat-checkbox class=\"example-margin\" [(ngModel)]=\"cacheEnabled\"\n (ngModelChange)=\"updateCacheEnabled($event)\">\n Enable API Caching\n </mat-checkbox>\n\n <div class=\"flex mt-4\" *ngIf=\"cacheEnabled\">\n <span\n class=\"inline-flex items-center px-3 rounded-l border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n Cache time in seconds\n </span>\n <input type=\"number\" class=\"w-full rounded-l-none flex-1\"\n placeholder=\"time in seconds\"\n [(ngModel)]=\"feed.cacheTimeSeconds\">\n </div>\n <small class=\"font-normal\">Enable caching to reduce requests to the server. Setting\n cache to zero will disable caching.</small>\n </div>\n </div>\n\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Export Type\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <select [(ngModel)]=\"feed.exporterKey\">\n <option value=\"sv\">Separated Value</option>\n <option value=\"json\">JSON</option>\n </select>\n\n <ng-template [ngIf]=\"feed.exporterKey === 'sv'\">\n <mat-checkbox class=\"mb-2\"\n [(ngModel)]=\"feed.exporterConfiguration.includeHeaderRow\">\n Include header row\n </mat-checkbox>\n <label class=\"mb-2\">\n Separator\n <input type=\"text\" [(ngModel)]=\"feed.exporterConfiguration.separator\">\n <small class=\"font-normal\">Enter the character used to separate the\n values.</small>\n </label>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"feedDataset && parameters.length\"\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Exposed Parameters\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <mat-selection-list [(ngModel)]=\"feed.exposedParameterNames\">\n <mat-list-option checkboxPosition=\"before\" [value]=\"param.name\"\n *ngFor=\"let param of parameters\">\n {{param.title}}\n </mat-list-option>\n </mat-selection-list>\n <small class=\"font-normal\">If selected, these parameters will be available to be\n supplied as request parameters with names matching the parameter names.</small>\n </div>\n </div>\n\n <div *ngIf=\"feedDataset\"\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Advanced Querying\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <mat-checkbox class=\"example-margin\" [(ngModel)]=\"feed.adhocFiltering\">\n Enable Adhoc Filtering\n </mat-checkbox>\n <small class=\"font-normal\">Adhoc filtering allows adhoc field filters to be supplied as\n request parameters\n in the format field_operator=value</small>\n\n\n <mat-checkbox class=\"example-margin mt-3\" [(ngModel)]=\"feed.advancedQuerying\">\n Enable Advanced Querying\n </mat-checkbox>\n\n <div class=\"flex mt-4\" *ngIf=\"feed.advancedQuerying\">\n <span\n class=\"inline-flex items-center px-3 rounded-l border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n Request Parameter Name\n </span>\n <input type=\"text\" class=\"w-full rounded-l-none flex-1\"\n placeholder=\"Parameter name\"\n [(ngModel)]=\"feed.advancedQueryParameterName\">\n </div>\n\n <small class=\"font-normal\">Advanced querying allows for advanced queries to be supplied as a query string with nested\n boolean logic.</small>\n </div>\n\n\n\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"dialog-footer\">\n <button mat-button mat-dialog-close mat-stroked-button type=\"button\">Close</button>\n\n <button mat-button mat-flat-button color=\"primary\" type=\"button\"\n (click)=\"saveFeed()\"\n [disabled]=\"!feed.path || !feed.datasetInstanceId || !feed.exporterKey\">Save API Connection\n </button>\n </div>\n\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatLegacyDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.MatLegacySelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i11.MatLegacyListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i12.MatLegacyAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatLegacyAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }] });
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FeedComponent, decorators: [{
|
|
86
|
-
type: Component,
|
|
87
|
-
args: [{ selector: 'ki-feed', host: { class: 'dialog-wrapper' }, template: "<div class=\"dialog\" cdkDrag cdkDragRootElement=\".cdk-overlay-pane\">\n\n <div class=\"dialog-title\" cdkDragHandle>\n <h2 mat-dialog-title>\n {{feed.id ? 'Edit API Connection' : 'Create API Connection'}}\n </h2>\n\n <button mat-icon-button mat-dialog-close>\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content\">\n <div class=\"space-y-8 divide-y divide-gray-200\">\n <div class=\"space-y-8 divide-y divide-gray-200 sm:space-y-5\">\n\n <div class=\"space-y-6 sm:space-y-5\">\n <div>\n <h3 class=\"text-lg font-medium leading-6 text-gray-900\">Setup API Connection</h3>\n <p class=\"mt-1 max-w-2xl text-sm text-gray-500\">Enter the following information in order to\n configure your API endpoint.</p>\n </div>\n <div class=\"space-y-6 sm:space-y-5\">\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n API Path\n </label>\n <div class=\"mt-1 sm:col-span-2 sm:mt-0\">\n <div class=\"flex\">\n <span\n class=\"inline-flex items-center px-3 rounded-l border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n {{feedUrl}}\n </span>\n <input type=\"text\" class=\"w-full rounded-l-none\"\n [ngClass]=\"{'border-red-600': !!error}\"\n placeholder=\"my-new-data-feed\" [(ngModel)]=\"feed.path\">\n </div>\n <small *ngIf=\"!error\" class=\"font-normal\">The path used to identify this API\n Connection</small>\n <small *ngIf=\"error\" class=\"font-normal text-red-600\">{{error}}</small>\n\n </div>\n </div>\n\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n API Data\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <input type=\"text\" class=\"w-full\" [matAutocomplete]=\"autoDatasets\"\n [value]=\"feed.datasetLabel ? feed.datasetLabel.title : ''\"\n (keyup)=\"searchText.next($event.target.value)\" placeholder=\"Search for a query\">\n <mat-autocomplete #autoDatasets=\"matAutocomplete\" [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let dataset of datasets\" [value]=\"dataset\"\n (onSelectionChange)=\"updateFeedDataset($event)\">\n {{dataset.title}}\n </mat-option>\n </mat-autocomplete>\n <small class=\"font-normal\">Start typing name to view available stored queries</small>\n </div>\n </div>\n\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Caching Options\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <mat-checkbox class=\"example-margin\" [(ngModel)]=\"cacheEnabled\"\n (ngModelChange)=\"updateCacheEnabled($event)\">\n Enable API Caching\n </mat-checkbox>\n\n <div class=\"flex mt-4\" *ngIf=\"cacheEnabled\">\n <span\n class=\"inline-flex items-center px-3 rounded-l border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n Cache time in seconds\n </span>\n <input type=\"number\" class=\"w-full rounded-l-none flex-1\"\n placeholder=\"time in seconds\"\n [(ngModel)]=\"feed.cacheTimeSeconds\">\n </div>\n <small class=\"font-normal\">Enable caching to reduce requests to the server. Setting\n cache to zero will disable caching.</small>\n </div>\n </div>\n\n <div\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Export Type\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <select [(ngModel)]=\"feed.exporterKey\">\n <option value=\"sv\">Separated Value</option>\n <option value=\"json\">JSON</option>\n </select>\n\n <ng-template [ngIf]=\"feed.exporterKey === 'sv'\">\n <mat-checkbox class=\"mb-2\"\n [(ngModel)]=\"feed.exporterConfiguration.includeHeaderRow\">\n Include header row\n </mat-checkbox>\n <label class=\"mb-2\">\n Separator\n <input type=\"text\" [(ngModel)]=\"feed.exporterConfiguration.separator\">\n <small class=\"font-normal\">Enter the character used to separate the\n values.</small>\n </label>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"feedDataset && parameters.length\"\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Exposed Parameters\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <mat-selection-list [(ngModel)]=\"feed.exposedParameterNames\">\n <mat-list-option checkboxPosition=\"before\" [value]=\"param.name\"\n *ngFor=\"let param of parameters\">\n {{param.title}}\n </mat-list-option>\n </mat-selection-list>\n <small class=\"font-normal\">If selected, these parameters will be available to be\n supplied as request parameters with names matching the parameter names.</small>\n </div>\n </div>\n\n <div *ngIf=\"feedDataset\"\n class=\"sm:grid sm:grid-cols-3 sm:items-start sm:gap-4 sm:border-t sm:border-gray-200 sm:pt-5\">\n <label class=\"block text-sm font-medium text-gray-700 sm:mt-px sm:pt-2\">\n Advanced Querying\n </label>\n <div class=\"flex flex-col mt-1 sm:col-span-2 sm:mt-0\">\n <mat-checkbox class=\"example-margin\" [(ngModel)]=\"feed.adhocFiltering\">\n Enable Adhoc Filtering\n </mat-checkbox>\n <small class=\"font-normal\">Adhoc filtering allows adhoc field filters to be supplied as\n request parameters\n in the format field_operator=value</small>\n\n\n <mat-checkbox class=\"example-margin mt-3\" [(ngModel)]=\"feed.advancedQuerying\">\n Enable Advanced Querying\n </mat-checkbox>\n\n <div class=\"flex mt-4\" *ngIf=\"feed.advancedQuerying\">\n <span\n class=\"inline-flex items-center px-3 rounded-l border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm\">\n Request Parameter Name\n </span>\n <input type=\"text\" class=\"w-full rounded-l-none flex-1\"\n placeholder=\"Parameter name\"\n [(ngModel)]=\"feed.advancedQueryParameterName\">\n </div>\n\n <small class=\"font-normal\">Advanced querying allows for advanced queries to be supplied as a query string with nested\n boolean logic.</small>\n </div>\n\n\n\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"dialog-footer\">\n <button mat-button mat-dialog-close mat-stroked-button type=\"button\">Close</button>\n\n <button mat-button mat-flat-button color=\"primary\" type=\"button\"\n (click)=\"saveFeed()\"\n [disabled]=\"!feed.path || !feed.datasetInstanceId || !feed.exporterKey\">Save API Connection\n </button>\n </div>\n\n</div>\n\n\n" }]
|
|
88
|
-
}], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
|
|
89
|
-
type: Inject,
|
|
90
|
-
args: [MAT_DIALOG_DATA]
|
|
91
|
-
}] }, { type: i2.FeedService }, { type: i3.DatasetService }]; } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raW5pbnRlbC9zcmMvbGliL2NvbXBvbmVudHMvZmVlZHMvZmVlZC9mZWVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWtpbmludGVsL3NyYy9saWIvY29tcG9uZW50cy9mZWVkcy9mZWVkL2ZlZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFDLHNCQUFzQixJQUFJLGVBQWUsRUFBcUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUc5SCxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFTNUQsTUFBTSxPQUFPLGFBQWE7SUFXdEIsWUFBbUIsU0FBc0MsRUFDYixJQUFTLEVBQ2pDLFdBQXdCLEVBQ3hCLGNBQThCO1FBSC9CLGNBQVMsR0FBVCxTQUFTLENBQTZCO1FBQ2IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFaM0MsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUNmLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFFbkIsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBTTVCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsQ0FBQztTQUM5RTtRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4RjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7U0FDbEM7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUNqQixJQUFJLENBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUNqQiwwQkFBMEI7UUFDMUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckIsQ0FDSixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQUs7UUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxPQUFPO1FBQ3BCLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQStCO1FBQzFELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3RSxJQUFJLGdCQUFnQixDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLDREQUE0RCxDQUFDO2FBQzdFO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sV0FBVztRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNoQyxJQUFJLEVBQ0osR0FBRyxDQUNOLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3JCLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzsyR0F0RlEsYUFBYSxvREFZRixlQUFlOytGQVoxQixhQUFhLDJGQ2QxQiwyM1ZBMkxBOzRGRDdLYSxhQUFhO2tCQU56QixTQUFTOytCQUNJLFNBQVMsUUFHYixFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBQzs7MEJBY2xCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBLCBNYXRMZWdhY3lEaWFsb2dSZWYgYXMgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7RmVlZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWQuc2VydmljZSc7XG5pbXBvcnQge0RhdGFzZXRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kYXRhc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIG1lcmdlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtNYXRMZWdhY3lPcHRpb25TZWxlY3Rpb25DaGFuZ2UgYXMgTWF0T3B0aW9uU2VsZWN0aW9uQ2hhbmdlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2ktZmVlZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZlZWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZlZWQuY29tcG9uZW50LnNhc3MnXSxcbiAgICBob3N0OiB7Y2xhc3M6ICdkaWFsb2ctd3JhcHBlcid9XG59KVxuZXhwb3J0IGNsYXNzIEZlZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHVibGljIGZlZWQ6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBkYXRhc2V0czogYW55ID0gW107XG4gICAgcHVibGljIGZlZWRVcmw6IHN0cmluZztcbiAgICBwdWJsaWMgc2VhcmNoVGV4dCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICAgIHB1YmxpYyBmZWVkRGF0YXNldDogYW55O1xuICAgIHB1YmxpYyBwYXJhbWV0ZXJzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgZXJyb3IgPSAnJztcbiAgICBwdWJsaWMgY2FjaGVFbmFibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RmVlZENvbXBvbmVudD4sXG4gICAgICAgICAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBmZWVkU2VydmljZTogRmVlZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkYXRhc2V0U2VydmljZTogRGF0YXNldFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5mZWVkID0gdGhpcy5kYXRhLmZlZWQgPyBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRhdGEuZmVlZCkgOiB7fTtcbiAgICAgICAgaWYgKCF0aGlzLmZlZWQuZXhwb3J0ZXJDb25maWd1cmF0aW9uIHx8IEFycmF5LmlzQXJyYXkodGhpcy5mZWVkLmV4cG9ydGVyQ29uZmlndXJhdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuZmVlZC5leHBvcnRlckNvbmZpZ3VyYXRpb24gPSB7aW5jbHVkZUhlYWRlclJvdzogdHJ1ZSwgc2VwYXJhdG9yOiAnLCd9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZmVlZC5kYXRhc2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgdGhpcy5mZWVkRGF0YXNldCA9IGF3YWl0IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YXNldCh0aGlzLmZlZWQuZGF0YXNldEluc3RhbmNlSWQpO1xuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy5kYXRhc2V0U2VydmljZS5nZXRFdmFsdWF0ZWRQYXJhbWV0ZXJzKHRoaXMuZmVlZERhdGFzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mZWVkVXJsID0gdGhpcy5kYXRhLmZlZWRVcmw7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZlZWQuY2FjaGVUaW1lU2Vjb25kcykge1xuICAgICAgICAgICAgdGhpcy5mZWVkLmNhY2hlVGltZVNlY29uZHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVyZ2UodGhpcy5zZWFyY2hUZXh0KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgICAgICAgICAgLy8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhc2V0cygpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGRhdGFzZXRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNldHMgPSBkYXRhc2V0cztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNhY2hlRW5hYmxlZCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZlZWQuY2FjaGVUaW1lU2Vjb25kcyA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcGxheUZuKGRhdGFzZXQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZGF0YXNldCAmJiBkYXRhc2V0LnRpdGxlID8gZGF0YXNldC50aXRsZSA6ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGRhdGVGZWVkRGF0YXNldChldmVudDogTWF0T3B0aW9uU2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSBldmVudC5zb3VyY2UudmFsdWU7XG4gICAgICAgIHRoaXMuZmVlZC5kYXRhc2V0SW5zdGFuY2VJZCA9IGRhdGFzZXQuaWQ7XG4gICAgICAgIHRoaXMuZmVlZC5kYXRhc2V0TGFiZWwgPSBkYXRhc2V0O1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSBbXTtcblxuICAgICAgICB0aGlzLmZlZWREYXRhc2V0ID0gYXdhaXQgdGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhc2V0KHRoaXMuZmVlZC5kYXRhc2V0SW5zdGFuY2VJZCk7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IGF3YWl0IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RXZhbHVhdGVkUGFyYW1ldGVycyh0aGlzLmZlZWREYXRhc2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZUZlZWQoKSB7XG4gICAgICAgIHRoaXMuZmVlZFNlcnZpY2Uuc2F2ZUZlZWQodGhpcy5mZWVkKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IGVyci5lcnJvciA/IChlcnIuZXJyb3IudmFsaWRhdGlvbkVycm9ycyB8fCB7fSkgOiB7fTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzLnBhdGggJiYgdmFsaWRhdGlvbkVycm9ycy5wYXRoLmR1cGxpY2F0ZVBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ1BhdGggbmFtZSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZW50ZXIgYSBkaWZmZXJlbnQgcGF0aC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFzZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhc2V0cyhcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dC5nZXRWYWx1ZSgpIHx8ICcnLFxuICAgICAgICAgICAgJzEwJyxcbiAgICAgICAgICAgICcwJ1xuICAgICAgICApLnBpcGUobWFwKChkYXRhc2V0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXRzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nXCIgY2RrRHJhZyBjZGtEcmFnUm9vdEVsZW1lbnQ9XCIuY2RrLW92ZXJsYXktcGFuZVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy10aXRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPlxuICAgICAgICAgICAge3tmZWVkLmlkID8gJ0VkaXQgQVBJIENvbm5lY3Rpb24nIDogJ0NyZWF0ZSBBUEkgQ29ubmVjdGlvbid9fVxuICAgICAgICA8L2gyPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2U+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS04IGRpdmlkZS15IGRpdmlkZS1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktOCBkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDAgc206c3BhY2UteS01XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS02IHNtOnNwYWNlLXktNVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1sZyBmb250LW1lZGl1bSBsZWFkaW5nLTYgdGV4dC1ncmF5LTkwMFwiPlNldHVwIEFQSSBDb25uZWN0aW9uPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMSBtYXgtdy0yeGwgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+RW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB5b3VyIEFQSSBlbmRwb2ludC48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS02IHNtOnNwYWNlLXktNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic206Z3JpZCBzbTpncmlkLWNvbHMtMyBzbTppdGVtcy1zdGFydCBzbTpnYXAtNCBzbTpib3JkZXItdCBzbTpib3JkZXItZ3JheS0yMDAgc206cHQtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBzbTptdC1weCBzbTpwdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQSSBQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBzbTpjb2wtc3Bhbi0yIHNtOm10LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0zIHJvdW5kZWQtbCBib3JkZXIgYm9yZGVyLXItMCBib3JkZXItZ3JheS0zMDAgYmctZ3JheS01MCB0ZXh0LWdyYXktNTAwIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmVlZFVybH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLXJlZC02MDAnOiAhIWVycm9yfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJteS1uZXctZGF0YS1mZWVkXCIgWyhuZ01vZGVsKV09XCJmZWVkLnBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCAqbmdJZj1cIiFlcnJvclwiIGNsYXNzPVwiZm9udC1ub3JtYWxcIj5UaGUgcGF0aCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtcmVkLTYwMFwiPnt7ZXJyb3J9fTwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbTpncmlkIHNtOmdyaWQtY29scy0zIHNtOml0ZW1zLXN0YXJ0IHNtOmdhcC00IHNtOmJvcmRlci10IHNtOmJvcmRlci1ncmF5LTIwMCBzbTpwdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHNtOm10LXB4IHNtOnB0LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBJIERhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTEgc206Y29sLXNwYW4tMiBzbTptdC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidy1mdWxsXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvRGF0YXNldHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZlZWQuZGF0YXNldExhYmVsID8gZmVlZC5kYXRhc2V0TGFiZWwudGl0bGUgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VhcmNoVGV4dC5uZXh0KCRldmVudC50YXJnZXQudmFsdWUpXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGEgcXVlcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9EYXRhc2V0cz1cIm1hdEF1dG9jb21wbGV0ZVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXRhc2V0IG9mIGRhdGFzZXRzXCIgW3ZhbHVlXT1cImRhdGFzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cInVwZGF0ZUZlZWREYXRhc2V0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGFzZXQudGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZvbnQtbm9ybWFsXCI+U3RhcnQgdHlwaW5nIG5hbWUgdG8gdmlldyBhdmFpbGFibGUgc3RvcmVkIHF1ZXJpZXM8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtOmdyaWQgc206Z3JpZC1jb2xzLTMgc206aXRlbXMtc3RhcnQgc206Z2FwLTQgc206Ym9yZGVyLXQgc206Ym9yZGVyLWdyYXktMjAwIHNtOnB0LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgc206bXQtcHggc206cHQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWNoaW5nIE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTEgc206Y29sLXNwYW4tMiBzbTptdC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJleGFtcGxlLW1hcmdpblwiIFsobmdNb2RlbCldPVwiY2FjaGVFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVDYWNoZUVuYWJsZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEFQSSBDYWNoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG10LTRcIiAqbmdJZj1cImNhY2hlRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMyByb3VuZGVkLWwgYm9yZGVyIGJvcmRlci1yLTAgYm9yZGVyLWdyYXktMzAwIGJnLWdyYXktNTAgdGV4dC1ncmF5LTUwMCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgdGltZSBpbiBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sLW5vbmUgZmxleC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInRpbWUgaW4gc2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmZWVkLmNhY2hlVGltZVNlY29uZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZvbnQtbm9ybWFsXCI+RW5hYmxlIGNhY2hpbmcgdG8gcmVkdWNlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuIFNldHRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlIHRvIHplcm8gd2lsbCBkaXNhYmxlIGNhY2hpbmcuPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbTpncmlkIHNtOmdyaWQtY29scy0zIHNtOml0ZW1zLXN0YXJ0IHNtOmdhcC00IHNtOmJvcmRlci10IHNtOmJvcmRlci1ncmF5LTIwMCBzbTpwdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHNtOm10LXB4IHNtOnB0LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTEgc206Y29sLXNwYW4tMiBzbTptdC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJmZWVkLmV4cG9ydGVyS2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3ZcIj5TZXBhcmF0ZWQgVmFsdWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJqc29uXCI+SlNPTjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiZmVlZC5leHBvcnRlcktleSA9PT0gJ3N2J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZlZWQuZXhwb3J0ZXJDb25maWd1cmF0aW9uLmluY2x1ZGVIZWFkZXJSb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGhlYWRlciByb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiZmVlZC5leHBvcnRlckNvbmZpZ3VyYXRpb24uc2VwYXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9udC1ub3JtYWxcIj5FbnRlciB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy48L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmVlZERhdGFzZXQgJiYgcGFyYW1ldGVycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtOmdyaWQgc206Z3JpZC1jb2xzLTMgc206aXRlbXMtc3RhcnQgc206Z2FwLTQgc206Ym9yZGVyLXQgc206Ym9yZGVyLWdyYXktMjAwIHNtOnB0LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgc206bXQtcHggc206cHQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvc2VkIFBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTEgc206Y29sLXNwYW4tMiBzbTptdC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgWyhuZ01vZGVsKV09XCJmZWVkLmV4cG9zZWRQYXJhbWV0ZXJOYW1lc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgW3ZhbHVlXT1cInBhcmFtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgcGFyYW1ldGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFyYW0udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmb250LW5vcm1hbFwiPklmIHNlbGVjdGVkLCB0aGVzZSBwYXJhbWV0ZXJzIHdpbGwgYmUgYXZhaWxhYmxlIHRvIGJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllZCBhcyByZXF1ZXN0IHBhcmFtZXRlcnMgd2l0aCBuYW1lcyBtYXRjaGluZyB0aGUgcGFyYW1ldGVyIG5hbWVzLjwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZlZWREYXRhc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbTpncmlkIHNtOmdyaWQtY29scy0zIHNtOml0ZW1zLXN0YXJ0IHNtOmdhcC00IHNtOmJvcmRlci10IHNtOmJvcmRlci1ncmF5LTIwMCBzbTpwdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHNtOm10LXB4IHNtOnB0LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWR2YW5jZWQgUXVlcnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTEgc206Y29sLXNwYW4tMiBzbTptdC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJleGFtcGxlLW1hcmdpblwiIFsobmdNb2RlbCldPVwiZmVlZC5hZGhvY0ZpbHRlcmluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEFkaG9jIEZpbHRlcmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9udC1ub3JtYWxcIj5BZGhvYyBmaWx0ZXJpbmcgYWxsb3dzIGFkaG9jIGZpZWxkIGZpbHRlcnMgdG8gYmUgc3VwcGxpZWQgYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgcGFyYW1ldGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm1hdCBmaWVsZF9vcGVyYXRvcj12YWx1ZTwvc21hbGw+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiZXhhbXBsZS1tYXJnaW4gbXQtM1wiIFsobmdNb2RlbCldPVwiZmVlZC5hZHZhbmNlZFF1ZXJ5aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgQWR2YW5jZWQgUXVlcnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbXQtNFwiICpuZ0lmPVwiZmVlZC5hZHZhbmNlZFF1ZXJ5aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0zIHJvdW5kZWQtbCBib3JkZXIgYm9yZGVyLXItMCBib3JkZXItZ3JheS0zMDAgYmctZ3JheS01MCB0ZXh0LWdyYXktNTAwIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QgUGFyYW1ldGVyIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sLW5vbmUgZmxleC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhcmFtZXRlciBuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZlZWQuYWR2YW5jZWRRdWVyeVBhcmFtZXRlck5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9udC1ub3JtYWxcIj5BZHZhbmNlZCBxdWVyeWluZyBhbGxvd3MgZm9yIGFkdmFuY2VkIHF1ZXJpZXMgdG8gYmUgc3VwcGxpZWQgYXMgYSBxdWVyeSBzdHJpbmcgd2l0aCBuZXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBsb2dpYy48L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctZm9vdGVyXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+Q2xvc2U8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRmVlZCgpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZlZWQucGF0aCB8fCAhZmVlZC5kYXRhc2V0SW5zdGFuY2VJZCB8fCAhZmVlZC5leHBvcnRlcktleVwiPlNhdmUgQVBJIENvbm5lY3Rpb25cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG5cbiJdfQ==
|