simpo-component-library 3.6.804 → 3.6.805

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.
Files changed (38) hide show
  1. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +3 -3
  2. package/esm2022/lib/elements/add-section/add-section.component.mjs +79 -13
  3. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +27 -4
  4. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.component.mjs +105 -0
  5. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.modal.mjs +2 -0
  6. package/esm2022/lib/sections/header-section/header-section.component.mjs +3 -3
  7. package/esm2022/lib/sections/process-section/process-section.component.mjs +5 -3
  8. package/esm2022/lib/sections/service-section/service-section.component.mjs +4 -4
  9. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  10. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +2 -2
  11. package/esm2022/lib/sections/video-carousel-section/video-carousel-section.component.mjs +3 -3
  12. package/esm2022/lib/sections/video-carousel-section/video-carousel.model.mjs +1 -1
  13. package/esm2022/public-api.mjs +2 -1
  14. package/fesm2022/simpo-component-library.mjs +198 -28
  15. package/fesm2022/simpo-component-library.mjs.map +1 -1
  16. package/lib/components/input-fields/input-fields.component.d.ts +1 -1
  17. package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +1 -1
  18. package/lib/ecommerce/sections/featured-category/featured-collection.component.d.ts +1 -1
  19. package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +1 -1
  20. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +1 -1
  21. package/lib/elements/add-section/add-section.component.d.ts +12 -0
  22. package/lib/elements/below-image-card/below-image-card.component.d.ts +9 -1
  23. package/lib/elements/link-editor/link-editor.component.d.ts +1 -1
  24. package/lib/elements/pricing-s1/pricing-s1.component.d.ts +1 -1
  25. package/lib/sections/banner-carousel/banner-carousel.component.d.ts +2 -2
  26. package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
  27. package/lib/sections/feature-experience-section/feature-experience-section.component.d.ts +29 -0
  28. package/lib/sections/feature-experience-section/feature-experience-section.modal.d.ts +24 -0
  29. package/lib/sections/image-grid-hotspot/image-grid-hotspot.component.d.ts +1 -1
  30. package/lib/sections/image-grid-section/image-grid-section.component.d.ts +1 -1
  31. package/lib/sections/image-section/image-section.component.d.ts +2 -2
  32. package/lib/sections/logo-showcase/logo-showcase.component.d.ts +2 -2
  33. package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
  34. package/lib/sections/service-section/service-section.model.d.ts +2 -1
  35. package/package.json +1 -1
  36. package/public-api.d.ts +1 -0
  37. package/simpo-component-library-3.6.805.tgz +0 -0
  38. package/simpo-component-library-3.6.804.tgz +0 -0
@@ -26,17 +26,41 @@ export class AddSectionComponent {
26
26
  this.businessType = 'E_COMMERCE';
27
27
  this.selectedTab = "BASIC";
28
28
  this.businessId = localStorage.getItem("businessId");
29
- this.tabs = [{ value: "BASIC", viewValue: "Basic" },
30
- { value: "INTEGRATIONS", viewValue: "Integrations" },
31
- { value: "PRO", viewValue: "Pro" }
29
+ this.tabs = [
30
+ { value: "BASIC", viewValue: "Static" },
31
+ { value: "INTEGRATIONS", viewValue: "Dynamic" },
32
+ { value: "APPS", viewValue: "Apps" },
33
+ { value: "PRO", viewValue: "Saved" }
32
34
  ];
33
35
  this.sections = [];
34
- this.selectedSection = this.sections[0];
36
+ this.selectedSection = [];
35
37
  this.selectedSectionName = "";
36
38
  this.loader = false;
37
39
  this.tabShiftLoader = false;
38
- // searchControl = new FormControl('');
39
40
  this.referEarnExist = false;
41
+ // New: track which category is expanded in sidebar
42
+ this.expandedCategories = {};
43
+ // New: track which component card is selected
44
+ this.selectedComponent = null;
45
+ // New: emoji map for categories
46
+ this.categoryEmojiMap = {
47
+ 'Hero': 'đŸ–ŧī¸',
48
+ 'Services': '🎁',
49
+ 'Feature': '✨',
50
+ 'How It Works': 'â„šī¸',
51
+ 'Testimonial': '⭐',
52
+ 'Pricing': '💰',
53
+ 'Faq': '❓',
54
+ 'Blogs': '📝',
55
+ 'Miscellaneous': '🔧',
56
+ 'Text': '📄',
57
+ 'Logo': 'đŸˇī¸',
58
+ 'Contact': 'âœ‰ī¸',
59
+ 'CTA': 'đŸ“ĸ',
60
+ 'Team': 'đŸ‘Ĩ',
61
+ 'Video': 'đŸŽŦ',
62
+ 'Image ': 'đŸ–ŧī¸',
63
+ };
40
64
  this.searchText = "";
41
65
  this.dummy2 = {};
42
66
  this.isSearch = false;
@@ -46,10 +70,39 @@ export class AddSectionComponent {
46
70
  this.businessType = business ? JSON.parse(business)?.type : 'STATIC';
47
71
  this.getAllSections();
48
72
  }
73
+ getCategoryEmoji(category) {
74
+ return this.categoryEmojiMap[category] || 'đŸ“Ļ';
75
+ }
76
+ getFirstSectionName(category) {
77
+ const sections = this.sections[category];
78
+ if (sections && sections.length > 0) {
79
+ return sections[0].sectionName || category;
80
+ }
81
+ return category;
82
+ }
83
+ toggleCategory(category) {
84
+ if (this.expandedCategories[category]) {
85
+ this.expandedCategories[category] = false;
86
+ }
87
+ else {
88
+ Object.keys(this.expandedCategories).forEach(k => this.expandedCategories[k] = false);
89
+ this.expandedCategories[category] = true;
90
+ this.selectSection(category);
91
+ }
92
+ }
93
+ selectComponent(sec, category) {
94
+ this.selectedComponent = sec;
95
+ this.selectedSection = this.sections[category];
96
+ this.selectedSectionName = category;
97
+ }
98
+ selectComponentAndHighlight(ele) {
99
+ this.selectedComponent = ele;
100
+ }
49
101
  selectSection(ele) {
50
102
  this.tabShiftLoader = true;
51
103
  this.selectedSection = this.sections[ele];
52
104
  this.selectedSectionName = ele;
105
+ this.selectedComponent = null;
53
106
  setTimeout(() => {
54
107
  this.tabShiftLoader = false;
55
108
  }, 800);
@@ -68,6 +121,10 @@ export class AddSectionComponent {
68
121
  this.dummySections = data;
69
122
  this.selectedSectionName = Object.keys(this.sections)[0];
70
123
  this.selectedSection = this.sections[this.selectedSectionName];
124
+ // Auto-expand first category
125
+ if (this.selectedSectionName) {
126
+ this.expandedCategories[this.selectedSectionName] = true;
127
+ }
71
128
  this.loader = false;
72
129
  });
73
130
  }
@@ -76,8 +133,7 @@ export class AddSectionComponent {
76
133
  next: (res) => {
77
134
  this.referEarnExist = res.data;
78
135
  },
79
- error: (err) => {
80
- }
136
+ error: (err) => { }
81
137
  });
82
138
  }
83
139
  getObjectKeys(obj) {
@@ -87,14 +143,24 @@ export class AddSectionComponent {
87
143
  return Number(Object.keys(section).length);
88
144
  }
89
145
  addNewSection(componentId, sectionType, event) {
90
- this._eventService.addNewSectionClick.emit({ componentId: componentId, index: this.data.index, position: this.data.position, status: true, sectionType: sectionType });
146
+ this._eventService.addNewSectionClick.emit({
147
+ componentId: componentId,
148
+ index: this.data.index,
149
+ position: this.data.position,
150
+ status: true,
151
+ sectionType: sectionType
152
+ });
91
153
  this.dialog.close();
92
- event.stopPropagation();
154
+ if (event)
155
+ event.stopPropagation();
93
156
  }
94
157
  searchSections() {
95
158
  this.isSearch = false;
96
- if (this.searchText.length == 0)
159
+ if (this.searchText.length == 0) {
97
160
  this.sections = this.dummySections;
161
+ return;
162
+ }
163
+ this.dummy2 = {};
98
164
  for (let ele of Object.keys(this.dummySections)) {
99
165
  if (ele.toLowerCase().includes(this.searchText.toLowerCase())) {
100
166
  this.dummy2[ele] = [...this.dummySections[ele]];
@@ -118,13 +184,13 @@ export class AddSectionComponent {
118
184
  this.dummy2 = {};
119
185
  }
120
186
  static { this.Éĩfac = i0.ÉĩÉĩngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddSectionComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.HttpClient }, { token: i3.EventsService }, { token: i4.ElementServiceService }, { token: i5.RestService }, { token: i4.ElementServiceService }], target: i0.ÉĩÉĩFactoryTarget.Component }); }
121
- static { this.Éĩcmp = i0.ÉĩÉĩngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddSectionComponent, isStandalone: true, selector: "simpo-add-section", ngImport: i0, template: "<section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.header-container{padding:12px 15px;font-size:15px;line-height:24px;font-weight:600;color:#000;box-shadow:0 0 4px #00000040;margin-bottom:2px}.search-bar{box-shadow:0 0 4px #00000040;padding:8px;border-radius:8px}.search-bar img{width:19px;height:18px}.search-bar input{width:100%;outline:none;border:unset;font-size:13px;font-weight:400;background:#fafafa}.gap-10{gap:10px!important}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section-img-container{padding:18px;border-radius:8px;background:#f9fafb}.section-img-container img{width:100%}.search-bar-container{padding:15px}.parent-container{background:#fafafa}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.empty-img{height:30vh}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i8.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
187
+ static { this.Éĩcmp = i0.ÉĩÉĩngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddSectionComponent, isStandalone: true, selector: "simpo-add-section", ngImport: i0, template: "<!-- <section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section> -->\r\n\r\n<section class=\"main-container d-flex flex-column\">\r\n\r\n <div class=\"header-container relative px-3 py-2 fade-in\">\r\n <div class=\"header-title fs-16 fw-bold\">Add a section</div>\r\n <div class=\"header-subtitle fs-12 text-secondary\">\r\n Choose a section \u2014 you can reorder or remove it any time.\r\n </div>\r\n <mat-icon class=\"close-btn d-flex align-items-center justify-content-center\"\r\n (click)=\"dialog.close()\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"parent-container d-flex flex-column\">\r\n\r\n <!-- Tabs -->\r\n <div class=\"top-tabs-container d-flex justify-content-between fade-in\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"top-tab\" (click)=\"selectedTab = ele.value\"\r\n [class.active-top-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Search -->\r\n <div class=\"search-bar-container fade-in\">\r\n <div class=\"search-bar d-flex gap-2 align-items-center\">\r\n <img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\">\r\n <input type=\"text\" placeholder='Search section...' [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n\r\n <ng-container *ngIf=\"!isSearch; else emptyScreen\">\r\n\r\n <!-- Quick Add -->\r\n <div class=\"quick-add-container fade-in d-flex align-items-center\" *ngIf=\"!loader && !searchText\">\r\n <div class=\"quick-add-label\">Quick add:</div>\r\n <div class=\"quick-add-chips d-flex\">\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections); let i = index\">\r\n <ng-container *ngIf=\"i < 6\">\r\n <div class=\"quick-chip stagger-item d-flex align-items-center\"\r\n (click)=\"selectSection(category); toggleCategory(category)\"\r\n [class.active-quick-chip]=\"selectedSectionName === category\">\r\n <span class=\"chip-emoji\">{{getCategoryEmoji(category)}}</span>\r\n {{getFirstSectionName(category)}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- CONTENT -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!loader\">\r\n <!-- LEFT -->\r\n <div class=\"left-sidebar\">\r\n <div class=\"category-header d-flex align-items-center\">\r\n <div class=\"category-icon d-flex align-items-center justify-content-center\">\u2728</div>\r\n <div class=\"fs-14\">AI Recommended</div>\r\n </div>\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections)\">\r\n <div class=\"category-block\">\r\n <div class=\"category-header d-flex align-items-end justify-content-between\"\r\n (click)=\"toggleCategory(category)\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <span class=\"category-icon\">\r\n {{getCategoryEmoji(category)}}\r\n </span>\r\n <span class=\" fs-14\">\r\n {{category}}\r\n </span>\r\n </div>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"expandedCategories[category]\">\r\n expand_less\r\n </mat-icon>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"!expandedCategories[category]\">\r\n expand_more\r\n </mat-icon>\r\n </div>\r\n <div class=\"category-items d-flex flex-column\" *ngIf=\"expandedCategories[category]\">\r\n <ng-container *ngFor=\"let sec of sections[category]\">\r\n <div class=\"category-item\"\r\n [class.active]=\"selectedComponent?.componentId === sec.componentId\"\r\n (click)=\"selectComponent(sec, category)\">\r\n {{sec.sectionName}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- RIGHT -->\r\n <div class=\"right-content\">\r\n\r\n <div class=\"section-group-label\">Most impactful sections</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\">\r\n\r\n <ng-container *ngFor=\"let ele of selectedSection; let i = index\">\r\n\r\n <!-- FILTERED VIEW -->\r\n <ng-container\r\n *ngIf=\"!selectedComponent || selectedComponent?.componentId === ele.componentId\">\r\n\r\n <div class=\"section-card stagger-item\" [style.animation-delay]=\"i * 40 + 'ms'\"\r\n [class.section-card-selected]=\"selectedComponent?.componentId === ele.componentId\"\r\n (click)=\"selectComponentAndHighlight(ele)\">\r\n\r\n <div class=\"section-card-badge\" *ngIf=\"ele.sectionType\">\r\n + {{ele.sectionType | uppercase}}\r\n </div>\r\n\r\n <div\r\n class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\">\r\n </ng-container>\r\n\r\n <ng-template #noImage>\r\n <div\r\n class=\"no-image-placeholder d-flex align-items-center justify-content-center\">\r\n <mat-icon>image</mat-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"section-card-info\">\r\n <div class=\"section-card-name\">{{ele.sectionName}}</div>\r\n <div class=\"section-card-desc\" *ngIf=\"ele.desc\">{{ele.desc}}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"content-layout d-flex\" *ngIf=\"loader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '6px' }\"></ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1]\">\r\n <div class=\"section-card\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '20px', 'border-radius': '4px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '180px', 'border-radius': '8px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '16px', 'border-radius': '4px' }\"></ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- EMPTY SEARCH -->\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/7486/7486803.png\">\r\n <div class=\"empty-title\">No sections found</div>\r\n <div class=\"empty-subtitle\">\r\n Try searching something else or explore categories\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- PRO TAB -->\r\n <ng-template #proTabContent>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/4076/4076549.png\">\r\n <div class=\"empty-title\">Coming Soon</div>\r\n <div class=\"empty-subtitle\">\r\n Something awesome is on the way \uD83D\uDE80\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"footer-container fade-in d-flex align-items-center justify-content-between\">\r\n <div class=\"footer-hint fs-12 text-secondary d-flex align-items-center gap-1\">\r\n <mat-icon>info</mat-icon>\r\n You can rearrange or remove this section any time.\r\n </div>\r\n\r\n <div class=\"footer-actions d-flex align-items-center gap-2\">\r\n <div class=\"btn-cancel fs-14\" (click)=\"dialog.close()\">Cancel</div>\r\n <div class=\"btn-add fs-14\" [class.disabled]=\"!selectedComponent\"\r\n (click)=\"selectedComponent && addNewSection(selectedComponent.componentId, selectedComponent.sectionType, $event)\">\r\n + Add section\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.header-container{padding:12px 15px;font-size:15px;line-height:24px;font-weight:600;color:#000;margin-bottom:2px}.gap-10{gap:10px!important}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section-img-container{padding:18px;border-radius:8px;background:#f9fafb}.section-img-container img{width:100%}.search-bar-container{padding:15px}.parent-container{background:#fafafa}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}.main-container{height:100vh;background:#fff;border-radius:16px;overflow:hidden}.fs-14{font-size:14px}.fs-12{font-size:12px}.fs-16{font-size:16px}.close-btn{position:absolute;top:18px;right:20px;cursor:pointer;color:#666;font-size:20px;width:28px;height:28px;border-radius:6px}.top-tabs-container{background:#dcdcdc4f;margin:0 14px;border-radius:10px;padding:4px}.top-tab{padding:6px 34px;font-size:13px;color:#666;cursor:pointer;border-bottom:2px solid transparent;transition:color .15s}.active-top-tab{font-weight:600;background:#fff;border-radius:10px}.parent-container{flex:1;overflow:hidden;padding:0}.search-bar-container{padding:12px 16px 8px}.search-bar{border:1.5px solid #e8e8e8;border-radius:10px;padding:8px 12px;transition:border .15s}.search-bar:focus-within{border-color:var(--primary-bg-color)}.search-bar img{width:16px;height:16px;opacity:.5}.search-bar input{border:none;outline:none;background:transparent;font-size:13px;color:#333;width:100%}.search-bar input::placeholder{color:#aaa}.quick-add-container{padding:4px 24px 10px;gap:10px;flex-wrap:wrap;flex-shrink:0}.quick-add-label{font-size:12px;color:#888;white-space:nowrap}.quick-add-chips{gap:6px;width:100%;overflow-y:scroll;white-space:nowrap}.quick-chip{gap:5px;padding:4px 10px;font-size:12px;border:1.5px solid #e0e0e0;border-radius:20px;cursor:pointer;color:#333;background:#fff;transition:background .12s,border-color .12s;-webkit-user-select:none;user-select:none}.quick-chip.active-quick-chip{border-color:#7c6cf0;color:#4b3fc0;font-weight:500}.quick-chip{transition:all .2s ease}.chip-emoji{font-size:14px}.content-layout{flex:1;overflow:hidden;border-top:1px solid #f0f0f0}.sidebar-group{margin-bottom:2px}.sidebar-group-header{gap:8px;padding:9px 14px;cursor:pointer;border-radius:0;transition:background .12s;-webkit-user-select:none;user-select:none;font-size:13px;color:#444}.sidebar-group-header:hover{background:#f0f0f0}.sidebar-group-active{background:#ece9fd;color:#4b3fc0;font-weight:600}.sidebar-group-icon{font-size:15px;width:20px;text-align:center}.sidebar-group-label{flex:1;font-size:13px}.sidebar-chevron{font-size:18px;width:18px;height:18px;color:#aaa;transition:transform .2s}.sidebar-chevron.rotated{transform:rotate(180deg)}.subcategory-item{padding:6px 10px 6px 8px;font-size:12px;color:#555;cursor:pointer;border-radius:6px;transition:background .12s;-webkit-user-select:none;user-select:none}.subcategory-item:hover{background:#ece9fd;color:#4b3fc0}.subcategory-active{background:#ece9fd;color:#4b3fc0;font-weight:500}.right-content{flex:1;overflow-y:auto;padding:16px 20px 16px 0}.section-group-label{font-size:13px;font-weight:600;color:#444;margin-bottom:14px}.sections-list{gap:16px}.section-card{border:1.5px solid #e8e8e8;border-radius:12px;overflow:hidden;cursor:pointer;background:#fff;transition:border-color .15s,box-shadow .15s}.section-card:hover{border-color:#bbb;box-shadow:0 2px 8px #0000000f}.section-card-selected{border-color:#7c6cf0;box-shadow:0 0 0 3px #7c6cf026}.section-card-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;color:#5a4fcf;background:#ece9fd;padding:4px 10px;margin:10px 10px 6px;border-radius:20px}.section-img-container{width:100%;overflow:hidden;background:#f7f7f7;display:flex;align-items:center;justify-content:center;max-height:200px}.no-image-placeholder{height:140px;display:flex;align-items:center;justify-content:center;color:#ccc}.no-image-placeholder mat-icon{font-size:40px;width:40px;height:40px}.section-card-info{padding:10px 14px 12px}.section-card-name{font-size:13px;font-weight:600;color:#222;margin-bottom:3px}.section-card-desc{font-size:12px;color:#888;line-height:1.5}.image-container-1{margin-bottom:16px}.empty-img{width:100px;opacity:.85}.footer-container{padding:12px 20px;border-top:1px solid #eee;background:#fff}.footer-hint mat-icon{font-size:14px;width:14px;height:14px}.btn-cancel{padding:8px 18px;font-size:13px;border:1.5px solid #e0e0e0;border-radius:8px;background:#fff;color:#444;cursor:pointer}.btn-add{padding:8px 20px;font-size:13px;font-weight:600;border:none;border-radius:8px;background:var(--primary-bg-color);color:#fff;cursor:pointer}.btn-add:disabled{opacity:.4;cursor:not-allowed}.fade-in{animation:fadeIn .25s ease}.fade-slide{animation:fadeSlide .25s ease}.stagger-item{opacity:0;transform:translateY(10px);animation:staggerFade .3s ease forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes staggerFade{to{opacity:1;transform:translateY(0)}}.section-card{transition:all .2s ease}@keyframes expandFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.empty-state{height:100%;gap:10px;text-align:center}.empty-state img{width:120px;opacity:.85}.empty-title{font-size:16px;font-weight:600;color:#333}.empty-subtitle{font-size:13px;color:#777;max-width:260px}.active-subcategory{background:#7c6cf0!important;color:#fff!important}.sidebar-subcategory{overflow:hidden;animation:dropdownSmooth .25s ease}@keyframes dropdownSmooth{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.section-card:hover{transform:translateY(-4px)}.section-img-container img{transition:transform .25s ease,opacity .2s}.section-img-container:hover img{transform:scale(1.03)}.left-sidebar{width:200px;background:#f7f7fb;padding:16px 10px}.category-block{margin-bottom:10px}.category-header{gap:10px;padding:6px 10px;cursor:pointer;border-radius:10px;transition:background .2s}.category-header:hover{background:#ece9fd}.category-icon{font-size:18px}.category-arrow{font-size:18px;color:#888;transition:transform .25s ease}.category-arrow.rotate{transform:rotate(180deg)}.category-items{padding-left:14px;margin-top:0;gap:6px;animation:dropdownFade .25s ease}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.category-item{padding:4px 12px;font-size:12px;color:#444;cursor:pointer;border-radius:10px;transition:all .2s ease}.category-item:hover{background:#ece9fd;color:#4b3fc0}.category-item.active{background:#e6e1f7;color:#4b0d5d;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i8.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
122
188
  }
123
189
  i0.ÉĩÉĩngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddSectionComponent, decorators: [{
124
190
  type: Component,
125
- args: [{ selector: 'simpo-add-section', standalone: true, imports: [CommonModule, MatIconModule, NgxSkeletonLoaderModule, FormsModule], template: "<section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.header-container{padding:12px 15px;font-size:15px;line-height:24px;font-weight:600;color:#000;box-shadow:0 0 4px #00000040;margin-bottom:2px}.search-bar{box-shadow:0 0 4px #00000040;padding:8px;border-radius:8px}.search-bar img{width:19px;height:18px}.search-bar input{width:100%;outline:none;border:unset;font-size:13px;font-weight:400;background:#fafafa}.gap-10{gap:10px!important}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section-img-container{padding:18px;border-radius:8px;background:#f9fafb}.section-img-container img{width:100%}.search-bar-container{padding:15px}.parent-container{background:#fafafa}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.empty-img{height:30vh}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}\n"] }]
191
+ args: [{ selector: 'simpo-add-section', standalone: true, imports: [CommonModule, MatIconModule, NgxSkeletonLoaderModule, FormsModule], template: "<!-- <section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section> -->\r\n\r\n<section class=\"main-container d-flex flex-column\">\r\n\r\n <div class=\"header-container relative px-3 py-2 fade-in\">\r\n <div class=\"header-title fs-16 fw-bold\">Add a section</div>\r\n <div class=\"header-subtitle fs-12 text-secondary\">\r\n Choose a section \u2014 you can reorder or remove it any time.\r\n </div>\r\n <mat-icon class=\"close-btn d-flex align-items-center justify-content-center\"\r\n (click)=\"dialog.close()\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"parent-container d-flex flex-column\">\r\n\r\n <!-- Tabs -->\r\n <div class=\"top-tabs-container d-flex justify-content-between fade-in\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"top-tab\" (click)=\"selectedTab = ele.value\"\r\n [class.active-top-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Search -->\r\n <div class=\"search-bar-container fade-in\">\r\n <div class=\"search-bar d-flex gap-2 align-items-center\">\r\n <img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\">\r\n <input type=\"text\" placeholder='Search section...' [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n\r\n <ng-container *ngIf=\"!isSearch; else emptyScreen\">\r\n\r\n <!-- Quick Add -->\r\n <div class=\"quick-add-container fade-in d-flex align-items-center\" *ngIf=\"!loader && !searchText\">\r\n <div class=\"quick-add-label\">Quick add:</div>\r\n <div class=\"quick-add-chips d-flex\">\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections); let i = index\">\r\n <ng-container *ngIf=\"i < 6\">\r\n <div class=\"quick-chip stagger-item d-flex align-items-center\"\r\n (click)=\"selectSection(category); toggleCategory(category)\"\r\n [class.active-quick-chip]=\"selectedSectionName === category\">\r\n <span class=\"chip-emoji\">{{getCategoryEmoji(category)}}</span>\r\n {{getFirstSectionName(category)}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- CONTENT -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!loader\">\r\n <!-- LEFT -->\r\n <div class=\"left-sidebar\">\r\n <div class=\"category-header d-flex align-items-center\">\r\n <div class=\"category-icon d-flex align-items-center justify-content-center\">\u2728</div>\r\n <div class=\"fs-14\">AI Recommended</div>\r\n </div>\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections)\">\r\n <div class=\"category-block\">\r\n <div class=\"category-header d-flex align-items-end justify-content-between\"\r\n (click)=\"toggleCategory(category)\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <span class=\"category-icon\">\r\n {{getCategoryEmoji(category)}}\r\n </span>\r\n <span class=\" fs-14\">\r\n {{category}}\r\n </span>\r\n </div>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"expandedCategories[category]\">\r\n expand_less\r\n </mat-icon>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"!expandedCategories[category]\">\r\n expand_more\r\n </mat-icon>\r\n </div>\r\n <div class=\"category-items d-flex flex-column\" *ngIf=\"expandedCategories[category]\">\r\n <ng-container *ngFor=\"let sec of sections[category]\">\r\n <div class=\"category-item\"\r\n [class.active]=\"selectedComponent?.componentId === sec.componentId\"\r\n (click)=\"selectComponent(sec, category)\">\r\n {{sec.sectionName}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- RIGHT -->\r\n <div class=\"right-content\">\r\n\r\n <div class=\"section-group-label\">Most impactful sections</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\">\r\n\r\n <ng-container *ngFor=\"let ele of selectedSection; let i = index\">\r\n\r\n <!-- FILTERED VIEW -->\r\n <ng-container\r\n *ngIf=\"!selectedComponent || selectedComponent?.componentId === ele.componentId\">\r\n\r\n <div class=\"section-card stagger-item\" [style.animation-delay]=\"i * 40 + 'ms'\"\r\n [class.section-card-selected]=\"selectedComponent?.componentId === ele.componentId\"\r\n (click)=\"selectComponentAndHighlight(ele)\">\r\n\r\n <div class=\"section-card-badge\" *ngIf=\"ele.sectionType\">\r\n + {{ele.sectionType | uppercase}}\r\n </div>\r\n\r\n <div\r\n class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\">\r\n </ng-container>\r\n\r\n <ng-template #noImage>\r\n <div\r\n class=\"no-image-placeholder d-flex align-items-center justify-content-center\">\r\n <mat-icon>image</mat-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"section-card-info\">\r\n <div class=\"section-card-name\">{{ele.sectionName}}</div>\r\n <div class=\"section-card-desc\" *ngIf=\"ele.desc\">{{ele.desc}}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"content-layout d-flex\" *ngIf=\"loader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '6px' }\"></ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1]\">\r\n <div class=\"section-card\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '20px', 'border-radius': '4px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '180px', 'border-radius': '8px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '16px', 'border-radius': '4px' }\"></ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- EMPTY SEARCH -->\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/7486/7486803.png\">\r\n <div class=\"empty-title\">No sections found</div>\r\n <div class=\"empty-subtitle\">\r\n Try searching something else or explore categories\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- PRO TAB -->\r\n <ng-template #proTabContent>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/4076/4076549.png\">\r\n <div class=\"empty-title\">Coming Soon</div>\r\n <div class=\"empty-subtitle\">\r\n Something awesome is on the way \uD83D\uDE80\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"footer-container fade-in d-flex align-items-center justify-content-between\">\r\n <div class=\"footer-hint fs-12 text-secondary d-flex align-items-center gap-1\">\r\n <mat-icon>info</mat-icon>\r\n You can rearrange or remove this section any time.\r\n </div>\r\n\r\n <div class=\"footer-actions d-flex align-items-center gap-2\">\r\n <div class=\"btn-cancel fs-14\" (click)=\"dialog.close()\">Cancel</div>\r\n <div class=\"btn-add fs-14\" [class.disabled]=\"!selectedComponent\"\r\n (click)=\"selectedComponent && addNewSection(selectedComponent.componentId, selectedComponent.sectionType, $event)\">\r\n + Add section\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.header-container{padding:12px 15px;font-size:15px;line-height:24px;font-weight:600;color:#000;margin-bottom:2px}.gap-10{gap:10px!important}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section-img-container{padding:18px;border-radius:8px;background:#f9fafb}.section-img-container img{width:100%}.search-bar-container{padding:15px}.parent-container{background:#fafafa}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}.main-container{height:100vh;background:#fff;border-radius:16px;overflow:hidden}.fs-14{font-size:14px}.fs-12{font-size:12px}.fs-16{font-size:16px}.close-btn{position:absolute;top:18px;right:20px;cursor:pointer;color:#666;font-size:20px;width:28px;height:28px;border-radius:6px}.top-tabs-container{background:#dcdcdc4f;margin:0 14px;border-radius:10px;padding:4px}.top-tab{padding:6px 34px;font-size:13px;color:#666;cursor:pointer;border-bottom:2px solid transparent;transition:color .15s}.active-top-tab{font-weight:600;background:#fff;border-radius:10px}.parent-container{flex:1;overflow:hidden;padding:0}.search-bar-container{padding:12px 16px 8px}.search-bar{border:1.5px solid #e8e8e8;border-radius:10px;padding:8px 12px;transition:border .15s}.search-bar:focus-within{border-color:var(--primary-bg-color)}.search-bar img{width:16px;height:16px;opacity:.5}.search-bar input{border:none;outline:none;background:transparent;font-size:13px;color:#333;width:100%}.search-bar input::placeholder{color:#aaa}.quick-add-container{padding:4px 24px 10px;gap:10px;flex-wrap:wrap;flex-shrink:0}.quick-add-label{font-size:12px;color:#888;white-space:nowrap}.quick-add-chips{gap:6px;width:100%;overflow-y:scroll;white-space:nowrap}.quick-chip{gap:5px;padding:4px 10px;font-size:12px;border:1.5px solid #e0e0e0;border-radius:20px;cursor:pointer;color:#333;background:#fff;transition:background .12s,border-color .12s;-webkit-user-select:none;user-select:none}.quick-chip.active-quick-chip{border-color:#7c6cf0;color:#4b3fc0;font-weight:500}.quick-chip{transition:all .2s ease}.chip-emoji{font-size:14px}.content-layout{flex:1;overflow:hidden;border-top:1px solid #f0f0f0}.sidebar-group{margin-bottom:2px}.sidebar-group-header{gap:8px;padding:9px 14px;cursor:pointer;border-radius:0;transition:background .12s;-webkit-user-select:none;user-select:none;font-size:13px;color:#444}.sidebar-group-header:hover{background:#f0f0f0}.sidebar-group-active{background:#ece9fd;color:#4b3fc0;font-weight:600}.sidebar-group-icon{font-size:15px;width:20px;text-align:center}.sidebar-group-label{flex:1;font-size:13px}.sidebar-chevron{font-size:18px;width:18px;height:18px;color:#aaa;transition:transform .2s}.sidebar-chevron.rotated{transform:rotate(180deg)}.subcategory-item{padding:6px 10px 6px 8px;font-size:12px;color:#555;cursor:pointer;border-radius:6px;transition:background .12s;-webkit-user-select:none;user-select:none}.subcategory-item:hover{background:#ece9fd;color:#4b3fc0}.subcategory-active{background:#ece9fd;color:#4b3fc0;font-weight:500}.right-content{flex:1;overflow-y:auto;padding:16px 20px 16px 0}.section-group-label{font-size:13px;font-weight:600;color:#444;margin-bottom:14px}.sections-list{gap:16px}.section-card{border:1.5px solid #e8e8e8;border-radius:12px;overflow:hidden;cursor:pointer;background:#fff;transition:border-color .15s,box-shadow .15s}.section-card:hover{border-color:#bbb;box-shadow:0 2px 8px #0000000f}.section-card-selected{border-color:#7c6cf0;box-shadow:0 0 0 3px #7c6cf026}.section-card-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;color:#5a4fcf;background:#ece9fd;padding:4px 10px;margin:10px 10px 6px;border-radius:20px}.section-img-container{width:100%;overflow:hidden;background:#f7f7f7;display:flex;align-items:center;justify-content:center;max-height:200px}.no-image-placeholder{height:140px;display:flex;align-items:center;justify-content:center;color:#ccc}.no-image-placeholder mat-icon{font-size:40px;width:40px;height:40px}.section-card-info{padding:10px 14px 12px}.section-card-name{font-size:13px;font-weight:600;color:#222;margin-bottom:3px}.section-card-desc{font-size:12px;color:#888;line-height:1.5}.image-container-1{margin-bottom:16px}.empty-img{width:100px;opacity:.85}.footer-container{padding:12px 20px;border-top:1px solid #eee;background:#fff}.footer-hint mat-icon{font-size:14px;width:14px;height:14px}.btn-cancel{padding:8px 18px;font-size:13px;border:1.5px solid #e0e0e0;border-radius:8px;background:#fff;color:#444;cursor:pointer}.btn-add{padding:8px 20px;font-size:13px;font-weight:600;border:none;border-radius:8px;background:var(--primary-bg-color);color:#fff;cursor:pointer}.btn-add:disabled{opacity:.4;cursor:not-allowed}.fade-in{animation:fadeIn .25s ease}.fade-slide{animation:fadeSlide .25s ease}.stagger-item{opacity:0;transform:translateY(10px);animation:staggerFade .3s ease forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes staggerFade{to{opacity:1;transform:translateY(0)}}.section-card{transition:all .2s ease}@keyframes expandFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.empty-state{height:100%;gap:10px;text-align:center}.empty-state img{width:120px;opacity:.85}.empty-title{font-size:16px;font-weight:600;color:#333}.empty-subtitle{font-size:13px;color:#777;max-width:260px}.active-subcategory{background:#7c6cf0!important;color:#fff!important}.sidebar-subcategory{overflow:hidden;animation:dropdownSmooth .25s ease}@keyframes dropdownSmooth{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.section-card:hover{transform:translateY(-4px)}.section-img-container img{transition:transform .25s ease,opacity .2s}.section-img-container:hover img{transform:scale(1.03)}.left-sidebar{width:200px;background:#f7f7fb;padding:16px 10px}.category-block{margin-bottom:10px}.category-header{gap:10px;padding:6px 10px;cursor:pointer;border-radius:10px;transition:background .2s}.category-header:hover{background:#ece9fd}.category-icon{font-size:18px}.category-arrow{font-size:18px;color:#888;transition:transform .25s ease}.category-arrow.rotate{transform:rotate(180deg)}.category-items{padding-left:14px;margin-top:0;gap:6px;animation:dropdownFade .25s ease}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.category-item{padding:4px 12px;font-size:12px;color:#444;cursor:pointer;border-radius:10px;transition:all .2s ease}.category-item:hover{background:#ece9fd;color:#4b3fc0}.category-item.active{background:#e6e1f7;color:#4b0d5d;font-weight:600}\n"] }]
126
192
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
127
193
  type: Inject,
128
194
  args: [MAT_DIALOG_DATA]
129
195
  }] }, { type: i2.HttpClient }, { type: i3.EventsService }, { type: i4.ElementServiceService }, { type: i5.RestService }, { type: i4.ElementServiceService }] });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9hZGQtc2VjdGlvbi9hZGQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2FkZC1zZWN0aW9uL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQWUsV0FBVyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBV25FLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBbUIsTUFBeUMsRUFDMUIsSUFBUyxFQUNqQyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixhQUFvQyxFQUNwQyxXQUF3QixFQUN4QixjQUFxQztRQU41QixXQUFNLEdBQU4sTUFBTSxDQUFtQztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUsvQyxpQkFBWSxHQUE0QixZQUFZLENBQUM7UUFPckQsZ0JB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Q0FBQyxJQUFJLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLENBQUM7K0dBN0hVLG1CQUFtQiw4Q0FLcEIsZUFBZTttR0FMZCxtQkFBbUIsNkVDbkJoQyw2OVRBb0tVLHFyRkRySkUsWUFBWSwrUEFBRSxhQUFhLG1MQUFFLHVCQUF1Qiw4TUFBRSxXQUFXOzs0RkFJaEUsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsQ0FBQzs7MEJBU3pFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE5neFNrZWxldG9uTG9hZGVyTW9kdWxlIH0gZnJvbSAnbmd4LXNrZWxldG9uLWxvYWRlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hZGQtc2VjdGlvbicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRTZWN0aW9uQ29tcG9uZW50IHtcclxuXHJcbiAgT2JqZWN0PzogT2JqZWN0XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZ1JlZjxBZGRTZWN0aW9uQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFbGVtZW50U2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZVxyXG4gICkge1xyXG5cclxuICB9XHJcblxyXG4gIGJ1c2luZXNzVHlwZTogJ1NUQVRJQycgfCAnRV9DT01NRVJDRScgPSAnRV9DT01NRVJDRSc7XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBidXNpbmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdiRGV0YWlscycpIHx8ICcnO1xyXG4gICAgdGhpcy5idXNpbmVzc1R5cGUgPSBidXNpbmVzcyA/IEpTT04ucGFyc2UoYnVzaW5lc3MpPy50eXBlIDogJ1NUQVRJQydcclxuICAgIHRoaXMuZ2V0QWxsU2VjdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSBcIkJBU0lDXCJcclxuICBwdWJsaWMgYnVzaW5lc3NJZDogc3RyaW5nIHwgbnVsbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKTtcclxuICB0YWJzOiBhbnkgPSBbeyB2YWx1ZTogXCJCQVNJQ1wiLCB2aWV3VmFsdWU6IFwiQmFzaWNcIiB9LFxyXG4gIHsgdmFsdWU6IFwiSU5URUdSQVRJT05TXCIsIHZpZXdWYWx1ZTogXCJJbnRlZ3JhdGlvbnNcIiB9LFxyXG4gIHsgdmFsdWU6IFwiUFJPXCIsIHZpZXdWYWx1ZTogXCJQcm9cIiB9XHJcbiAgXVxyXG5cclxuXHJcbiAgc2VjdGlvbnM6IGFueSA9IFtdXHJcbiAgc2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSB0aGlzLnNlY3Rpb25zWzBdXHJcbiAgc2VsZWN0ZWRTZWN0aW9uTmFtZTogYW55ID0gXCJcIlxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgdGFiU2hpZnRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIC8vIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIHJlZmVyRWFybkV4aXN0OiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgc2VsZWN0U2VjdGlvbihlbGU6IGFueSkge1xyXG4gICAgdGhpcy50YWJTaGlmdExvYWRlciA9IHRydWVcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tlbGVdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lID0gZWxlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGFiU2hpZnRMb2FkZXIgPSBmYWxzZVxyXG4gICAgfSwgODAwKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5jaGVja0FwcEluc3RhbGxlZCgpXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWVcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRDb21wb25lbnRBcGkodGhpcy5idXNpbmVzc1R5cGUgPT09ICdTVEFUSUMnID8gdGhpcy5idXNpbmVzc1R5cGUgOiB1bmRlZmluZWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVmZXJFYXJuRXhpc3QpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBkYXRhW2tleV0gPSBkYXRhW2tleV0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChzZWN0aW9uOiBhbnkpID0+IHNlY3Rpb24uc2VjdGlvblR5cGUgIT09ICdyZWZlcmVhcm4nXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBkYXRhXHJcbiAgICAgICAgdGhpcy5kdW1teVNlY3Rpb25zID0gZGF0YVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuc2VjdGlvbnMpWzBdXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zW3RoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZV1cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIGNoZWNrQXBwSW5zdGFsbGVkKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5jaGVja0FwcEluc3RhbGxlZCh0aGlzLmJ1c2luZXNzSWQsICdSZWZlciBhbmQgRWFybicpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVmZXJFYXJuRXhpc3QgPSByZXMuZGF0YVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0S2V5cyhvYmo6IGFueSk6IGFueVtdIHtcclxuICAgIHJldHVybiBvYmogPyBPYmplY3Qua2V5cyhvYmopIDogW107XHJcbiAgfVxyXG5cclxuICBnZXRTZWN0aW9uTGVuZ3RoKHNlY3Rpb246IGFueSkge1xyXG4gICAgcmV0dXJuIE51bWJlcihPYmplY3Qua2V5cyhzZWN0aW9uKS5sZW5ndGgpXHJcbiAgfVxyXG5cclxuICBhZGROZXdTZWN0aW9uKGNvbXBvbmVudElkOiBhbnksIHNlY3Rpb25UeXBlOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5hZGROZXdTZWN0aW9uQ2xpY2suZW1pdCh7IGNvbXBvbmVudElkOiBjb21wb25lbnRJZCwgaW5kZXg6IHRoaXMuZGF0YS5pbmRleCwgcG9zaXRpb246IHRoaXMuZGF0YS5wb3NpdGlvbiwgc3RhdHVzOiB0cnVlLCBzZWN0aW9uVHlwZTogc2VjdGlvblR5cGUgfSk7XHJcbiAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSBcIlwiXHJcbiAgZHVtbXlTZWN0aW9uczogYW55XHJcbiAgZHVtbXkyOiBhbnkgPSB7fVxyXG5cclxuICBpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgc2VhcmNoU2VjdGlvbnMoKSB7XHJcbiAgICB0aGlzLmlzU2VhcmNoID0gZmFsc2VcclxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQubGVuZ3RoID09IDApXHJcbiAgICAgIHRoaXMuc2VjdGlvbnMgPSB0aGlzLmR1bW15U2VjdGlvbnNcclxuICAgIGZvciAobGV0IGVsZSBvZiBPYmplY3Qua2V5cyh0aGlzLmR1bW15U2VjdGlvbnMpKSB7XHJcbiAgICAgIGlmIChlbGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICB0aGlzLmR1bW15MltlbGVdID0gWy4uLnRoaXMuZHVtbXlTZWN0aW9uc1tlbGVdXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmb3IgKGxldCBqIG9mIHRoaXMuZHVtbXlTZWN0aW9uc1tlbGVdKSB7XHJcbiAgICAgICAgICBpZiAoai5zZWN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZHVtbXkyW2VsZV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmR1bW15MltlbGVdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kdW1teTJbZWxlXS5wdXNoKGopO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWN0aW9ucyA9IHsgLi4udGhpcy5kdW1teTIgfTtcclxuICAgIGlmICh0aGlzLmdldFNlY3Rpb25MZW5ndGgodGhpcy5zZWN0aW9ucykgPT0gMClcclxuICAgICAgdGhpcy5pc1NlYXJjaCA9IHRydWVcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuc2VjdGlvbnMpWzBdXHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbT2JqZWN0LmtleXModGhpcy5zZWN0aW9ucylbMF1dXHJcbiAgICB0aGlzLmR1bW15MiA9IHt9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdj5TZWxlY3QgVGVtcGxhdGU8L2Rpdj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZi0xOCBjcFwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYXJlbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIGQtZmxleCBnYXAtMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8zMTQ2NjFjMTc0MTg0NDIzNDQ0MlZlY3RvciUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzZWFyY2gtYmFyLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBTZWN0aW9uc1wiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFNlY3Rpb25zKClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1hcm91bmQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiB0YWJzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFic1wiIChjbGljayk9XCJzZWxlY3RlZFRhYiA9IGVsZS52YWx1ZVwiIFtjbGFzcy5hY3RpdmUtdGFiXT1cImVsZS52YWx1ZSA9PSBzZWxlY3RlZFRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlLnZpZXdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZS52YWx1ZSA9PSAnUFJPJyAmJiBlbGUudmFsdWUgIT0gc2VsZWN0ZWRUYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMzBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy80NjgyODFjMTc0NDY5OTY2NDg1OEZyYW1lJTIwMTI0NDgzMTc0MCUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInByby1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnQkFTSUMnOyBlbHNlIHByb1RhYkNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NlYXJjaDtlbHNlIGVtcHR5U2NyZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1jb250YWluZXIgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtc2lkZXBhbmVsXCIgKm5nSWY9XCIhbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBnZXRPYmplY3RLZXlzKHNlY3Rpb25zKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtc2VjdGlvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTZWN0aW9uKGVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmUtc2VjdGlvbl09XCJzZWxlY3RlZFNlY3Rpb24gPT0gc2VjdGlvbnNbZWxlXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbiA9PSBzZWN0aW9uc1tlbGVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvOTU0MzgzYzE3NDE4NTAzOTI4MDJHcm91cCUyMDE3MDc0ODE4NzkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJpY29uIHRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24gIT0gc2VjdGlvbnNbZWxlXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzg0NjE0NWMxNzQxODUwNTc0ODY0SWNvbiUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJpY29uIHRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtcmVuZGVyLXNlY3Rpb25cIiAqbmdJZj1cIiAhbG9hZGVyICYmICF0YWJTaGlmdExvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkU2VjdGlvbk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBzZWN0aW9uIHRvIGFkZCB0byB5b3VyIHBhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBzZWxlY3RlZFNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj57e2VsZS5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgY3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld1NlY3Rpb24oZWxlLmNvbXBvbmVudElkLGVsZS5zZWN0aW9uVHlwZSwkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlPy5pbWFnZTsgZWxzZSBub0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImVsZT8uaW1hZ2VcIiBhbHQ9XCJzZWN0aW9uIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vaW1nLmZyZWVwaWsuY29tL3ByZW1pdW0tdmVjdG9yL2RlZmF1bHQtaW1hZ2UtaWNvbi12ZWN0b3ItbWlzc2luZy1waWN0dXJlLXBhZ2Utd2Vic2l0ZS1kZXNpZ24tbW9iaWxlLWFwcC1uby1waG90by1hdmFpbGFibGVfODc1NDMtMTEwOTMuanBnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwic2VjdGlvbiBpbWFnZVwiIGNsYXNzPVwiaC0zMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtc2lkZXBhbmVsXCIgKm5nSWY9XCJsb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIFsxLDEsMSwxLDEsMSwxLDEsMV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnOHZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc2NSUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICcxM3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b20nIDogJzEwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLXJlbmRlci1zZWN0aW9uXCIgKm5nSWY9XCJsb2FkZXIgfHwgdGFiU2hpZnRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICczdmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNjAlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAnMnZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIFsxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI1JScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAnMnZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICcyNXZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4nOicycHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJvVGFiQ29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWRpdiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8zNzcwNzZjMTc0MzE1NDgwNzY4M2ltYWdlJTIwJTI4NiUyOS5wbmdcIiBhbHQ9XCJlbXB0eS1pbWdcIiBjbGFzcz1cImVtcHR5LWltZyBcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIENvbWluZyBTb29uXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMSB0ZXh0LWNlbnRlclwiPldvb2YhIFNvbWV0aGluZyBwYXdzb21lIGlzIGNvbWluZyE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy1zdWItdGV4dC0yIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhleSBob29tYW4hIEkganVzdCBzbmlmZmVkIG91dCBzb21ldGhpbmcgc3VwZXIgZXhjaXRpbmcuLi4gYW5kIGl04oCZcyBhbG1vc3QgaGVyZSEgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2NyZWVuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktZGl2IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lci0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzM3NzA3NmMxNzQzMTU0ODA3NjgzaW1hZ2UlMjAlMjg2JTI5LnBuZ1wiIGFsdD1cImVtcHR5LWltZ1wiIGNsYXNzPVwiZW1wdHktaW1nIFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgT29wcyEgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMSB0ZXh0LWNlbnRlclwiPkkgc25pZmZlZCBldmVyeXdoZXJlLCBidXQgSSBjb3VsZG4ndCBmaW5kIHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMiB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXliZSB0cnkgYSBkaWZmZXJlbnQgc2VhcmNoPyBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj4iXX0=
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9hZGQtc2VjdGlvbi9hZGQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2FkZC1zZWN0aW9uL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQWUsV0FBVyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBV25FLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBbUIsTUFBeUMsRUFDMUIsSUFBUyxFQUNqQyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixhQUFvQyxFQUNwQyxXQUF3QixFQUN4QixjQUFxQztRQU41QixXQUFNLEdBQU4sTUFBTSxDQUFtQztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUcvQyxpQkFBWSxHQUE0QixZQUFZLENBQUM7UUFRckQsZ0JB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFDbEIsQ0FBQzsrR0FuTVUsbUJBQW1CLDhDQUtwQixlQUFlO21HQUxkLG1CQUFtQiw2RUNuQmhDLDQzcUJBc1hVLGk4UUR2V0UsWUFBWSw0VEFBRSxhQUFhLG1MQUFFLHVCQUF1Qiw4TUFBRSxXQUFXOzs0RkFJaEUsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsQ0FBQzs7MEJBU3pFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE5neFNrZWxldG9uTG9hZGVyTW9kdWxlIH0gZnJvbSAnbmd4LXNrZWxldG9uLWxvYWRlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hZGQtc2VjdGlvbicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRTZWN0aW9uQ29tcG9uZW50IHtcclxuXHJcbiAgT2JqZWN0PzogT2JqZWN0XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZ1JlZjxBZGRTZWN0aW9uQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFbGVtZW50U2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGJ1c2luZXNzVHlwZTogJ1NUQVRJQycgfCAnRV9DT01NRVJDRScgPSAnRV9DT01NRVJDRSc7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgYnVzaW5lc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYkRldGFpbHMnKSB8fCAnJztcclxuICAgIHRoaXMuYnVzaW5lc3NUeXBlID0gYnVzaW5lc3MgPyBKU09OLnBhcnNlKGJ1c2luZXNzKT8udHlwZSA6ICdTVEFUSUMnXHJcbiAgICB0aGlzLmdldEFsbFNlY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFRhYjogc3RyaW5nID0gXCJCQVNJQ1wiXHJcbiAgcHVibGljIGJ1c2luZXNzSWQ6IHN0cmluZyB8IG51bGwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIik7XHJcbiAgdGFiczogYW55ID0gW1xyXG4gICAgeyB2YWx1ZTogXCJCQVNJQ1wiLCB2aWV3VmFsdWU6IFwiU3RhdGljXCIgfSxcclxuICAgIHsgdmFsdWU6IFwiSU5URUdSQVRJT05TXCIsIHZpZXdWYWx1ZTogXCJEeW5hbWljXCIgfSxcclxuICAgIHsgdmFsdWU6IFwiQVBQU1wiLCB2aWV3VmFsdWU6IFwiQXBwc1wiIH0sXHJcbiAgICB7IHZhbHVlOiBcIlBST1wiLCB2aWV3VmFsdWU6IFwiU2F2ZWRcIiB9XHJcbiAgXVxyXG5cclxuICBzZWN0aW9uczogYW55ID0gW11cclxuICBzZWxlY3RlZFNlY3Rpb246IGFueSA9IFtdXHJcbiAgc2VsZWN0ZWRTZWN0aW9uTmFtZTogYW55ID0gXCJcIlxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgdGFiU2hpZnRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHJlZmVyRWFybkV4aXN0OiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgLy8gTmV3OiB0cmFjayB3aGljaCBjYXRlZ29yeSBpcyBleHBhbmRlZCBpbiBzaWRlYmFyXHJcbiAgZXhwYW5kZWRDYXRlZ29yaWVzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcblxyXG4gIC8vIE5ldzogdHJhY2sgd2hpY2ggY29tcG9uZW50IGNhcmQgaXMgc2VsZWN0ZWRcclxuICBzZWxlY3RlZENvbXBvbmVudDogYW55ID0gbnVsbFxyXG5cclxuICAvLyBOZXc6IGVtb2ppIG1hcCBmb3IgY2F0ZWdvcmllc1xyXG4gIGNhdGVnb3J5RW1vamlNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICAnSGVybyc6ICfwn5a877iPJyxcclxuICAgICdTZXJ2aWNlcyc6ICfwn46BJyxcclxuICAgICdGZWF0dXJlJzogJ+KcqCcsXHJcbiAgICAnSG93IEl0IFdvcmtzJzogJ+KEue+4jycsXHJcbiAgICAnVGVzdGltb25pYWwnOiAn4q2QJyxcclxuICAgICdQcmljaW5nJzogJ/CfkrAnLFxyXG4gICAgJ0ZhcSc6ICfinZMnLFxyXG4gICAgJ0Jsb2dzJzogJ/Cfk50nLFxyXG4gICAgJ01pc2NlbGxhbmVvdXMnOiAn8J+UpycsXHJcbiAgICAnVGV4dCc6ICfwn5OEJyxcclxuICAgICdMb2dvJzogJ/Cfj7fvuI8nLFxyXG4gICAgJ0NvbnRhY3QnOiAn4pyJ77iPJyxcclxuICAgICdDVEEnOiAn8J+ToicsXHJcbiAgICAnVGVhbSc6ICfwn5GlJyxcclxuICAgICdWaWRlbyc6ICfwn46sJyxcclxuICAgICdJbWFnZSAnOiAn8J+WvO+4jycsXHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeUVtb2ppKGNhdGVnb3J5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlFbW9qaU1hcFtjYXRlZ29yeV0gfHwgJ/Cfk6YnXHJcbiAgfVxyXG5cclxuICBnZXRGaXJzdFNlY3Rpb25OYW1lKGNhdGVnb3J5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zW2NhdGVnb3J5XVxyXG4gICAgaWYgKHNlY3Rpb25zICYmIHNlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHNlY3Rpb25zWzBdLnNlY3Rpb25OYW1lIHx8IGNhdGVnb3J5XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2F0ZWdvcnlcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllc1tjYXRlZ29yeV0pIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzKS5mb3JFYWNoKGsgPT4gdGhpcy5leHBhbmRlZENhdGVnb3JpZXNba10gPSBmYWxzZSlcclxuICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbGVjdFNlY3Rpb24oY2F0ZWdvcnkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb21wb25lbnQoc2VjOiBhbnksIGNhdGVnb3J5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSBzZWNcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tjYXRlZ29yeV1cclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IGNhdGVnb3J5XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb21wb25lbnRBbmRIaWdobGlnaHQoZWxlOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSBlbGVcclxuICB9XHJcblxyXG4gIHNlbGVjdFNlY3Rpb24oZWxlOiBhbnkpIHtcclxuICAgIHRoaXMudGFiU2hpZnRMb2FkZXIgPSB0cnVlXHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbZWxlXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IGVsZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy50YWJTaGlmdExvYWRlciA9IGZhbHNlXHJcbiAgICB9LCA4MDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2VjdGlvbnMoKSB7XHJcbiAgICB0aGlzLmNoZWNrQXBwSW5zdGFsbGVkKClcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldENvbXBvbmVudEFwaSh0aGlzLmJ1c2luZXNzVHlwZSA9PT0gJ1NUQVRJQycgPyB0aGlzLmJ1c2luZXNzVHlwZSA6IHVuZGVmaW5lZCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHJlcy5kYXRhXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZWZlckVhcm5FeGlzdCkge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IGRhdGFba2V5XS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNlY3Rpb246IGFueSkgPT4gc2VjdGlvbi5zZWN0aW9uVHlwZSAhPT0gJ3JlZmVyZWFybidcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IGRhdGFcclxuICAgICAgICB0aGlzLmR1bW15U2VjdGlvbnMgPSBkYXRhXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lID0gT2JqZWN0LmtleXModGhpcy5zZWN0aW9ucylbMF1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lXVxyXG5cclxuICAgICAgICAvLyBBdXRvLWV4cGFuZCBmaXJzdCBjYXRlZ29yeVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzW3RoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZV0gPSB0cnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIGNoZWNrQXBwSW5zdGFsbGVkKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5jaGVja0FwcEluc3RhbGxlZCh0aGlzLmJ1c2luZXNzSWQsICdSZWZlciBhbmQgRWFybicpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVmZXJFYXJuRXhpc3QgPSByZXMuZGF0YVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7IH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRPYmplY3RLZXlzKG9iajogYW55KTogYW55W10ge1xyXG4gICAgcmV0dXJuIG9iaiA/IE9iamVjdC5rZXlzKG9iaikgOiBbXTtcclxuICB9XHJcblxyXG4gIGdldFNlY3Rpb25MZW5ndGgoc2VjdGlvbjogYW55KSB7XHJcbiAgICByZXR1cm4gTnVtYmVyKE9iamVjdC5rZXlzKHNlY3Rpb24pLmxlbmd0aClcclxuICB9XHJcblxyXG4gIGFkZE5ld1NlY3Rpb24oY29tcG9uZW50SWQ6IGFueSwgc2VjdGlvblR5cGU6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmFkZE5ld1NlY3Rpb25DbGljay5lbWl0KHtcclxuICAgICAgY29tcG9uZW50SWQ6IGNvbXBvbmVudElkLFxyXG4gICAgICBpbmRleDogdGhpcy5kYXRhLmluZGV4LFxyXG4gICAgICBwb3NpdGlvbjogdGhpcy5kYXRhLnBvc2l0aW9uLFxyXG4gICAgICBzdGF0dXM6IHRydWUsXHJcbiAgICAgIHNlY3Rpb25UeXBlOiBzZWN0aW9uVHlwZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgaWYgKGV2ZW50KSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9IFwiXCJcclxuICBkdW1teVNlY3Rpb25zOiBhbnlcclxuICBkdW1teTI6IGFueSA9IHt9XHJcbiAgaXNTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBzZWFyY2hTZWN0aW9ucygpIHtcclxuICAgIHRoaXMuaXNTZWFyY2ggPSBmYWxzZVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLnNlY3Rpb25zID0gdGhpcy5kdW1teVNlY3Rpb25zXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5kdW1teTIgPSB7fVxyXG4gICAgZm9yIChsZXQgZWxlIG9mIE9iamVjdC5rZXlzKHRoaXMuZHVtbXlTZWN0aW9ucykpIHtcclxuICAgICAgaWYgKGVsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIHRoaXMuZHVtbXkyW2VsZV0gPSBbLi4udGhpcy5kdW1teVNlY3Rpb25zW2VsZV1dO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGogb2YgdGhpcy5kdW1teVNlY3Rpb25zW2VsZV0pIHtcclxuICAgICAgICAgIGlmIChqLnNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kdW1teTJbZWxlXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZHVtbXkyW2VsZV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmR1bW15MltlbGVdLnB1c2goaik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlY3Rpb25zID0geyAuLi50aGlzLmR1bW15MiB9O1xyXG4gICAgaWYgKHRoaXMuZ2V0U2VjdGlvbkxlbmd0aCh0aGlzLnNlY3Rpb25zKSA9PSAwKVxyXG4gICAgICB0aGlzLmlzU2VhcmNoID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lID0gT2JqZWN0LmtleXModGhpcy5zZWN0aW9ucylbMF1cclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tPYmplY3Qua2V5cyh0aGlzLnNlY3Rpb25zKVswXV1cclxuICAgIHRoaXMuZHVtbXkyID0ge31cclxuICB9XHJcbn0iLCI8IS0tIDxzZWN0aW9uIGNsYXNzPVwibWFpbi1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICA8ZGl2PlNlbGVjdCBUZW1wbGF0ZTwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4IGNwXCIgKGNsaWNrKT1cImRpYWxvZy5jbG9zZSgpXCI+XHJcbiAgICAgICAgICAgIGNsb3NlXHJcbiAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhcmVudC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXIgZC1mbGV4IGdhcC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzMxNDY2MWMxNzQxODQ0MjM0NDQyVmVjdG9yJTIwJTI4MSUyOS5wbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cInNlYXJjaC1iYXItaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIFNlY3Rpb25zXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoU2VjdGlvbnMoKVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIHRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiID0gZWxlLnZhbHVlXCIgW2NsYXNzLmFjdGl2ZS10YWJdPVwiZWxlLnZhbHVlID09IHNlbGVjdGVkVGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlbGUudmlld1ZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlLnZhbHVlID09ICdQUk8nICYmIGVsZS52YWx1ZSAhPSBzZWxlY3RlZFRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0zMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzQ2ODI4MWMxNzQ0Njk5NjY0ODU4RnJhbWUlMjAxMjQ0ODMxNzQwJTIwJTI4MSUyOS5wbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwicHJvLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdCQVNJQyc7IGVsc2UgcHJvVGFiQ29udGVudFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2VhcmNoO2Vsc2UgZW1wdHlTY3JlZW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLWNvbnRhaW5lciBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1zaWRlcGFuZWxcIiAqbmdJZj1cIiFsb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIGdldE9iamVjdEtleXMoc2VjdGlvbnMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1zZWN0aW9uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNlY3Rpb24oZWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS1zZWN0aW9uXT1cInNlbGVjdGVkU2VjdGlvbiA9PSBzZWN0aW9uc1tlbGVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uID09IHNlY3Rpb25zW2VsZV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy85NTQzODNjMTc0MTg1MDM5MjgwMkdyb3VwJTIwMTcwNzQ4MTg3OS5wbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cImljb24gdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbiAhPSBzZWN0aW9uc1tlbGVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvODQ2MTQ1YzE3NDE4NTA1NzQ4NjRJY29uJTIwJTI4MSUyOS5wbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cImljb24gdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZWxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1yZW5kZXItc2VjdGlvblwiICpuZ0lmPVwiICFsb2FkZXIgJiYgIXRhYlNoaWZ0TG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLWhlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRTZWN0aW9uTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHNlY3Rpb24gdG8gYWRkIHRvIHlvdXIgcGFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIHNlbGVjdGVkU2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPnt7ZWxlLnNlY3Rpb25OYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taW1nLWNvbnRhaW5lciBjcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3U2VjdGlvbihlbGUuY29tcG9uZW50SWQsZWxlLnNlY3Rpb25UeXBlLCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGU/LmltYWdlOyBlbHNlIG5vSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZWxlPy5pbWFnZVwiIGFsdD1cInNlY3Rpb24gaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ltYWdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9pbWcuZnJlZXBpay5jb20vcHJlbWl1bS12ZWN0b3IvZGVmYXVsdC1pbWFnZS1pY29uLXZlY3Rvci1taXNzaW5nLXBpY3R1cmUtcGFnZS13ZWJzaXRlLWRlc2lnbi1tb2JpbGUtYXBwLW5vLXBob3RvLWF2YWlsYWJsZV84NzU0My0xMTA5My5qcGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzZWN0aW9uIGltYWdlXCIgY2xhc3M9XCJoLTMwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1zaWRlcGFuZWxcIiAqbmdJZj1cImxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGUgb2YgWzEsMSwxLDEsMSwxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICc4dmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzY1JScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzEzcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbScgOiAnMTBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtcmVuZGVyLXNlY3Rpb25cIiAqbmdJZj1cImxvYWRlciB8fCB0YWJTaGlmdExvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwJScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDogJzN2aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc2MCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICcydmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGUgb2YgWzEsMSwxLDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gICA8bmd4LXNrZWxldG9uLWxvYWRlciBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjUlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICcydmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDogJzI1dmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbic6JzJweCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNwcm9UYWJDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktZGl2IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lci0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzM3NzA3NmMxNzQzMTU0ODA3NjgzaW1hZ2UlMjAlMjg2JTI5LnBuZ1wiIGFsdD1cImVtcHR5LWltZ1wiIGNsYXNzPVwiZW1wdHktaW1nIFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQ29taW5nIFNvb25cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy1zdWItdGV4dC0xIHRleHQtY2VudGVyXCI+V29vZiEgU29tZXRoaW5nIHBhd3NvbWUgaXMgY29taW5nITwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0LTIgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSGV5IGhvb21hbiEgSSBqdXN0IHNuaWZmZWQgb3V0IHNvbWV0aGluZyBzdXBlciBleGNpdGluZy4uLiBhbmQgaXTigJlzIGFsbW9zdCBoZXJlISBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTY3JlZW4+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1kaXYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMzc3MDc2YzE3NDMxNTQ4MDc2ODNpbWFnZSUyMCUyODYlMjkucG5nXCIgYWx0PVwiZW1wdHktaW1nXCIgY2xhc3M9XCJlbXB0eS1pbWcgXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICBPb3BzISBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy1zdWItdGV4dC0xIHRleHQtY2VudGVyXCI+SSBzbmlmZmVkIGV2ZXJ5d2hlcmUsIGJ1dCBJIGNvdWxkbid0IGZpbmQgd2hhdCB5b3UncmUgbG9va2luZyBmb3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy1zdWItdGV4dC0yIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1heWJlIHRyeSBhIGRpZmZlcmVudCBzZWFyY2g/IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPiAtLT5cclxuXHJcbjxzZWN0aW9uIGNsYXNzPVwibWFpbi1jb250YWluZXIgZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXIgcmVsYXRpdmUgcHgtMyBweS0yIGZhZGUtaW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlIGZzLTE2IGZ3LWJvbGRcIj5BZGQgYSBzZWN0aW9uPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1zdWJ0aXRsZSBmcy0xMiB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICBDaG9vc2UgYSBzZWN0aW9uIOKAlCB5b3UgY2FuIHJlb3JkZXIgb3IgcmVtb3ZlIGl0IGFueSB0aW1lLlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlLWJ0biBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlhbG9nLmNsb3NlKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicGFyZW50LWNvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuXHJcbiAgICAgICAgPCEtLSBUYWJzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3AtdGFicy1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZhZGUtaW5cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIHRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3AtdGFiXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiID0gZWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlLXRvcC10YWJdPVwiZWxlLnZhbHVlID09IHNlbGVjdGVkVGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlbGUudmlld1ZhbHVlfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTZWFyY2ggLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXItY29udGFpbmVyIGZhZGUtaW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXIgZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMzE0NjYxYzE3NDE4NDQyMzQ0NDJWZWN0b3IlMjAlMjgxJTI5LnBuZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9J1NlYXJjaCBzZWN0aW9uLi4uJyBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFNlY3Rpb25zKClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ0JBU0lDJzsgZWxzZSBwcm9UYWJDb250ZW50XCI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2VhcmNoOyBlbHNlIGVtcHR5U2NyZWVuXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBRdWljayBBZGQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stYWRkLWNvbnRhaW5lciBmYWRlLWluIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cIiFsb2FkZXIgJiYgIXNlYXJjaFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stYWRkLWxhYmVsXCI+UXVpY2sgYWRkOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWljay1hZGQtY2hpcHMgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGdldE9iamVjdEtleXMoc2VjdGlvbnMpOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSA8IDZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stY2hpcCBzdGFnZ2VyLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTZWN0aW9uKGNhdGVnb3J5KTsgdG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS1xdWljay1jaGlwXT1cInNlbGVjdGVkU2VjdGlvbk5hbWUgPT09IGNhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1lbW9qaVwiPnt7Z2V0Q2F0ZWdvcnlFbW9qaShjYXRlZ29yeSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRGaXJzdFNlY3Rpb25OYW1lKGNhdGVnb3J5KX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIENPTlRFTlQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1sYXlvdXQgZmFkZS1pbiBkLWZsZXhcIiAqbmdJZj1cIiFsb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIExFRlQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtc2lkZWJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaGVhZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1pY29uIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPuKcqDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTE0XCI+QUkgUmVjb21tZW5kZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGdldE9iamVjdEtleXMoc2VjdGlvbnMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaGVhZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhdGVnb3J5RW1vamkoY2F0ZWdvcnkpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIGZzLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjYXRlZ29yeX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjYXRlZ29yeS1hcnJvd1wiICpuZ0lmPVwiZXhwYW5kZWRDYXRlZ29yaWVzW2NhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX2xlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2F0ZWdvcnktYXJyb3dcIiAqbmdJZj1cIiFleHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfbW9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1pdGVtcyBkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cImV4cGFuZGVkQ2F0ZWdvcmllc1tjYXRlZ29yeV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjIG9mIHNlY3Rpb25zW2NhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDb21wb25lbnQ/LmNvbXBvbmVudElkID09PSBzZWMuY29tcG9uZW50SWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDb21wb25lbnQoc2VjLCBjYXRlZ29yeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlYy5zZWN0aW9uTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUklHSFQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRlbnRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWdyb3VwLWxhYmVsXCI+TW9zdCBpbXBhY3RmdWwgc2VjdGlvbnM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy1saXN0IGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBzZWxlY3RlZFNlY3Rpb247IGxldCBpID0gaW5kZXhcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGSUxURVJFRCBWSUVXIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2VsZWN0ZWRDb21wb25lbnQgfHwgc2VsZWN0ZWRDb21wb25lbnQ/LmNvbXBvbmVudElkID09PSBlbGUuY29tcG9uZW50SWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQgc3RhZ2dlci1pdGVtXCIgW3N0eWxlLmFuaW1hdGlvbi1kZWxheV09XCJpICogNDAgKyAnbXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWN0aW9uLWNhcmQtc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb21wb25lbnQ/LmNvbXBvbmVudElkID09PSBlbGUuY29tcG9uZW50SWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvbXBvbmVudEFuZEhpZ2hsaWdodChlbGUpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1iYWRnZVwiICpuZ0lmPVwiZWxlLnNlY3Rpb25UeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB7e2VsZS5zZWN0aW9uVHlwZSB8IHVwcGVyY2FzZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZT8uaW1hZ2U7IGVsc2Ugbm9JbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZWxlPy5pbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm8taW1hZ2UtcGxhY2Vob2xkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+aW1hZ2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1uYW1lXCI+e3tlbGUuc2VjdGlvbk5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtZGVzY1wiICpuZ0lmPVwiZWxlLmRlc2NcIj57e2VsZS5kZXNjfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1sYXlvdXQgZC1mbGV4XCIgKm5nSWY9XCJsb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2YgWzEsMSwxLDEsMSwxLDEsMV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgd2lkdGg6ICc5MCUnLCBoZWlnaHQ6ICczNnB4JywgJ2JvcmRlci1yYWRpdXMnOiAnOHB4JywgJ21hcmdpbi1ib3R0b20nOiAnNnB4JyB9XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzIG9mIFsxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnNDAlJywgaGVpZ2h0OiAnMjBweCcsICdib3JkZXItcmFkaXVzJzogJzRweCcsICdtYXJnaW4tYm90dG9tJzogJzhweCcgfVwiPjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxODBweCcsICdib3JkZXItcmFkaXVzJzogJzhweCcsICdtYXJnaW4tYm90dG9tJzogJzhweCcgfVwiPjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyB3aWR0aDogJzYwJScsIGhlaWdodDogJzE2cHgnLCAnYm9yZGVyLXJhZGl1cyc6ICc0cHgnIH1cIj48L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEVNUFRZIFNFQVJDSCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2NyZWVuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGUgZmFkZS1pbiBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4taWNvbnMtcG5nLmZsYXRpY29uLmNvbS81MTIvNzQ4Ni83NDg2ODAzLnBuZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXRpdGxlXCI+Tm8gc2VjdGlvbnMgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdWJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRyeSBzZWFyY2hpbmcgc29tZXRoaW5nIGVsc2Ugb3IgZXhwbG9yZSBjYXRlZ29yaWVzXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBQUk8gVEFCIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJvVGFiQ29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlIGZhZGUtaW4gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20vNTEyLzQwNzYvNDA3NjU0OS5wbmdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS10aXRsZVwiPkNvbWluZyBTb29uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICBTb21ldGhpbmcgYXdlc29tZSBpcyBvbiB0aGUgd2F5IPCfmoBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRm9vdGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXIgZmFkZS1pbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1oaW50IGZzLTEyIHRleHQtc2Vjb25kYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxyXG4gICAgICAgICAgICBZb3UgY2FuIHJlYXJyYW5nZSBvciByZW1vdmUgdGhpcyBzZWN0aW9uIGFueSB0aW1lLlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWFjdGlvbnMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNhbmNlbCBmcy0xNFwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPkNhbmNlbDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWFkZCBmcy0xNFwiIFtjbGFzcy5kaXNhYmxlZF09XCIhc2VsZWN0ZWRDb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkQ29tcG9uZW50ICYmIGFkZE5ld1NlY3Rpb24oc2VsZWN0ZWRDb21wb25lbnQuY29tcG9uZW50SWQsIHNlbGVjdGVkQ29tcG9uZW50LnNlY3Rpb25UeXBlLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICArIEFkZCBzZWN0aW9uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+Il19