@annalib/anna-core 31.6.21 → 31.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/anna-core-shared-lib/components/anna-licensing-table/anna-licensing-table.component.mjs +42 -0
- package/esm2022/lib/anna-core-shared-lib/models/anna-licensing-table.model.mjs +26 -0
- package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +3 -14
- package/esm2022/lib/anna-core-shared-lib/services/update-station-id.service.mjs +16 -0
- package/esm2022/lib/anna-core.module.mjs +10 -4
- package/esm2022/lib/anna-dropdown-lib/components/anna-single-select/anna-single-select.component.mjs +2 -2
- package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +1 -1
- package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +7 -20
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/annalib-anna-core.mjs +167 -113
- package/fesm2022/annalib-anna-core.mjs.map +1 -1
- package/lib/anna-core-shared-lib/components/anna-licensing-table/anna-licensing-table.component.d.ts +14 -0
- package/lib/anna-core-shared-lib/models/anna-licensing-table.model.d.ts +18 -0
- package/lib/anna-core-shared-lib/services/update-station-id.service.d.ts +6 -0
- package/lib/anna-core.module.d.ts +2 -1
- package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core";
|
|
3
|
+
import { FormsModule } from "@angular/forms";
|
|
4
|
+
import { MatTooltipModule } from "@angular/material/tooltip";
|
|
5
|
+
import { NgxSkeletonLoaderModule } from "ngx-skeleton-loader";
|
|
6
|
+
import { DigitOnlyDirective } from "../../directives/digits-only/digits-only.directive";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
import * as i3 from "ngx-skeleton-loader";
|
|
11
|
+
import * as i4 from "@angular/material/tooltip";
|
|
12
|
+
export class AnnaLicensingTableComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.isEditMode = false;
|
|
15
|
+
this.loading = true;
|
|
16
|
+
this.defaultListing = false;
|
|
17
|
+
this.editingCurrentPlan = false;
|
|
18
|
+
this.specificationChanged = new EventEmitter();
|
|
19
|
+
}
|
|
20
|
+
onValueChange(updatedValue, featureDetails) {
|
|
21
|
+
this.specificationChanged.emit({ updatedValue, featureDetails });
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AnnaLicensingTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AnnaLicensingTableComponent, isStandalone: true, selector: "anna-core-licensing-table", inputs: { plans: "plans", isEditMode: "isEditMode", loading: "loading", defaultListing: "defaultListing", editingCurrentPlan: "editingCurrentPlan" }, outputs: { specificationChanged: "specificationChanged" }, ngImport: i0, template: "<table class=\"header-section\">\r\n <thead>\r\n <tr>\r\n <th><div>FEATURE</div></th>\r\n <ng-container *ngIf=\"loading\">\r\n <ng-container *ngIf=\"defaultListing\">\r\n <div class=\"skeleton-loader\">\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!defaultListing\">\r\n <div class=\"skeleton-loader\">\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n <th *ngFor=\"let plan of plans\">\r\n {{ plan?.PlanName }}\r\n <ng-container *ngIf=\"plans.length === 1\">\r\n <p *ngIf=\"isEditMode\">\r\n {{ editingCurrentPlan ? \"Current plan\" : \"Upcoming Plan\" }}\r\n </p>\r\n <p *ngIf=\"!isEditMode\">\r\n {{ !plan?.PlanExpiryDays || plan?.PlanExpiryDays >= 0 ? \"Current plan\" : \"Expired Plan\" }}\r\n </p>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n</table>\r\n<div class=\"scrollable-tbody\">\r\n <ng-container *ngIf=\"loading\">\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ marginTop: '10px', marginBottom: '0', height: defaultListing ? '490px' : '430px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loading\">\r\n <table>\r\n <tbody>\r\n <tr *ngFor=\"let feature of plans[0]?.FeatureDetails; let featureIndex = index\">\r\n <td>\r\n <strong>{{ feature.FeatureName }}</strong> {{ feature.FeatureDescription }}\r\n </td>\r\n <td *ngFor=\"let plan of plans; let planIndex = index\">\r\n <ng-container *ngIf=\"plan.FeatureDetails[featureIndex] as featureDetails\">\r\n <ng-container *ngIf=\"!featureDetails.Specification.length\">\r\n <i\r\n *ngIf=\"featureDetails.IsEnabled\"\r\n class=\"mdi mdi-checkbox-marked-circle\"\r\n ></i>\r\n <i\r\n *ngIf=\"!featureDetails.IsEnabled\"\r\n class=\"mdi mdi-close\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"featureDetails.Specification.length\">\r\n <ng-container *ngFor=\"let spec of featureDetails.Specification\">\r\n <ng-container *ngIf=\"spec.JsonType === 'PAY_PER_USE'\">\r\n <div *ngIf=\"isEditMode\">\r\n <input\r\n annaCoreDigitOnly\r\n type=\"number\"\r\n [ngModel]=\"spec.Json.TotalCount\"\r\n (ngModelChange)=\"onValueChange($event, featureDetails)\"\r\n [attr.min]=\"spec.JsonCloned.TotalCount\"\r\n [attr.max]=\"spec.Json.MaxValue || null\"\r\n [ngClass]=\"{\r\n 'red-border':\r\n spec.Json.TotalCount < spec.JsonCloned.TotalCount ||\r\n (spec.Json.MaxValue &&\r\n spec.Json.TotalCount > spec.Json.MaxValue)\r\n }\"\r\n />\r\n Orders\r\n <i\r\n class=\"mdi mdi-alert-octagon\"\r\n *ngIf=\"\r\n spec.Json.TotalCount < spec.JsonCloned.TotalCount ||\r\n (spec.Json.MaxValue && spec.Json.TotalCount > spec.Json.MaxValue)\r\n \"\r\n matTooltipPosition=\"above\"\r\n matTooltip=\"The value must be at least the chosen plan's limit and no more than the next plan's limit.\"\r\n ></i>\r\n </div>\r\n <div *ngIf=\"!isEditMode\">\r\n <p>\r\n {{ spec.Json.TotalCount }} Orders\r\n <span *ngIf=\"spec.Json.ConsumedCount\"\r\n >|\r\n {{ spec.Json.TotalCount - spec.Json.ConsumedCount }}\r\n Remaining</span\r\n >\r\n </p>\r\n <span\r\n class=\"customized-text\"\r\n *ngIf=\"spec.IsCustomized\"\r\n >(Customized)</span\r\n >\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n</div>\r\n", styles: ["table.header-section{border-collapse:separate;border-spacing:0 8px;width:100%;border-top:1px solid #9b1cd5;border-bottom:1px solid #9b1cd5}.scrollable-tbody table{border-collapse:collapse;width:100%}tr{height:40px}tr .skeleton-loader{display:flex;justify-content:flex-end}tr ::ng-deep ngx-skeleton-loader{border:1px solid #304598;border-radius:8px;width:153px;height:52px;display:inline-block;margin-right:8px}tr ::ng-deep ngx-skeleton-loader:nth-of-type(1) div{background-color:#f5f7ff}tr ::ng-deep ngx-skeleton-loader:nth-of-type(2) div{background-color:#dfe6ff}tr ::ng-deep ngx-skeleton-loader:nth-of-type(3) div{background-color:#c6d2ff}tr ::ng-deep ngx-skeleton-loader:last-of-type{margin-right:0}th{padding:8px 8px 8px 0;text-align:left;font-family:Roboto;font-size:16px;font-weight:700;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;position:sticky;top:0;background-color:#fff;z-index:1}th:first-child div{margin-left:-8px}th:not(:first-child){border:1px solid #304598;border-radius:8px;padding-left:8px;width:137px;height:35px}th:not(:first-child) p{font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;margin-bottom:0}th:nth-of-type(2){background-color:#f5f7ff}th:nth-of-type(3){background-color:#dfe6ff}th:nth-of-type(4){background-color:#c6d2ff}td{border-bottom:1px solid #d3d3d3;padding:8px 8px 8px 0;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}td p{margin-bottom:0}td input{width:30px}td .mdi-checkbox-marked-circle{font-size:14px;color:#304598;position:relative}td .mdi-close{color:#bdbdbd}td .mdi-alert-octagon{color:#f44336!important;cursor:pointer}td .red-border{border:1px solid #f44336;outline:#f44336}td:not(:first-child){width:142px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.customized-text{color:#a7a7a7;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][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"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i3.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: DigitOnlyDirective, selector: "[annaCoreDigitOnly]", inputs: ["decimal", "decimalSeparator", "allowNegatives", "allowPaste", "negativeSign", "min", "max", "pattern"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AnnaLicensingTableComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: "anna-core-licensing-table", standalone: true, imports: [CommonModule, FormsModule, NgxSkeletonLoaderModule, DigitOnlyDirective, MatTooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<table class=\"header-section\">\r\n <thead>\r\n <tr>\r\n <th><div>FEATURE</div></th>\r\n <ng-container *ngIf=\"loading\">\r\n <ng-container *ngIf=\"defaultListing\">\r\n <div class=\"skeleton-loader\">\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!defaultListing\">\r\n <div class=\"skeleton-loader\">\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ height: '100%', borderRadius: '8px', marginBottom: '0px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n <th *ngFor=\"let plan of plans\">\r\n {{ plan?.PlanName }}\r\n <ng-container *ngIf=\"plans.length === 1\">\r\n <p *ngIf=\"isEditMode\">\r\n {{ editingCurrentPlan ? \"Current plan\" : \"Upcoming Plan\" }}\r\n </p>\r\n <p *ngIf=\"!isEditMode\">\r\n {{ !plan?.PlanExpiryDays || plan?.PlanExpiryDays >= 0 ? \"Current plan\" : \"Expired Plan\" }}\r\n </p>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n</table>\r\n<div class=\"scrollable-tbody\">\r\n <ng-container *ngIf=\"loading\">\r\n <ngx-skeleton-loader\r\n count=\"1\"\r\n [theme]=\"{ marginTop: '10px', marginBottom: '0', height: defaultListing ? '490px' : '430px' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n </ng-container>\r\n <ng-container *ngIf=\"!loading\">\r\n <table>\r\n <tbody>\r\n <tr *ngFor=\"let feature of plans[0]?.FeatureDetails; let featureIndex = index\">\r\n <td>\r\n <strong>{{ feature.FeatureName }}</strong> {{ feature.FeatureDescription }}\r\n </td>\r\n <td *ngFor=\"let plan of plans; let planIndex = index\">\r\n <ng-container *ngIf=\"plan.FeatureDetails[featureIndex] as featureDetails\">\r\n <ng-container *ngIf=\"!featureDetails.Specification.length\">\r\n <i\r\n *ngIf=\"featureDetails.IsEnabled\"\r\n class=\"mdi mdi-checkbox-marked-circle\"\r\n ></i>\r\n <i\r\n *ngIf=\"!featureDetails.IsEnabled\"\r\n class=\"mdi mdi-close\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"featureDetails.Specification.length\">\r\n <ng-container *ngFor=\"let spec of featureDetails.Specification\">\r\n <ng-container *ngIf=\"spec.JsonType === 'PAY_PER_USE'\">\r\n <div *ngIf=\"isEditMode\">\r\n <input\r\n annaCoreDigitOnly\r\n type=\"number\"\r\n [ngModel]=\"spec.Json.TotalCount\"\r\n (ngModelChange)=\"onValueChange($event, featureDetails)\"\r\n [attr.min]=\"spec.JsonCloned.TotalCount\"\r\n [attr.max]=\"spec.Json.MaxValue || null\"\r\n [ngClass]=\"{\r\n 'red-border':\r\n spec.Json.TotalCount < spec.JsonCloned.TotalCount ||\r\n (spec.Json.MaxValue &&\r\n spec.Json.TotalCount > spec.Json.MaxValue)\r\n }\"\r\n />\r\n Orders\r\n <i\r\n class=\"mdi mdi-alert-octagon\"\r\n *ngIf=\"\r\n spec.Json.TotalCount < spec.JsonCloned.TotalCount ||\r\n (spec.Json.MaxValue && spec.Json.TotalCount > spec.Json.MaxValue)\r\n \"\r\n matTooltipPosition=\"above\"\r\n matTooltip=\"The value must be at least the chosen plan's limit and no more than the next plan's limit.\"\r\n ></i>\r\n </div>\r\n <div *ngIf=\"!isEditMode\">\r\n <p>\r\n {{ spec.Json.TotalCount }} Orders\r\n <span *ngIf=\"spec.Json.ConsumedCount\"\r\n >|\r\n {{ spec.Json.TotalCount - spec.Json.ConsumedCount }}\r\n Remaining</span\r\n >\r\n </p>\r\n <span\r\n class=\"customized-text\"\r\n *ngIf=\"spec.IsCustomized\"\r\n >(Customized)</span\r\n >\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n</div>\r\n", styles: ["table.header-section{border-collapse:separate;border-spacing:0 8px;width:100%;border-top:1px solid #9b1cd5;border-bottom:1px solid #9b1cd5}.scrollable-tbody table{border-collapse:collapse;width:100%}tr{height:40px}tr .skeleton-loader{display:flex;justify-content:flex-end}tr ::ng-deep ngx-skeleton-loader{border:1px solid #304598;border-radius:8px;width:153px;height:52px;display:inline-block;margin-right:8px}tr ::ng-deep ngx-skeleton-loader:nth-of-type(1) div{background-color:#f5f7ff}tr ::ng-deep ngx-skeleton-loader:nth-of-type(2) div{background-color:#dfe6ff}tr ::ng-deep ngx-skeleton-loader:nth-of-type(3) div{background-color:#c6d2ff}tr ::ng-deep ngx-skeleton-loader:last-of-type{margin-right:0}th{padding:8px 8px 8px 0;text-align:left;font-family:Roboto;font-size:16px;font-weight:700;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;position:sticky;top:0;background-color:#fff;z-index:1}th:first-child div{margin-left:-8px}th:not(:first-child){border:1px solid #304598;border-radius:8px;padding-left:8px;width:137px;height:35px}th:not(:first-child) p{font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;margin-bottom:0}th:nth-of-type(2){background-color:#f5f7ff}th:nth-of-type(3){background-color:#dfe6ff}th:nth-of-type(4){background-color:#c6d2ff}td{border-bottom:1px solid #d3d3d3;padding:8px 8px 8px 0;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}td p{margin-bottom:0}td input{width:30px}td .mdi-checkbox-marked-circle{font-size:14px;color:#304598;position:relative}td .mdi-close{color:#bdbdbd}td .mdi-alert-octagon{color:#f44336!important;cursor:pointer}td .red-border{border:1px solid #f44336;outline:#f44336}td:not(:first-child){width:142px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.customized-text{color:#a7a7a7;font-style:italic}\n"] }]
|
|
29
|
+
}], propDecorators: { plans: [{
|
|
30
|
+
type: Input
|
|
31
|
+
}], isEditMode: [{
|
|
32
|
+
type: Input
|
|
33
|
+
}], loading: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}], defaultListing: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}], editingCurrentPlan: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], specificationChanged: [{
|
|
40
|
+
type: Output
|
|
41
|
+
}] } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1saWNlbnNpbmctdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWxpY2Vuc2luZy10YWJsZS9hbm5hLWxpY2Vuc2luZy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtbGljZW5zaW5nLXRhYmxlL2FubmEtbGljZW5zaW5nLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7O0FBV3hGLE1BQU0sT0FBTywyQkFBMkI7SUFSeEM7UUFVYSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ25DLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7S0FLNUQ7SUFIRyxhQUFhLENBQUMsWUFBaUIsRUFBRSxjQUE4QjtRQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQzsrR0FWUSwyQkFBMkI7bUdBQTNCLDJCQUEyQixzU0NqQnhDLDAxT0FvSUEsNmxFRHhIYyxZQUFZLDZWQUFFLFdBQVcsZ3hCQUFFLHVCQUF1QiwrTUFBRSxrQkFBa0IsaUxBQUUsZ0JBQWdCOzs0RkFLekYsMkJBQTJCO2tCQVJ2QyxTQUFTOytCQUNJLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLG1CQUdsRix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0ksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcclxuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tIFwibmd4LXNrZWxldG9uLWxvYWRlclwiO1xyXG5cclxuaW1wb3J0IHsgRGlnaXRPbmx5RGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZGlnaXRzLW9ubHkvZGlnaXRzLW9ubHkuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZlYXR1cmVEZXRhaWxzLCBMaWNlbnNpbmdQbGFuIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hbm5hLWxpY2Vuc2luZy10YWJsZS5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtbGljZW5zaW5nLXRhYmxlXCIsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLCBEaWdpdE9ubHlEaXJlY3RpdmUsIE1hdFRvb2x0aXBNb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9hbm5hLWxpY2Vuc2luZy10YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL2FubmEtbGljZW5zaW5nLXRhYmxlLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hTGljZW5zaW5nVGFibGVDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgcGxhbnM6IExpY2Vuc2luZ1BsYW5bXTtcclxuICAgIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgZGVmYXVsdExpc3Rpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGVkaXRpbmdDdXJyZW50UGxhbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQE91dHB1dCgpIHNwZWNpZmljYXRpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgb25WYWx1ZUNoYW5nZSh1cGRhdGVkVmFsdWU6IGFueSwgZmVhdHVyZURldGFpbHM6IEZlYXR1cmVEZXRhaWxzKSB7XHJcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uQ2hhbmdlZC5lbWl0KHsgdXBkYXRlZFZhbHVlLCBmZWF0dXJlRGV0YWlscyB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8dGFibGUgY2xhc3M9XCJoZWFkZXItc2VjdGlvblwiPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRoPjxkaXY+RkVBVFVSRTwvZGl2PjwvdGg+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGVmYXVsdExpc3RpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgaGVpZ2h0OiAnMTAwJScsIGJvcmRlclJhZGl1czogJzhweCcsIG1hcmdpbkJvdHRvbTogJzBweCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwMCUnLCBib3JkZXJSYWRpdXM6ICc4cHgnLCBtYXJnaW5Cb3R0b206ICcwcHgnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyBoZWlnaHQ6ICcxMDAlJywgYm9yZGVyUmFkaXVzOiAnOHB4JywgbWFyZ2luQm90dG9tOiAnMHB4JyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGVmYXVsdExpc3RpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgaGVpZ2h0OiAnMTAwJScsIGJvcmRlclJhZGl1czogJzhweCcsIG1hcmdpbkJvdHRvbTogJzBweCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IHBsYW4gb2YgcGxhbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBwbGFuPy5QbGFuTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwbGFucy5sZW5ndGggPT09IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpc0VkaXRNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlZGl0aW5nQ3VycmVudFBsYW4gPyBcIkN1cnJlbnQgcGxhblwiIDogXCJVcGNvbWluZyBQbGFuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFpc0VkaXRNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhcGxhbj8uUGxhbkV4cGlyeURheXMgfHwgcGxhbj8uUGxhbkV4cGlyeURheXMgPj0gMCA/IFwiQ3VycmVudCBwbGFuXCIgOiBcIkV4cGlyZWQgUGxhblwiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG48L3RhYmxlPlxyXG48ZGl2IGNsYXNzPVwic2Nyb2xsYWJsZS10Ym9keVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICBbdGhlbWVdPVwieyBtYXJnaW5Ub3A6ICcxMHB4JywgbWFyZ2luQm90dG9tOiAnMCcsIGhlaWdodDogZGVmYXVsdExpc3RpbmcgPyAnNDkwcHgnIDogJzQzMHB4JyB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cclxuICAgICAgICA8dGFibGU+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZmVhdHVyZSBvZiBwbGFuc1swXT8uRmVhdHVyZURldGFpbHM7IGxldCBmZWF0dXJlSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBmZWF0dXJlLkZlYXR1cmVOYW1lIH19PC9zdHJvbmc+IHt7IGZlYXR1cmUuRmVhdHVyZURlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHBsYW4gb2YgcGxhbnM7IGxldCBwbGFuSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGxhbi5GZWF0dXJlRGV0YWlsc1tmZWF0dXJlSW5kZXhdIGFzIGZlYXR1cmVEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZlYXR1cmVEZXRhaWxzLlNwZWNpZmljYXRpb24ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmZWF0dXJlRGV0YWlscy5Jc0VuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktY2hlY2tib3gtbWFya2VkLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmZWF0dXJlRGV0YWlscy5Jc0VuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktY2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZWF0dXJlRGV0YWlscy5TcGVjaWZpY2F0aW9uLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNwZWMgb2YgZmVhdHVyZURldGFpbHMuU3BlY2lmaWNhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3BlYy5Kc29uVHlwZSA9PT0gJ1BBWV9QRVJfVVNFJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRWRpdE1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUNvcmVEaWdpdE9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNwZWMuSnNvbi5Ub3RhbENvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQsIGZlYXR1cmVEZXRhaWxzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLm1pbl09XCJzcGVjLkpzb25DbG9uZWQuVG90YWxDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLm1heF09XCJzcGVjLkpzb24uTWF4VmFsdWUgfHwgbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWQtYm9yZGVyJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjLkpzb24uVG90YWxDb3VudCA8IHNwZWMuSnNvbkNsb25lZC5Ub3RhbENvdW50IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWMuSnNvbi5NYXhWYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjLkpzb24uVG90YWxDb3VudCA+IHNwZWMuSnNvbi5NYXhWYWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktYWxlcnQtb2N0YWdvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjLkpzb24uVG90YWxDb3VudCA8IHNwZWMuSnNvbkNsb25lZC5Ub3RhbENvdW50IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BlYy5Kc29uLk1heFZhbHVlICYmIHNwZWMuSnNvbi5Ub3RhbENvdW50ID4gc3BlYy5Kc29uLk1heFZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJUaGUgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCB0aGUgY2hvc2VuIHBsYW4ncyBsaW1pdCBhbmQgbm8gbW9yZSB0aGFuIHRoZSBuZXh0IHBsYW4ncyBsaW1pdC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNFZGl0TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzcGVjLkpzb24uVG90YWxDb3VudCB9fSBPcmRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzcGVjLkpzb24uQ29uc3VtZWRDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3BlYy5Kc29uLlRvdGFsQ291bnQgLSBzcGVjLkpzb24uQ29uc3VtZWRDb3VudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtYWluaW5nPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b21pemVkLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNwZWMuSXNDdXN0b21pemVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPihDdXN0b21pemVkKTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class LicensingPlan {
|
|
2
|
+
constructor(data) {
|
|
3
|
+
this.Id = data.Id;
|
|
4
|
+
this.PlanId = data.PlanId;
|
|
5
|
+
this.PlanName = data.PlanName;
|
|
6
|
+
this.PlanStartDate = data.PlanStartDate;
|
|
7
|
+
this.PlanEndDate = data.PlanEndDate;
|
|
8
|
+
this.PlanExpiryDays = data.DaysRemaining;
|
|
9
|
+
this.FeatureDetails = data.FeatureDetails.map((feature) => new FeatureDetails(feature));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class FeatureDetails {
|
|
13
|
+
constructor(data) {
|
|
14
|
+
this.FeatureId = data.FeatureId;
|
|
15
|
+
this.FeatureName = data.FeatureName;
|
|
16
|
+
this.FeatureDescription = data.FeatureDescription;
|
|
17
|
+
this.IsEnabled = data.IsEnabled;
|
|
18
|
+
this.Specification = data.Specification.map((spec) => ({
|
|
19
|
+
Json: JSON.parse(spec.Json),
|
|
20
|
+
JsonCloned: JSON.parse(spec.Json),
|
|
21
|
+
JsonType: spec.JsonType,
|
|
22
|
+
IsCustomized: spec.IsCustomized,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1saWNlbnNpbmctdGFibGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1saWNlbnNpbmctdGFibGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGFBQWE7SUFRdEIsWUFBWSxJQUFTO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFBWSxJQUFTO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBMaWNlbnNpbmdQbGFuIHtcclxuICAgIElkOiBudW1iZXI7XHJcbiAgICBQbGFuSWQ6IG51bWJlcjtcclxuICAgIFBsYW5OYW1lOiBzdHJpbmc7XHJcbiAgICBQbGFuU3RhcnREYXRlPzogc3RyaW5nO1xyXG4gICAgUGxhbkVuZERhdGU/OiBzdHJpbmc7XHJcbiAgICBQbGFuRXhwaXJ5RGF5cz86IG51bWJlcjtcclxuICAgIEZlYXR1cmVEZXRhaWxzOiBGZWF0dXJlRGV0YWlsc1tdO1xyXG4gICAgY29uc3RydWN0b3IoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5JZCA9IGRhdGEuSWQ7XHJcbiAgICAgICAgdGhpcy5QbGFuSWQgPSBkYXRhLlBsYW5JZDtcclxuICAgICAgICB0aGlzLlBsYW5OYW1lID0gZGF0YS5QbGFuTmFtZTtcclxuICAgICAgICB0aGlzLlBsYW5TdGFydERhdGUgPSBkYXRhLlBsYW5TdGFydERhdGU7XHJcbiAgICAgICAgdGhpcy5QbGFuRW5kRGF0ZSA9IGRhdGEuUGxhbkVuZERhdGU7XHJcbiAgICAgICAgdGhpcy5QbGFuRXhwaXJ5RGF5cyA9IGRhdGEuRGF5c1JlbWFpbmluZztcclxuICAgICAgICB0aGlzLkZlYXR1cmVEZXRhaWxzID0gZGF0YS5GZWF0dXJlRGV0YWlscy5tYXAoKGZlYXR1cmU6IGFueSkgPT4gbmV3IEZlYXR1cmVEZXRhaWxzKGZlYXR1cmUpKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZlYXR1cmVEZXRhaWxzIHtcclxuICAgIEZlYXR1cmVJZDogbnVtYmVyO1xyXG4gICAgRmVhdHVyZU5hbWU6IHN0cmluZztcclxuICAgIEZlYXR1cmVEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgSXNFbmFibGVkOiBib29sZWFuO1xyXG4gICAgU3BlY2lmaWNhdGlvbjogYW55W107XHJcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLkZlYXR1cmVJZCA9IGRhdGEuRmVhdHVyZUlkO1xyXG4gICAgICAgIHRoaXMuRmVhdHVyZU5hbWUgPSBkYXRhLkZlYXR1cmVOYW1lO1xyXG4gICAgICAgIHRoaXMuRmVhdHVyZURlc2NyaXB0aW9uID0gZGF0YS5GZWF0dXJlRGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5Jc0VuYWJsZWQgPSBkYXRhLklzRW5hYmxlZDtcclxuICAgICAgICB0aGlzLlNwZWNpZmljYXRpb24gPSBkYXRhLlNwZWNpZmljYXRpb24ubWFwKChzcGVjOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIEpzb246IEpTT04ucGFyc2Uoc3BlYy5Kc29uKSxcclxuICAgICAgICAgICAgSnNvbkNsb25lZDogSlNPTi5wYXJzZShzcGVjLkpzb24pLFxyXG4gICAgICAgICAgICBKc29uVHlwZTogc3BlYy5Kc29uVHlwZSxcclxuICAgICAgICAgICAgSXNDdXN0b21pemVkOiBzcGVjLklzQ3VzdG9taXplZCxcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|