simpo-component-library 3.6.963 → 3.6.967
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/sections/blog-list/blog-category.model.mjs +13 -0
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +78 -13
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +1084 -728
- package/esm2022/lib/services/rest.service.mjs +218 -121
- package/fesm2022/simpo-component-library.mjs +1319 -792
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/sections/blog-list/blog-category.model.d.ts +13 -0
- package/lib/sections/blog-list/blog-list.component.d.ts +14 -1
- package/lib/sections/view-blog/view-blog.component.d.ts +26 -2
- package/lib/services/rest.service.d.ts +9 -7
- package/package.json +1 -1
- package/simpo-component-library-3.6.967.tgz +0 -0
- package/simpo-component-library-3.6.963.tgz +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class BlogCategory {
|
|
2
|
+
constructor(json) {
|
|
3
|
+
this.id = json?.['id'];
|
|
4
|
+
this.businessId = json?.['businessId'];
|
|
5
|
+
this.categoryName = json?.['categoryName'];
|
|
6
|
+
this.description = json?.['description'];
|
|
7
|
+
this.blogsCreatedCount = json?.['blogsCreatedCount'];
|
|
8
|
+
this.createdById = json?.['createdById'];
|
|
9
|
+
this.createdByName = json?.['createdByName'];
|
|
10
|
+
this.createdTimeStamp = json?.['createdTimeStamp'];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvZy1jYXRlZ29yeS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctY2F0ZWdvcnkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFlBQVk7SUFVdkIsWUFBWSxJQUE2QjtRQUN2QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQmxvZ0NhdGVnb3J5IHtcbiAgaWQ6IHN0cmluZztcbiAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICBjYXRlZ29yeU5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYmxvZ3NDcmVhdGVkQ291bnQ6IG51bWJlcjtcbiAgY3JlYXRlZEJ5SWQ6IHN0cmluZztcbiAgY3JlYXRlZEJ5TmFtZTogc3RyaW5nO1xuICBjcmVhdGVkVGltZVN0YW1wOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoanNvbj86IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLmlkID0ganNvbj8uWydpZCddO1xuICAgIHRoaXMuYnVzaW5lc3NJZCA9IGpzb24/LlsnYnVzaW5lc3NJZCddO1xuICAgIHRoaXMuY2F0ZWdvcnlOYW1lID0ganNvbj8uWydjYXRlZ29yeU5hbWUnXTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0ganNvbj8uWydkZXNjcmlwdGlvbiddO1xuICAgIHRoaXMuYmxvZ3NDcmVhdGVkQ291bnQgPSBqc29uPy5bJ2Jsb2dzQ3JlYXRlZENvdW50J107XG4gICAgdGhpcy5jcmVhdGVkQnlJZCA9IGpzb24/LlsnY3JlYXRlZEJ5SWQnXTtcbiAgICB0aGlzLmNyZWF0ZWRCeU5hbWUgPSBqc29uPy5bJ2NyZWF0ZWRCeU5hbWUnXTtcbiAgICB0aGlzLmNyZWF0ZWRUaW1lU3RhbXAgPSBqc29uPy5bJ2NyZWF0ZWRUaW1lU3RhbXAnXTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { Component, Inject, Input } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { LOCAL_STORAGE } from '../../services/local-storage.token';
|
|
4
|
+
import { CardSkeletonLoaderComponent } from '../../elements/card-skeleton-loader/card-skeleton-loader.component';
|
|
3
5
|
import { BackgroundDirective } from '../../directive/background-directive';
|
|
4
6
|
import { AnimationDirective } from '../../directive/animation-directive';
|
|
5
7
|
import { BorderDirective } from '../../directive/border-directive';
|
|
@@ -8,22 +10,30 @@ import { ImageDirectiveDirective } from '../../directive/image-directive.directi
|
|
|
8
10
|
import { CornerDirective } from '../../directive/corner-directive';
|
|
9
11
|
import { ColumnDirectiveDirective } from '../../directive/column-directive.directive';
|
|
10
12
|
import { OverlayDirective } from '../../directive/overlay-directive';
|
|
11
|
-
import { ContentTitleDirective } from '../../directive/content-title-spacing.directive';
|
|
13
|
+
import { ContentTitleDirective, } from '../../directive/content-title-spacing.directive';
|
|
12
14
|
import { MatIcon } from '@angular/material/icon';
|
|
13
15
|
import BaseSection from '../BaseSection';
|
|
14
|
-
import { HoverElementsComponent } from
|
|
16
|
+
import { HoverElementsComponent } from '../../components/hover-elements/hover-elements.component';
|
|
15
17
|
import { HoverDirective } from '../../directive/hover-element-directive';
|
|
16
18
|
import { SvgDividerComponent } from '../../elements/svg-divider/svg-divider.component';
|
|
17
19
|
import { SpacingHorizontalDirective } from '../../directive/spacing-horizontal.directive';
|
|
18
|
-
import { RouterLink } from
|
|
20
|
+
import { RouterLink } from '@angular/router';
|
|
19
21
|
import * as i0 from "@angular/core";
|
|
20
22
|
import * as i1 from "../../services/events.service";
|
|
21
|
-
import * as i2 from "
|
|
23
|
+
import * as i2 from "../../services/rest.service";
|
|
24
|
+
import * as i3 from "@angular/common";
|
|
22
25
|
export class BlogListComponent extends BaseSection {
|
|
23
|
-
constructor(_eventService) {
|
|
26
|
+
constructor(_eventService, restService, storage) {
|
|
24
27
|
super();
|
|
25
28
|
this._eventService = _eventService;
|
|
29
|
+
this.restService = restService;
|
|
30
|
+
this.storage = storage;
|
|
26
31
|
this.responseData = [];
|
|
32
|
+
this.categoryList = [];
|
|
33
|
+
// undefined = nothing clicked yet (no tab highlighted); null = "All" explicitly clicked.
|
|
34
|
+
this.selectedCategoryId = undefined;
|
|
35
|
+
this.filteredBlogs = null;
|
|
36
|
+
this.apiLoading = false;
|
|
27
37
|
}
|
|
28
38
|
ngOnInit() {
|
|
29
39
|
for (let blog of this.responseData) {
|
|
@@ -35,6 +45,53 @@ export class BlogListComponent extends BaseSection {
|
|
|
35
45
|
}
|
|
36
46
|
this.style = this.data?.styles;
|
|
37
47
|
this.blogContent = this.data?.content;
|
|
48
|
+
this.loadBlogCategories();
|
|
49
|
+
}
|
|
50
|
+
get businessId() {
|
|
51
|
+
return (this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? null);
|
|
52
|
+
}
|
|
53
|
+
get displayedBlogs() {
|
|
54
|
+
return this.filteredBlogs ?? this.responseData;
|
|
55
|
+
}
|
|
56
|
+
loadBlogCategories() {
|
|
57
|
+
const bId = this.businessId;
|
|
58
|
+
if (!bId)
|
|
59
|
+
return;
|
|
60
|
+
this.restService.getBlogCategories(bId).subscribe({
|
|
61
|
+
next: categories => {
|
|
62
|
+
this.categoryList = categories ?? [];
|
|
63
|
+
},
|
|
64
|
+
error: () => {
|
|
65
|
+
this.categoryList = [];
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
selectCategory(categoryId) {
|
|
70
|
+
this.selectedCategoryId = categoryId;
|
|
71
|
+
if (categoryId === null) {
|
|
72
|
+
this.filteredBlogs = null;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const bId = this.businessId;
|
|
76
|
+
if (!bId)
|
|
77
|
+
return;
|
|
78
|
+
this.apiLoading = true;
|
|
79
|
+
this.restService.getBlogsByCategory(bId, categoryId).subscribe({
|
|
80
|
+
next: (response) => {
|
|
81
|
+
const list = response?.data ?? [];
|
|
82
|
+
for (const blog of list) {
|
|
83
|
+
blog['img'] = blog.blocks?.find((x) => x.type === 'image')?.data?.file?.url;
|
|
84
|
+
if (blog?.keyWords?.content?.length > 0)
|
|
85
|
+
blog['tags'] = blog?.keyWords?.content?.split(',') || [];
|
|
86
|
+
}
|
|
87
|
+
this.filteredBlogs = list;
|
|
88
|
+
this.apiLoading = false;
|
|
89
|
+
},
|
|
90
|
+
error: () => {
|
|
91
|
+
this.filteredBlogs = [];
|
|
92
|
+
this.apiLoading = false;
|
|
93
|
+
},
|
|
94
|
+
});
|
|
38
95
|
}
|
|
39
96
|
get headingSpace() {
|
|
40
97
|
return this.style?.layout?.headingSpacing;
|
|
@@ -53,12 +110,13 @@ export class BlogListComponent extends BaseSection {
|
|
|
53
110
|
this._eventService.editSection.emit({ data: this.data });
|
|
54
111
|
}, 100);
|
|
55
112
|
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
57
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" class=\"total-container\" simpoHover\n (hovering)=\"showEditTabs($event)\" *ngIf=\"(responseData?.length || 0) > 0;else elseBlock\" [attr.style]=\"customClass\">\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\" [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row gap-20\">\n <div [simpoColumnDirective]=\"data?.styles?.size\" [id]=\"data?.id\" *ngFor=\"let content of responseData\"\n class=\"d-flex\">\n <a [routerLink]=\"['/blog', content.newPostTitle]\" (click)=\"getBlogById(content.articleSlug)\">\n <div class=\"cards h-100\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\">\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\" alt=\"\" *ngIf=\"content.img\" loading=\"lazy\">\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\" *ngIf=\"!content.img\" loading=\"lazy\">\n <div class=\"p-30\">\n <!-- <div class=\"d-flex flex-wrap align-items-center gap-2\">\n <ng-container *ngFor=\"let tag of content?.tags | slice:0:4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div> -->\n <div class=\"heading-medium title mt-2 fs-20\" *ngIf=\"blogContent?.display?.showHeading\">\n {{content.postTitle.length > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div class=\"body-large mt-4 pb-15\" *ngIf=\"blogContent?.display?.showContent\">\n {{ content.postSummary.length > 250 ? content.postSummary.substring(0, 250) + '...' :\n content.postSummary }}\n </div>\n </ng-container>\n\n <div class=\"d-flex justify-content-end p-2 align-items-center\" *ngIf=\"content?.author?.content && content?.author?.content.length > 0\">\n <p>- {{content?.author?.content | titlecase}}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> <span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
113
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: i1.EventsService }, { token: i2.RestService }, { token: LOCAL_STORAGE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
114
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> <span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CardSkeletonLoaderComponent, selector: "simpo-card-skeleton-loader", inputs: ["count", "showTitles"] }] }); }
|
|
58
115
|
}
|
|
59
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, decorators: [{
|
|
60
117
|
type: Component,
|
|
61
|
-
args: [{ selector: 'simpo-blog-list', standalone: true, imports: [
|
|
118
|
+
args: [{ selector: 'simpo-blog-list', standalone: true, imports: [
|
|
119
|
+
CommonModule,
|
|
62
120
|
AnimationDirective,
|
|
63
121
|
BorderDirective,
|
|
64
122
|
ContentFitDirective,
|
|
@@ -70,9 +128,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
70
128
|
ContentTitleDirective,
|
|
71
129
|
HoverDirective,
|
|
72
130
|
HoverElementsComponent,
|
|
73
|
-
MatIcon,
|
|
74
|
-
|
|
75
|
-
|
|
131
|
+
MatIcon,
|
|
132
|
+
SvgDividerComponent,
|
|
133
|
+
SpacingHorizontalDirective,
|
|
134
|
+
RouterLink,
|
|
135
|
+
CardSkeletonLoaderComponent,
|
|
136
|
+
], template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> <span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"] }]
|
|
137
|
+
}], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.RestService }, { type: undefined, decorators: [{
|
|
138
|
+
type: Inject,
|
|
139
|
+
args: [LOCAL_STORAGE]
|
|
140
|
+
}] }], propDecorators: { responseData: [{
|
|
76
141
|
type: Input
|
|
77
142
|
}], index: [{
|
|
78
143
|
type: Input
|
|
@@ -85,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
85
150
|
}], nextComponentColor: [{
|
|
86
151
|
type: Input
|
|
87
152
|
}] } });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2Jsb2ctbGlzdC9ibG9nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFXLE1BQU0saURBQWlELENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8s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TyxFQUFFLG1CQUFtQjt3QkFDNUIsMEJBQTBCLEVBQUUsVUFBVSxDQUFDO2tGQUtoQyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCbG9nTGlzdENvbnRlbnRNb2RlbCwgQmxvZ0xpc3RTZWN0aW9uTW9kZWwsIEJsb2dMaXN0U3R5bGVzTW9kZWwgfSBmcm9tICcuL2Jsb2ctbGlzdC5tb2RlbCc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbHVtbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudFRpdGxlRGlyZWN0aXZlLCBTUEFDSU5HIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtdGl0bGUtc3BhY2luZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnRcIjtcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCwgTGF5T3V0TW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgU3ZnRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3N2Zy1kaXZpZGVyL3N2Zy1kaXZpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby1ibG9nLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLFxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcbiAgICBCb3JkZXJEaXJlY3RpdmUsXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxuICAgIEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvcm5lckRpcmVjdGl2ZSxcbiAgICBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBDb250ZW50VGl0bGVEaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcbiAgICBNYXRJY29uLCBTdmdEaXZpZGVyQ29tcG9uZW50LFxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLCBSb3V0ZXJMaW5rXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jsb2ctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibG9nLWxpc3QuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQmxvZ0xpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiB7XG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgZGF0YT86IEJsb2dMaXN0U2VjdGlvbk1vZGVsO1xuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKVxuICB9XG5cbiAgc3R5bGU/OiBCbG9nTGlzdFN0eWxlc01vZGVsO1xuICBibG9nQ29udGVudD86IEJsb2dMaXN0Q29udGVudE1vZGVsXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZm9yIChsZXQgYmxvZyBvZiB0aGlzLnJlc3BvbnNlRGF0YSkge1xuICAgICAgLy8gY29uc29sZS5sb2coYmxvZyk7XG4gICAgICBibG9nWydpbWcnXSA9IGJsb2cuYmxvY2tzLmZpbmQoKHg6IGFueSkgPT4geC50eXBlID09PSAnaW1hZ2UnKT8uZGF0YT8uZmlsZT8udXJsXG4gICAgICBpZiAoYmxvZz8ua2V5V29yZHM/LmNvbnRlbnQ/Lmxlbmd0aCA+IDApXG4gICAgICAgIGJsb2dbJ3RhZ3MnXSA9IGJsb2c/LmtleVdvcmRzPy5jb250ZW50Py5zcGxpdCgnLCcpIHx8IFtdXG4gICAgICAvLyBjb25zb2xlLmxvZyhibG9nWyd0YWdzJ10pO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5kYXRhPy5zdHlsZXNcbiAgICB0aGlzLmJsb2dDb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50XG4gIH1cblxuICBnZXQgaGVhZGluZ1NwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlPy5sYXlvdXQ/LmhlYWRpbmdTcGFjaW5nIGFzIFNQQUNJTkc7XG4gIH1cblxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICB9XG5cbiAgZ2V0QmxvZ0J5SWQoYmxvZ0lkOiBhbnkpIHtcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYmxvZ0J5SWRFdmVudC5lbWl0KGJsb2dJZCk7XG4gIH1cbiAgZWRpdFNlY3Rpb24oKSB7XG5cbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNDc1KVxuICAgICAgcmV0dXJuXG5cbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICB9LCAxMDApO1xuICB9XG59XG4iLCI8c2VjdGlvbiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlPy5iYWNrZ3JvdW5kXCIgY2xhc3M9XCJ0b3RhbC1jb250YWluZXJcIiBzaW1wb0hvdmVyXG4gIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiICpuZ0lmPVwiKHJlc3BvbnNlRGF0YT8ubGVuZ3RoIHx8IDApID4gMDtlbHNlIGVsc2VCbG9ja1wiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XG4gIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZT8uYmFja2dyb3VuZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZT8uYm9yZGVyXCJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwic3R5bGU/LmFuaW1hdGlvblwiIFtzaW1wb0xheW91dF09XCJzdHlsZT8ubGF5b3V0XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ2FwLTIwXCI+XG4gICAgICAgIDxkaXYgW3NpbXBvQ29sdW1uRGlyZWN0aXZlXT1cImRhdGE/LnN0eWxlcz8uc2l6ZVwiIFtpZF09XCJkYXRhPy5pZFwiICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHJlc3BvbnNlRGF0YVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9ibG9nJywgY29udGVudC5uZXdQb3N0VGl0bGVdXCIgKGNsaWNrKT1cImdldEJsb2dCeUlkKGNvbnRlbnQuYXJ0aWNsZVNsdWcpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHMgaC0xMDBcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGU/LmNvcm5lcnNcIiBbaWRdPVwiZGF0YT8uaWRcIj5cbiAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudC5pbWdcIiBbc2ltcG9JbWFnZURpcmVjdGl2ZV09XCJzdHlsZT8uaW1hZ2VcIiBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiIGFsdD1cIlwiICpuZ0lmPVwiY29udGVudC5pbWdcIiBsb2FkaW5nPVwibGF6eVwiPlxuICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCJcbiAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL2Rldi1iZWVvcy5zMy5hbWF6b25hd3MuY29tL2xpYnJhcnktbWVkaWEvNTQxMzI5YzE3MTkyMzY5NjMxOTlwZXhlbHMtcGl4YWJheS0yNjI1MDguanBnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIiAqbmdJZj1cIiFjb250ZW50LmltZ1wiIGxvYWRpbmc9XCJsYXp5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMwXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhZyBvZiBjb250ZW50Py50YWdzIHwgc2xpY2U6MDo0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwLTIgYm9yZGVyXCI+e3sgdGFnIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSB0aXRsZSBtdC0yIGZzLTIwXCIgKm5nSWY9XCJibG9nQ29udGVudD8uZGlzcGxheT8uc2hvd0hlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgIHt7Y29udGVudC5wb3N0VGl0bGUubGVuZ3RoID4gMTAwID8gY29udGVudC5wb3N0VGl0bGUuc3Vic3RyaW5nKDAsMTAwKSsnLi4uXCInIDogY29udGVudC5wb3N0VGl0bGV9fVxuICAgICAgICAgICAgICAgICAgPCEtLSB7e2NvbnRlbnQucG9zdFRpdGxlfX0gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWxhcmdlIG10LTQgcGItMTVcIiAqbmdJZj1cImJsb2dDb250ZW50Py5kaXNwbGF5Py5zaG93Q29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb250ZW50LnBvc3RTdW1tYXJ5Lmxlbmd0aCA+IDI1MCA/IGNvbnRlbnQucG9zdFN1bW1hcnkuc3Vic3RyaW5nKDAsIDI1MCkgKyAnLi4uJyA6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQucG9zdFN1bW1hcnkgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmF1dGhvcj8uY29udGVudCAmJiBjb250ZW50Py5hdXRob3I/LmNvbnRlbnQubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgPHA+LSB7e2NvbnRlbnQ/LmF1dGhvcj8uY29udGVudCB8IHRpdGxlY2FzZX19PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXV0aG9yc1wiIFtuZ0NsYXNzXT1cIidqdXN0aWZ5LWNvbnRlbnQtJyArIChzdHlsZT8ubGF5b3V0Py5hbGlnbiB8fCAnJylcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnBlcnNvbjwvbWF0LWljb24+ICZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPVwiYm9keS1sYXJnZVwiPnt7Y29udGVudD8uYXV0aG9yPy5jb250ZW50IHwgdGl0bGVjYXNlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyX3RvZGF5XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FsZW5kYXJfdG9kYXk8L21hdC1pY29uPiAmbmJzcDsmbmJzcDsgPHNwYW4gY2xhc3M9XCJib2R5LWxhcmdlXCI+e3tjb250ZW50LmNyZWF0ZWRUaW1lU3RhbXAgfFxuICAgICAgICAgICAgICAgICAgICBkYXRlOidFRUVFLCBNTU0sIGQsIHknfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGhlYWRpbmctbGFyZ2VcIiAoY2xpY2spPVwiZ2V0QmxvZ0J5SWQoY29udGVudC5uZXdQb3N0VGl0bGUpXCIgW25nQ2xhc3NdPVwiJ2p1c3RpZnktY29udGVudC0nICsgKHN0eWxlPy5sYXlvdXQ/LmFsaWduIHx8ICcnKVwiPlxuICAgICAgICAgICAgICAgIFJlYWQgTW9yZSA8bWF0LWljb24+YXJyb3dfcmlnaHRfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZT8uZGV2aWRlcj8uZGlzcGxheVwiPlxuICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGU/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcbiAgICAgIFtjb2xvcl09XCJuZXh0Q29tcG9uZW50Q29sb3I/LmNvbG9yXCI+PC9zaW1wby1zdmctZGl2aWRlcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgPGRpdiBjbGFzcz1cIm5vLWJsb2ctdGV4dCBoZWFkaW5nLW1lZGl1bVwiPlNvcnJ5IHRoZXJlIGFyZSBubyBibG9nIHBvc3RzLjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2Jsb2ctbGlzdC9ibG9nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDakgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0wscUJBQXFCLEdBRXRCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdC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Qjt3QkFDbkIsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxzQkFBc0I7d0JBQ3RCLE9BQU87d0JBQ1AsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLFVBQVU7d0JBQ1YsMkJBQTJCO3FCQUM1Qjs7MEJBcUJFLE1BQU07MkJBQUMsYUFBYTt5Q0FoQmQsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBCbG9nTGlzdENvbnRlbnRNb2RlbCxcbiAgQmxvZ0xpc3RTZWN0aW9uTW9kZWwsXG4gIEJsb2dMaXN0U3R5bGVzTW9kZWwsXG59IGZyb20gJy4vYmxvZy1saXN0Lm1vZGVsJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IExPQ0FMX1NUT1JBR0UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnRva2VuJztcbmltcG9ydCB7IFN0b3JhZ2VMaWtlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS1saWtlJztcbmltcG9ydCB7IEJsb2dDYXRlZ29yeSB9IGZyb20gJy4vYmxvZy1jYXRlZ29yeS5tb2RlbCc7XG5pbXBvcnQgeyBDYXJkU2tlbGV0b25Mb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9jYXJkLXNrZWxldG9uLWxvYWRlci9jYXJkLXNrZWxldG9uLWxvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb2x1bW4tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIENvbnRlbnRUaXRsZURpcmVjdGl2ZSxcbiAgU1BBQ0lORyxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtdGl0bGUtc3BhY2luZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcbmltcG9ydCB7IFN2Z0RpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zdmctZGl2aWRlci9zdmctZGl2aWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1ob3Jpem9udGFsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tYmxvZy1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcbiAgICBDb3JuZXJEaXJlY3RpdmUsXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgQ29udGVudFRpdGxlRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIEhvdmVyRWxlbWVudHNDb21wb25lbnQsXG4gICAgTWF0SWNvbixcbiAgICBTdmdEaXZpZGVyQ29tcG9uZW50LFxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxuICAgIFJvdXRlckxpbmssXG4gICAgQ2FyZFNrZWxldG9uTG9hZGVyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvZy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Jsb2ctbGlzdC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQmxvZ0xpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiB7XG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgZGF0YT86IEJsb2dMaXN0U2VjdGlvbk1vZGVsO1xuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XG5cbiAgY2F0ZWdvcnlMaXN0OiBCbG9nQ2F0ZWdvcnlbXSA9IFtdO1xuICAvLyB1bmRlZmluZWQgPSBub3RoaW5nIGNsaWNrZWQgeWV0IChubyB0YWIgaGlnaGxpZ2h0ZWQpOyBudWxsID0gXCJBbGxcIiBleHBsaWNpdGx5IGNsaWNrZWQuXG4gIHNlbGVjdGVkQ2F0ZWdvcnlJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgZmlsdGVyZWRCbG9nczogYW55W10gfCBudWxsID0gbnVsbDtcbiAgYXBpTG9hZGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBASW5qZWN0KExPQ0FMX1NUT1JBR0UpIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZUxpa2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHN0eWxlPzogQmxvZ0xpc3RTdHlsZXNNb2RlbDtcbiAgYmxvZ0NvbnRlbnQ/OiBCbG9nTGlzdENvbnRlbnRNb2RlbDtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBmb3IgKGxldCBibG9nIG9mIHRoaXMucmVzcG9uc2VEYXRhKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhibG9nKTtcbiAgICAgIGJsb2dbJ2ltZyddID0gYmxvZy5ibG9ja3MuZmluZChcbiAgICAgICAgKHg6IGFueSkgPT4geC50eXBlID09PSAnaW1hZ2UnXG4gICAgICApPy5kYXRhPy5maWxlPy51cmw7XG4gICAgICBpZiAoYmxvZz8ua2V5V29yZHM/LmNvbnRlbnQ/Lmxlbmd0aCA+IDApXG4gICAgICAgIGJsb2dbJ3RhZ3MnXSA9IGJsb2c/LmtleVdvcmRzPy5jb250ZW50Py5zcGxpdCgnLCcpIHx8IFtdO1xuICAgICAgLy8gY29uc29sZS5sb2coYmxvZ1sndGFncyddKTtcbiAgICB9XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuZGF0YT8uc3R5bGVzO1xuICAgIHRoaXMuYmxvZ0NvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XG4gICAgdGhpcy5sb2FkQmxvZ0NhdGVnb3JpZXMoKTtcbiAgfVxuXG4gIGdldCBidXNpbmVzc0lkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyBudWxsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBkaXNwbGF5ZWRCbG9ncygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRCbG9ncyA/PyB0aGlzLnJlc3BvbnNlRGF0YTtcbiAgfVxuXG4gIGxvYWRCbG9nQ2F0ZWdvcmllcygpIHtcbiAgICBjb25zdCBiSWQgPSB0aGlzLmJ1c2luZXNzSWQ7XG4gICAgaWYgKCFiSWQpIHJldHVybjtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEJsb2dDYXRlZ29yaWVzKGJJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGNhdGVnb3JpZXMgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IGNhdGVnb3JpZXMgPz8gW107XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBbXTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSBjYXRlZ29yeUlkO1xuICAgIGlmIChjYXRlZ29yeUlkID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQmxvZ3MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiSWQgPSB0aGlzLmJ1c2luZXNzSWQ7XG4gICAgaWYgKCFiSWQpIHJldHVybjtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QmxvZ3NCeUNhdGVnb3J5KGJJZCwgY2F0ZWdvcnlJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSByZXNwb25zZT8uZGF0YSA/PyBbXTtcbiAgICAgICAgZm9yIChjb25zdCBibG9nIG9mIGxpc3QpIHtcbiAgICAgICAgICBibG9nWydpbWcnXSA9IGJsb2cuYmxvY2tzPy5maW5kKFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC50eXBlID09PSAnaW1hZ2UnXG4gICAgICAgICAgKT8uZGF0YT8uZmlsZT8udXJsO1xuICAgICAgICAgIGlmIChibG9nPy5rZXlXb3Jkcz8uY29udGVudD8ubGVuZ3RoID4gMClcbiAgICAgICAgICAgIGJsb2dbJ3RhZ3MnXSA9IGJsb2c/LmtleVdvcmRzPy5jb250ZW50Py5zcGxpdCgnLCcpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRCbG9ncyA9IGxpc3Q7XG4gICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRCbG9ncyA9IFtdO1xuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGVhZGluZ1NwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlPy5sYXlvdXQ/LmhlYWRpbmdTcGFjaW5nIGFzIFNQQUNJTkc7XG4gIH1cblxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICB9XG5cbiAgZ2V0QmxvZ0J5SWQoYmxvZ0lkOiBhbnkpIHtcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYmxvZ0J5SWRFdmVudC5lbWl0KGJsb2dJZCk7XG4gIH1cbiAgZWRpdFNlY3Rpb24oKSB7XG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIiwiPHNlY3Rpb25cbiAgW2lkXT1cImRhdGE/LmlkXCJcbiAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZT8uYmFja2dyb3VuZFwiXG4gIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCJcbiAgc2ltcG9Ib3ZlclxuICAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIlxuICAqbmdJZj1cIlxuICAgIGNhdGVnb3J5TGlzdC5sZW5ndGggPiAwIHx8IChkaXNwbGF5ZWRCbG9ncz8ubGVuZ3RoIHx8IDApID4gMCB8fCBhcGlMb2FkaW5nO1xuICAgIGVsc2UgZWxzZUJsb2NrXG4gIFwiXG4gIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XG4gIDxkaXZcbiAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIlxuICAgIFtzaW1wb0JvcmRlcl09XCJzdHlsZT8uYm9yZGVyXCJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwic3R5bGU/LmFuaW1hdGlvblwiXG4gICAgW3NpbXBvTGF5b3V0XT1cInN0eWxlPy5sYXlvdXRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJsb2ctY2F0ZWdvcnktdGFic1wiICpuZ0lmPVwiY2F0ZWdvcnlMaXN0Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LXRhYlwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZENhdGVnb3J5SWQgPT09IG51bGxcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDYXRlZ29yeShudWxsKVwiXG4gICAgICAgICAgPkFsbDwvc3BhblxuICAgICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS10YWJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yeUxpc3RcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENhdGVnb3J5KGNhdGVnb3J5LmlkKVwiPlxuICAgICAgICAgIHt7IGNhdGVnb3J5LmNhdGVnb3J5TmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlclxuICAgICAgICAqbmdJZj1cImFwaUxvYWRpbmdcIlxuICAgICAgICBbc2hvd1RpdGxlc109XCJ0cnVlXCI+PC9zaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJuby1ibG9nLXRleHQtaW5saW5lIGhlYWRpbmctbWVkaXVtXCJcbiAgICAgICAgKm5nSWY9XCIhYXBpTG9hZGluZyAmJiAoZGlzcGxheWVkQmxvZ3M/Lmxlbmd0aCB8fCAwKSA9PT0gMFwiPlxuICAgICAgICBTb3JyeSB0aGVyZSBhcmUgbm8gYmxvZyBwb3N0cyBpbiB0aGlzIGNhdGVnb3J5LlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93IGdhcC0yMFwiXG4gICAgICAgICpuZ0lmPVwiIWFwaUxvYWRpbmcgJiYgKGRpc3BsYXllZEJsb2dzPy5sZW5ndGggfHwgMCkgPiAwXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbc2ltcG9Db2x1bW5EaXJlY3RpdmVdPVwiZGF0YT8uc3R5bGVzPy5zaXplXCJcbiAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIGRpc3BsYXllZEJsb2dzXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9ibG9nJywgY29udGVudC5uZXdQb3N0VGl0bGVdXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnZXRCbG9nQnlJZChjb250ZW50LmFydGljbGVTbHVnKVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNhcmRzIGgtMTAwXCJcbiAgICAgICAgICAgICAgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJjb250ZW50LmltZ1wiXG4gICAgICAgICAgICAgICAgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnQuaW1nXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiIC8+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiXG4gICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9kZXYtYmVlb3MuczMuYW1hem9uYXdzLmNvbS9saWJyYXJ5LW1lZGlhLzU0MTMyOWMxNzE5MjM2OTYzMTk5cGV4ZWxzLXBpeGFiYXktMjYyNTA4LmpwZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb250ZW50LmltZ1wiXG4gICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIiAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zMFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMlwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnQ/LnRhZ3M/Lmxlbmd0aCB8fCBjb250ZW50Py5jYXRlZ29yeU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwLTIgYm9yZGVyXCIgKm5nSWY9XCJjb250ZW50Py5jYXRlZ29yeU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29udGVudC5jYXRlZ29yeU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiBjb250ZW50Py50YWdzIHwgc2xpY2U6IDAgOiA0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwLTIgYm9yZGVyXCI+e3sgdGFnIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSB0aXRsZSBtdC0yIGZzLTIwXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxvZ0NvbnRlbnQ/LmRpc3BsYXk/LnNob3dIZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50LnBvc3RUaXRsZS5sZW5ndGggPiAxMDBcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbnRlbnQucG9zdFRpdGxlLnN1YnN0cmluZygwLCAxMDApICsgJy4uLlwiJ1xuICAgICAgICAgICAgICAgICAgICAgIDogY29udGVudC5wb3N0VGl0bGVcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8IS0tIHt7Y29udGVudC5wb3N0VGl0bGV9fSAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvZHktbGFyZ2UgbXQtNCBwYi0xNVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxvZ0NvbnRlbnQ/LmRpc3BsYXk/LnNob3dDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGVudC5wb3N0U3VtbWFyeS5sZW5ndGggPiAyNTBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29udGVudC5wb3N0U3VtbWFyeS5zdWJzdHJpbmcoMCwgMjUwKSArICcuLi4nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnRlbnQucG9zdFN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBwLTIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ/LmF1dGhvcj8uY29udGVudCAmJlxuICAgICAgICAgICAgICAgICAgICBjb250ZW50Py5hdXRob3I/LmNvbnRlbnQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICA8cD4tIHt7IGNvbnRlbnQ/LmF1dGhvcj8uY29udGVudCB8IHRpdGxlY2FzZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF1dGhvcnNcIiBbbmdDbGFzc109XCInanVzdGlmeS1jb250ZW50LScgKyAoc3R5bGU/LmxheW91dD8uYWxpZ24gfHwgJycpXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wZXJzb248L21hdC1pY29uPiAmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz1cImJvZHktbGFyZ2VcIj57e2NvbnRlbnQ/LmF1dGhvcj8uY29udGVudCB8IHRpdGxlY2FzZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhcl90b2RheVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj4gJm5ic3A7Jm5ic3A7IDxzcGFuIGNsYXNzPVwiYm9keS1sYXJnZVwiPnt7Y29udGVudC5jcmVhdGVkVGltZVN0YW1wIHxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTonRUVFRSwgTU1NLCBkLCB5J319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBoZWFkaW5nLWxhcmdlXCIgKGNsaWNrKT1cImdldEJsb2dCeUlkKGNvbnRlbnQubmV3UG9zdFRpdGxlKVwiIFtuZ0NsYXNzXT1cIidqdXN0aWZ5LWNvbnRlbnQtJyArIChzdHlsZT8ubGF5b3V0Py5hbGlnbiB8fCAnJylcIj5cbiAgICAgICAgICAgICAgICBSZWFkIE1vcmUgPG1hdC1pY29uPmFycm93X3JpZ2h0X2FsdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmRldmlkZXI/LmRpc3BsYXlcIj5cbiAgICA8c2ltcG8tc3ZnLWRpdmlkZXJcbiAgICAgIFtkaXZpZGVyVHlwZV09XCJzdHlsZT8uZGV2aWRlcj8uZGV2aWRlclR5cGVcIlxuICAgICAgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7IGhvdmVyX2VmZmVjdDogZWRpdCB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50c1xuICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbjxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICA8ZGl2IGNsYXNzPVwibm8tYmxvZy10ZXh0IGhlYWRpbmctbWVkaXVtXCI+U29ycnkgdGhlcmUgYXJlIG5vIGJsb2cgcG9zdHMuPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|