@posiwise/admin-module 0.0.153 → 0.0.155
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +234 -20
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +2 -1
- package/esm2022/lib/shared/interface/domain-config.interface.mjs +1 -1
- package/fesm2022/posiwise-admin-module.mjs +249 -35
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +32 -2
- package/lib/shared/interface/domain-config.interface.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Component, Injector, QueryList, ViewChildren } from '@angular/core';
|
|
2
|
+
import { Component, Injector, QueryList, ViewChild, ViewChildren } from '@angular/core';
|
|
3
3
|
import { FormBuilder } from '@angular/forms';
|
|
4
4
|
import { AdminService, AppAdmin } from '@posiwise/admin-module-utils';
|
|
5
5
|
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
@@ -8,31 +8,34 @@ import { CustomUploaderComponent } from '@posiwise/shared-components';
|
|
|
8
8
|
import { ValidateForm } from '@posiwise/utils';
|
|
9
9
|
import groupBy from 'lodash/groupBy';
|
|
10
10
|
import { forkJoin } from 'rxjs';
|
|
11
|
+
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
11
12
|
import { ROUTERS } from '../../../../shared/routers/routers';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "@posiwise/admin-module-utils";
|
|
14
15
|
import * as i2 from "@posiwise/common-services";
|
|
15
|
-
import * as i3 from "@
|
|
16
|
-
import * as i4 from "
|
|
17
|
-
import * as i5 from "primeng/
|
|
18
|
-
import * as i6 from "primeng/
|
|
19
|
-
import * as i7 from "primeng/
|
|
20
|
-
import * as i8 from "primeng/
|
|
21
|
-
import * as i9 from "
|
|
22
|
-
import * as i10 from "
|
|
23
|
-
import * as i11 from "
|
|
24
|
-
import * as i12 from "
|
|
25
|
-
import * as i13 from "
|
|
26
|
-
import * as i14 from "@
|
|
16
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
17
|
+
import * as i4 from "@angular/forms";
|
|
18
|
+
import * as i5 from "primeng/api";
|
|
19
|
+
import * as i6 from "primeng/tooltip";
|
|
20
|
+
import * as i7 from "primeng/accordion";
|
|
21
|
+
import * as i8 from "primeng/autocomplete";
|
|
22
|
+
import * as i9 from "primeng/dropdown";
|
|
23
|
+
import * as i10 from "@angular/common";
|
|
24
|
+
import * as i11 from "ngx-ui-switch";
|
|
25
|
+
import * as i12 from "@posiwise/shared-components";
|
|
26
|
+
import * as i13 from "primeng/progressspinner";
|
|
27
|
+
import * as i14 from "@posiwise/directives";
|
|
27
28
|
import * as i15 from "@jsverse/transloco";
|
|
28
29
|
export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
29
|
-
constructor(injector, adminService, productService, fb) {
|
|
30
|
+
constructor(injector, adminService, productService, modalService, fb) {
|
|
30
31
|
super(injector);
|
|
31
32
|
this.adminService = adminService;
|
|
32
33
|
this.productService = productService;
|
|
34
|
+
this.modalService = modalService;
|
|
33
35
|
this.fb = fb;
|
|
34
36
|
this.submitted = false;
|
|
35
37
|
this.buttonBusy = false;
|
|
38
|
+
this.selectedPartnerIndex = null;
|
|
36
39
|
this.routers = ROUTERS;
|
|
37
40
|
this.masterSubscriptionProductList = [];
|
|
38
41
|
this.masterSubscriptionsList = [];
|
|
@@ -70,10 +73,103 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
70
73
|
const items = this.form.get('book_demo')?.get('items');
|
|
71
74
|
items.push(this.fb.group({ title: [''], url: [''] }));
|
|
72
75
|
}
|
|
76
|
+
get integrations() {
|
|
77
|
+
return this.form.get('integrations');
|
|
78
|
+
}
|
|
79
|
+
get integrationsItems() {
|
|
80
|
+
return this.integrations.get('items');
|
|
81
|
+
}
|
|
82
|
+
addIntegrationItem() {
|
|
83
|
+
this.integrationsItems.push(this.fb.group({
|
|
84
|
+
title: [''],
|
|
85
|
+
description: [''],
|
|
86
|
+
blog_url: [''],
|
|
87
|
+
image_url: [''],
|
|
88
|
+
video_url: ['']
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
removeIntegrationItem(index) {
|
|
92
|
+
this.integrationsItems.removeAt(index);
|
|
93
|
+
}
|
|
94
|
+
getQuestionOptions(questionIndex) {
|
|
95
|
+
return this.contactUsQuestions.at(questionIndex).get('options');
|
|
96
|
+
}
|
|
97
|
+
addContactUsOption(questionIndex) {
|
|
98
|
+
this.getQuestionOptions(questionIndex).push(this.fb.group({
|
|
99
|
+
option: ['']
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
removeContactUsOption(questionIndex, optionIndex) {
|
|
103
|
+
this.getQuestionOptions(questionIndex).removeAt(optionIndex);
|
|
104
|
+
}
|
|
73
105
|
removeBookDemoLink(index) {
|
|
74
106
|
const items = this.form.get('book_demo')?.get('items');
|
|
75
107
|
items.removeAt(index);
|
|
76
108
|
}
|
|
109
|
+
get ctas() {
|
|
110
|
+
return this.form.get('ctas');
|
|
111
|
+
}
|
|
112
|
+
get ctasItems() {
|
|
113
|
+
return this.ctas.get('items');
|
|
114
|
+
}
|
|
115
|
+
get contactUs() {
|
|
116
|
+
return this.form.get('contact_us');
|
|
117
|
+
}
|
|
118
|
+
get contactUsQuestions() {
|
|
119
|
+
return this.contactUs.get('questions');
|
|
120
|
+
}
|
|
121
|
+
addContactUsQuestion() {
|
|
122
|
+
this.contactUsQuestions.push(this.fb.group({
|
|
123
|
+
question: [''],
|
|
124
|
+
options: this.fb.array([
|
|
125
|
+
this.fb.group({
|
|
126
|
+
option: ['']
|
|
127
|
+
})
|
|
128
|
+
])
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
removeContactUsQuestion(index) {
|
|
132
|
+
this.contactUsQuestions.removeAt(index);
|
|
133
|
+
}
|
|
134
|
+
addCtasItem() {
|
|
135
|
+
this.ctasItems.push(this.fb.group({
|
|
136
|
+
title: [''],
|
|
137
|
+
description: [''],
|
|
138
|
+
button_text: [''],
|
|
139
|
+
image_url: [''],
|
|
140
|
+
cta_url: ['']
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
removeCtasItem(index) {
|
|
144
|
+
this.ctasItems.removeAt(index);
|
|
145
|
+
}
|
|
146
|
+
get testimonials() {
|
|
147
|
+
return this.form.get('testimonials');
|
|
148
|
+
}
|
|
149
|
+
get testimonialsItems() {
|
|
150
|
+
return this.form.get('testimonials.items');
|
|
151
|
+
}
|
|
152
|
+
openPartnerImageCropper(index) {
|
|
153
|
+
this.selectedPartnerIndex = index;
|
|
154
|
+
this.modalService.open(this.partnerCropper, {
|
|
155
|
+
centered: true,
|
|
156
|
+
windowClass: 'modal-holder'
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
addPartnerItem() {
|
|
160
|
+
const items = this.form.get('partners')?.get('items');
|
|
161
|
+
items.push(this.fb.group({
|
|
162
|
+
name: [''],
|
|
163
|
+
description: [''],
|
|
164
|
+
blog_url: [''],
|
|
165
|
+
image_url: [''],
|
|
166
|
+
video_url: ['']
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
removePartnerItem(index) {
|
|
170
|
+
const items = this.form.get('partners')?.get('items');
|
|
171
|
+
items.removeAt(index);
|
|
172
|
+
}
|
|
77
173
|
get uspsItems() {
|
|
78
174
|
return this.form.get('usps').get('items');
|
|
79
175
|
}
|
|
@@ -83,6 +179,36 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
83
179
|
removeUspItem(index) {
|
|
84
180
|
this.uspsItems.removeAt(index);
|
|
85
181
|
}
|
|
182
|
+
get videos() {
|
|
183
|
+
return this.form.get('videos');
|
|
184
|
+
}
|
|
185
|
+
get videosItems() {
|
|
186
|
+
return this.videos.get('items');
|
|
187
|
+
}
|
|
188
|
+
addVideoItem() {
|
|
189
|
+
this.videosItems.push(this.fb.group({
|
|
190
|
+
title: [''],
|
|
191
|
+
description: [''],
|
|
192
|
+
blog_url: [''],
|
|
193
|
+
image_url: [''],
|
|
194
|
+
video_url: ['']
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
removeVideoItem(index) {
|
|
198
|
+
this.videosItems.removeAt(index);
|
|
199
|
+
}
|
|
200
|
+
addTestimonialItem() {
|
|
201
|
+
this.testimonialsItems.push(this.fb.group({
|
|
202
|
+
testimonial: [''],
|
|
203
|
+
name: [''],
|
|
204
|
+
blog_url: [''],
|
|
205
|
+
image_url: [''],
|
|
206
|
+
video_url: ['']
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
removeTestimonialItem(index) {
|
|
210
|
+
this.testimonialsItems.removeAt(index);
|
|
211
|
+
}
|
|
86
212
|
get headerSubHeadings() {
|
|
87
213
|
return this.form.get('header').get('sub_headings');
|
|
88
214
|
}
|
|
@@ -178,6 +304,40 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
178
304
|
description: [sh.description || '']
|
|
179
305
|
}));
|
|
180
306
|
});
|
|
307
|
+
const testimonialsGroup = this.form.get('testimonials');
|
|
308
|
+
const testimonialItems = testimonialsGroup.get('items');
|
|
309
|
+
testimonialsGroup.patchValue({
|
|
310
|
+
title: res.config?.testimonials?.title || '',
|
|
311
|
+
description: res.config?.testimonials?.description || ''
|
|
312
|
+
});
|
|
313
|
+
testimonialItems.clear();
|
|
314
|
+
(res.config?.testimonials?.items || []).forEach(item => {
|
|
315
|
+
testimonialItems.push(this.fb.group({
|
|
316
|
+
testimonial: [item?.testimonial || ''],
|
|
317
|
+
name: [item?.name || ''],
|
|
318
|
+
blog_url: [item?.blog_url || ''],
|
|
319
|
+
image_url: [item?.image_url || ''],
|
|
320
|
+
video_url: [item?.video_url || '']
|
|
321
|
+
}));
|
|
322
|
+
});
|
|
323
|
+
const ctasGroup = this.form.get('ctas');
|
|
324
|
+
const ctasItems = ctasGroup.get('items');
|
|
325
|
+
ctasGroup.patchValue({
|
|
326
|
+
title: res.config?.ctas?.title || '',
|
|
327
|
+
description: res.config?.ctas?.description || '',
|
|
328
|
+
image_url: res.config?.ctas?.image_url || ''
|
|
329
|
+
});
|
|
330
|
+
ctasItems.clear();
|
|
331
|
+
(res.config?.ctas?.items || []).forEach(item => {
|
|
332
|
+
ctasItems.push(this.fb.group({
|
|
333
|
+
title: [item?.title || ''],
|
|
334
|
+
description: [item?.description || ''],
|
|
335
|
+
button_text: [item?.button_text || ''],
|
|
336
|
+
image_url: [item?.image_url || ''],
|
|
337
|
+
cta_url: [item?.cta_url || ''],
|
|
338
|
+
video_url: [item?.video_url || '']
|
|
339
|
+
}));
|
|
340
|
+
});
|
|
181
341
|
const partnersGroup = this.form.get('partners');
|
|
182
342
|
const partnersItems = partnersGroup.get('items');
|
|
183
343
|
partnersGroup.patchValue({
|
|
@@ -186,7 +346,11 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
186
346
|
partnersItems.clear();
|
|
187
347
|
(this.data?.partners?.items || []).forEach(item => {
|
|
188
348
|
partnersItems.push(this.fb.group({
|
|
189
|
-
image_url: [item?.image_url || '']
|
|
349
|
+
image_url: [item?.image_url || ''],
|
|
350
|
+
name: [item?.name || ''],
|
|
351
|
+
description: [item?.description || ''],
|
|
352
|
+
blog_url: [item?.blog_url || ''],
|
|
353
|
+
video_url: [item?.video_url || '']
|
|
190
354
|
}));
|
|
191
355
|
});
|
|
192
356
|
itemsArray.clear();
|
|
@@ -196,6 +360,53 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
196
360
|
url: [link.url || '']
|
|
197
361
|
}));
|
|
198
362
|
});
|
|
363
|
+
const contactUsGroup = this.form.get('contact_us');
|
|
364
|
+
const questionsArray = contactUsGroup.get('questions');
|
|
365
|
+
contactUsGroup.patchValue({
|
|
366
|
+
description: res.config?.contact_us?.description || ''
|
|
367
|
+
});
|
|
368
|
+
questionsArray.clear();
|
|
369
|
+
questionsArray.clear();
|
|
370
|
+
(res.config?.contact_us?.questions || []).forEach(q => {
|
|
371
|
+
questionsArray.push(this.fb.group({
|
|
372
|
+
question: [q?.question || ''],
|
|
373
|
+
options: this.fb.array((q?.options || []).map(o => this.fb.group({
|
|
374
|
+
option: [o?.option || '']
|
|
375
|
+
})))
|
|
376
|
+
}));
|
|
377
|
+
});
|
|
378
|
+
const videosGroup = this.form.get('videos');
|
|
379
|
+
const videosItems = videosGroup.get('items');
|
|
380
|
+
videosGroup.patchValue({
|
|
381
|
+
title: res.config?.videos?.title || '',
|
|
382
|
+
description: res.config?.videos?.description || ''
|
|
383
|
+
});
|
|
384
|
+
videosItems.clear();
|
|
385
|
+
(res.config?.videos?.items || []).forEach(item => {
|
|
386
|
+
videosItems.push(this.fb.group({
|
|
387
|
+
title: [item?.title || ''],
|
|
388
|
+
description: [item?.description || ''],
|
|
389
|
+
blog_url: [item?.blog_url || ''],
|
|
390
|
+
image_url: [item?.image_url || ''],
|
|
391
|
+
video_url: [item?.video_url || '']
|
|
392
|
+
}));
|
|
393
|
+
});
|
|
394
|
+
const integrationsGroup = this.form.get('integrations');
|
|
395
|
+
const integrationsItems = integrationsGroup.get('items');
|
|
396
|
+
integrationsGroup.patchValue({
|
|
397
|
+
title: res.config?.integrations?.title || '',
|
|
398
|
+
description: res.config?.integrations?.description || ''
|
|
399
|
+
});
|
|
400
|
+
integrationsItems.clear();
|
|
401
|
+
(res.config?.integrations?.items || []).forEach(item => {
|
|
402
|
+
integrationsItems.push(this.fb.group({
|
|
403
|
+
title: [item?.title || ''],
|
|
404
|
+
description: [item?.description || ''],
|
|
405
|
+
blog_url: [item?.blog_url || ''],
|
|
406
|
+
image_url: [item?.image_url || ''],
|
|
407
|
+
video_url: [item?.video_url || '']
|
|
408
|
+
}));
|
|
409
|
+
});
|
|
199
410
|
this.shardUrl = res?.config?.shard_url;
|
|
200
411
|
this.form.patchValue(this.data);
|
|
201
412
|
this.form.patchValue({
|
|
@@ -319,8 +530,8 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
319
530
|
this.buttonBusy = false;
|
|
320
531
|
});
|
|
321
532
|
}
|
|
322
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DomainConfigBuildComponent, deps: [{ token: i0.Injector }, { token: i1.AdminService }, { token: i2.ProductService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
323
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DomainConfigBuildComponent, selector: "pw-domain-config-build", viewQueries: [{ propertyName: "uploader", predicate: CustomUploaderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<h3>Public Pages Configuration</h3>\n<div class=\"mb-4\">\n <p> The following parameters and settings will be applied to all public pages of this domain. </p>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<ng-container *ngIf=\"!isLoading && data?.host_name\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscription' | transloco\"\n name=\"master_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MasterSubscription' | transloco\">\n <p-dropdown\n [options]=\"masterSubscriptionsList\"\n formControlName=\"master_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n placeholder=\"Select Master Subscription\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscriptionProduct' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.MasterSubscriptionProduct' | transloco\n \"\n name=\"master_subscription_product_id\">\n <p-dropdown\n [options]=\"masterSubscriptionProductList\"\n formControlName=\"master_subscription_product_id\"\n [ngClass]=\"{'is-invalid': submitted && f['master_subscription_product_id']?.errors}\"\n [placeholder]=\"'Select Master Product'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.BlogFeatureKey' | transloco\"\n name=\"blog_feature_key\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.BlogFeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"blog_feature_key\"\n [ngClass]=\"{ 'is-invalid': submitted && f['blog_feature_key'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MainTos' | transloco\"\n name=\"main_tos_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MainTos' | transloco\">\n <p-dropdown\n [options]=\"subscriptionTosList\"\n formControlName=\"main_tos_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['main_tos_id']?.errors }\"\n [placeholder]=\"'Select Main TOS'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <!-- crm subscription fields -->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSubscription' | transloco\"\n name=\"crm_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSubscription' | transloco\">\n <p-dropdown\n [options]=\"crmSubscriptionsList\"\n formControlName=\"crm_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_subscription_id']?.errors }\"\n [placeholder]=\"'Select CRM Subscription'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmProduct' | transloco\"\n name=\"crm_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmProduct' | transloco\">\n <p-dropdown\n [options]=\"crmProductList\"\n formControlName=\"crm_product_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_product_id']?.errors }\"\n [placeholder]=\"'Select CRM Product'\"\n optionValue=\"id\"\n >\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSource' | transloco\"\n name=\"crm_source_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSource' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- crm subscription fields end-->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.Active' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.Active' | transloco\" name=\"active\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"active\" name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.IsProductDomain' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.IsProductDomain' | transloco\"\n name=\"is_product_domain\">\n <ui-switch size=\"small\"\n uncheckedLabel=\"false\"\n checkedLabel=\"true\"\n formControlName=\"is_product_domain\"\n name=\"is_product_domain\"\n [ngClass]=\"{ 'is-invalid': submitted && f['is_product_domain'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CanRegisterOnMainPage' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CanRegisterOnMainPage' | transloco\"\n name=\"can_register_through_main_page\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"can_register_through_main_page\"\n name=\"can_register_through_main_page\" [ngClass]=\"{\n 'is-invalid': submitted && f['can_register_through_main_page'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.SocialLoginEnabled' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.SocialLoginEnable' | transloco\" name=\"social_login_enabled\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"social_login_enabled\"\n name=\"social_login_enabled\" [ngClass]=\"{ 'is-invalid': submitted && f['social_login_enabled'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.NotifyLogins' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.NotifyLogins' | transloco\" name=\"notify_logins\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"notify_logins\"\n name=\"notify_logins\" [ngClass]=\"{ 'is-invalid': submitted && f['notify_logins'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"my-5\" *rbacAllow=\"'Pages.SuperAdmin'\">\n <h3>Pre-Built Landing Pages for User Onboarding</h3>\n <!-- cs start -->\n <p-accordion class=\"mt-5\">\n <p-accordionTab [header]=\"'Instructions'\">\n <div class=\"mb-3\">\n <p>We\u2019ve built and maintain a collection of high-converting landing pages designed to help you quickly launch polished\n UIs for onboarding users.</p>\n <p><strong>Newsletter Subscription Pages:</strong><br> After configuring your domain, you can access pages like\n <strong>/join/cs1, /join/cs2, /join/cs3, etc.</strong>, specifically designed for newsletter sign-ups. <br>\n Subscribers from these pages will be listed in the <strong>SmartCRM module</strong>.</p>\n <p><strong>Trial Product Sign-Up Pages:</strong><br> For users interested in trial products, utilize pages such as\n <strong>/join/trial1, /join/trial2, /join/trial3, etc.</strong>.<br> Users registering through these pages will\n appear in the <strong>Admin > Users section</strong>.</p>\n <p>Once you\u2019ve selected the landing page you want to use <strong>(e.g., /join/trial3)</strong>, make sure to update\n the <strong>Internal Path</strong> in the <strong>Core tab</strong> accordingly\u2014i.e., set it to\n <strong>/join/trial3</strong>.</p>\n <p>If you need assistance integrating these pages into your workflow or have further questions, feel free to reach\n out.</p>\n </div>\n </p-accordionTab>\n <p-accordionTab [header]=\"'Dynamic Values'\">\n <div class=\"row mt-4 mb-4\" formGroupName=\"usps\">\n <div class=\"col-12\">\n <pw-input-container label=\"USPs Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container label=\"USPs Description\" name=\"description\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of f['usps'].get('items')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-sm-10\">\n <pw-input-container label=\"Item Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeUspItem(i)\"\n (keydown.enter)=\"removeUspItem(i)\"\n (keydown.space)=\"removeUspItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addUspItem()\">\n + Add USP Item\n </button>\n </div>\n </div>\n\n\n <!-- header SECTION -->\n<!-- header SECTION -->\n<div class=\"row mt-4\" formGroupName=\"header\">\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Headline\" name=\"headline\">\n <input type=\"text\" class=\"form-control\" formControlName=\"headline\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Description\" name=\"description\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Video URL\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Background Image URL\" name=\"bg_image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"bg_image_url\" />\n </pw-input-container>\n </div>\n\n <div formArrayName=\"sub_headings\" class=\"col-12\">\n <h2 class=\"fw-bold mb02\">Header Sub Headings</h2>\n <div\n *ngFor=\"let sub of f['header'].get('sub_headings')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-md-10\" *ngIf=\"f['header'].get('sub_headings')['controls'].length\">\n <pw-input-container label=\"Header Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeHeaderSubHeading(i)\"\n (keydown.enter)=\"removeHeaderSubHeading(i)\"\n (keydown.space)=\"removeHeaderSubHeading(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addHeaderSubHeading()\">\n + Add Sub Heading\n </button>\n </div>\n</div>\n<!-- header SECTION END -->\n\n\n\n<div class=\"row mt-4 mb-4\" formGroupName=\"partners\">\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Partner Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12\">\n <pw-input-container label=\"Partners Description\" name=\"description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\">\n </textarea>\n </pw-input-container>\n </div>\n\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of f['partners'].get('items')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row align-items-end mb-3\"\n >\n <div class=\"col-md-6\" *ngIf=\"partnersItems.controls.length\">\n <pw-custom-uploader\n [aspectRatio]=\"'custom'\"\n [title]=\"'Partner Image'\"\n [controlName]=\"'image_url'\"\n [previewData]=\"item.get('image_url')?.value\"\n />\n </div>\n <div class=\"col-md-1\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removePartnerImage(i)\"\n (keydown.enter)=\"removePartnerImage(i)\"\n (keydown.space)=\"removePartnerImage(i)\"\n ngbTooltip=\"Remove\"\n tabindex=\"0\"\n ></i>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addPartnerImage()\">\n + Add Image\n </button>\n\n </div>\n</div>\n\n\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceTagline' | transloco\" name=\"resources_tagline\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceTagline' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"resources_tagline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_tagline'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceDescription' | transloco\" name=\"resources_description\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceDescription' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"resources_description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"resource_image\">{{ 'Admin.DomainConfig.ResourceImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.ResourceImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'resources_image'\" [previewData]=\"data['resources_image']\">\n </pw-custom-uploader>\n </div>\n </div>\n <!-- Book a Demo Links -->\n<div class=\"row mt-4\">\n <div class=\"col-12\">\n <h5>{{ 'Admin.DomainConfig.BookDemoLinks' | transloco }}</h5>\n <div formGroupName=\"book_demo\">\n <pw-input-container label=\"Title\">\n <input type=\"text\" formControlName=\"title\" class=\"form-control\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\">\n <input type=\"text\" formControlName=\"description\" class=\"form-control\" />\n </pw-input-container>\n\n <div formArrayName=\"items\">\n <div *ngFor=\"let link of f['book_demo'].get('items')['controls']; let i = index\" [formGroupName]=\"i\" class=\"row mb-3\">\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link Title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link URL\">\n <input type=\"text\" class=\"form-control\" formControlName=\"url\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addBookDemoLink()\">+ Add Book Demo Link</button>\n </div>\n </div>\n </div>\n</div>\n\n </p-accordionTab>\n <p-accordionTab [header]=\"'Coming soon pages - Subscribe to newsletter'\">\n <div class=\"mb-3\">\n <p>ComingSoon Pages will enable users to subscribe to Newsletters and are accessible at the internal paths /join/cs1,\n /join/cs2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveCs' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/cs1'\" target=\"_blank\">{{ shardUrl }}/join/cs1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsProduct' | transloco\" name=\"cs_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"cs_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('cs_product_id').touched &&\n form.get('cs_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCrmSourceId' | transloco\" name=\"cs_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCrmSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfSourceId' | transloco\" name=\"cs_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsPdfSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsVideoUrl' | transloco\" name=\"cs_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsBookDemoUrl' | transloco\" name=\"cs_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsBookDemoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_book_demo_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_book_demo_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCtaIframe' | transloco\" name=\"cs_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCtaIframe' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_cta_iframe\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_cta_iframe'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsJoinMessage' | transloco\" name=\"cs_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsJoinMessage' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_join_message\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_join_message'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfDownloadText' | transloco\" name=\"cs_pdf_download_text\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.CsPdfDownloadText' | transloco\n \">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"cs_image\">{{ 'Admin.DomainConfig.CsImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'cs_image'\" [previewData]=\"data['cs_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image2\">{{ 'Admin.DomainConfig.CsImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image2'\"\n [controlName]=\"'cs_image2'\" [previewData]=\"data['cs_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_pdf_image\">{{ 'Admin.DomainConfig.CsPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image'\"\n [controlName]=\"'cs_pdf_image'\" [previewData]=\"data['cs_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg\">{{ 'Admin.DomainConfig.CsImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg'\"\n [controlName]=\"'cs_image_bg'\" [previewData]=\"data['cs_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg2\">{{ 'Admin.DomainConfig.CsImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg2'\"\n [controlName]=\"'cs_image_bg2'\" [previewData]=\"data['cs_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- cs image section end -->\n <!-- trial start -->\n <p-accordion>\n <p-accordionTab [header]=\"'Join now pages - Subscribe to product'\">\n <div class=\"mb-3\">\n <p>Trial Pages will enable users to sign up to real products and are accessible at the path /join/trial1,\n /join/trial2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveTrial' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/trial1'\" target=\"_blank\">{{ shardUrl }}/join/trial1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialProduct' | transloco\" name=\"trial_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"trial_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('trial_product_id').touched &&\n form.get('trial_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCrmSourceId' | transloco\" name=\"trial_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCrmSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfSourceId' | transloco\" name=\"trial_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialVideoUrl' | transloco\" name=\"trial_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialBookDemoUrl' | transloco\" name=\"trial_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialBookDemoUrl' | transloco\n \">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_book_demo_url\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_book_demo_url'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCtaIframe' | transloco\" name=\"trial_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCtaIframe' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_cta_iframe\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_cta_iframe'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialJoinMessage' | transloco\" name=\"trial_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialJoinMessage' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_join_message\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_join_message'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfDownloadText' | transloco\"\n name=\"trial_pdf_download_text\" [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfDownloadText' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"trial_image\">{{ 'Admin.DomainConfig.TrialImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Trial Image'\"\n [controlName]=\"'trial_image'\" [previewData]=\"data['trial_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image2\">{{ 'Admin.DomainConfig.TrialImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image2'\" [previewData]=\"data['trial_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_pdf_image\">{{ 'Admin.DomainConfig.TrialPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Pdf Image'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_pdf_image'\" [previewData]=\"data['trial_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg\">{{ 'Admin.DomainConfig.TrialImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg'\" [previewData]=\"data['trial_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg2\">{{ 'Admin.DomainConfig.TrialImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg2'\" [previewData]=\"data['trial_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- trial image section end -->\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">{{ 'Button.Submit' | transloco }}</button>\n </div>\n </form>\n</ng-container>\n<div *ngIf=\"!data?.host_name && !isLoading\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.DomainConfig.EnableConfigTab' | transloco\"> </pw-no-data>\n</div>\n", dependencies: [{ kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i6.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "component", type: i7.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i10.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i11.CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }, { kind: "component", type: i12.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i11.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "component", type: i11.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i13.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i13.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i14.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }] }); }
|
|
533
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DomainConfigBuildComponent, deps: [{ token: i0.Injector }, { token: i1.AdminService }, { token: i2.ProductService }, { token: i3.NgbModal }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
534
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DomainConfigBuildComponent, selector: "pw-domain-config-build", viewQueries: [{ propertyName: "partnerCropper", first: true, predicate: ["partnerCropper"], descendants: true }, { propertyName: "uploader", predicate: CustomUploaderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<h3>Public Pages Configuration</h3>\n<div class=\"mb-4\">\n <p> The following parameters and settings will be applied to all public pages of this domain. </p>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<ng-container *ngIf=\"!isLoading && data?.host_name\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscription' | transloco\"\n name=\"master_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MasterSubscription' | transloco\">\n <p-dropdown\n [options]=\"masterSubscriptionsList\"\n formControlName=\"master_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n placeholder=\"Select Master Subscription\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscriptionProduct' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.MasterSubscriptionProduct' | transloco\n \"\n name=\"master_subscription_product_id\">\n <p-dropdown\n [options]=\"masterSubscriptionProductList\"\n formControlName=\"master_subscription_product_id\"\n [ngClass]=\"{'is-invalid': submitted && f['master_subscription_product_id']?.errors}\"\n [placeholder]=\"'Select Master Product'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.BlogFeatureKey' | transloco\"\n name=\"blog_feature_key\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.BlogFeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"blog_feature_key\"\n [ngClass]=\"{ 'is-invalid': submitted && f['blog_feature_key'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MainTos' | transloco\"\n name=\"main_tos_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MainTos' | transloco\">\n <p-dropdown\n [options]=\"subscriptionTosList\"\n formControlName=\"main_tos_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['main_tos_id']?.errors }\"\n [placeholder]=\"'Select Main TOS'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <!-- crm subscription fields -->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSubscription' | transloco\"\n name=\"crm_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSubscription' | transloco\">\n <p-dropdown\n [options]=\"crmSubscriptionsList\"\n formControlName=\"crm_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_subscription_id']?.errors }\"\n [placeholder]=\"'Select CRM Subscription'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmProduct' | transloco\"\n name=\"crm_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmProduct' | transloco\">\n <p-dropdown\n [options]=\"crmProductList\"\n formControlName=\"crm_product_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_product_id']?.errors }\"\n [placeholder]=\"'Select CRM Product'\"\n optionValue=\"id\"\n >\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSource' | transloco\"\n name=\"crm_source_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSource' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- crm subscription fields end-->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.Active' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.Active' | transloco\" name=\"active\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"active\" name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.IsProductDomain' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.IsProductDomain' | transloco\"\n name=\"is_product_domain\">\n <ui-switch size=\"small\"\n uncheckedLabel=\"false\"\n checkedLabel=\"true\"\n formControlName=\"is_product_domain\"\n name=\"is_product_domain\"\n [ngClass]=\"{ 'is-invalid': submitted && f['is_product_domain'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CanRegisterOnMainPage' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CanRegisterOnMainPage' | transloco\"\n name=\"can_register_through_main_page\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"can_register_through_main_page\"\n name=\"can_register_through_main_page\" [ngClass]=\"{\n 'is-invalid': submitted && f['can_register_through_main_page'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.SocialLoginEnabled' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.SocialLoginEnable' | transloco\" name=\"social_login_enabled\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"social_login_enabled\"\n name=\"social_login_enabled\" [ngClass]=\"{ 'is-invalid': submitted && f['social_login_enabled'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.NotifyLogins' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.NotifyLogins' | transloco\" name=\"notify_logins\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"notify_logins\"\n name=\"notify_logins\" [ngClass]=\"{ 'is-invalid': submitted && f['notify_logins'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"my-5\" *rbacAllow=\"'Pages.SuperAdmin'\">\n <h3>Pre-Built Landing Pages for User Onboarding</h3>\n <!-- cs start -->\n <p-accordion class=\"mt-5\">\n <p-accordionTab [header]=\"'Instructions'\">\n <div class=\"mb-3\">\n <p>We\u2019ve built and maintain a collection of high-converting landing pages designed to help you quickly launch polished\n UIs for onboarding users.</p>\n <p><strong>Newsletter Subscription Pages:</strong><br> After configuring your domain, you can access pages like\n <strong>/join/cs1, /join/cs2, /join/cs3, etc.</strong>, specifically designed for newsletter sign-ups. <br>\n Subscribers from these pages will be listed in the <strong>SmartCRM module</strong>.</p>\n <p><strong>Trial Product Sign-Up Pages:</strong><br> For users interested in trial products, utilize pages such as\n <strong>/join/trial1, /join/trial2, /join/trial3, etc.</strong>.<br> Users registering through these pages will\n appear in the <strong>Admin > Users section</strong>.</p>\n <p>Once you\u2019ve selected the landing page you want to use <strong>(e.g., /join/trial3)</strong>, make sure to update\n the <strong>Internal Path</strong> in the <strong>Core tab</strong> accordingly\u2014i.e., set it to\n <strong>/join/trial3</strong>.</p>\n <p>If you need assistance integrating these pages into your workflow or have further questions, feel free to reach\n out.</p>\n </div>\n </p-accordionTab>\n <p-accordionTab [header]=\"'Dynamic Values'\">\n <div class=\"row mt-4 mb-4\" formGroupName=\"usps\">\n <h4 class=\"mb-4\">Usps</h4>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"USPs Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"USPs Video Url\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container label=\"USPs Description\" name=\"description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n >\n </textarea>\n </pw-input-container>\n </div>\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of f['usps'].get('items')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-sm-10\">\n <pw-input-container label=\"Item Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n >\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeUspItem(i)\"\n (keydown.enter)=\"removeUspItem(i)\"\n (keydown.space)=\"removeUspItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addUspItem()\">\n + Add USP Item\n </button>\n </div>\n </div>\n\n\n <!-- header SECTION -->\n<!-- header SECTION -->\n<div class=\"row mt-4\" formGroupName=\"header\">\n <h4 class=\"mb-4\">Header</h4>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Headline\" name=\"headline\">\n <input type=\"text\" class=\"form-control\" formControlName=\"headline\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Video URL\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Background Image URL\" name=\"bg_image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"bg_image_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container label=\"Header Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description']?.errors }\">\n </textarea>\n </pw-input-container>\n </div>\n\n <div formArrayName=\"sub_headings\" class=\"col-12\">\n <div\n *ngFor=\"let sub of f['header'].get('sub_headings')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-md-10\" *ngIf=\"f['header'].get('sub_headings')['controls'].length\">\n <pw-input-container label=\"Sub Header Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description']?.errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeHeaderSubHeading(i)\"\n (keydown.enter)=\"removeHeaderSubHeading(i)\"\n (keydown.space)=\"removeHeaderSubHeading(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addHeaderSubHeading()\">\n + Add Sub Heading\n </button>\n </div>\n</div>\n<!-- header SECTION END -->\n\n\n\n<div class=\"row mt-4 mb-4\" formGroupName=\"partners\">\n <h4 class=\"mb-4\">Partners</h4>\n <!-- Title -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Partner Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n\n <!-- Description -->\n <div class=\"col-12\">\n <pw-input-container label=\"Partners Description\" name=\"description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n\n <!-- Partner Items -->\n <div formArrayName=\"items\" class=\"col-12\">\n <div *ngFor=\"let item of partnersItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n <!-- Name -->\n <div class=\"col-md-4\">\n <pw-input-container label=\"Name\" class=\"col-12 col-md-6\" name=\"name\">\n <input class=\"form-control\" formControlName=\"name\"/>\n </pw-input-container>\n\n </div>\n\n <!-- Blog URL -->\n <div class=\"col-md-4\">\n <pw-input-container label=\"Blog Url\" class=\"col-12 col-md-6\" name=\"blog_url\">\n <input class=\"form-control\" formControlName=\"blog_url\"/>\n </pw-input-container>\n </div>\n\n <!-- Video URL -->\n <div class=\"col-md-4\">\n <pw-input-container label=\"Video Url\" class=\"col-12 col-md-6\" name=\"video_url\">\n <input class=\"form-control\" formControlName=\"video_url\"/>\n </pw-input-container>\n </div>\n <div class=\"col-md-4\">\n <pw-input-container label=\"Image Url\" class=\"col-12 col-md-6\" name=\"ctas_title\">\n <input class=\"form-control\" formControlName=\"image_url\"/>\n </pw-input-container>\n </div>\n\n <!-- Remove Button -->\n <div class=\"col-md-6 text-start mt-2 align-self-center\">\n <i\n ngbTooltip=\"Remove\" (click)=\"removePartnerItem(i)\" class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <!-- Add New Partner -->\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addPartnerItem()\">+ Add Partner</button>\n </div>\n </div>\n</div>\n\n\n<div class=\"row mt-3 mb-4\" formGroupName=\"testimonials\">\n <h4 class=\"mb-4\">Testimonials Section</h4>\n\n <pw-input-container label=\"Title\" class=\"col-12 col-md-6\" name=\"testimonials_title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-12\" name=\"testimonials_description\">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <!-- Items List -->\n <div formArrayName=\"items\" class=\"col-12 mt-3\">\n <div *ngFor=\"let item of testimonialsItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n\n <pw-input-container label=\"Name\" class=\"col-md-4\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" />\n </pw-input-container>\n\n <pw-input-container label=\"Blog URL\" class=\"col-md-4\">\n <input type=\"text\" class=\"form-control\" formControlName=\"blog_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Image URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Video URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Testimonial\" class=\"col-md-10\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"testimonial\"></textarea>\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n ngbTooltip=\"Remove\" (click)=\"removeTestimonialItem(i)\"\n (keydown.enter)=\"removeTestimonialItem(i)\"\n (keydown.space)=\"removeTestimonialItem(i)\" class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addTestimonialItem()\">+ Add Testimonial</button>\n </div>\n </div>\n</div>\n<div class=\"row mt-3 mb-4\" formGroupName=\"contact_us\">\n <h4 class=\"mb-3\">Contact Us Section</h4>\n\n <pw-input-container label=\"Description\" class=\"col-12\" name=\"contact_us_description\">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <!-- Questions -->\n <div formArrayName=\"questions\" class=\"col-12 mt-3\">\n <div *ngFor=\"let questionGroup of contactUsQuestions.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n <pw-input-container label=\"Question\" class=\"col-md-10\">\n <input type=\"text\" class=\"form-control\" formControlName=\"question\" />\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeContactUsQuestion(i)\"\n (keydown.enter)=\"removeContactUsQuestion(i)\"\n (keydown.space)=\"removeContactUsQuestion(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <!-- Options inside each question -->\n <div class=\"col-12\" formArrayName=\"options\">\n <div\n class=\"row align-items-center mb-2 border p-3\"\n *ngFor=\"let option of getQuestionOptions(i).controls; let j = index\"\n [formGroupName]=\"j\"\n >\n <pw-input-container label=\"Option\" class=\"col-md-10\">\n <input type=\"text\" class=\"form-control\" formControlName=\"option\" />\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeContactUsOption(i, j)\"\n (keydown.enter)=\"removeContactUsOption(i, j)\"\n (keydown.space)=\"removeContactUsOption(i, j)\"\n ngbTooltip=\"Remove Option\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <div class=\"text-start\">\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"addContactUsOption(i)\">\n + Add Option\n </button>\n </div>\n </div>\n <!-- End options -->\n </div>\n\n <div class=\"text-start mt-3\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addContactUsQuestion()\">+ Add Question</button>\n </div>\n </div>\n</div>\n\n\n\n<div class=\"row mt-3 mb-4\" formGroupName=\"videos\">\n <h4 class=\"mb-3\">Videos Section</h4>\n\n <pw-input-container label=\"Title\" class=\"col-12 col-md-6\" name=\"videos_title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-12\" name=\"videos_description\">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <!-- Video Items -->\n <div formArrayName=\"items\" class=\"col-12 mt-3\">\n <div *ngFor=\"let item of videosItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n\n <pw-input-container label=\"Title\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Blog URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"blog_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Image URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Video URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-md-10\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeVideoItem(i)\"\n (keydown.enter)=\"removeVideoItem(i)\"\n (keydown.space)=\"removeVideoItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addVideoItem()\">+ Add Video</button>\n </div>\n </div>\n</div>\n\n\n\n<div class=\"row mt-4 mb-4\" formGroupName=\"ctas\">\n <h4 class=\"mb-4\">CTAs Section</h4>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Description\" name=\"description\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12\">\n <pw-input-container label=\"Image URL\" name=\"image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n </div>\n\n <!-- CTA Items -->\n <div formArrayName=\"items\" class=\"col-12 mt-3\">\n <div *ngFor=\"let item of ctasItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3 ng-untouched ng-pristine ng-valid ng-star-inserted\">\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Image URL\" name=\"image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Cta URL\" name=\"cta_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cta_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Video URL\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"CTA Title\">\n <input class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"CTA Description\">\n <input class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Button Text\">\n <input class=\"form-control\" formControlName=\"button_text\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-1 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeCtasItem(i)\"\n (keydown.enter)=\"removeCtasItem(i)\"\n (keydown.space)=\"removeCtasItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addCtasItem()\">+ Add CTA Item</button>\n </div>\n </div>\n</div>\n\n<div class=\"row mt-3 mb-4\" formGroupName=\"integrations\">\n <h4 class=\"mb-3\">Integrations Section</h4>\n\n <pw-input-container label=\"Title\" class=\"col-12\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-12\">\n <textarea class=\"form-control\" formControlName=\"description\" rows=\"3\"></textarea>\n </pw-input-container>\n\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of integrationsItems.controls; let i = index\"\n [formGroupName]=\"i\"\n class=\"row border p-3 mb-3 rounded bg-light\"\n >\n <pw-input-container label=\"Title\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n\n <pw-input-container label=\"Blog URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"blog_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Image URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Video URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n\n <div class=\"col-md-6 d-flex align-items-end justify-content-end\">\n <button\n type=\"button\"\n class=\"btn btn-danger\"\n (click)=\"removeIntegrationItem(i)\"\n >\n Remove\n </button>\n </div>\n </div>\n\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addIntegrationItem()\">\n + Add Integration\n </button>\n </div>\n </div>\n</div>\n\n\n\n\n\n\n\n\n <div class=\"row row mt-4 mb-4\">\n <h4 class=\"mb-3\">Resources Section</h4>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceTagline' | transloco\" name=\"resources_tagline\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceTagline' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"resources_tagline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_tagline'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceDescription' | transloco\" name=\"resources_description\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceDescription' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"resources_description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"resource_image\">{{ 'Admin.DomainConfig.ResourceImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.ResourceImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'resources_image'\" [previewData]=\"data['resources_image']\">\n </pw-custom-uploader>\n </div>\n </div>\n <!-- Book a Demo Links -->\n<div class=\"row mt-4\">\n <div class=\"col-12\">\n <h5>{{ 'Admin.DomainConfig.BookDemoLinks' | transloco }}</h5>\n <div formGroupName=\"book_demo\">\n <pw-input-container label=\"Title\">\n <input type=\"text\" formControlName=\"title\" class=\"form-control\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\">\n <input type=\"text\" formControlName=\"description\" class=\"form-control\" />\n </pw-input-container>\n\n <div formArrayName=\"items\">\n <div *ngFor=\"let link of f['book_demo'].get('items')['controls']; let i = index\" [formGroupName]=\"i\" class=\"row mb-3\">\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link Title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link URL\">\n <input type=\"text\" class=\"form-control\" formControlName=\"url\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addBookDemoLink()\">+ Add Book Demo Link</button>\n </div>\n </div>\n </div>\n</div>\n\n </p-accordionTab>\n <p-accordionTab [header]=\"'Coming soon pages - Subscribe to newsletter'\">\n <div class=\"mb-3\">\n <p>ComingSoon Pages will enable users to subscribe to Newsletters and are accessible at the internal paths /join/cs1,\n /join/cs2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveCs' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/cs1'\" target=\"_blank\">{{ shardUrl }}/join/cs1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsProduct' | transloco\" name=\"cs_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"cs_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('cs_product_id').touched &&\n form.get('cs_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCrmSourceId' | transloco\" name=\"cs_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCrmSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfSourceId' | transloco\" name=\"cs_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsPdfSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsVideoUrl' | transloco\" name=\"cs_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsBookDemoUrl' | transloco\" name=\"cs_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsBookDemoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_book_demo_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_book_demo_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCtaIframe' | transloco\" name=\"cs_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCtaIframe' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_cta_iframe\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_cta_iframe'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsJoinMessage' | transloco\" name=\"cs_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsJoinMessage' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_join_message\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_join_message'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfDownloadText' | transloco\" name=\"cs_pdf_download_text\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.CsPdfDownloadText' | transloco\n \">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"cs_image\">{{ 'Admin.DomainConfig.CsImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'cs_image'\" [previewData]=\"data['cs_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image2\">{{ 'Admin.DomainConfig.CsImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image2'\"\n [controlName]=\"'cs_image2'\" [previewData]=\"data['cs_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_pdf_image\">{{ 'Admin.DomainConfig.CsPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image'\"\n [controlName]=\"'cs_pdf_image'\" [previewData]=\"data['cs_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg\">{{ 'Admin.DomainConfig.CsImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg'\"\n [controlName]=\"'cs_image_bg'\" [previewData]=\"data['cs_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg2\">{{ 'Admin.DomainConfig.CsImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg2'\"\n [controlName]=\"'cs_image_bg2'\" [previewData]=\"data['cs_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- cs image section end -->\n <!-- trial start -->\n <p-accordion>\n <p-accordionTab [header]=\"'Join now pages - Subscribe to product'\">\n <div class=\"mb-3\">\n <p>Trial Pages will enable users to sign up to real products and are accessible at the path /join/trial1,\n /join/trial2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveTrial' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/trial1'\" target=\"_blank\">{{ shardUrl }}/join/trial1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialProduct' | transloco\" name=\"trial_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"trial_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('trial_product_id').touched &&\n form.get('trial_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCrmSourceId' | transloco\" name=\"trial_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCrmSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfSourceId' | transloco\" name=\"trial_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialVideoUrl' | transloco\" name=\"trial_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialBookDemoUrl' | transloco\" name=\"trial_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialBookDemoUrl' | transloco\n \">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_book_demo_url\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_book_demo_url'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCtaIframe' | transloco\" name=\"trial_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCtaIframe' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_cta_iframe\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_cta_iframe'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialJoinMessage' | transloco\" name=\"trial_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialJoinMessage' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_join_message\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_join_message'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfDownloadText' | transloco\"\n name=\"trial_pdf_download_text\" [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfDownloadText' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"trial_image\">{{ 'Admin.DomainConfig.TrialImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Trial Image'\"\n [controlName]=\"'trial_image'\" [previewData]=\"data['trial_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image2\">{{ 'Admin.DomainConfig.TrialImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image2'\" [previewData]=\"data['trial_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_pdf_image\">{{ 'Admin.DomainConfig.TrialPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Pdf Image'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_pdf_image'\" [previewData]=\"data['trial_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg\">{{ 'Admin.DomainConfig.TrialImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg'\" [previewData]=\"data['trial_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg2\">{{ 'Admin.DomainConfig.TrialImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg2'\" [previewData]=\"data['trial_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- trial image section end -->\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">{{ 'Button.Submit' | transloco }}</button>\n </div>\n </form>\n</ng-container>\n<div *ngIf=\"!data?.host_name && !isLoading\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.DomainConfig.EnableConfigTab' | transloco\"> </pw-no-data>\n</div>\n\n\n<ng-template #partnerCropper let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Partner Image</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload JPG, PNG, or GIF files. Avoid images with celebrities, nudity, or artwork.</small>\n <pw-image-cropper\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onPartnerImageSelected($event)\"\n (closeEvent)=\"onClosePartnerModal()\"\n ></pw-image-cropper>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i7.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "component", type: i8.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i9.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i11.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i12.CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }, { kind: "component", type: i12.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i13.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i12.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "component", type: i12.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i14.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }] }); }
|
|
324
535
|
}
|
|
325
536
|
__decorate([
|
|
326
537
|
ValidateForm('form'),
|
|
@@ -330,9 +541,12 @@ __decorate([
|
|
|
330
541
|
], DomainConfigBuildComponent.prototype, "onSave", null);
|
|
331
542
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DomainConfigBuildComponent, decorators: [{
|
|
332
543
|
type: Component,
|
|
333
|
-
args: [{ selector: 'pw-domain-config-build', template: "<h3>Public Pages Configuration</h3>\n<div class=\"mb-4\">\n <p> The following parameters and settings will be applied to all public pages of this domain. </p>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<ng-container *ngIf=\"!isLoading && data?.host_name\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscription' | transloco\"\n name=\"master_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MasterSubscription' | transloco\">\n <p-dropdown\n [options]=\"masterSubscriptionsList\"\n formControlName=\"master_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n placeholder=\"Select Master Subscription\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscriptionProduct' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.MasterSubscriptionProduct' | transloco\n \"\n name=\"master_subscription_product_id\">\n <p-dropdown\n [options]=\"masterSubscriptionProductList\"\n formControlName=\"master_subscription_product_id\"\n [ngClass]=\"{'is-invalid': submitted && f['master_subscription_product_id']?.errors}\"\n [placeholder]=\"'Select Master Product'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.BlogFeatureKey' | transloco\"\n name=\"blog_feature_key\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.BlogFeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"blog_feature_key\"\n [ngClass]=\"{ 'is-invalid': submitted && f['blog_feature_key'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MainTos' | transloco\"\n name=\"main_tos_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MainTos' | transloco\">\n <p-dropdown\n [options]=\"subscriptionTosList\"\n formControlName=\"main_tos_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['main_tos_id']?.errors }\"\n [placeholder]=\"'Select Main TOS'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <!-- crm subscription fields -->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSubscription' | transloco\"\n name=\"crm_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSubscription' | transloco\">\n <p-dropdown\n [options]=\"crmSubscriptionsList\"\n formControlName=\"crm_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_subscription_id']?.errors }\"\n [placeholder]=\"'Select CRM Subscription'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmProduct' | transloco\"\n name=\"crm_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmProduct' | transloco\">\n <p-dropdown\n [options]=\"crmProductList\"\n formControlName=\"crm_product_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_product_id']?.errors }\"\n [placeholder]=\"'Select CRM Product'\"\n optionValue=\"id\"\n >\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSource' | transloco\"\n name=\"crm_source_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSource' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- crm subscription fields end-->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.Active' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.Active' | transloco\" name=\"active\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"active\" name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.IsProductDomain' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.IsProductDomain' | transloco\"\n name=\"is_product_domain\">\n <ui-switch size=\"small\"\n uncheckedLabel=\"false\"\n checkedLabel=\"true\"\n formControlName=\"is_product_domain\"\n name=\"is_product_domain\"\n [ngClass]=\"{ 'is-invalid': submitted && f['is_product_domain'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CanRegisterOnMainPage' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CanRegisterOnMainPage' | transloco\"\n name=\"can_register_through_main_page\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"can_register_through_main_page\"\n name=\"can_register_through_main_page\" [ngClass]=\"{\n 'is-invalid': submitted && f['can_register_through_main_page'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.SocialLoginEnabled' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.SocialLoginEnable' | transloco\" name=\"social_login_enabled\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"social_login_enabled\"\n name=\"social_login_enabled\" [ngClass]=\"{ 'is-invalid': submitted && f['social_login_enabled'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.NotifyLogins' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.NotifyLogins' | transloco\" name=\"notify_logins\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"notify_logins\"\n name=\"notify_logins\" [ngClass]=\"{ 'is-invalid': submitted && f['notify_logins'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"my-5\" *rbacAllow=\"'Pages.SuperAdmin'\">\n <h3>Pre-Built Landing Pages for User Onboarding</h3>\n <!-- cs start -->\n <p-accordion class=\"mt-5\">\n <p-accordionTab [header]=\"'Instructions'\">\n <div class=\"mb-3\">\n <p>We\u2019ve built and maintain a collection of high-converting landing pages designed to help you quickly launch polished\n UIs for onboarding users.</p>\n <p><strong>Newsletter Subscription Pages:</strong><br> After configuring your domain, you can access pages like\n <strong>/join/cs1, /join/cs2, /join/cs3, etc.</strong>, specifically designed for newsletter sign-ups. <br>\n Subscribers from these pages will be listed in the <strong>SmartCRM module</strong>.</p>\n <p><strong>Trial Product Sign-Up Pages:</strong><br> For users interested in trial products, utilize pages such as\n <strong>/join/trial1, /join/trial2, /join/trial3, etc.</strong>.<br> Users registering through these pages will\n appear in the <strong>Admin > Users section</strong>.</p>\n <p>Once you\u2019ve selected the landing page you want to use <strong>(e.g., /join/trial3)</strong>, make sure to update\n the <strong>Internal Path</strong> in the <strong>Core tab</strong> accordingly\u2014i.e., set it to\n <strong>/join/trial3</strong>.</p>\n <p>If you need assistance integrating these pages into your workflow or have further questions, feel free to reach\n out.</p>\n </div>\n </p-accordionTab>\n <p-accordionTab [header]=\"'Dynamic Values'\">\n <div class=\"row mt-4 mb-4\" formGroupName=\"usps\">\n <div class=\"col-12\">\n <pw-input-container label=\"USPs Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container label=\"USPs Description\" name=\"description\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of f['usps'].get('items')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-sm-10\">\n <pw-input-container label=\"Item Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeUspItem(i)\"\n (keydown.enter)=\"removeUspItem(i)\"\n (keydown.space)=\"removeUspItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addUspItem()\">\n + Add USP Item\n </button>\n </div>\n </div>\n\n\n <!-- header SECTION -->\n<!-- header SECTION -->\n<div class=\"row mt-4\" formGroupName=\"header\">\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Headline\" name=\"headline\">\n <input type=\"text\" class=\"form-control\" formControlName=\"headline\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Description\" name=\"description\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Video URL\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Background Image URL\" name=\"bg_image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"bg_image_url\" />\n </pw-input-container>\n </div>\n\n <div formArrayName=\"sub_headings\" class=\"col-12\">\n <h2 class=\"fw-bold mb02\">Header Sub Headings</h2>\n <div\n *ngFor=\"let sub of f['header'].get('sub_headings')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-md-10\" *ngIf=\"f['header'].get('sub_headings')['controls'].length\">\n <pw-input-container label=\"Header Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeHeaderSubHeading(i)\"\n (keydown.enter)=\"removeHeaderSubHeading(i)\"\n (keydown.space)=\"removeHeaderSubHeading(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addHeaderSubHeading()\">\n + Add Sub Heading\n </button>\n </div>\n</div>\n<!-- header SECTION END -->\n\n\n\n<div class=\"row mt-4 mb-4\" formGroupName=\"partners\">\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Partner Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12\">\n <pw-input-container label=\"Partners Description\" name=\"description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\">\n </textarea>\n </pw-input-container>\n </div>\n\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of f['partners'].get('items')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row align-items-end mb-3\"\n >\n <div class=\"col-md-6\" *ngIf=\"partnersItems.controls.length\">\n <pw-custom-uploader\n [aspectRatio]=\"'custom'\"\n [title]=\"'Partner Image'\"\n [controlName]=\"'image_url'\"\n [previewData]=\"item.get('image_url')?.value\"\n />\n </div>\n <div class=\"col-md-1\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removePartnerImage(i)\"\n (keydown.enter)=\"removePartnerImage(i)\"\n (keydown.space)=\"removePartnerImage(i)\"\n ngbTooltip=\"Remove\"\n tabindex=\"0\"\n ></i>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addPartnerImage()\">\n + Add Image\n </button>\n\n </div>\n</div>\n\n\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceTagline' | transloco\" name=\"resources_tagline\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceTagline' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"resources_tagline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_tagline'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceDescription' | transloco\" name=\"resources_description\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceDescription' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"resources_description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"resource_image\">{{ 'Admin.DomainConfig.ResourceImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.ResourceImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'resources_image'\" [previewData]=\"data['resources_image']\">\n </pw-custom-uploader>\n </div>\n </div>\n <!-- Book a Demo Links -->\n<div class=\"row mt-4\">\n <div class=\"col-12\">\n <h5>{{ 'Admin.DomainConfig.BookDemoLinks' | transloco }}</h5>\n <div formGroupName=\"book_demo\">\n <pw-input-container label=\"Title\">\n <input type=\"text\" formControlName=\"title\" class=\"form-control\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\">\n <input type=\"text\" formControlName=\"description\" class=\"form-control\" />\n </pw-input-container>\n\n <div formArrayName=\"items\">\n <div *ngFor=\"let link of f['book_demo'].get('items')['controls']; let i = index\" [formGroupName]=\"i\" class=\"row mb-3\">\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link Title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link URL\">\n <input type=\"text\" class=\"form-control\" formControlName=\"url\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2\" (click)=\"addBookDemoLink()\">+ Add Book Demo Link</button>\n </div>\n </div>\n </div>\n</div>\n\n </p-accordionTab>\n <p-accordionTab [header]=\"'Coming soon pages - Subscribe to newsletter'\">\n <div class=\"mb-3\">\n <p>ComingSoon Pages will enable users to subscribe to Newsletters and are accessible at the internal paths /join/cs1,\n /join/cs2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveCs' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/cs1'\" target=\"_blank\">{{ shardUrl }}/join/cs1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsProduct' | transloco\" name=\"cs_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"cs_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('cs_product_id').touched &&\n form.get('cs_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCrmSourceId' | transloco\" name=\"cs_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCrmSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfSourceId' | transloco\" name=\"cs_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsPdfSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsVideoUrl' | transloco\" name=\"cs_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsBookDemoUrl' | transloco\" name=\"cs_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsBookDemoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_book_demo_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_book_demo_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCtaIframe' | transloco\" name=\"cs_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCtaIframe' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_cta_iframe\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_cta_iframe'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsJoinMessage' | transloco\" name=\"cs_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsJoinMessage' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_join_message\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_join_message'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfDownloadText' | transloco\" name=\"cs_pdf_download_text\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.CsPdfDownloadText' | transloco\n \">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"cs_image\">{{ 'Admin.DomainConfig.CsImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'cs_image'\" [previewData]=\"data['cs_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image2\">{{ 'Admin.DomainConfig.CsImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image2'\"\n [controlName]=\"'cs_image2'\" [previewData]=\"data['cs_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_pdf_image\">{{ 'Admin.DomainConfig.CsPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image'\"\n [controlName]=\"'cs_pdf_image'\" [previewData]=\"data['cs_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg\">{{ 'Admin.DomainConfig.CsImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg'\"\n [controlName]=\"'cs_image_bg'\" [previewData]=\"data['cs_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg2\">{{ 'Admin.DomainConfig.CsImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg2'\"\n [controlName]=\"'cs_image_bg2'\" [previewData]=\"data['cs_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- cs image section end -->\n <!-- trial start -->\n <p-accordion>\n <p-accordionTab [header]=\"'Join now pages - Subscribe to product'\">\n <div class=\"mb-3\">\n <p>Trial Pages will enable users to sign up to real products and are accessible at the path /join/trial1,\n /join/trial2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveTrial' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/trial1'\" target=\"_blank\">{{ shardUrl }}/join/trial1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialProduct' | transloco\" name=\"trial_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"trial_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('trial_product_id').touched &&\n form.get('trial_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCrmSourceId' | transloco\" name=\"trial_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCrmSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfSourceId' | transloco\" name=\"trial_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialVideoUrl' | transloco\" name=\"trial_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialBookDemoUrl' | transloco\" name=\"trial_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialBookDemoUrl' | transloco\n \">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_book_demo_url\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_book_demo_url'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCtaIframe' | transloco\" name=\"trial_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCtaIframe' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_cta_iframe\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_cta_iframe'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialJoinMessage' | transloco\" name=\"trial_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialJoinMessage' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_join_message\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_join_message'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfDownloadText' | transloco\"\n name=\"trial_pdf_download_text\" [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfDownloadText' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"trial_image\">{{ 'Admin.DomainConfig.TrialImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Trial Image'\"\n [controlName]=\"'trial_image'\" [previewData]=\"data['trial_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image2\">{{ 'Admin.DomainConfig.TrialImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image2'\" [previewData]=\"data['trial_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_pdf_image\">{{ 'Admin.DomainConfig.TrialPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Pdf Image'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_pdf_image'\" [previewData]=\"data['trial_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg\">{{ 'Admin.DomainConfig.TrialImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg'\" [previewData]=\"data['trial_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg2\">{{ 'Admin.DomainConfig.TrialImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg2'\" [previewData]=\"data['trial_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- trial image section end -->\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">{{ 'Button.Submit' | transloco }}</button>\n </div>\n </form>\n</ng-container>\n<div *ngIf=\"!data?.host_name && !isLoading\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.DomainConfig.EnableConfigTab' | transloco\"> </pw-no-data>\n</div>\n" }]
|
|
334
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AdminService }, { type: i2.ProductService }, { type: i3.FormBuilder }], propDecorators: { uploader: [{
|
|
544
|
+
args: [{ selector: 'pw-domain-config-build', template: "<h3>Public Pages Configuration</h3>\n<div class=\"mb-4\">\n <p> The following parameters and settings will be applied to all public pages of this domain. </p>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<ng-container *ngIf=\"!isLoading && data?.host_name\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscription' | transloco\"\n name=\"master_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MasterSubscription' | transloco\">\n <p-dropdown\n [options]=\"masterSubscriptionsList\"\n formControlName=\"master_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n placeholder=\"Select Master Subscription\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MasterSubscriptionProduct' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.MasterSubscriptionProduct' | transloco\n \"\n name=\"master_subscription_product_id\">\n <p-dropdown\n [options]=\"masterSubscriptionProductList\"\n formControlName=\"master_subscription_product_id\"\n [ngClass]=\"{'is-invalid': submitted && f['master_subscription_product_id']?.errors}\"\n [placeholder]=\"'Select Master Product'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.BlogFeatureKey' | transloco\"\n name=\"blog_feature_key\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.BlogFeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"blog_feature_key\"\n [ngClass]=\"{ 'is-invalid': submitted && f['blog_feature_key'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.MainTos' | transloco\"\n name=\"main_tos_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.MainTos' | transloco\">\n <p-dropdown\n [options]=\"subscriptionTosList\"\n formControlName=\"main_tos_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['main_tos_id']?.errors }\"\n [placeholder]=\"'Select Main TOS'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <span [innerHTML]=\"item.title\"></span>\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <!-- crm subscription fields -->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSubscription' | transloco\"\n name=\"crm_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSubscription' | transloco\">\n <p-dropdown\n [options]=\"crmSubscriptionsList\"\n formControlName=\"crm_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_subscription_id']?.errors }\"\n [placeholder]=\"'Select CRM Subscription'\"\n optionValue=\"id\">\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.organisation ? item?.organisation + ' - ' + item.contact_name : item?.contact_name}}\n </ng-template>\n </p-dropdown>\n\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmProduct' | transloco\"\n name=\"crm_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmProduct' | transloco\">\n <p-dropdown\n [options]=\"crmProductList\"\n formControlName=\"crm_product_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_product_id']?.errors }\"\n [placeholder]=\"'Select CRM Product'\"\n optionValue=\"id\"\n >\n <ng-template pTemplate=\"selectedItem\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CrmSource' | transloco\"\n name=\"crm_source_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CrmSource' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- crm subscription fields end-->\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.Active' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.Active' | transloco\" name=\"active\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"active\" name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.IsProductDomain' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.IsProductDomain' | transloco\"\n name=\"is_product_domain\">\n <ui-switch size=\"small\"\n uncheckedLabel=\"false\"\n checkedLabel=\"true\"\n formControlName=\"is_product_domain\"\n name=\"is_product_domain\"\n [ngClass]=\"{ 'is-invalid': submitted && f['is_product_domain'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CanRegisterOnMainPage' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CanRegisterOnMainPage' | transloco\"\n name=\"can_register_through_main_page\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"can_register_through_main_page\"\n name=\"can_register_through_main_page\" [ngClass]=\"{\n 'is-invalid': submitted && f['can_register_through_main_page'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.SocialLoginEnabled' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.SocialLoginEnable' | transloco\" name=\"social_login_enabled\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"social_login_enabled\"\n name=\"social_login_enabled\" [ngClass]=\"{ 'is-invalid': submitted && f['social_login_enabled'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.NotifyLogins' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.NotifyLogins' | transloco\" name=\"notify_logins\">\n <ui-switch size=\"small\" uncheckedLabel=\"false\" checkedLabel=\"true\" formControlName=\"notify_logins\"\n name=\"notify_logins\" [ngClass]=\"{ 'is-invalid': submitted && f['notify_logins'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"my-5\" *rbacAllow=\"'Pages.SuperAdmin'\">\n <h3>Pre-Built Landing Pages for User Onboarding</h3>\n <!-- cs start -->\n <p-accordion class=\"mt-5\">\n <p-accordionTab [header]=\"'Instructions'\">\n <div class=\"mb-3\">\n <p>We\u2019ve built and maintain a collection of high-converting landing pages designed to help you quickly launch polished\n UIs for onboarding users.</p>\n <p><strong>Newsletter Subscription Pages:</strong><br> After configuring your domain, you can access pages like\n <strong>/join/cs1, /join/cs2, /join/cs3, etc.</strong>, specifically designed for newsletter sign-ups. <br>\n Subscribers from these pages will be listed in the <strong>SmartCRM module</strong>.</p>\n <p><strong>Trial Product Sign-Up Pages:</strong><br> For users interested in trial products, utilize pages such as\n <strong>/join/trial1, /join/trial2, /join/trial3, etc.</strong>.<br> Users registering through these pages will\n appear in the <strong>Admin > Users section</strong>.</p>\n <p>Once you\u2019ve selected the landing page you want to use <strong>(e.g., /join/trial3)</strong>, make sure to update\n the <strong>Internal Path</strong> in the <strong>Core tab</strong> accordingly\u2014i.e., set it to\n <strong>/join/trial3</strong>.</p>\n <p>If you need assistance integrating these pages into your workflow or have further questions, feel free to reach\n out.</p>\n </div>\n </p-accordionTab>\n <p-accordionTab [header]=\"'Dynamic Values'\">\n <div class=\"row mt-4 mb-4\" formGroupName=\"usps\">\n <h4 class=\"mb-4\">Usps</h4>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"USPs Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"USPs Video Url\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container label=\"USPs Description\" name=\"description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n >\n </textarea>\n </pw-input-container>\n </div>\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of f['usps'].get('items')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-sm-10\">\n <pw-input-container label=\"Item Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n >\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeUspItem(i)\"\n (keydown.enter)=\"removeUspItem(i)\"\n (keydown.space)=\"removeUspItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addUspItem()\">\n + Add USP Item\n </button>\n </div>\n </div>\n\n\n <!-- header SECTION -->\n<!-- header SECTION -->\n<div class=\"row mt-4\" formGroupName=\"header\">\n <h4 class=\"mb-4\">Header</h4>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Headline\" name=\"headline\">\n <input type=\"text\" class=\"form-control\" formControlName=\"headline\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Video URL\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Header Background Image URL\" name=\"bg_image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"bg_image_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container label=\"Header Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description']?.errors }\">\n </textarea>\n </pw-input-container>\n </div>\n\n <div formArrayName=\"sub_headings\" class=\"col-12\">\n <div\n *ngFor=\"let sub of f['header'].get('sub_headings')['controls']; let i = index\"\n [formGroupName]=\"i\"\n class=\"row mb-3\"\n >\n <div class=\"col-md-10\" *ngIf=\"f['header'].get('sub_headings')['controls'].length\">\n <pw-input-container label=\"Sub Header Description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description']?.errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeHeaderSubHeading(i)\"\n (keydown.enter)=\"removeHeaderSubHeading(i)\"\n (keydown.space)=\"removeHeaderSubHeading(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addHeaderSubHeading()\">\n + Add Sub Heading\n </button>\n </div>\n</div>\n<!-- header SECTION END -->\n\n\n\n<div class=\"row mt-4 mb-4\" formGroupName=\"partners\">\n <h4 class=\"mb-4\">Partners</h4>\n <!-- Title -->\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Partner Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n\n <!-- Description -->\n <div class=\"col-12\">\n <pw-input-container label=\"Partners Description\" name=\"description\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n\n <!-- Partner Items -->\n <div formArrayName=\"items\" class=\"col-12\">\n <div *ngFor=\"let item of partnersItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n <!-- Name -->\n <div class=\"col-md-4\">\n <pw-input-container label=\"Name\" class=\"col-12 col-md-6\" name=\"name\">\n <input class=\"form-control\" formControlName=\"name\"/>\n </pw-input-container>\n\n </div>\n\n <!-- Blog URL -->\n <div class=\"col-md-4\">\n <pw-input-container label=\"Blog Url\" class=\"col-12 col-md-6\" name=\"blog_url\">\n <input class=\"form-control\" formControlName=\"blog_url\"/>\n </pw-input-container>\n </div>\n\n <!-- Video URL -->\n <div class=\"col-md-4\">\n <pw-input-container label=\"Video Url\" class=\"col-12 col-md-6\" name=\"video_url\">\n <input class=\"form-control\" formControlName=\"video_url\"/>\n </pw-input-container>\n </div>\n <div class=\"col-md-4\">\n <pw-input-container label=\"Image Url\" class=\"col-12 col-md-6\" name=\"ctas_title\">\n <input class=\"form-control\" formControlName=\"image_url\"/>\n </pw-input-container>\n </div>\n\n <!-- Remove Button -->\n <div class=\"col-md-6 text-start mt-2 align-self-center\">\n <i\n ngbTooltip=\"Remove\" (click)=\"removePartnerItem(i)\" class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <!-- Add New Partner -->\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addPartnerItem()\">+ Add Partner</button>\n </div>\n </div>\n</div>\n\n\n<div class=\"row mt-3 mb-4\" formGroupName=\"testimonials\">\n <h4 class=\"mb-4\">Testimonials Section</h4>\n\n <pw-input-container label=\"Title\" class=\"col-12 col-md-6\" name=\"testimonials_title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-12\" name=\"testimonials_description\">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <!-- Items List -->\n <div formArrayName=\"items\" class=\"col-12 mt-3\">\n <div *ngFor=\"let item of testimonialsItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n\n <pw-input-container label=\"Name\" class=\"col-md-4\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" />\n </pw-input-container>\n\n <pw-input-container label=\"Blog URL\" class=\"col-md-4\">\n <input type=\"text\" class=\"form-control\" formControlName=\"blog_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Image URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Video URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Testimonial\" class=\"col-md-10\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"testimonial\"></textarea>\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n ngbTooltip=\"Remove\" (click)=\"removeTestimonialItem(i)\"\n (keydown.enter)=\"removeTestimonialItem(i)\"\n (keydown.space)=\"removeTestimonialItem(i)\" class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addTestimonialItem()\">+ Add Testimonial</button>\n </div>\n </div>\n</div>\n<div class=\"row mt-3 mb-4\" formGroupName=\"contact_us\">\n <h4 class=\"mb-3\">Contact Us Section</h4>\n\n <pw-input-container label=\"Description\" class=\"col-12\" name=\"contact_us_description\">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <!-- Questions -->\n <div formArrayName=\"questions\" class=\"col-12 mt-3\">\n <div *ngFor=\"let questionGroup of contactUsQuestions.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n <pw-input-container label=\"Question\" class=\"col-md-10\">\n <input type=\"text\" class=\"form-control\" formControlName=\"question\" />\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeContactUsQuestion(i)\"\n (keydown.enter)=\"removeContactUsQuestion(i)\"\n (keydown.space)=\"removeContactUsQuestion(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <!-- Options inside each question -->\n <div class=\"col-12\" formArrayName=\"options\">\n <div\n class=\"row align-items-center mb-2 border p-3\"\n *ngFor=\"let option of getQuestionOptions(i).controls; let j = index\"\n [formGroupName]=\"j\"\n >\n <pw-input-container label=\"Option\" class=\"col-md-10\">\n <input type=\"text\" class=\"form-control\" formControlName=\"option\" />\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeContactUsOption(i, j)\"\n (keydown.enter)=\"removeContactUsOption(i, j)\"\n (keydown.space)=\"removeContactUsOption(i, j)\"\n ngbTooltip=\"Remove Option\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <div class=\"text-start\">\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"addContactUsOption(i)\">\n + Add Option\n </button>\n </div>\n </div>\n <!-- End options -->\n </div>\n\n <div class=\"text-start mt-3\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addContactUsQuestion()\">+ Add Question</button>\n </div>\n </div>\n</div>\n\n\n\n<div class=\"row mt-3 mb-4\" formGroupName=\"videos\">\n <h4 class=\"mb-3\">Videos Section</h4>\n\n <pw-input-container label=\"Title\" class=\"col-12 col-md-6\" name=\"videos_title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-12\" name=\"videos_description\">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <!-- Video Items -->\n <div formArrayName=\"items\" class=\"col-12 mt-3\">\n <div *ngFor=\"let item of videosItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3\">\n\n <pw-input-container label=\"Title\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Blog URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"blog_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Image URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Video URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-md-10\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <div class=\"col-md-2 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeVideoItem(i)\"\n (keydown.enter)=\"removeVideoItem(i)\"\n (keydown.space)=\"removeVideoItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addVideoItem()\">+ Add Video</button>\n </div>\n </div>\n</div>\n\n\n\n<div class=\"row mt-4 mb-4\" formGroupName=\"ctas\">\n <h4 class=\"mb-4\">CTAs Section</h4>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Title\" name=\"title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Description\" name=\"description\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12\">\n <pw-input-container label=\"Image URL\" name=\"image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n </div>\n\n <!-- CTA Items -->\n <div formArrayName=\"items\" class=\"col-12 mt-3\">\n <div *ngFor=\"let item of ctasItems.controls; let i = index\" [formGroupName]=\"i\" class=\"row border p-3 mb-3 ng-untouched ng-pristine ng-valid ng-star-inserted\">\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Image URL\" name=\"image_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Cta URL\" name=\"cta_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cta_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Video URL\" name=\"video_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"CTA Title\">\n <input class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"CTA Description\">\n <input class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <pw-input-container label=\"Button Text\">\n <input class=\"form-control\" formControlName=\"button_text\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-1 d-flex align-items-center mt-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"removeCtasItem(i)\"\n (keydown.enter)=\"removeCtasItem(i)\"\n (keydown.space)=\"removeCtasItem(i)\"\n ngbTooltip=\"Remove\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addCtasItem()\">+ Add CTA Item</button>\n </div>\n </div>\n</div>\n\n<div class=\"row mt-3 mb-4\" formGroupName=\"integrations\">\n <h4 class=\"mb-3\">Integrations Section</h4>\n\n <pw-input-container label=\"Title\" class=\"col-12\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-12\">\n <textarea class=\"form-control\" formControlName=\"description\" rows=\"3\"></textarea>\n </pw-input-container>\n\n <div formArrayName=\"items\" class=\"col-12\">\n <div\n *ngFor=\"let item of integrationsItems.controls; let i = index\"\n [formGroupName]=\"i\"\n class=\"row border p-3 mb-3 rounded bg-light\"\n >\n <pw-input-container label=\"Title\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"description\" />\n </pw-input-container>\n\n <pw-input-container label=\"Blog URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"blog_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Image URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"image_url\" />\n </pw-input-container>\n\n <pw-input-container label=\"Video URL\" class=\"col-md-6\">\n <input type=\"text\" class=\"form-control\" formControlName=\"video_url\" />\n </pw-input-container>\n\n <div class=\"col-md-6 d-flex align-items-end justify-content-end\">\n <button\n type=\"button\"\n class=\"btn btn-danger\"\n (click)=\"removeIntegrationItem(i)\"\n >\n Remove\n </button>\n </div>\n </div>\n\n <div class=\"text-start mt-2\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addIntegrationItem()\">\n + Add Integration\n </button>\n </div>\n </div>\n</div>\n\n\n\n\n\n\n\n\n <div class=\"row row mt-4 mb-4\">\n <h4 class=\"mb-3\">Resources Section</h4>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceTagline' | transloco\" name=\"resources_tagline\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceTagline' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"resources_tagline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_tagline'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.ResourceDescription' | transloco\" name=\"resources_description\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.ResourceDescription' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"resources_description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['resources_description'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"resource_image\">{{ 'Admin.DomainConfig.ResourceImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.ResourceImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'resources_image'\" [previewData]=\"data['resources_image']\">\n </pw-custom-uploader>\n </div>\n </div>\n <!-- Book a Demo Links -->\n<div class=\"row mt-4\">\n <div class=\"col-12\">\n <h5>{{ 'Admin.DomainConfig.BookDemoLinks' | transloco }}</h5>\n <div formGroupName=\"book_demo\">\n <pw-input-container label=\"Title\">\n <input type=\"text\" formControlName=\"title\" class=\"form-control\" />\n </pw-input-container>\n\n <pw-input-container label=\"Description\">\n <input type=\"text\" formControlName=\"description\" class=\"form-control\" />\n </pw-input-container>\n\n <div formArrayName=\"items\">\n <div *ngFor=\"let link of f['book_demo'].get('items')['controls']; let i = index\" [formGroupName]=\"i\" class=\"row mb-3\">\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link Title\">\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-5\">\n <pw-input-container label=\"Link URL\">\n <input type=\"text\" class=\"form-control\" formControlName=\"url\" />\n </pw-input-container>\n </div>\n <div class=\"col-sm-2 d-flex align-items-center mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n <button type=\"button\" class=\"btn btn-primary mt-2 mb-2\" (click)=\"addBookDemoLink()\">+ Add Book Demo Link</button>\n </div>\n </div>\n </div>\n</div>\n\n </p-accordionTab>\n <p-accordionTab [header]=\"'Coming soon pages - Subscribe to newsletter'\">\n <div class=\"mb-3\">\n <p>ComingSoon Pages will enable users to subscribe to Newsletters and are accessible at the internal paths /join/cs1,\n /join/cs2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveCs' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/cs1'\" target=\"_blank\">{{ shardUrl }}/join/cs1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsProduct' | transloco\" name=\"cs_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"cs_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('cs_product_id').touched &&\n form.get('cs_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCrmSourceId' | transloco\" name=\"cs_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCrmSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfSourceId' | transloco\" name=\"cs_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsPdfSourceId' | transloco\">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"cs_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsVideoUrl' | transloco\" name=\"cs_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsBookDemoUrl' | transloco\" name=\"cs_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsBookDemoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"cs_book_demo_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_book_demo_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsCtaIframe' | transloco\" name=\"cs_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsCtaIframe' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_cta_iframe\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_cta_iframe'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsJoinMessage' | transloco\" name=\"cs_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.CsJoinMessage' | transloco\">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_join_message\"\n [ngClass]=\"{ 'is-invalid': submitted && f['cs_join_message'].errors }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.CsPdfDownloadText' | transloco\" name=\"cs_pdf_download_text\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.CsPdfDownloadText' | transloco\n \">\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"cs_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"cs_image\">{{ 'Admin.DomainConfig.CsImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image'\"\n [controlName]=\"'cs_image'\" [previewData]=\"data['cs_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image2\">{{ 'Admin.DomainConfig.CsImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Image2'\"\n [controlName]=\"'cs_image2'\" [previewData]=\"data['cs_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_pdf_image\">{{ 'Admin.DomainConfig.CsPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image'\"\n [controlName]=\"'cs_pdf_image'\" [previewData]=\"data['cs_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg\">{{ 'Admin.DomainConfig.CsImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg'\"\n [controlName]=\"'cs_image_bg'\" [previewData]=\"data['cs_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"cs_image_bg2\">{{ 'Admin.DomainConfig.CsImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.CsImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Cs Pdf Image Bg2'\"\n [controlName]=\"'cs_image_bg2'\" [previewData]=\"data['cs_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- cs image section end -->\n <!-- trial start -->\n <p-accordion>\n <p-accordionTab [header]=\"'Join now pages - Subscribe to product'\">\n <div class=\"mb-3\">\n <p>Trial Pages will enable users to sign up to real products and are accessible at the path /join/trial1,\n /join/trial2, etc.</p>\n </div>\n <!-- live page link -->\n <div class=\"text-end\" *ngIf=\"shardUrl\">\n <span>See the live page <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.DomainConfig.Tooltip.SeeLiveTrial' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span> : <a [href]=\"shardUrl + '/join/trial1'\" target=\"_blank\">{{ shardUrl }}/join/trial1</a></span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialProduct' | transloco\" [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialProduct' | transloco\" name=\"trial_product_id\">\n <p-autoComplete [suggestions]=\"productsList\" formControlName=\"trial_product_id\" dataKey=\"id\" field=\"name\"\n [dropdown]=\"true\" [delay]=\"1000\" (completeMethod)=\"searchProduct($event)\" styleClass=\"w-100\"\n placeholder=\"Search Product\" [inputStyle]=\"\n form.get('trial_product_id').touched &&\n form.get('trial_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCrmSourceId' | transloco\" name=\"trial_crm_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCrmSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_crm_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfSourceId' | transloco\" name=\"trial_pdf_source_id\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfSourceId' | transloco\n \">\n <p-dropdown\n [options]=\"crmSourcesList\"\n formControlName=\"trial_pdf_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_pdf_source_id']?.errors }\"\n [placeholder]=\"'Select CRM Source'\"\n optionValue=\"id\"\n optionLabel=\"name\"\n >\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\"></div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialVideoUrl' | transloco\" name=\"trial_video_url\"\n [showTooltip]=\"true\" [tooltipText]=\"'Admin.DomainConfig.Tooltip.TrialVideoUrl' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_video_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['trial_video_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialBookDemoUrl' | transloco\" name=\"trial_book_demo_url\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialBookDemoUrl' | transloco\n \">\n <input type=\"text\" class=\"form-control\" formControlName=\"trial_book_demo_url\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_book_demo_url'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialCtaIframe' | transloco\" name=\"trial_cta_iframe\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialCtaIframe' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_cta_iframe\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_cta_iframe'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialJoinMessage' | transloco\" name=\"trial_join_message\"\n [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialJoinMessage' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_join_message\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_join_message'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12\">\n <pw-input-container [label]=\"'Admin.DomainConfig.TrialPdfDownloadText' | transloco\"\n name=\"trial_pdf_download_text\" [showTooltip]=\"true\" [tooltipText]=\"\n 'Admin.DomainConfig.Tooltip.TrialPdfDownloadText' | transloco\n \">\n <textarea rows=\"3\" class=\"form-control\" formControlName=\"trial_pdf_download_text\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_pdf_download_text'].errors\n }\">\n </textarea>\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\" matchHeight=\"card\">\n <div class=\"col-md-4\">\n <label for=\"trial_image\">{{ 'Admin.DomainConfig.TrialImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [aspectRatio]=\"'custom'\" [title]=\"'Trial Image'\"\n [controlName]=\"'trial_image'\" [previewData]=\"data['trial_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image2\">{{ 'Admin.DomainConfig.TrialImage2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImage2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image2'\" [previewData]=\"data['trial_image2']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_pdf_image\">{{ 'Admin.DomainConfig.TrialPdfImage' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialPdfImage' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Pdf Image'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_pdf_image'\" [previewData]=\"data['trial_pdf_image']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg\">{{ 'Admin.DomainConfig.TrialImageBg' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg'\" [previewData]=\"data['trial_image_bg']\">\n </pw-custom-uploader>\n </div>\n <div class=\"col-md-4\">\n <label for=\"trial_image_bg2\">{{ 'Admin.DomainConfig.TrialImageBg2' | transloco }} <span class=\"info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Admin.DomainConfig.Tooltip.TrialImageBg2' | transloco\n }}</span>\n </span>\n </label>\n <pw-custom-uploader (saveEvent)=\"onSaveFile($event)\" [title]=\"'Trial Image Bg2'\" [aspectRatio]=\"'custom'\"\n [controlName]=\"'trial_image_bg2'\" [previewData]=\"data['trial_image_bg2']\">\n </pw-custom-uploader>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <!-- trial image section end -->\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">{{ 'Button.Submit' | transloco }}</button>\n </div>\n </form>\n</ng-container>\n<div *ngIf=\"!data?.host_name && !isLoading\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.DomainConfig.EnableConfigTab' | transloco\"> </pw-no-data>\n</div>\n\n\n<ng-template #partnerCropper let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Partner Image</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload JPG, PNG, or GIF files. Avoid images with celebrities, nudity, or artwork.</small>\n <pw-image-cropper\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onPartnerImageSelected($event)\"\n (closeEvent)=\"onClosePartnerModal()\"\n ></pw-image-cropper>\n </div>\n</ng-template>\n" }]
|
|
545
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AdminService }, { type: i2.ProductService }, { type: i3.NgbModal }, { type: i4.FormBuilder }], propDecorators: { uploader: [{
|
|
335
546
|
type: ViewChildren,
|
|
336
547
|
args: [CustomUploaderComponent]
|
|
548
|
+
}], partnerCropper: [{
|
|
549
|
+
type: ViewChild,
|
|
550
|
+
args: ['partnerCropper']
|
|
337
551
|
}], onSave: [] } });
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1idWlsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZG9tYWluLWNvbmZpZy9kb21haW4tY29uZmlnLWRldGFpbHMvZG9tYWluLWNvbmZpZy1idWlsZC9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9kb21haW4tY29uZmlnL2RvbWFpbi1jb25maWctZGV0YWlscy9kb21haW4tY29uZmlnLWJ1aWxkL2RvbWFpbi1jb25maWctYnVpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBYSxXQUFXLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7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QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztZQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ1gsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7U0FDSixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FsWFEsMEJBQTBCO21HQUExQiwwQkFBMEIsMkZBQ3JCLHVCQUF1Qix1RUNwQnpDLGtvd0NBOHZCQTs7QURqWkk7SUFEQyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O3dEQXlCcEI7NEZBbFhRLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDSSx3QkFBd0I7K0pBSUssUUFBUTtzQkFBOUMsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBeVZyQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UsIEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL3NoYXJlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERvbWFpbkNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvZG9tYWluLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWRvbWFpbi1jb25maWctYnVpbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEb21haW5Db25maWdCdWlsZENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGRyZW4oQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQpIHVwbG9hZGVyOiBRdWVyeUxpc3Q8Q3VzdG9tVXBsb2FkZXJDb21wb25lbnQ+O1xuXG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGlkOiBudW1iZXI7XG4gICAgZHVwbGljYXRlQ29uZmlnSWQ7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGRhdGE6IERvbWFpbkNvbmZpZztcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgbWFzdGVyU3Vic2NyaXB0aW9uUHJvZHVjdExpc3QgPSBbXTtcbiAgICBtYXN0ZXJTdWJzY3JpcHRpb25zTGlzdCA9IFtdO1xuICAgIHN1YnNjcmlwdGlvblRvc0xpc3QgPSBbXTtcbiAgICBjcm1Qcm9kdWN0TGlzdCA9IFtdO1xuICAgIGNybVN1YnNjcmlwdGlvbnNMaXN0ID0gW107XG4gICAgY3JtU291cmNlc0xpc3QgPSBbXTtcbiAgICBwcm9kdWN0c0xpc3QgPSBbXTtcbiAgICBjaGlsZExpc3QgPSBbXTtcblxuICAgIGlzTG9hZGluZzogYm9vbGVhbjtcblxuICAgIHNoYXJkVXJsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5kb21haW5Db25maWdCdWlsZEZvcm0odGhpcy5mYik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ10pO1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZUNvbmZpZ0lkID0gTnVtYmVyKFxuICAgICAgICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZHVwbGljYXRlX2RvbWFpbl9jb25maWdfaWQnXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnaXNfcHJvZHVjdF9kb21haW4nKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9wcm9kdWN0X2lkJykuZW5hYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnaXNfcHJvZHVjdF9kb21haW4nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fc3Vic2NyaXB0aW9uX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX3Byb2R1Y3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRCb29rRGVtb0xpbmsoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5mb3JtLmdldCgnYm9va19kZW1vJyk/LmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgICAgIGl0ZW1zLnB1c2godGhpcy5mYi5ncm91cCh7IHRpdGxlOiBbJyddLCB1cmw6IFsnJ10gfSkpO1xuICAgIH1cblxuICAgIHJlbW92ZUJvb2tEZW1vTGluayhpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5mb3JtLmdldCgnYm9va19kZW1vJyk/LmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgICAgIGl0ZW1zLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICBnZXQgdXNwc0l0ZW1zKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCd1c3BzJykuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBhZGRVc3BJdGVtKCkge1xuICAgICAgICB0aGlzLnVzcHNJdGVtcy5wdXNoKHRoaXMuZmIuZ3JvdXAoeyBkZXNjcmlwdGlvbjogWycnXSB9KSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVXNwSXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudXNwc0l0ZW1zLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICBnZXQgaGVhZGVyU3ViSGVhZGluZ3MoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2hlYWRlcicpLmdldCgnc3ViX2hlYWRpbmdzJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIGFkZEhlYWRlclN1YkhlYWRpbmcoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyU3ViSGVhZGluZ3MucHVzaCh0aGlzLmZiLmdyb3VwKHsgZGVzY3JpcHRpb246IFsnJ10gfSkpO1xuICAgIH1cblxuICAgIHJlbW92ZUhlYWRlclN1YkhlYWRpbmcoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmhlYWRlclN1YkhlYWRpbmdzLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICBnZXQgcGFydG5lcnNJdGVtcygpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncGFydG5lcnMnKT8uZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBhZGRQYXJ0bmVySW1hZ2UoKSB7XG4gICAgICAgIHRoaXMucGFydG5lcnNJdGVtcy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgaW1hZ2VfdXJsOiBbJyddXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZVBhcnRuZXJJbWFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFydG5lcnNJdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgZ2V0QWxsT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLmFkbWluU2VydmljZS5nZXRBdmFpbGFibGVEb21haW5PcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9uSWQpLFxuICAgICAgICAgICAgZ2V0UHJvZHVjdDogdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0TGlzdCh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCksXG4gICAgICAgICAgICBjb25maWc6IHRoaXMuYWRtaW5TZXJ2aWNlLmdldERvbWFpbkNvbmZpZ0J5SWQoXG4gICAgICAgICAgICAgICAgdGhpcy5kdXBsaWNhdGVDb25maWdJZCB8fCB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25zXG4gICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0TGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogbnVsbCwgbmFtZTogJ1NlbGVjdCBNYXN0ZXIgUHJvZHVjdCcgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHJlcz8ub3B0aW9ucz8ubWFzdGVyX3N1YnNjcmlwdGlvbj8ucHJvZHVjdHMgfHwgW10pXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uc0xpc3QgPSBbXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdTZWxlY3QgTWFzdGVyIFN1YnNjcmlwdGlvbicsIHZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLihyZXM/Lm9wdGlvbnM/Lm1hc3Rlcl9zdWJzY3JpcHRpb24/LnN1YnNjcmlwdGlvbnMgfHwgW10pLm1hcChzdWIgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdWIub3JnYW5pc2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtzdWIub3JnYW5pc2F0aW9ufSAtICR7c3ViLmNvbnRhY3RfbmFtZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWIuY29udGFjdF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN1Yi5pZFxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uVG9zTGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogbnVsbCwgdGl0bGU6ICdTZWxlY3QgTWFpbiBUT1MnIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLihyZXM/Lm9wdGlvbnM/Lm1hc3Rlcl9zdWJzY3JpcHRpb24/LnN1YnNjcmlwdGlvbl90b3MgfHwgW10pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNybVN1YnNjcmlwdGlvbnNMaXN0ID0gW1xuICAgICAgICAgICAgICAgICAgICB7IGlkOiBudWxsLCBvcmdhbmlzYXRpb246IG51bGwsIGNvbnRhY3RfbmFtZTogJ1NlbGVjdCBDUk0gU3Vic2NyaXB0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcHRpb25zPy5tYXN0ZXJfY3JtPy5zdWJzY3JpcHRpb25zIHx8IFtdKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1Tb3VyY2VzTGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogbnVsbCwgbmFtZTogJ1NlbGVjdCBDUk0gU291cmNlJyB9LFxuICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcHRpb25zPy5tYXN0ZXJfY3JtPy5zb3VyY2VzIHx8IFtdKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1Qcm9kdWN0TGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogbnVsbCwgbmFtZTogJ1NlbGVjdCBDUk0gUHJvZHVjdCcsIHN1YnNjcmlwdGlvbl9pZDogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcHRpb25zPy5tYXN0ZXJfY3JtPy5wcm9kdWN0cyB8fCBbXSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIC8vIGVuZCBvcHRpb25zXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0xpc3QgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzPy5nZXRQcm9kdWN0Py5wcm9kdWN0cyk7XG4gICAgICAgICAgICAgICAgLy8gY29uZmlnIHRvIHBhdGNoIHZhbHVlc1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlcy5jb25maWc7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVtbyA9IHRoaXMuZGF0YS5ib29rX2RlbW87XG4gICAgICAgICAgICAgICAgY29uc3QgZGVtb0dyb3VwID0gdGhpcy5mb3JtLmdldCgnYm9va19kZW1vJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zQXJyYXkgPSBkZW1vR3JvdXAuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcblxuICAgICAgICAgICAgICAgIGRlbW9Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRlbW8/LnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVtbz8uZGVzY3JpcHRpb24gfHwgJydcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVzcHNHcm91cCA9IHRoaXMuZm9ybS5nZXQoJ3VzcHMnKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNwSXRlbXNBcnJheSA9IHVzcHNHcm91cC5nZXQoJ2l0ZW1zJykgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgICAgICAgICAgdXNwc0dyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmNvbmZpZz8udXNwcz8udGl0bGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXMuY29uZmlnPy51c3BzPy5kZXNjcmlwdGlvbiB8fCAnJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXNwSXRlbXNBcnJheS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIChyZXMuY29uZmlnPy51c3BzPy5pdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXNwSXRlbXNBcnJheS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFtpdGVtLmRlc2NyaXB0aW9uIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckdyb3VwID0gdGhpcy5mb3JtLmdldCgnaGVhZGVyJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkhlYWRpbmdzQXJyYXkgPSBoZWFkZXJHcm91cC5nZXQoJ3N1Yl9oZWFkaW5ncycpIGFzIEZvcm1BcnJheTtcblxuICAgICAgICAgICAgICAgIGhlYWRlckdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICBoZWFkbGluZTogcmVzLmNvbmZpZz8uaGVhZGVyPy5oZWFkbGluZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlcy5jb25maWc/LmhlYWRlcj8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvX3VybDogcmVzLmNvbmZpZz8uaGVhZGVyPy52aWRlb191cmwgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGJnX2ltYWdlX3VybDogcmVzLmNvbmZpZz8uaGVhZGVyPy5iZ19pbWFnZV91cmwgfHwgJydcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHN1YkhlYWRpbmdzQXJyYXkuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAocmVzLmNvbmZpZz8uaGVhZGVyPy5zdWJfaGVhZGluZ3MgfHwgW10pLmZvckVhY2goc2ggPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJIZWFkaW5nc0FycmF5LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogW3NoLmRlc2NyaXB0aW9uIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRuZXJzR3JvdXAgPSB0aGlzLmZvcm0uZ2V0KCdwYXJ0bmVycycpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0bmVyc0l0ZW1zID0gcGFydG5lcnNHcm91cC5nZXQoJ2l0ZW1zJykgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgICAgICAgICAgcGFydG5lcnNHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGF0YT8ucGFydG5lcnM/LmRlc2NyaXB0aW9uIHx8ICcnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwYXJ0bmVyc0l0ZW1zLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKHRoaXMuZGF0YT8ucGFydG5lcnM/Lml0ZW1zIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0bmVyc0l0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV91cmw6IFtpdGVtPy5pbWFnZV91cmwgfHwgJyddXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaXRlbXNBcnJheS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIChkZW1vPy5pdGVtcyB8fCBbXSkuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNBcnJheS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFtsaW5rLnRpdGxlIHx8ICcnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFtsaW5rLnVybCB8fCAnJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZFVybCA9IHJlcz8uY29uZmlnPy5zaGFyZF91cmw7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIGNzX3Byb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdHNMaXN0LmZpbmQoeCA9PiB4LmlkID09PSB0aGlzLmRhdGE/LmNzX3Byb2R1Y3RfaWQpLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbF9wcm9kdWN0X2lkOiB0aGlzLnByb2R1Y3RzTGlzdC5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9PiB4LmlkID09PSB0aGlzLmRhdGE/LnRyaWFsX3Byb2R1Y3RfaWRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXM/LmNvbmZpZz8uY3NfY3RhX2lmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc19jdGFfaWZyYW1lOiBKU09OLnBhcnNlKHJlcz8uY29uZmlnPy5jc19jdGFfaWZyYW1lKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uY29uZmlnPy50cmlhbF9jdGFfaWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFsX2N0YV9pZnJhbWU6IEpTT04ucGFyc2UocmVzPy5jb25maWc/LnRyaWFsX2N0YV9pZnJhbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnVwbG9hZGVyLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRMaXN0ID0gdGhpcy51cGxvYWRlci50b0FycmF5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0T2JqKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHNlYXJjaFByb2R1Y3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RMaXN0KHsgc2VhcmNoOiBldmVudD8ucXVlcnkgfHwgJycgfSwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNMaXN0ID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3BvbnNlLnByb2R1Y3RzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBQcm9kdWN0cyhwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBwcm9kdWN0cy5maWx0ZXIoeCA9PiB4LmRlcGVuZGVuY3lfcHJvZHVjdHM/Lmxlbmd0aCA8IDEgJiYgeC5hY3RpdmUpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBncm91cEJ5KHByb2R1Y3RzLCAnY3VycmVuY3knKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gdGhpcy5zb3J0T2JqKHByb2R1Y3RzKTtcbiAgICAgICAgICAgIGxldCBncm91cGVkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0c1twXS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IE51bWJlcihiLnByaWNlX3Blcl91bml0KSAtIE51bWJlcihhLnByaWNlX3Blcl91bml0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBncm91cGVkQXJyYXkucHVzaCguLi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncm91cGVkQXJyYXkgPSBncm91cGVkQXJyYXkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHt4Lm5hbWV9IHwgJHt4LnJlZ2lvbn0gfCAke3guYmlsbGluZ19mcmVxdWVuY3l9IHwgJHt4Lm1pbl91bml0c30geCAkeyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHgucHJpY2VfcGVyX3VuaXQgLyAxMDBcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpfSB8ICR7eC5jdXJyZW5jeX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIG9uU2F2ZUZpbGUoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbTogQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQgPSB0aGlzLmNoaWxkTGlzdC5maW5kKFxuICAgICAgICAgICAgeCA9PiB4LmNvbnRyb2xOYW1lID09PSBldmVudC5uYW1lXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9O1xuICAgICAgICBpZiAoZXZlbnQuZmlsZSkge1xuICAgICAgICAgICAgZGF0YVtldmVudC5uYW1lXSA9IGV2ZW50LmZpbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhW2ByZW1vdmVfJHtldmVudC5uYW1lfWBdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWIkID0gdGhpcy5pZFxuICAgICAgICAgICAgPyB0aGlzLmFkbWluU2VydmljZS51cGRhdGVEb21haW5Db25maWcodGhpcy5pZCwgZm9ybURhdGEpXG4gICAgICAgICAgICA6IHRoaXMuYWRtaW5TZXJ2aWNlLmNyZWF0ZURvbWFpbkNvbmZpZyhmb3JtRGF0YSk7XG5cbiAgICAgICAgc3ViJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0RG9tYWluQ29uZmlnQnlJZCh0aGlzLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNsZWFyVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtldmVudC5uYW1lXSA9IHJlc3BvbnNlW2V2ZW50Lm5hbWVdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICBpdGVtLm9uQ2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmFwcENvbmZpZz8ubWFzdGVyX3N1YnNjcmlwdGlvbj8uc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgLi4udGhpcy5mb3JtLnZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGRhdGEuY3NfcHJvZHVjdF9pZCA9IHRoaXMuZm9ybS5nZXQoJ2NzX3Byb2R1Y3RfaWQnKS52YWx1ZT8uaWQgfHwgbnVsbDtcbiAgICAgICAgZGF0YS50cmlhbF9wcm9kdWN0X2lkID0gdGhpcy5mb3JtLmdldCgndHJpYWxfcHJvZHVjdF9pZCcpLnZhbHVlPy5pZCB8fCBudWxsO1xuICAgICAgICBkYXRhWydjc19jdGFfaWZyYW1lJ10gPSB0aGlzLmZvcm0udmFsdWU/LmNzX2N0YV9pZnJhbWUgfHwgJyc7XG4gICAgICAgIGRhdGFbJ3RyaWFsX2N0YV9pZnJhbWUnXSA9IHRoaXMuZm9ybS52YWx1ZT8udHJpYWxfY3RhX2lmcmFtZSB8fCAnJztcbiAgICAgICAgY29uc3Qgc3ViJCA9IHRoaXMuaWRcbiAgICAgICAgICAgID8gdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuaWQsIGRhdGEpXG4gICAgICAgICAgICA6IHRoaXMuYWRtaW5TZXJ2aWNlLmNyZWF0ZURvbWFpbkNvbmZpZyhkYXRhKTtcbiAgICAgICAgc3ViJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRG9tYWluQ29uZmlnLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlcnMuZG9tYWluQ29uZmlnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxoMz5QdWJsaWMgUGFnZXMgQ29uZmlndXJhdGlvbjwvaDM+XG48ZGl2IGNsYXNzPVwibWItNFwiPlxuICA8cD4gVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFuZCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIHB1YmxpYyBwYWdlcyBvZiB0aGlzIGRvbWFpbi4gPC9wPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZGF0YT8uaG9zdF9uYW1lXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLk1hc3RlclN1YnNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5NYXN0ZXJTdWJzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICBbb3B0aW9uc109XCJtYXN0ZXJTdWJzY3JpcHRpb25zTGlzdFwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWFzdGVyX3N1YnNjcmlwdGlvbl9pZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBNYXN0ZXIgU3Vic2NyaXB0aW9uXCI+XG4gICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5NYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5NYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgIG5hbWU9XCJtYXN0ZXJfc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWRcIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgW29wdGlvbnNdPVwibWFzdGVyU3Vic2NyaXB0aW9uUHJvZHVjdExpc3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYXN0ZXJfc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWQnXT8uZXJyb3JzfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBNYXN0ZXIgUHJvZHVjdCdcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5CbG9nRmVhdHVyZUtleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJibG9nX2ZlYXR1cmVfa2V5XCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5CbG9nRmVhdHVyZUtleScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYmxvZ19mZWF0dXJlX2tleVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Jsb2dfZmVhdHVyZV9rZXknXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuTWFpblRvcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJtYWluX3Rvc19pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuTWFpblRvcycgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgIFtvcHRpb25zXT1cInN1YnNjcmlwdGlvblRvc0xpc3RcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1haW5fdG9zX2lkXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21haW5fdG9zX2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBNYWluIFRPUydcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic2VsZWN0ZWRJdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIml0ZW0udGl0bGVcIj48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC1kcm9wZG93bj5cblxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBjcm0gc3Vic2NyaXB0aW9uIGZpZWxkcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dcm1TdWJzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY3JtX3N1YnNjcmlwdGlvbl9pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3JtU3Vic2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjcm1TdWJzY3JpcHRpb25zTGlzdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc3Vic2NyaXB0aW9uX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3N1YnNjcmlwdGlvbl9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU3Vic2NyaXB0aW9uJ1wiXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic2VsZWN0ZWRJdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIHt7aXRlbT8ub3JnYW5pc2F0aW9uID8gaXRlbT8ub3JnYW5pc2F0aW9uICsgJyAtICcgKyBpdGVtLmNvbnRhY3RfbmFtZSA6IGl0ZW0/LmNvbnRhY3RfbmFtZX19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAge3tpdGVtPy5vcmdhbmlzYXRpb24gPyBpdGVtPy5vcmdhbmlzYXRpb24gKyAnIC0gJyArIGl0ZW0uY29udGFjdF9uYW1lIDogaXRlbT8uY29udGFjdF9uYW1lfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuXG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3JtUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fcHJvZHVjdF9pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3JtUHJvZHVjdCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgW29wdGlvbnNdPVwiY3JtUHJvZHVjdExpc3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX3Byb2R1Y3RfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjcm1fcHJvZHVjdF9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gUHJvZHVjdCdcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic2VsZWN0ZWRJdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIHt7aXRlbT8uc3Vic2NyaXB0aW9uX2lkID8gaXRlbT8ubmFtZSAgKycgLSBTdWJzY3JpcHRpb25JRCA9ICcrIGl0ZW0uc3Vic2NyaXB0aW9uX2lkIDogaXRlbT8ubmFtZX19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAge3tpdGVtPy5zdWJzY3JpcHRpb25faWQgPyBpdGVtPy5uYW1lICArJyAtIFN1YnNjcmlwdGlvbklEID0gJysgaXRlbS5zdWJzY3JpcHRpb25faWQgOiBpdGVtPy5uYW1lfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNybVNvdXJjZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fc291cmNlX2lkXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dcm1Tb3VyY2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgIFtvcHRpb25zXT1cImNybVNvdXJjZXNMaXN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjcm1fc291cmNlX2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IENSTSBTb3VyY2UnXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIGNybSBzdWJzY3JpcHRpb24gZmllbGRzIGVuZC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkFjdGl2ZScgfCB0cmFuc2xvY29cIiBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5BY3RpdmUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImFjdGl2ZVwiPlxuICAgICAgICAgIDx1aS1zd2l0Y2ggc2l6ZT1cInNtYWxsXCIgdW5jaGVja2VkTGFiZWw9XCJmYWxzZVwiIGNoZWNrZWRMYWJlbD1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIiBuYW1lPVwiYWN0aXZlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnYWN0aXZlJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Jc1Byb2R1Y3REb21haW4nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Jc1Byb2R1Y3REb21haW4nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiaXNfcHJvZHVjdF9kb21haW5cIj5cbiAgICAgICAgICA8dWktc3dpdGNoIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICB1bmNoZWNrZWRMYWJlbD1cImZhbHNlXCJcbiAgICAgICAgICAgIGNoZWNrZWRMYWJlbD1cInRydWVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaXNfcHJvZHVjdF9kb21haW5cIlxuICAgICAgICAgICAgbmFtZT1cImlzX3Byb2R1Y3RfZG9tYWluXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnaXNfcHJvZHVjdF9kb21haW4nXS5lcnJvcnMgfVwiPlxuICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNhblJlZ2lzdGVyT25NYWluUGFnZScgfCB0cmFuc2xvY29cIiBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5DYW5SZWdpc3Rlck9uTWFpblBhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY2FuX3JlZ2lzdGVyX3Rocm91Z2hfbWFpbl9wYWdlXCI+XG4gICAgICAgICAgPHVpLXN3aXRjaCBzaXplPVwic21hbGxcIiB1bmNoZWNrZWRMYWJlbD1cImZhbHNlXCIgY2hlY2tlZExhYmVsPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cImNhbl9yZWdpc3Rlcl90aHJvdWdoX21haW5fcGFnZVwiXG4gICAgICAgICAgICBuYW1lPVwiY2FuX3JlZ2lzdGVyX3Rocm91Z2hfbWFpbl9wYWdlXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Nhbl9yZWdpc3Rlcl90aHJvdWdoX21haW5fcGFnZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlNvY2lhbExvZ2luRW5hYmxlZCcgfCB0cmFuc2xvY29cIiBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Tb2NpYWxMb2dpbkVuYWJsZScgfCB0cmFuc2xvY29cIiBuYW1lPVwic29jaWFsX2xvZ2luX2VuYWJsZWRcIj5cbiAgICAgICAgICA8dWktc3dpdGNoIHNpemU9XCJzbWFsbFwiIHVuY2hlY2tlZExhYmVsPVwiZmFsc2VcIiBjaGVja2VkTGFiZWw9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwic29jaWFsX2xvZ2luX2VuYWJsZWRcIlxuICAgICAgICAgICAgbmFtZT1cInNvY2lhbF9sb2dpbl9lbmFibGVkXCIgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydzb2NpYWxfbG9naW5fZW5hYmxlZCddLmVycm9ycyB9XCI+XG4gICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuTm90aWZ5TG9naW5zJyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLk5vdGlmeUxvZ2lucycgfCB0cmFuc2xvY29cIiBuYW1lPVwibm90aWZ5X2xvZ2luc1wiPlxuICAgICAgICAgIDx1aS1zd2l0Y2ggc2l6ZT1cInNtYWxsXCIgdW5jaGVja2VkTGFiZWw9XCJmYWxzZVwiIGNoZWNrZWRMYWJlbD1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJub3RpZnlfbG9naW5zXCJcbiAgICAgICAgICAgIG5hbWU9XCJub3RpZnlfbG9naW5zXCIgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydub3RpZnlfbG9naW5zJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJteS01XCIgKnJiYWNBbGxvdz1cIidQYWdlcy5TdXBlckFkbWluJ1wiPlxuICAgICAgPGgzPlByZS1CdWlsdCBMYW5kaW5nIFBhZ2VzIGZvciBVc2VyIE9uYm9hcmRpbmc8L2gzPlxuICAgICAgPCEtLSBjcyBzdGFydCAtLT5cbiAgICAgIDxwLWFjY29yZGlvbiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtoZWFkZXJdPVwiJ0luc3RydWN0aW9ucydcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgPHA+V2XigJl2ZSBidWlsdCBhbmQgbWFpbnRhaW4gYSBjb2xsZWN0aW9uIG9mIGhpZ2gtY29udmVydGluZyBsYW5kaW5nIHBhZ2VzIGRlc2lnbmVkIHRvIGhlbHAgeW91IHF1aWNrbHkgbGF1bmNoIHBvbGlzaGVkXG4gICAgICAgICAgICAgIFVJcyBmb3Igb25ib2FyZGluZyB1c2Vycy48L3A+XG4gICAgICAgICAgICA8cD48c3Ryb25nPk5ld3NsZXR0ZXIgU3Vic2NyaXB0aW9uIFBhZ2VzOjwvc3Ryb25nPjxicj4gQWZ0ZXIgY29uZmlndXJpbmcgeW91ciBkb21haW4sIHlvdSBjYW4gYWNjZXNzIHBhZ2VzIGxpa2VcbiAgICAgICAgICAgICAgPHN0cm9uZz4vam9pbi9jczEsIC9qb2luL2NzMiwgL2pvaW4vY3MzLCBldGMuPC9zdHJvbmc+LCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIG5ld3NsZXR0ZXIgc2lnbi11cHMuIDxicj5cbiAgICAgICAgICAgICAgU3Vic2NyaWJlcnMgZnJvbSB0aGVzZSBwYWdlcyB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgPHN0cm9uZz5TbWFydENSTSBtb2R1bGU8L3N0cm9uZz4uPC9wPlxuICAgICAgICAgICAgPHA+PHN0cm9uZz5UcmlhbCBQcm9kdWN0IFNpZ24tVXAgUGFnZXM6PC9zdHJvbmc+PGJyPiBGb3IgdXNlcnMgaW50ZXJlc3RlZCBpbiB0cmlhbCBwcm9kdWN0cywgdXRpbGl6ZSBwYWdlcyBzdWNoIGFzXG4gICAgICAgICAgICAgIDxzdHJvbmc+L2pvaW4vdHJpYWwxLCAvam9pbi90cmlhbDIsIC9qb2luL3RyaWFsMywgZXRjLjwvc3Ryb25nPi48YnI+IFVzZXJzIHJlZ2lzdGVyaW5nIHRocm91Z2ggdGhlc2UgcGFnZXMgd2lsbFxuICAgICAgICAgICAgICBhcHBlYXIgaW4gdGhlIDxzdHJvbmc+QWRtaW4gPiBVc2VycyBzZWN0aW9uPC9zdHJvbmc+LjwvcD5cbiAgICAgICAgICAgIDxwPk9uY2UgeW914oCZdmUgc2VsZWN0ZWQgdGhlIGxhbmRpbmcgcGFnZSB5b3Ugd2FudCB0byB1c2UgPHN0cm9uZz4oZS5nLiwgL2pvaW4vdHJpYWwzKTwvc3Ryb25nPiwgbWFrZSBzdXJlIHRvIHVwZGF0ZVxuICAgICAgICAgICAgICB0aGUgPHN0cm9uZz5JbnRlcm5hbCBQYXRoPC9zdHJvbmc+IGluIHRoZSA8c3Ryb25nPkNvcmUgdGFiPC9zdHJvbmc+IGFjY29yZGluZ2x54oCUaS5lLiwgc2V0IGl0IHRvXG4gICAgICAgICAgICAgIDxzdHJvbmc+L2pvaW4vdHJpYWwzPC9zdHJvbmc+LjwvcD5cbiAgICAgICAgICAgIDxwPklmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW50ZWdyYXRpbmcgdGhlc2UgcGFnZXMgaW50byB5b3VyIHdvcmtmbG93IG9yIGhhdmUgZnVydGhlciBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byByZWFjaFxuICAgICAgICAgICAgICBvdXQuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgICA8cC1hY2NvcmRpb25UYWIgW2hlYWRlcl09XCInRHluYW1pYyBWYWx1ZXMnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC00IG1iLTRcIiBmb3JtR3JvdXBOYW1lPVwidXNwc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVVNQcyBUaXRsZVwiIG5hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVVNQcyBEZXNjcmlwdGlvblwiIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiaXRlbXNcIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZlsndXNwcyddLmdldCgnaXRlbXMnKVsnY29udHJvbHMnXTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyb3cgbWItM1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XG4gICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSXRlbSBEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZGVzY3JpcHRpb24nXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVVzcEl0ZW0oaSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVVc3BJdGVtKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlVXNwSXRlbShpKVwiXG4gICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTJcIiAoY2xpY2spPVwiYWRkVXNwSXRlbSgpXCI+XG4gICAgICAgICAgICAgICAgKyBBZGQgVVNQIEl0ZW1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgPCEtLSBoZWFkZXIgU0VDVElPTiAtLT5cbjwhLS0gaGVhZGVyIFNFQ1RJT04gLS0+XG48ZGl2IGNsYXNzPVwicm93IG10LTRcIiBmb3JtR3JvdXBOYW1lPVwiaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIEhlYWRsaW5lXCIgbmFtZT1cImhlYWRsaW5lXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImhlYWRsaW5lXCIgLz5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIERlc2NyaXB0aW9uXCIgbmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgLz5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIFZpZGVvIFVSTFwiIG5hbWU9XCJ2aWRlb191cmxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlkZW9fdXJsXCIgLz5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIEJhY2tncm91bmQgSW1hZ2UgVVJMXCIgbmFtZT1cImJnX2ltYWdlX3VybFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJiZ19pbWFnZV91cmxcIiAvPlxuICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJzdWJfaGVhZGluZ3NcIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDxoMiBjbGFzcz1cImZ3LWJvbGQgbWIwMlwiPkhlYWRlciBTdWIgSGVhZGluZ3M8L2gyPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBzdWIgb2YgZlsnaGVhZGVyJ10uZ2V0KCdzdWJfaGVhZGluZ3MnKVsnY29udHJvbHMnXTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgIGNsYXNzPVwicm93IG1iLTNcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIiAqbmdJZj1cImZbJ2hlYWRlciddLmdldCgnc3ViX2hlYWRpbmdzJylbJ2NvbnRyb2xzJ10ubGVuZ3RoXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJIZWFkZXIgRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZGVzY3JpcHRpb24nXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUhlYWRlclN1YkhlYWRpbmcoaSlcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZUhlYWRlclN1YkhlYWRpbmcoaSlcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUhlYWRlclN1YkhlYWRpbmcoaSlcIlxuICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmVcIlxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtdC0yXCIgKGNsaWNrKT1cImFkZEhlYWRlclN1YkhlYWRpbmcoKVwiPlxuICAgICAgKyBBZGQgU3ViIEhlYWRpbmdcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjwhLS0gaGVhZGVyIFNFQ1RJT04gRU5EIC0tPlxuXG5cblxuPGRpdiBjbGFzcz1cInJvdyBtdC00IG1iLTRcIiBmb3JtR3JvdXBOYW1lPVwicGFydG5lcnNcIj5cblxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlBhcnRuZXIgVGl0bGVcIiBuYW1lPVwidGl0bGVcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAvPlxuICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlBhcnRuZXJzIERlc2NyaXB0aW9uXCIgbmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiaXRlbXNcIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDxkaXZcbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmWydwYXJ0bmVycyddLmdldCgnaXRlbXMnKVsnY29udHJvbHMnXTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgIGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWVuZCBtYi0zXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicGFydG5lcnNJdGVtcy5jb250cm9scy5sZW5ndGhcIj5cbiAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyXG4gICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidQYXJ0bmVyIEltYWdlJ1wiXG4gICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2ltYWdlX3VybCdcIlxuICAgICAgICAgICAgW3ByZXZpZXdEYXRhXT1cIml0ZW0uZ2V0KCdpbWFnZV91cmwnKT8udmFsdWVcIlxuICAgICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQYXJ0bmVySW1hZ2UoaSlcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVBhcnRuZXJJbWFnZShpKVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlUGFydG5lckltYWdlKGkpXCJcbiAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVtb3ZlXCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtdC0yXCIgKGNsaWNrKT1cImFkZFBhcnRuZXJJbWFnZSgpXCI+XG4gICAgICArIEFkZCBJbWFnZVxuICAgIDwvYnV0dG9uPlxuXG4gIDwvZGl2PlxuPC9kaXY+XG5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5SZXNvdXJjZVRhZ2xpbmUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInJlc291cmNlc190YWdsaW5lXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuUmVzb3VyY2VUYWdsaW5lJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVzb3VyY2VzX3RhZ2xpbmVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydyZXNvdXJjZXNfdGFnbGluZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5SZXNvdXJjZURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJyZXNvdXJjZXNfZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5SZXNvdXJjZURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVzb3VyY2VzX2Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncmVzb3VyY2VzX2Rlc2NyaXB0aW9uJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtYXRjaEhlaWdodD1cImNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVzb3VyY2VfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlJlc291cmNlSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlJlc291cmNlSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgSW1hZ2UnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3Jlc291cmNlc19pbWFnZSdcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsncmVzb3VyY2VzX2ltYWdlJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEJvb2sgYSBEZW1vIExpbmtzIC0tPlxuPGRpdiBjbGFzcz1cInJvdyBtdC00XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8aDU+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Cb29rRGVtb0xpbmtzJyB8IHRyYW5zbG9jbyB9fTwvaDU+XG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiYm9va19kZW1vXCI+XG4gICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVGl0bGVcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIC8+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkRlc2NyaXB0aW9uXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIml0ZW1zXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpbmsgb2YgZlsnYm9va19kZW1vJ10uZ2V0KCdpdGVtcycpWydjb250cm9scyddOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJMaW5rIFRpdGxlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAvPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiTGluayBVUkxcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ1cmxcIiAvPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUJvb2tEZW1vTGluayhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZUJvb2tEZW1vTGluayhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUJvb2tEZW1vTGluayhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtdC0yXCIgKGNsaWNrKT1cImFkZEJvb2tEZW1vTGluaygpXCI+KyBBZGQgQm9vayBEZW1vIExpbms8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidDb21pbmcgc29vbiBwYWdlcyAtIFN1YnNjcmliZSB0byBuZXdzbGV0dGVyJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8cD5Db21pbmdTb29uIFBhZ2VzIHdpbGwgZW5hYmxlIHVzZXJzIHRvIHN1YnNjcmliZSB0byBOZXdzbGV0dGVycyBhbmQgYXJlIGFjY2Vzc2libGUgYXQgdGhlIGludGVybmFsIHBhdGhzIC9qb2luL2NzMSxcbiAgICAgICAgICAgICAgL2pvaW4vY3MyLCBldGMuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gbGl2ZSBwYWdlIGxpbmsgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCIgKm5nSWY9XCJzaGFyZFVybFwiPlxuICAgICAgICAgICAgPHNwYW4+U2VlIHRoZSBsaXZlIHBhZ2UgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU2VlTGl2ZUNzJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+IDogPGEgW2hyZWZdPVwic2hhcmRVcmwgKyAnL2pvaW4vY3MxJ1wiIHRhcmdldD1cIl9ibGFua1wiPnt7IHNoYXJkVXJsIH19L2pvaW4vY3MxPC9hPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcHJvZHVjdF9pZFwiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwicHJvZHVjdHNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcHJvZHVjdF9pZFwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiIFtkZWxheV09XCIxMDAwXCIgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgnY3NfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCdjc19wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzQ3JtU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0NybVNvdXJjZUlkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjc19jcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX3BkZl9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc1BkZlNvdXJjZUlkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjc19wZGZfc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfcGRmX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX3ZpZGVvX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjc192aWRlb191cmxcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc192aWRlb191cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NCb29rRGVtb1VybCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfYm9va19kZW1vX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzQm9va0RlbW9VcmwnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjc19ib29rX2RlbW9fdXJsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfYm9va19kZW1vX3VybCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc0N0YUlmcmFtZScgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfY3RhX2lmcmFtZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzQ3RhSWZyYW1lJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfY3RhX2lmcmFtZVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2N0YV9pZnJhbWUnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3Nfam9pbl9tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3NKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImNzX2pvaW5fbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2pvaW5fbWVzc2FnZSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc1BkZkRvd25sb2FkVGV4dCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcGRmX2Rvd25sb2FkX3RleHRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3NQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJjc19wZGZfZG93bmxvYWRfdGV4dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX3BkZl9kb3dubG9hZF90ZXh0J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtYXRjaEhlaWdodD1cImNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY3NfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgSW1hZ2UnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2NzX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuQ3NJbWFnZTInIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2UyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIEltYWdlMidcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCInY3NfaW1hZ2UyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZTInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19wZGZfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzUGRmSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUGRmSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgUGRmIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19wZGZfaW1hZ2UnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ2NzX3BkZl9pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlX2JnXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc0ltYWdlQmcnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2VCZycgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCIgW3RpdGxlXT1cIidDcyBQZGYgSW1hZ2UgQmcnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2NzX2ltYWdlX2JnJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZV9iZyddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlX2JnMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuQ3NJbWFnZUJnMicgfCB0cmFuc2xvY28gfX0gPHNwYW4gY2xhc3M9XCJpbmZvLWNpcmNsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3NJbWFnZUJnMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCIgW3RpdGxlXT1cIidDcyBQZGYgSW1hZ2UgQmcyJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19pbWFnZV9iZzInXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ2NzX2ltYWdlX2JnMiddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICA8L3AtYWNjb3JkaW9uPlxuICAgICAgPCEtLSBjcyBpbWFnZSBzZWN0aW9uIGVuZCAtLT5cbiAgICAgIDwhLS0gdHJpYWwgc3RhcnQgLS0+XG4gICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidKb2luIG5vdyBwYWdlcyAtIFN1YnNjcmliZSB0byBwcm9kdWN0J1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8cD5UcmlhbCBQYWdlcyB3aWxsIGVuYWJsZSB1c2VycyB0byBzaWduIHVwIHRvIHJlYWwgcHJvZHVjdHMgYW5kIGFyZSBhY2Nlc3NpYmxlIGF0IHRoZSBwYXRoIC9qb2luL3RyaWFsMSxcbiAgICAgICAgICAgICAgL2pvaW4vdHJpYWwyLCBldGMuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gbGl2ZSBwYWdlIGxpbmsgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCIgKm5nSWY9XCJzaGFyZFVybFwiPlxuICAgICAgICAgICAgPHNwYW4+U2VlIHRoZSBsaXZlIHBhZ2UgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU2VlTGl2ZVRyaWFsJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+IDogPGEgW2hyZWZdPVwic2hhcmRVcmwgKyAnL2pvaW4vdHJpYWwxJ1wiIHRhcmdldD1cIl9ibGFua1wiPnt7IHNoYXJkVXJsIH19L2pvaW4vdHJpYWwxPC9hPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFByb2R1Y3QnIHwgdHJhbnNsb2NvXCIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtzdWdnZXN0aW9uc109XCJwcm9kdWN0c0xpc3RcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9wcm9kdWN0X2lkXCIgZGF0YUtleT1cImlkXCIgZmllbGQ9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCIgW2RlbGF5XT1cIjEwMDBcIiAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoUHJvZHVjdCgkZXZlbnQpXCIgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIiBbaW5wdXRTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCd0cmlhbF9wcm9kdWN0X2lkJykudG91Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ3RyaWFsX3Byb2R1Y3RfaWQnKS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGJvcmRlcjogJzFweCBzb2xpZCAjZmY1ODZiJyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGJvcmRlcjogJzFweCBzb2xpZCBncmF5JyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxDcm1Tb3VyY2VJZCcgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfY3JtX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbENybVNvdXJjZUlkJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9jcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX3BkZl9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQZGZTb3VyY2VJZCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY3JtU291cmNlc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcGRmX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX3BkZl9zb3VyY2VfaWQnXT8uZXJyb3JzIH1cIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgQ1JNIFNvdXJjZSdcIlxuICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF92aWRlb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbFZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfdmlkZW9fdXJsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfdmlkZW9fdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsQm9va0RlbW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX2Jvb2tfZGVtb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxCb29rRGVtb1VybCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX2Jvb2tfZGVtb191cmxcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9ib29rX2RlbW9fdXJsJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsQ3RhSWZyYW1lJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF9jdGFfaWZyYW1lXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsQ3RhSWZyYW1lJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfY3RhX2lmcmFtZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2N0YV9pZnJhbWUnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfam9pbl9tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSm9pbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9qb2luX21lc3NhZ2VcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9qb2luX21lc3NhZ2UnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHJpYWxfcGRmX2Rvd25sb2FkX3RleHRcIiBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsUGRmRG93bmxvYWRUZXh0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcGRmX2Rvd25sb2FkX3RleHRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9wZGZfZG93bmxvYWRfdGV4dCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgbWF0Y2hIZWlnaHQ9XCJjYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ1RyaWFsIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid0cmlhbF9pbWFnZSdcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsndHJpYWxfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmlhbF9pbWFnZTJcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsSW1hZ2UyJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW3RpdGxlXT1cIidUcmlhbCBJbWFnZTInXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlMidcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsndHJpYWxfaW1hZ2UyJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidHJpYWxfcGRmX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFBkZkltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbFBkZkltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbdGl0bGVdPVwiJ1RyaWFsIFBkZiBJbWFnZSdcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfcGRmX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9wZGZfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmlhbF9pbWFnZV9iZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVHJpYWxJbWFnZUJnJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlQmcnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFt0aXRsZV09XCInVHJpYWwgSW1hZ2UgQmcnXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlX2JnJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZV9iZyddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlX2JnMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVHJpYWxJbWFnZUJnMicgfCB0cmFuc2xvY28gfX0gPHNwYW4gY2xhc3M9XCJpbmZvLWNpcmNsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxJbWFnZUJnMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW3RpdGxlXT1cIidUcmlhbCBJbWFnZSBCZzInXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlX2JnMidcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsndHJpYWxfaW1hZ2VfYmcyJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgIDwvcC1hY2NvcmRpb24+XG4gICAgICA8IS0tIHRyaWFsIGltYWdlIHNlY3Rpb24gZW5kIC0tPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWVuZCBtdC0zXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwiYmFjaygpXCI+XG4gICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj57eyAnQnV0dG9uLlN1Ym1pdCcgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy1jb250YWluZXI+XG48ZGl2ICpuZ0lmPVwiIWRhdGE/Lmhvc3RfbmFtZSAmJiAhaXNMb2FkaW5nXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5Eb21haW5Db25maWcuRW5hYmxlQ29uZmlnVGFiJyB8IHRyYW5zbG9jb1wiPiA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==
|
|
552
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1idWlsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZG9tYWluLWNvbmZpZy9kb21haW4tY29uZmlnLWRldGFpbHMvZG9tYWluLWNvbmZpZy1idWlsZC9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9kb21haW4tY29uZmlnL2RvbWFpbi1jb25maWctZGV0YWlscy9kb21haW4tY29uZmlnLWJ1aWxkL2RvbWFpbi1jb25maWctYnVpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsUUFBUSxFQUVSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxXQUFXLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFD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QUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7U0FDSixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0Ezb0JRLDBCQUEwQjttR0FBMUIsMEJBQTBCLDhMQUNyQix1QkFBdUIsdUVDOUJ6Qyx1a3JEQXlsQ0E7O0FEemNJO0lBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7Ozt3REF5QnBCOzRGQTNvQlEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNJLHdCQUF3QjtzTEFJSyxRQUFRO3NCQUE5QyxZQUFZO3VCQUFDLHVCQUF1QjtnQkFDUixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFpbkIzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSwgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlLCBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2Uvc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcblxuaW1wb3J0IGdyb3VwQnkgZnJvbSAnbG9kYXNoL2dyb3VwQnknO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbmltcG9ydCB7IERvbWFpbkNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvZG9tYWluLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWRvbWFpbi1jb25maWctYnVpbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEb21haW5Db25maWdCdWlsZENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGRyZW4oQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQpIHVwbG9hZGVyOiBRdWVyeUxpc3Q8Q3VzdG9tVXBsb2FkZXJDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ3BhcnRuZXJDcm9wcGVyJykgcGFydG5lckNyb3BwZXI7XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuXG4gICAgc2VsZWN0ZWRQYXJ0bmVySW5kZXg6IG51bWJlciA9IG51bGw7XG5cbiAgICBpZDogbnVtYmVyO1xuICAgIGR1cGxpY2F0ZUNvbmZpZ0lkO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBkYXRhOiBEb21haW5Db25maWc7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcblxuICAgIG1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3RMaXN0ID0gW107XG4gICAgbWFzdGVyU3Vic2NyaXB0aW9uc0xpc3QgPSBbXTtcbiAgICBzdWJzY3JpcHRpb25Ub3NMaXN0ID0gW107XG4gICAgY3JtUHJvZHVjdExpc3QgPSBbXTtcbiAgICBjcm1TdWJzY3JpcHRpb25zTGlzdCA9IFtdO1xuICAgIGNybVNvdXJjZXNMaXN0ID0gW107XG4gICAgcHJvZHVjdHNMaXN0ID0gW107XG4gICAgY2hpbGRMaXN0ID0gW107XG5cbiAgICBpc0xvYWRpbmc6IGJvb2xlYW47XG5cbiAgICBzaGFyZFVybDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5kb21haW5Db25maWdCdWlsZEZvcm0odGhpcy5mYik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ10pO1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZUNvbmZpZ0lkID0gTnVtYmVyKFxuICAgICAgICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZHVwbGljYXRlX2RvbWFpbl9jb25maWdfaWQnXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnaXNfcHJvZHVjdF9kb21haW4nKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9wcm9kdWN0X2lkJykuZW5hYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnaXNfcHJvZHVjdF9kb21haW4nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fc3Vic2NyaXB0aW9uX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX3Byb2R1Y3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRCb29rRGVtb0xpbmsoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5mb3JtLmdldCgnYm9va19kZW1vJyk/LmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgICAgIGl0ZW1zLnB1c2godGhpcy5mYi5ncm91cCh7IHRpdGxlOiBbJyddLCB1cmw6IFsnJ10gfSkpO1xuICAgIH1cblxuICAgIGdldCBpbnRlZ3JhdGlvbnMoKTogRm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2ludGVncmF0aW9ucycpIGFzIEZvcm1Hcm91cDtcbiAgICB9XG5cbiAgICBnZXQgaW50ZWdyYXRpb25zSXRlbXMoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZWdyYXRpb25zLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgYWRkSW50ZWdyYXRpb25JdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludGVncmF0aW9uc0l0ZW1zLnB1c2goXG4gICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogWycnXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogWycnXSxcbiAgICAgICAgICAgICAgICBibG9nX3VybDogWycnXSxcbiAgICAgICAgICAgICAgICBpbWFnZV91cmw6IFsnJ10sXG4gICAgICAgICAgICAgICAgdmlkZW9fdXJsOiBbJyddXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZUludGVncmF0aW9uSXRlbShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZWdyYXRpb25zSXRlbXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIGdldFF1ZXN0aW9uT3B0aW9ucyhxdWVzdGlvbkluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWN0VXNRdWVzdGlvbnMuYXQocXVlc3Rpb25JbmRleCkuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIGFkZENvbnRhY3RVc09wdGlvbihxdWVzdGlvbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRRdWVzdGlvbk9wdGlvbnMocXVlc3Rpb25JbmRleCkucHVzaChcbiAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIG9wdGlvbjogWycnXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZW1vdmVDb250YWN0VXNPcHRpb24ocXVlc3Rpb25JbmRleDogbnVtYmVyLCBvcHRpb25JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0UXVlc3Rpb25PcHRpb25zKHF1ZXN0aW9uSW5kZXgpLnJlbW92ZUF0KG9wdGlvbkluZGV4KTtcbiAgICB9XG5cbiAgICByZW1vdmVCb29rRGVtb0xpbmsoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZm9ybS5nZXQoJ2Jvb2tfZGVtbycpPy5nZXQoJ2l0ZW1zJykgYXMgRm9ybUFycmF5O1xuICAgICAgICBpdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgZ2V0IGN0YXMoKTogRm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2N0YXMnKSBhcyBGb3JtR3JvdXA7XG4gICAgfVxuXG4gICAgZ2V0IGN0YXNJdGVtcygpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdGFzLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRhY3RVcygpOiBGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnY29udGFjdF91cycpIGFzIEZvcm1Hcm91cDtcbiAgICB9XG5cbiAgICBnZXQgY29udGFjdFVzUXVlc3Rpb25zKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhY3RVcy5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBhZGRDb250YWN0VXNRdWVzdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWN0VXNRdWVzdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBbJyddLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZmIuYXJyYXkoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjogWycnXVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZUNvbnRhY3RVc1F1ZXN0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWN0VXNRdWVzdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIGFkZEN0YXNJdGVtKCkge1xuICAgICAgICB0aGlzLmN0YXNJdGVtcy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFsnJ10sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICAgICAgICAgICAgYnV0dG9uX3RleHQ6IFsnJ10sXG4gICAgICAgICAgICAgICAgaW1hZ2VfdXJsOiBbJyddLFxuICAgICAgICAgICAgICAgIGN0YV91cmw6IFsnJ11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ3Rhc0l0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmN0YXNJdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIGdldCB0ZXN0aW1vbmlhbHMoKTogRm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3Rlc3RpbW9uaWFscycpIGFzIEZvcm1Hcm91cDtcbiAgICB9XG5cbiAgICBnZXQgdGVzdGltb25pYWxzSXRlbXMoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3Rlc3RpbW9uaWFscy5pdGVtcycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBvcGVuUGFydG5lckltYWdlQ3JvcHBlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJ0bmVySW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLnBhcnRuZXJDcm9wcGVyLCB7XG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRQYXJ0bmVySXRlbSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmZvcm0uZ2V0KCdwYXJ0bmVycycpPy5nZXQoJ2l0ZW1zJykgYXMgRm9ybUFycmF5O1xuICAgICAgICBpdGVtcy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgbmFtZTogWycnXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogWycnXSxcbiAgICAgICAgICAgICAgICBibG9nX3VybDogWycnXSxcbiAgICAgICAgICAgICAgICBpbWFnZV91cmw6IFsnJ10sXG4gICAgICAgICAgICAgICAgdmlkZW9fdXJsOiBbJyddXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZVBhcnRuZXJJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmZvcm0uZ2V0KCdwYXJ0bmVycycpPy5nZXQoJ2l0ZW1zJykgYXMgRm9ybUFycmF5O1xuICAgICAgICBpdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgZ2V0IHVzcHNJdGVtcygpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgndXNwcycpLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgYWRkVXNwSXRlbSgpIHtcbiAgICAgICAgdGhpcy51c3BzSXRlbXMucHVzaCh0aGlzLmZiLmdyb3VwKHsgZGVzY3JpcHRpb246IFsnJ10gfSkpO1xuICAgIH1cblxuICAgIHJlbW92ZVVzcEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnVzcHNJdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgZ2V0IHZpZGVvcygpOiBGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgndmlkZW9zJykgYXMgRm9ybUdyb3VwO1xuICAgIH1cblxuICAgIGdldCB2aWRlb3NJdGVtcygpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlb3MuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBhZGRWaWRlb0l0ZW0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlkZW9zSXRlbXMucHVzaChcbiAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBbJyddLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgICAgICAgICAgIGJsb2dfdXJsOiBbJyddLFxuICAgICAgICAgICAgICAgIGltYWdlX3VybDogWycnXSxcbiAgICAgICAgICAgICAgICB2aWRlb191cmw6IFsnJ11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVmlkZW9JdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWRlb3NJdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgYWRkVGVzdGltb25pYWxJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlc3RpbW9uaWFsc0l0ZW1zLnB1c2goXG4gICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICB0ZXN0aW1vbmlhbDogWycnXSxcbiAgICAgICAgICAgICAgICBuYW1lOiBbJyddLFxuICAgICAgICAgICAgICAgIGJsb2dfdXJsOiBbJyddLFxuICAgICAgICAgICAgICAgIGltYWdlX3VybDogWycnXSxcbiAgICAgICAgICAgICAgICB2aWRlb191cmw6IFsnJ11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGVzdGltb25pYWxJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXN0aW1vbmlhbHNJdGVtcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgZ2V0IGhlYWRlclN1YkhlYWRpbmdzKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdoZWFkZXInKS5nZXQoJ3N1Yl9oZWFkaW5ncycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBhZGRIZWFkZXJTdWJIZWFkaW5nKCkge1xuICAgICAgICB0aGlzLmhlYWRlclN1YkhlYWRpbmdzLnB1c2godGhpcy5mYi5ncm91cCh7IGRlc2NyaXB0aW9uOiBbJyddIH0pKTtcbiAgICB9XG5cbiAgICByZW1vdmVIZWFkZXJTdWJIZWFkaW5nKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJTdWJIZWFkaW5ncy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgZ2V0IHBhcnRuZXJzSXRlbXMoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3BhcnRuZXJzJyk/LmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgYWRkUGFydG5lckltYWdlKCkge1xuICAgICAgICB0aGlzLnBhcnRuZXJzSXRlbXMucHVzaChcbiAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIGltYWdlX3VybDogWycnXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZW1vdmVQYXJ0bmVySW1hZ2UoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhcnRuZXJzSXRlbXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIGdldEFsbE9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5hZG1pblNlcnZpY2UuZ2V0QXZhaWxhYmxlRG9tYWluT3B0aW9ucyh0aGlzLnN1YnNjcmlwdGlvbklkKSxcbiAgICAgICAgICAgIGdldFByb2R1Y3Q6IHRoaXMucHJvZHVjdFNlcnZpY2UuZ2V0UHJvZHVjdExpc3Qoe30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpLFxuICAgICAgICAgICAgY29uZmlnOiB0aGlzLmFkbWluU2VydmljZS5nZXREb21haW5Db25maWdCeUlkKFxuICAgICAgICAgICAgICAgIHRoaXMuZHVwbGljYXRlQ29uZmlnSWQgfHwgdGhpcy5pZCxcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9uc1xuICAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uUHJvZHVjdExpc3QgPSBbXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6IG51bGwsIG5hbWU6ICdTZWxlY3QgTWFzdGVyIFByb2R1Y3QnIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLihyZXM/Lm9wdGlvbnM/Lm1hc3Rlcl9zdWJzY3JpcHRpb24/LnByb2R1Y3RzIHx8IFtdKVxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlclN1YnNjcmlwdGlvbnNMaXN0ID0gW1xuICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnU2VsZWN0IE1hc3RlciBTdWJzY3JpcHRpb24nLCB2YWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcHRpb25zPy5tYXN0ZXJfc3Vic2NyaXB0aW9uPy5zdWJzY3JpcHRpb25zIHx8IFtdKS5tYXAoc3ViID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3ViLm9yZ2FuaXNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7c3ViLm9yZ2FuaXNhdGlvbn0gLSAke3N1Yi5jb250YWN0X25hbWV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3ViLmNvbnRhY3RfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdWIuaWRcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblRvc0xpc3QgPSBbXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6IG51bGwsIHRpdGxlOiAnU2VsZWN0IE1haW4gVE9TJyB9LFxuICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcHRpb25zPy5tYXN0ZXJfc3Vic2NyaXB0aW9uPy5zdWJzY3JpcHRpb25fdG9zIHx8IFtdKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TdWJzY3JpcHRpb25zTGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogbnVsbCwgb3JnYW5pc2F0aW9uOiBudWxsLCBjb250YWN0X25hbWU6ICdTZWxlY3QgQ1JNIFN1YnNjcmlwdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHJlcz8ub3B0aW9ucz8ubWFzdGVyX2NybT8uc3Vic2NyaXB0aW9ucyB8fCBbXSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU291cmNlc0xpc3QgPSBbXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6IG51bGwsIG5hbWU6ICdTZWxlY3QgQ1JNIFNvdXJjZScgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHJlcz8ub3B0aW9ucz8ubWFzdGVyX2NybT8uc291cmNlcyB8fCBbXSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtUHJvZHVjdExpc3QgPSBbXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6IG51bGwsIG5hbWU6ICdTZWxlY3QgQ1JNIFByb2R1Y3QnLCBzdWJzY3JpcHRpb25faWQ6IG51bGwgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHJlcz8ub3B0aW9ucz8ubWFzdGVyX2NybT8ucHJvZHVjdHMgfHwgW10pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAvLyBlbmQgb3B0aW9uc1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNMaXN0ID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlcz8uZ2V0UHJvZHVjdD8ucHJvZHVjdHMpO1xuICAgICAgICAgICAgICAgIC8vIGNvbmZpZyB0byBwYXRjaCB2YWx1ZXNcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXMuY29uZmlnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbW8gPSB0aGlzLmRhdGEuYm9va19kZW1vO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbW9Hcm91cCA9IHRoaXMuZm9ybS5nZXQoJ2Jvb2tfZGVtbycpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtc0FycmF5ID0gZGVtb0dyb3VwLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICAgICAgICBkZW1vR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBkZW1vPy50aXRsZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlbW8/LmRlc2NyaXB0aW9uIHx8ICcnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1c3BzR3JvdXAgPSB0aGlzLmZvcm0uZ2V0KCd1c3BzJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzcEl0ZW1zQXJyYXkgPSB1c3BzR3JvdXAuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcblxuICAgICAgICAgICAgICAgIHVzcHNHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcy5jb25maWc/LnVzcHM/LnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzLmNvbmZpZz8udXNwcz8uZGVzY3JpcHRpb24gfHwgJydcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHVzcEl0ZW1zQXJyYXkuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAocmVzLmNvbmZpZz8udXNwcz8uaXRlbXMgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVzcEl0ZW1zQXJyYXkucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBbaXRlbS5kZXNjcmlwdGlvbiB8fCAnJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJHcm91cCA9IHRoaXMuZm9ybS5nZXQoJ2hlYWRlcicpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJIZWFkaW5nc0FycmF5ID0gaGVhZGVyR3JvdXAuZ2V0KCdzdWJfaGVhZGluZ3MnKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICAgICAgICBoZWFkZXJHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGxpbmU6IHJlcy5jb25maWc/LmhlYWRlcj8uaGVhZGxpbmUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXMuY29uZmlnPy5oZWFkZXI/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICB2aWRlb191cmw6IHJlcy5jb25maWc/LmhlYWRlcj8udmlkZW9fdXJsIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBiZ19pbWFnZV91cmw6IHJlcy5jb25maWc/LmhlYWRlcj8uYmdfaW1hZ2VfdXJsIHx8ICcnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBzdWJIZWFkaW5nc0FycmF5LmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKHJlcy5jb25maWc/LmhlYWRlcj8uc3ViX2hlYWRpbmdzIHx8IFtdKS5mb3JFYWNoKHNoID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3ViSGVhZGluZ3NBcnJheS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFtzaC5kZXNjcmlwdGlvbiB8fCAnJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0aW1vbmlhbHNHcm91cCA9IHRoaXMuZm9ybS5nZXQoJ3Rlc3RpbW9uaWFscycpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0aW1vbmlhbEl0ZW1zID0gdGVzdGltb25pYWxzR3JvdXAuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcblxuICAgICAgICAgICAgICAgIHRlc3RpbW9uaWFsc0dyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcmVzLmNvbmZpZz8udGVzdGltb25pYWxzPy50aXRsZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlcy5jb25maWc/LnRlc3RpbW9uaWFscz8uZGVzY3JpcHRpb24gfHwgJydcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRlc3RpbW9uaWFsSXRlbXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAocmVzLmNvbmZpZz8udGVzdGltb25pYWxzPy5pdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGVzdGltb25pYWxJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGltb25pYWw6IFtpdGVtPy50ZXN0aW1vbmlhbCB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogW2l0ZW0/Lm5hbWUgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2dfdXJsOiBbaXRlbT8uYmxvZ191cmwgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX3VybDogW2l0ZW0/LmltYWdlX3VybCB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fdXJsOiBbaXRlbT8udmlkZW9fdXJsIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGN0YXNHcm91cCA9IHRoaXMuZm9ybS5nZXQoJ2N0YXMnKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Rhc0l0ZW1zID0gY3Rhc0dyb3VwLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICAgICAgICBjdGFzR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByZXMuY29uZmlnPy5jdGFzPy50aXRsZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlcy5jb25maWc/LmN0YXM/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZV91cmw6IHJlcy5jb25maWc/LmN0YXM/LmltYWdlX3VybCB8fCAnJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY3Rhc0l0ZW1zLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKHJlcy5jb25maWc/LmN0YXM/Lml0ZW1zIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjdGFzSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBbaXRlbT8udGl0bGUgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBbaXRlbT8uZGVzY3JpcHRpb24gfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbl90ZXh0OiBbaXRlbT8uYnV0dG9uX3RleHQgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX3VybDogW2l0ZW0/LmltYWdlX3VybCB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RhX3VybDogW2l0ZW0/LmN0YV91cmwgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX3VybDogW2l0ZW0/LnZpZGVvX3VybCB8fCAnJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0bmVyc0dyb3VwID0gdGhpcy5mb3JtLmdldCgncGFydG5lcnMnKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydG5lcnNJdGVtcyA9IHBhcnRuZXJzR3JvdXAuZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcblxuICAgICAgICAgICAgICAgIHBhcnRuZXJzR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRhdGE/LnBhcnRuZXJzPy5kZXNjcmlwdGlvbiB8fCAnJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcGFydG5lcnNJdGVtcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICh0aGlzLmRhdGE/LnBhcnRuZXJzPy5pdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFydG5lcnNJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsOiBbaXRlbT8uaW1hZ2VfdXJsIHx8ICcnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBbaXRlbT8ubmFtZSB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFtpdGVtPy5kZXNjcmlwdGlvbiB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvZ191cmw6IFtpdGVtPy5ibG9nX3VybCB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fdXJsOiBbaXRlbT8udmlkZW9fdXJsIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGl0ZW1zQXJyYXkuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAoZGVtbz8uaXRlbXMgfHwgW10pLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zQXJyYXkucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBbbGluay50aXRsZSB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBbbGluay51cmwgfHwgJyddXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFjdFVzR3JvdXAgPSB0aGlzLmZvcm0uZ2V0KCdjb250YWN0X3VzJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uc0FycmF5ID0gY29udGFjdFVzR3JvdXAuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICAgICAgICBjb250YWN0VXNHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlcy5jb25maWc/LmNvbnRhY3RfdXM/LmRlc2NyaXB0aW9uIHx8ICcnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBxdWVzdGlvbnNBcnJheS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKHJlcy5jb25maWc/LmNvbnRhY3RfdXM/LnF1ZXN0aW9ucyB8fCBbXSkuZm9yRWFjaChxID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBbcT8ucXVlc3Rpb24gfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChxPy5vcHRpb25zIHx8IFtdKS5tYXAobyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiBbbz8ub3B0aW9uIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlb3NHcm91cCA9IHRoaXMuZm9ybS5nZXQoJ3ZpZGVvcycpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlb3NJdGVtcyA9IHZpZGVvc0dyb3VwLmdldCgnaXRlbXMnKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICAgICAgICB2aWRlb3NHcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHJlcy5jb25maWc/LnZpZGVvcz8udGl0bGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXMuY29uZmlnPy52aWRlb3M/LmRlc2NyaXB0aW9uIHx8ICcnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2aWRlb3NJdGVtcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgIChyZXMuY29uZmlnPy52aWRlb3M/Lml0ZW1zIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb3NJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFtpdGVtPy50aXRsZSB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFtpdGVtPy5kZXNjcmlwdGlvbiB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvZ191cmw6IFtpdGVtPy5ibG9nX3VybCB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsOiBbaXRlbT8uaW1hZ2VfdXJsIHx8ICcnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb191cmw6IFtpdGVtPy52aWRlb191cmwgfHwgJyddXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZWdyYXRpb25zR3JvdXAgPSB0aGlzLmZvcm0uZ2V0KCdpbnRlZ3JhdGlvbnMnKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZWdyYXRpb25zSXRlbXMgPSBpbnRlZ3JhdGlvbnNHcm91cC5nZXQoJ2l0ZW1zJykgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgICAgICAgICAgaW50ZWdyYXRpb25zR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByZXMuY29uZmlnPy5pbnRlZ3JhdGlvbnM/LnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzLmNvbmZpZz8uaW50ZWdyYXRpb25zPy5kZXNjcmlwdGlvbiB8fCAnJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaW50ZWdyYXRpb25zSXRlbXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAocmVzLmNvbmZpZz8uaW50ZWdyYXRpb25zPy5pdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRpb25zSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBbaXRlbT8udGl0bGUgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBbaXRlbT8uZGVzY3JpcHRpb24gfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2dfdXJsOiBbaXRlbT8uYmxvZ191cmwgfHwgJyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX3VybDogW2l0ZW0/LmltYWdlX3VybCB8fCAnJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fdXJsOiBbaXRlbT8udmlkZW9fdXJsIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmRVcmwgPSByZXM/LmNvbmZpZz8uc2hhcmRfdXJsO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICBjc19wcm9kdWN0X2lkOiB0aGlzLnByb2R1Y3RzTGlzdC5maW5kKHggPT4geC5pZCA9PT0gdGhpcy5kYXRhPy5jc19wcm9kdWN0X2lkKSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYWxfcHJvZHVjdF9pZDogdGhpcy5wcm9kdWN0c0xpc3QuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIHggPT4geC5pZCA9PT0gdGhpcy5kYXRhPy50cmlhbF9wcm9kdWN0X2lkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5jb25maWc/LmNzX2N0YV9pZnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NfY3RhX2lmcmFtZTogSlNPTi5wYXJzZShyZXM/LmNvbmZpZz8uY3NfY3RhX2lmcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXM/LmNvbmZpZz8udHJpYWxfY3RhX2lmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlhbF9jdGFfaWZyYW1lOiBKU09OLnBhcnNlKHJlcz8uY29uZmlnPy50cmlhbF9jdGFfaWZyYW1lKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRlci5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkTGlzdCA9IHRoaXMudXBsb2FkZXIudG9BcnJheSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydE9iaihvYmopIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBzZWFyY2hQcm9kdWN0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9kdWN0TGlzdCh7IHNlYXJjaDogZXZlbnQ/LnF1ZXJ5IHx8ICcnIH0sIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzTGlzdCA9IHRoaXMuZ3JvdXBQcm9kdWN0cyhyZXNwb25zZS5wcm9kdWN0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdyb3VwUHJvZHVjdHMocHJvZHVjdHMpIHtcbiAgICAgICAgaWYgKHByb2R1Y3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gcHJvZHVjdHMuZmlsdGVyKHggPT4geC5kZXBlbmRlbmN5X3Byb2R1Y3RzPy5sZW5ndGggPCAxICYmIHguYWN0aXZlKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gZ3JvdXBCeShwcm9kdWN0cywgJ2N1cnJlbmN5Jyk7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IHRoaXMuc29ydE9iaihwcm9kdWN0cyk7XG4gICAgICAgICAgICBsZXQgZ3JvdXBlZEFycmF5ID0gW107XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgIGlmIChwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdHNbcF0uc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBOdW1iZXIoYi5wcmljZV9wZXJfdW5pdCkgLSBOdW1iZXIoYS5wcmljZV9wZXJfdW5pdClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZEFycmF5LnB1c2goLi4udmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBlZEFycmF5ID0gZ3JvdXBlZEFycmF5Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7eC5uYW1lfSB8ICR7eC5yZWdpb259IHwgJHt4LmJpbGxpbmdfZnJlcXVlbmN5fSB8ICR7eC5taW5fdW5pdHN9IHggJHsoXG4gICAgICAgICAgICAgICAgICAgICAgICB4LnByaWNlX3Blcl91bml0IC8gMTAwXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKX0gfCAke3guY3VycmVuY3l9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBvblNhdmVGaWxlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW06IEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50ID0gdGhpcy5jaGlsZExpc3QuZmluZChcbiAgICAgICAgICAgIHggPT4geC5jb250cm9sTmFtZSA9PT0gZXZlbnQubmFtZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBjb25zdCBkYXRhID0geyBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQgfTtcbiAgICAgICAgaWYgKGV2ZW50LmZpbGUpIHtcbiAgICAgICAgICAgIGRhdGFbZXZlbnQubmFtZV0gPSBldmVudC5maWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YVtgcmVtb3ZlXyR7ZXZlbnQubmFtZX1gXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGFba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3ViJCA9IHRoaXMuaWRcbiAgICAgICAgICAgID8gdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuaWQsIGZvcm1EYXRhKVxuICAgICAgICAgICAgOiB0aGlzLmFkbWluU2VydmljZS5jcmVhdGVEb21haW5Db25maWcoZm9ybURhdGEpO1xuXG4gICAgICAgIHN1YiQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldERvbWFpbkNvbmZpZ0J5SWQodGhpcy5pZCwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGVhclZhbHVlcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbZXZlbnQubmFtZV0gPSByZXNwb25zZVtldmVudC5uYW1lXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgaXRlbS5vbkNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBWYWxpZGF0ZUZvcm0oJ2Zvcm0nKVxuICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbWFzdGVyX3N1YnNjcmlwdGlvbl9pZDogdGhpcy5hcHBDb25maWc/Lm1hc3Rlcl9zdWJzY3JpcHRpb24/LnN1YnNjcmlwdGlvbl9pZCxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBkYXRhLmNzX3Byb2R1Y3RfaWQgPSB0aGlzLmZvcm0uZ2V0KCdjc19wcm9kdWN0X2lkJykudmFsdWU/LmlkIHx8IG51bGw7XG4gICAgICAgIGRhdGEudHJpYWxfcHJvZHVjdF9pZCA9IHRoaXMuZm9ybS5nZXQoJ3RyaWFsX3Byb2R1Y3RfaWQnKS52YWx1ZT8uaWQgfHwgbnVsbDtcbiAgICAgICAgZGF0YVsnY3NfY3RhX2lmcmFtZSddID0gdGhpcy5mb3JtLnZhbHVlPy5jc19jdGFfaWZyYW1lIHx8ICcnO1xuICAgICAgICBkYXRhWyd0cmlhbF9jdGFfaWZyYW1lJ10gPSB0aGlzLmZvcm0udmFsdWU/LnRyaWFsX2N0YV9pZnJhbWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IHN1YiQgPSB0aGlzLmlkXG4gICAgICAgICAgICA/IHRoaXMuYWRtaW5TZXJ2aWNlLnVwZGF0ZURvbWFpbkNvbmZpZyh0aGlzLmlkLCBkYXRhKVxuICAgICAgICAgICAgOiB0aGlzLmFkbWluU2VydmljZS5jcmVhdGVEb21haW5Db25maWcoZGF0YSk7XG4gICAgICAgIHN1YiQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLkRvbWFpbkNvbmZpZy5VcGRhdGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZXJzLmRvbWFpbkNvbmZpZ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8aDM+UHVibGljIFBhZ2VzIENvbmZpZ3VyYXRpb248L2gzPlxuPGRpdiBjbGFzcz1cIm1iLTRcIj5cbiAgPHA+IFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhbmQgc2V0dGluZ3Mgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBwdWJsaWMgcGFnZXMgb2YgdGhpcyBkb21haW4uIDwvcD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nICYmIGRhdGE/Lmhvc3RfbmFtZVwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblNhdmUoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5NYXN0ZXJTdWJzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibWFzdGVyX3N1YnNjcmlwdGlvbl9pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuTWFzdGVyU3Vic2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgW29wdGlvbnNdPVwibWFzdGVyU3Vic2NyaXB0aW9uc0xpc3RcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1hc3Rlcl9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWFzdGVyX3N1YnNjcmlwdGlvbl9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgTWFzdGVyIFN1YnNjcmlwdGlvblwiPlxuICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuTWFzdGVyU3Vic2NyaXB0aW9uUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuTWFzdGVyU3Vic2NyaXB0aW9uUHJvZHVjdCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICBuYW1lPVwibWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgIFtvcHRpb25zXT1cIm1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3RMaXN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkJ10/LmVycm9yc31cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgTWFzdGVyIFByb2R1Y3QnXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQmxvZ0ZlYXR1cmVLZXknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiYmxvZ19mZWF0dXJlX2tleVwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQmxvZ0ZlYXR1cmVLZXknIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJsb2dfZmVhdHVyZV9rZXlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydibG9nX2ZlYXR1cmVfa2V5J10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLk1haW5Ub3MnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibWFpbl90b3NfaWRcIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLk1haW5Ub3MnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICBbb3B0aW9uc109XCJzdWJzY3JpcHRpb25Ub3NMaXN0XCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYWluX3Rvc19pZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYWluX3Rvc19pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgTWFpbiBUT1MnXCJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiaXRlbS50aXRsZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtZHJvcGRvd24+XG5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gY3JtIHN1YnNjcmlwdGlvbiBmaWVsZHMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3JtU3Vic2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNybV9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNybVN1YnNjcmlwdGlvbicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgW29wdGlvbnNdPVwiY3JtU3Vic2NyaXB0aW9uc0xpc3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX3N1YnNjcmlwdGlvbl9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NybV9zdWJzY3JpcHRpb25faWQnXT8uZXJyb3JzIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgQ1JNIFN1YnNjcmlwdGlvbidcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgICB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbiA/IGl0ZW0/Lm9yZ2FuaXNhdGlvbiArICcgLSAnICsgaXRlbS5jb250YWN0X25hbWUgOiBpdGVtPy5jb250YWN0X25hbWV9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIHt7aXRlbT8ub3JnYW5pc2F0aW9uID8gaXRlbT8ub3JnYW5pc2F0aW9uICsgJyAtICcgKyBpdGVtLmNvbnRhY3RfbmFtZSA6IGl0ZW0/LmNvbnRhY3RfbmFtZX19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1kcm9wZG93bj5cblxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNybVByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY3JtX3Byb2R1Y3RfaWRcIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNybVByb2R1Y3QnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgIFtvcHRpb25zXT1cImNybVByb2R1Y3RMaXN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3Byb2R1Y3RfaWQnXT8uZXJyb3JzIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgQ1JNIFByb2R1Y3QnXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgICB7e2l0ZW0/LnN1YnNjcmlwdGlvbl9pZCA/IGl0ZW0/Lm5hbWUgICsnIC0gU3Vic2NyaXB0aW9uSUQgPSAnKyBpdGVtLnN1YnNjcmlwdGlvbl9pZCA6IGl0ZW0/Lm5hbWV9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIHt7aXRlbT8uc3Vic2NyaXB0aW9uX2lkID8gaXRlbT8ubmFtZSAgKycgLSBTdWJzY3JpcHRpb25JRCA9ICcrIGl0ZW0uc3Vic2NyaXB0aW9uX2lkIDogaXRlbT8ubmFtZX19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dcm1Tb3VyY2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY3JtX3NvdXJjZV9pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3JtU291cmNlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBjcm0gc3Vic2NyaXB0aW9uIGZpZWxkcyBlbmQtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5BY3RpdmUnIHwgdHJhbnNsb2NvXCIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQWN0aXZlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJhY3RpdmVcIj5cbiAgICAgICAgICA8dWktc3dpdGNoIHNpemU9XCJzbWFsbFwiIHVuY2hlY2tlZExhYmVsPVwiZmFsc2VcIiBjaGVja2VkTGFiZWw9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCIgbmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2FjdGl2ZSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuSXNQcm9kdWN0RG9tYWluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuSXNQcm9kdWN0RG9tYWluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImlzX3Byb2R1Y3RfZG9tYWluXCI+XG4gICAgICAgICAgPHVpLXN3aXRjaCBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgdW5jaGVja2VkTGFiZWw9XCJmYWxzZVwiXG4gICAgICAgICAgICBjaGVja2VkTGFiZWw9XCJ0cnVlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzX3Byb2R1Y3RfZG9tYWluXCJcbiAgICAgICAgICAgIG5hbWU9XCJpc19wcm9kdWN0X2RvbWFpblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2lzX3Byb2R1Y3RfZG9tYWluJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5DYW5SZWdpc3Rlck9uTWFpblBhZ2UnIHwgdHJhbnNsb2NvXCIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ2FuUmVnaXN0ZXJPbk1haW5QYWdlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNhbl9yZWdpc3Rlcl90aHJvdWdoX21haW5fcGFnZVwiPlxuICAgICAgICAgIDx1aS1zd2l0Y2ggc2l6ZT1cInNtYWxsXCIgdW5jaGVja2VkTGFiZWw9XCJmYWxzZVwiIGNoZWNrZWRMYWJlbD1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJjYW5fcmVnaXN0ZXJfdGhyb3VnaF9tYWluX3BhZ2VcIlxuICAgICAgICAgICAgbmFtZT1cImNhbl9yZWdpc3Rlcl90aHJvdWdoX21haW5fcGFnZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjYW5fcmVnaXN0ZXJfdGhyb3VnaF9tYWluX3BhZ2UnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Tb2NpYWxMb2dpbkVuYWJsZWQnIHwgdHJhbnNsb2NvXCIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU29jaWFsTG9naW5FbmFibGUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInNvY2lhbF9sb2dpbl9lbmFibGVkXCI+XG4gICAgICAgICAgPHVpLXN3aXRjaCBzaXplPVwic21hbGxcIiB1bmNoZWNrZWRMYWJlbD1cImZhbHNlXCIgY2hlY2tlZExhYmVsPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInNvY2lhbF9sb2dpbl9lbmFibGVkXCJcbiAgICAgICAgICAgIG5hbWU9XCJzb2NpYWxfbG9naW5fZW5hYmxlZFwiIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnc29jaWFsX2xvZ2luX2VuYWJsZWQnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLk5vdGlmeUxvZ2lucycgfCB0cmFuc2xvY29cIiBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Ob3RpZnlMb2dpbnMnIHwgdHJhbnNsb2NvXCIgbmFtZT1cIm5vdGlmeV9sb2dpbnNcIj5cbiAgICAgICAgICA8dWktc3dpdGNoIHNpemU9XCJzbWFsbFwiIHVuY2hlY2tlZExhYmVsPVwiZmFsc2VcIiBjaGVja2VkTGFiZWw9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwibm90aWZ5X2xvZ2luc1wiXG4gICAgICAgICAgICBuYW1lPVwibm90aWZ5X2xvZ2luc1wiIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbm90aWZ5X2xvZ2lucyddLmVycm9ycyB9XCI+XG4gICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXktNVwiICpyYmFjQWxsb3c9XCInUGFnZXMuU3VwZXJBZG1pbidcIj5cbiAgICAgIDxoMz5QcmUtQnVpbHQgTGFuZGluZyBQYWdlcyBmb3IgVXNlciBPbmJvYXJkaW5nPC9oMz5cbiAgICAgIDwhLS0gY3Mgc3RhcnQgLS0+XG4gICAgICA8cC1hY2NvcmRpb24gY2xhc3M9XCJtdC01XCI+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidJbnN0cnVjdGlvbnMnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgIDxwPldl4oCZdmUgYnVpbHQgYW5kIG1haW50YWluIGEgY29sbGVjdGlvbiBvZiBoaWdoLWNvbnZlcnRpbmcgbGFuZGluZyBwYWdlcyBkZXNpZ25lZCB0byBoZWxwIHlvdSBxdWlja2x5IGxhdW5jaCBwb2xpc2hlZFxuICAgICAgICAgICAgICBVSXMgZm9yIG9uYm9hcmRpbmcgdXNlcnMuPC9wPlxuICAgICAgICAgICAgPHA+PHN0cm9uZz5OZXdzbGV0dGVyIFN1YnNjcmlwdGlvbiBQYWdlczo8L3N0cm9uZz48YnI+IEFmdGVyIGNvbmZpZ3VyaW5nIHlvdXIgZG9tYWluLCB5b3UgY2FuIGFjY2VzcyBwYWdlcyBsaWtlXG4gICAgICAgICAgICAgIDxzdHJvbmc+L2pvaW4vY3MxLCAvam9pbi9jczIsIC9qb2luL2NzMywgZXRjLjwvc3Ryb25nPiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBuZXdzbGV0dGVyIHNpZ24tdXBzLiA8YnI+XG4gICAgICAgICAgICAgIFN1YnNjcmliZXJzIGZyb20gdGhlc2UgcGFnZXMgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIDxzdHJvbmc+U21hcnRDUk0gbW9kdWxlPC9zdHJvbmc+LjwvcD5cbiAgICAgICAgICAgIDxwPjxzdHJvbmc+VHJpYWwgUHJvZHVjdCBTaWduLVVwIFBhZ2VzOjwvc3Ryb25nPjxicj4gRm9yIHVzZXJzIGludGVyZXN0ZWQgaW4gdHJpYWwgcHJvZHVjdHMsIHV0aWxpemUgcGFnZXMgc3VjaCBhc1xuICAgICAgICAgICAgICA8c3Ryb25nPi9qb2luL3RyaWFsMSwgL2pvaW4vdHJpYWwyLCAvam9pbi90cmlhbDMsIGV0Yy48L3N0cm9uZz4uPGJyPiBVc2VycyByZWdpc3RlcmluZyB0aHJvdWdoIHRoZXNlIHBhZ2VzIHdpbGxcbiAgICAgICAgICAgICAgYXBwZWFyIGluIHRoZSA8c3Ryb25nPkFkbWluID4gVXNlcnMgc2VjdGlvbjwvc3Ryb25nPi48L3A+XG4gICAgICAgICAgICA8cD5PbmNlIHlvdeKAmXZlIHNlbGVjdGVkIHRoZSBsYW5kaW5nIHBhZ2UgeW91IHdhbnQgdG8gdXNlIDxzdHJvbmc+KGUuZy4sIC9qb2luL3RyaWFsMyk8L3N0cm9uZz4sIG1ha2Ugc3VyZSB0byB1cGRhdGVcbiAgICAgICAgICAgICAgdGhlIDxzdHJvbmc+SW50ZXJuYWwgUGF0aDwvc3Ryb25nPiBpbiB0aGUgPHN0cm9uZz5Db3JlIHRhYjwvc3Ryb25nPiBhY2NvcmRpbmdseeKAlGkuZS4sIHNldCBpdCB0b1xuICAgICAgICAgICAgICA8c3Ryb25nPi9qb2luL3RyaWFsMzwvc3Ryb25nPi48L3A+XG4gICAgICAgICAgICA8cD5JZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGludGVncmF0aW5nIHRoZXNlIHBhZ2VzIGludG8geW91ciB3b3JrZmxvdyBvciBoYXZlIGZ1cnRoZXIgcXVlc3Rpb25zLCBmZWVsIGZyZWUgdG8gcmVhY2hcbiAgICAgICAgICAgICAgb3V0LjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtoZWFkZXJdPVwiJ0R5bmFtaWMgVmFsdWVzJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNCBtYi00XCIgZm9ybUdyb3VwTmFtZT1cInVzcHNcIj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTRcIj5Vc3BzPC9oND5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlVTUHMgVGl0bGVcIiBuYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlVTUHMgVmlkZW8gVXJsXCIgbmFtZT1cInZpZGVvX3VybFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlkZW9fdXJsXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlVTUHMgRGVzY3JpcHRpb25cIiBuYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJpdGVtc1wiIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmWyd1c3BzJ10uZ2V0KCdpdGVtcycpWydjb250cm9scyddOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBtYi0zXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJJdGVtIERlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVVzcEl0ZW0oaSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVVc3BJdGVtKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlVXNwSXRlbShpKVwiXG4gICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTIgbWItMlwiIChjbGljayk9XCJhZGRVc3BJdGVtKClcIj5cbiAgICAgICAgICAgICAgICArIEFkZCBVU1AgSXRlbVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICA8IS0tIGhlYWRlciBTRUNUSU9OIC0tPlxuPCEtLSBoZWFkZXIgU0VDVElPTiAtLT5cbjxkaXYgY2xhc3M9XCJyb3cgbXQtNFwiIGZvcm1Hcm91cE5hbWU9XCJoZWFkZXJcIj5cbiAgPGg0IGNsYXNzPVwibWItNFwiPkhlYWRlcjwvaDQ+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIEhlYWRsaW5lXCIgbmFtZT1cImhlYWRsaW5lXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImhlYWRsaW5lXCIgLz5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIFZpZGVvIFVSTFwiIG5hbWU9XCJ2aWRlb191cmxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlkZW9fdXJsXCIgLz5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSGVhZGVyIEJhY2tncm91bmQgSW1hZ2UgVVJMXCIgbmFtZT1cImJnX2ltYWdlX3VybFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJiZ19pbWFnZV91cmxcIiAvPlxuICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJIZWFkZXIgRGVzY3JpcHRpb25cIj5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Rlc2NyaXB0aW9uJ10/LmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJzdWJfaGVhZGluZ3NcIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBzdWIgb2YgZlsnaGVhZGVyJ10uZ2V0KCdzdWJfaGVhZGluZ3MnKVsnY29udHJvbHMnXTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgIGNsYXNzPVwicm93IG1iLTNcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIiAqbmdJZj1cImZbJ2hlYWRlciddLmdldCgnc3ViX2hlYWRpbmdzJylbJ2NvbnRyb2xzJ10ubGVuZ3RoXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJTdWIgSGVhZGVyIERlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Rlc2NyaXB0aW9uJ10/LmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSGVhZGVyU3ViSGVhZGluZyhpKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlSGVhZGVyU3ViSGVhZGluZyhpKVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlSGVhZGVyU3ViSGVhZGluZyhpKVwiXG4gICAgICAgICAgbmdiVG9vbHRpcD1cIlJlbW92ZVwiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTIgbWItMlwiIChjbGljayk9XCJhZGRIZWFkZXJTdWJIZWFkaW5nKClcIj5cbiAgICAgICsgQWRkIFN1YiBIZWFkaW5nXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIGhlYWRlciBTRUNUSU9OIEVORCAtLT5cblxuXG5cbjxkaXYgY2xhc3M9XCJyb3cgbXQtNCBtYi00XCIgZm9ybUdyb3VwTmFtZT1cInBhcnRuZXJzXCI+XG4gIDxoNCBjbGFzcz1cIm1iLTRcIj5QYXJ0bmVyczwvaDQ+XG4gIDwhLS0gVGl0bGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiUGFydG5lciBUaXRsZVwiIG5hbWU9XCJ0aXRsZVwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIC8+XG4gICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGVzY3JpcHRpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiUGFydG5lcnMgRGVzY3JpcHRpb25cIiBuYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIFBhcnRuZXIgSXRlbXMgLS0+XG4gIDxkaXYgZm9ybUFycmF5TmFtZT1cIml0ZW1zXCIgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhcnRuZXJzSXRlbXMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgY2xhc3M9XCJyb3cgYm9yZGVyIHAtMyBtYi0zXCI+XG4gICAgICA8IS0tIE5hbWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIk5hbWVcIiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiIG5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEJsb2cgVVJMIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJCbG9nIFVybFwiIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCIgbmFtZT1cImJsb2dfdXJsXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYmxvZ191cmxcIi8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVmlkZW8gVVJMIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJWaWRlbyBVcmxcIiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiIG5hbWU9XCJ2aWRlb191cmxcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ2aWRlb191cmxcIi8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkltYWdlIFVybFwiIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCIgbmFtZT1cImN0YXNfdGl0bGVcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJpbWFnZV91cmxcIi8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmVtb3ZlIEJ1dHRvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LXN0YXJ0IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmVcIiAoY2xpY2spPVwicmVtb3ZlUGFydG5lckl0ZW0oaSlcIiBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQWRkIE5ldyBQYXJ0bmVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG10LTJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTIgbWItMlwiIChjbGljayk9XCJhZGRQYXJ0bmVySXRlbSgpXCI+KyBBZGQgUGFydG5lcjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG5cbjxkaXYgY2xhc3M9XCJyb3cgbXQtMyBtYi00XCIgZm9ybUdyb3VwTmFtZT1cInRlc3RpbW9uaWFsc1wiPlxuICA8aDQgY2xhc3M9XCJtYi00XCI+VGVzdGltb25pYWxzIFNlY3Rpb248L2g0PlxuXG4gIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJUaXRsZVwiIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCIgbmFtZT1cInRlc3RpbW9uaWFsc190aXRsZVwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAvPlxuICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiRGVzY3JpcHRpb25cIiBjbGFzcz1cImNvbC0xMlwiIG5hbWU9XCJ0ZXN0aW1vbmlhbHNfZGVzY3JpcHRpb25cIj5cbiAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cbiAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgPCEtLSBJdGVtcyBMaXN0IC0tPlxuICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJpdGVtc1wiIGNsYXNzPVwiY29sLTEyIG10LTNcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRlc3RpbW9uaWFsc0l0ZW1zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIGNsYXNzPVwicm93IGJvcmRlciBwLTMgbWItM1wiPlxuXG4gICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiTmFtZVwiIGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgLz5cbiAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiQmxvZyBVUkxcIiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYmxvZ191cmxcIiAvPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJJbWFnZSBVUkxcIiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW1hZ2VfdXJsXCIgLz5cbiAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVmlkZW8gVVJMXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInZpZGVvX3VybFwiIC8+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlRlc3RpbW9uaWFsXCIgY2xhc3M9XCJjb2wtbWQtMTBcIj5cbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXN0aW1vbmlhbFwiPjwvdGV4dGFyZWE+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxuICAgICAgICA8aVxuICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlJlbW92ZVwiIChjbGljayk9XCJyZW1vdmVUZXN0aW1vbmlhbEl0ZW0oaSlcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlVGVzdGltb25pYWxJdGVtKGkpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZVRlc3RpbW9uaWFsSXRlbShpKVwiIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgbXQtMlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXQtMiBtYi0yXCIgKGNsaWNrKT1cImFkZFRlc3RpbW9uaWFsSXRlbSgpXCI+KyBBZGQgVGVzdGltb25pYWw8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJyb3cgbXQtMyBtYi00XCIgZm9ybUdyb3VwTmFtZT1cImNvbnRhY3RfdXNcIj5cbiAgPGg0IGNsYXNzPVwibWItM1wiPkNvbnRhY3QgVXMgU2VjdGlvbjwvaDQ+XG5cbiAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkRlc2NyaXB0aW9uXCIgY2xhc3M9XCJjb2wtMTJcIiBuYW1lPVwiY29udGFjdF91c19kZXNjcmlwdGlvblwiPlxuICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICA8IS0tIFF1ZXN0aW9ucyAtLT5cbiAgPGRpdiBmb3JtQXJyYXlOYW1lPVwicXVlc3Rpb25zXCIgY2xhc3M9XCJjb2wtMTIgbXQtM1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9uR3JvdXAgb2YgY29udGFjdFVzUXVlc3Rpb25zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIGNsYXNzPVwicm93IGJvcmRlciBwLTMgbWItM1wiPlxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlF1ZXN0aW9uXCIgY2xhc3M9XCJjb2wtbWQtMTBcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblwiIC8+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDb250YWN0VXNRdWVzdGlvbihpKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlQ29udGFjdFVzUXVlc3Rpb24oaSlcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUNvbnRhY3RVc1F1ZXN0aW9uKGkpXCJcbiAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gT3B0aW9ucyBpbnNpZGUgZWFjaCBxdWVzdGlvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiBmb3JtQXJyYXlOYW1lPVwib3B0aW9uc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgYm9yZGVyIHAtM1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBnZXRRdWVzdGlvbk9wdGlvbnMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxuICAgICAgICA+XG4gICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIk9wdGlvblwiIGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cIm9wdGlvblwiIC8+XG4gICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbnRhY3RVc09wdGlvbihpLCBqKVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZUNvbnRhY3RVc09wdGlvbihpLCBqKVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUNvbnRhY3RVc09wdGlvbihpLCBqKVwiXG4gICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmUgT3B0aW9uXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cImFkZENvbnRhY3RVc09wdGlvbihpKVwiPlxuICAgICAgICAgICAgKyBBZGQgT3B0aW9uXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEVuZCBvcHRpb25zIC0tPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgbXQtM1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkQ29udGFjdFVzUXVlc3Rpb24oKVwiPisgQWRkIFF1ZXN0aW9uPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cblxuXG48ZGl2IGNsYXNzPVwicm93IG10LTMgbWItNFwiIGZvcm1Hcm91cE5hbWU9XCJ2aWRlb3NcIj5cbiAgPGg0IGNsYXNzPVwibWItM1wiPlZpZGVvcyBTZWN0aW9uPC9oND5cblxuICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVGl0bGVcIiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiIG5hbWU9XCJ2aWRlb3NfdGl0bGVcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkRlc2NyaXB0aW9uXCIgY2xhc3M9XCJjb2wtMTJcIiBuYW1lPVwidmlkZW9zX2Rlc2NyaXB0aW9uXCI+XG4gICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gIDwhLS0gVmlkZW8gSXRlbXMgLS0+XG4gIDxkaXYgZm9ybUFycmF5TmFtZT1cIml0ZW1zXCIgY2xhc3M9XCJjb2wtMTIgbXQtM1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmlkZW9zSXRlbXMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgY2xhc3M9XCJyb3cgYm9yZGVyIHAtMyBtYi0zXCI+XG5cbiAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJUaXRsZVwiIGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIC8+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkJsb2cgVVJMXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImJsb2dfdXJsXCIgLz5cbiAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSW1hZ2UgVVJMXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImltYWdlX3VybFwiIC8+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlZpZGVvIFVSTFwiIGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ2aWRlb191cmxcIiAvPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJEZXNjcmlwdGlvblwiIGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlVmlkZW9JdGVtKGkpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVWaWRlb0l0ZW0oaSlcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZVZpZGVvSXRlbShpKVwiXG4gICAgICAgICAgbmdiVG9vbHRpcD1cIlJlbW92ZVwiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgbXQtMlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXQtMiBtYi0yXCIgKGNsaWNrKT1cImFkZFZpZGVvSXRlbSgpXCI+KyBBZGQgVmlkZW88L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG5cbjxkaXYgY2xhc3M9XCJyb3cgbXQtNCBtYi00XCIgZm9ybUdyb3VwTmFtZT1cImN0YXNcIj5cbiAgPGg0IGNsYXNzPVwibWItNFwiPkNUQXMgU2VjdGlvbjwvaDQ+XG5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJUaXRsZVwiIG5hbWU9XCJ0aXRsZVwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIC8+XG4gICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiRGVzY3JpcHRpb25cIiBuYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIiAvPlxuICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkltYWdlIFVSTFwiIG5hbWU9XCJpbWFnZV91cmxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW1hZ2VfdXJsXCIgLz5cbiAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDVEEgSXRlbXMgLS0+XG4gIDxkaXYgZm9ybUFycmF5TmFtZT1cIml0ZW1zXCIgY2xhc3M9XCJjb2wtMTIgbXQtM1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3Rhc0l0ZW1zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIGNsYXNzPVwicm93IGJvcmRlciBwLTMgbWItMyBuZy11bnRvdWNoZWQgbmctcHJpc3RpbmUgbmctdmFsaWQgbmctc3Rhci1pbnNlcnRlZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiSW1hZ2UgVVJMXCIgbmFtZT1cImltYWdlX3VybFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW1hZ2VfdXJsXCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiQ3RhIFVSTFwiIG5hbWU9XCJjdGFfdXJsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjdGFfdXJsXCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVmlkZW8gVVJMXCIgbmFtZT1cInZpZGVvX3VybFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlkZW9fdXJsXCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkNUQSBUaXRsZVwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkNUQSBEZXNjcmlwdGlvblwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkJ1dHRvbiBUZXh0XCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnV0dG9uX3RleHRcIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDdGFzSXRlbShpKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlQ3Rhc0l0ZW0oaSlcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUN0YXNJdGVtKGkpXCJcbiAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgbXQtMlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXQtMiBtYi0yXCIgKGNsaWNrKT1cImFkZEN0YXNJdGVtKClcIj4rIEFkZCBDVEEgSXRlbTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicm93IG10LTMgbWItNFwiIGZvcm1Hcm91cE5hbWU9XCJpbnRlZ3JhdGlvbnNcIj5cbiAgPGg0IGNsYXNzPVwibWItM1wiPkludGVncmF0aW9ucyBTZWN0aW9uPC9oND5cblxuICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiVGl0bGVcIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAvPlxuICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiRGVzY3JpcHRpb25cIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgcm93cz1cIjNcIj48L3RleHRhcmVhPlxuICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJpdGVtc1wiIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaW50ZWdyYXRpb25zSXRlbXMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXG4gICAgICBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTMgcm91bmRlZCBiZy1saWdodFwiXG4gICAgPlxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlRpdGxlXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiRGVzY3JpcHRpb25cIiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIiAvPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJCbG9nIFVSTFwiIGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJibG9nX3VybFwiIC8+XG4gICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkltYWdlIFVSTFwiIGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJpbWFnZV91cmxcIiAvPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJWaWRlbyBVUkxcIiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidmlkZW9fdXJsXCIgLz5cbiAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSW50ZWdyYXRpb25JdGVtKGkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIFJlbW92ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgbXQtMlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkSW50ZWdyYXRpb25JdGVtKClcIj5cbiAgICAgICAgKyBBZGQgSW50ZWdyYXRpb25cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdyBtdC00IG1iLTRcIj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTNcIj5SZXNvdXJjZXMgU2VjdGlvbjwvaDQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuUmVzb3VyY2VUYWdsaW5lJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJyZXNvdXJjZXNfdGFnbGluZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlJlc291cmNlVGFnbGluZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInJlc291cmNlc190YWdsaW5lXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncmVzb3VyY2VzX3RhZ2xpbmUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuUmVzb3VyY2VEZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiBuYW1lPVwicmVzb3VyY2VzX2Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuUmVzb3VyY2VEZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cInJlc291cmNlc19kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3Jlc291cmNlc19kZXNjcmlwdGlvbiddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgbWF0Y2hIZWlnaHQ9XCJjYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlc291cmNlX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5SZXNvdXJjZUltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5SZXNvdXJjZUltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidyZXNvdXJjZXNfaW1hZ2UnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ3Jlc291cmNlc19pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBCb29rIGEgRGVtbyBMaW5rcyAtLT5cbjxkaXYgY2xhc3M9XCJyb3cgbXQtNFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPGg1Pnt7ICdBZG1pbi5Eb21haW5Db25maWcuQm9va0RlbW9MaW5rcycgfCB0cmFuc2xvY28gfX08L2g1PlxuICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImJvb2tfZGVtb1wiPlxuICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgbGFiZWw9XCJEZXNjcmlwdGlvblwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cbiAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJpdGVtc1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsaW5rIG9mIGZbJ2Jvb2tfZGVtbyddLmdldCgnaXRlbXMnKVsnY29udHJvbHMnXTsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGxhYmVsPVwiTGluayBUaXRsZVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBsYWJlbD1cIkxpbmsgVVJMXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidXJsXCIgLz5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVtb3ZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVCb29rRGVtb0xpbmsoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVCb29rRGVtb0xpbmsoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJyZW1vdmVCb29rRGVtb0xpbmsoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXQtMiBtYi0yXCIgKGNsaWNrKT1cImFkZEJvb2tEZW1vTGluaygpXCI+KyBBZGQgQm9vayBEZW1vIExpbms8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidDb21pbmcgc29vbiBwYWdlcyAtIFN1YnNjcmliZSB0byBuZXdzbGV0dGVyJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8cD5Db21pbmdTb29uIFBhZ2VzIHdpbGwgZW5hYmxlIHVzZXJzIHRvIHN1YnNjcmliZSB0byBOZXdzbGV0dGVycyBhbmQgYXJlIGFjY2Vzc2libGUgYXQgdGhlIGludGVybmFsIHBhdGhzIC9qb2luL2NzMSxcbiAgICAgICAgICAgICAgL2pvaW4vY3MyLCBldGMuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gbGl2ZSBwYWdlIGxpbmsgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCIgKm5nSWY9XCJzaGFyZFVybFwiPlxuICAgICAgICAgICAgPHNwYW4+U2VlIHRoZSBsaXZlIHBhZ2UgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU2VlTGl2ZUNzJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+IDogPGEgW2hyZWZdPVwic2hhcmRVcmwgKyAnL2pvaW4vY3MxJ1wiIHRhcmdldD1cIl9ibGFua1wiPnt7IHNoYXJkVXJsIH19L2pvaW4vY3MxPC9hPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcHJvZHVjdF9pZFwiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwicHJvZHVjdHNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcHJvZHVjdF9pZFwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiIFtkZWxheV09XCIxMDAwXCIgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgnY3NfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCdjc19wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzQ3JtU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0NybVNvdXJjZUlkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjc19jcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX3BkZl9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc1BkZlNvdXJjZUlkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjc19wZGZfc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfcGRmX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX3ZpZGVvX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjc192aWRlb191cmxcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc192aWRlb191cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NCb29rRGVtb1VybCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfYm9va19kZW1vX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzQm9va0RlbW9VcmwnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjc19ib29rX2RlbW9fdXJsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfYm9va19kZW1vX3VybCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc0N0YUlmcmFtZScgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfY3RhX2lmcmFtZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzQ3RhSWZyYW1lJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfY3RhX2lmcmFtZVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2N0YV9pZnJhbWUnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3Nfam9pbl9tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3NKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImNzX2pvaW5fbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2pvaW5fbWVzc2FnZSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc1BkZkRvd25sb2FkVGV4dCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcGRmX2Rvd25sb2FkX3RleHRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3NQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJjc19wZGZfZG93bmxvYWRfdGV4dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX3BkZl9kb3dubG9hZF90ZXh0J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtYXRjaEhlaWdodD1cImNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY3NfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgSW1hZ2UnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2NzX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuQ3NJbWFnZTInIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2UyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIEltYWdlMidcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCInY3NfaW1hZ2UyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZTInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19wZGZfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzUGRmSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUGRmSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgUGRmIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19wZGZfaW1hZ2UnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ2NzX3BkZl9pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlX2JnXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc0ltYWdlQmcnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2VCZycgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCIgW3RpdGxlXT1cIidDcyBQZGYgSW1hZ2UgQmcnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2NzX2ltYWdlX2JnJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZV9iZyddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlX2JnMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuQ3NJbWFnZUJnMicgfCB0cmFuc2xvY28gfX0gPHNwYW4gY2xhc3M9XCJpbmZvLWNpcmNsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3NJbWFnZUJnMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCIgW3RpdGxlXT1cIidDcyBQZGYgSW1hZ2UgQmcyJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19pbWFnZV9iZzInXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ2NzX2ltYWdlX2JnMiddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICA8L3AtYWNjb3JkaW9uPlxuICAgICAgPCEtLSBjcyBpbWFnZSBzZWN0aW9uIGVuZCAtLT5cbiAgICAgIDwhLS0gdHJpYWwgc3RhcnQgLS0+XG4gICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidKb2luIG5vdyBwYWdlcyAtIFN1YnNjcmliZSB0byBwcm9kdWN0J1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8cD5UcmlhbCBQYWdlcyB3aWxsIGVuYWJsZSB1c2VycyB0byBzaWduIHVwIHRvIHJlYWwgcHJvZHVjdHMgYW5kIGFyZSBhY2Nlc3NpYmxlIGF0IHRoZSBwYXRoIC9qb2luL3RyaWFsMSxcbiAgICAgICAgICAgICAgL2pvaW4vdHJpYWwyLCBldGMuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gbGl2ZSBwYWdlIGxpbmsgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCIgKm5nSWY9XCJzaGFyZFVybFwiPlxuICAgICAgICAgICAgPHNwYW4+U2VlIHRoZSBsaXZlIHBhZ2UgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU2VlTGl2ZVRyaWFsJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+IDogPGEgW2hyZWZdPVwic2hhcmRVcmwgKyAnL2pvaW4vdHJpYWwxJ1wiIHRhcmdldD1cIl9ibGFua1wiPnt7IHNoYXJkVXJsIH19L2pvaW4vdHJpYWwxPC9hPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFByb2R1Y3QnIHwgdHJhbnNsb2NvXCIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtzdWdnZXN0aW9uc109XCJwcm9kdWN0c0xpc3RcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9wcm9kdWN0X2lkXCIgZGF0YUtleT1cImlkXCIgZmllbGQ9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCIgW2RlbGF5XT1cIjEwMDBcIiAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoUHJvZHVjdCgkZXZlbnQpXCIgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIiBbaW5wdXRTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCd0cmlhbF9wcm9kdWN0X2lkJykudG91Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ3RyaWFsX3Byb2R1Y3RfaWQnKS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGJvcmRlcjogJzFweCBzb2xpZCAjZmY1ODZiJyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGJvcmRlcjogJzFweCBzb2xpZCBncmF5JyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxDcm1Tb3VyY2VJZCcgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfY3JtX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbENybVNvdXJjZUlkJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9jcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX3BkZl9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQZGZTb3VyY2VJZCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY3JtU291cmNlc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcGRmX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX3BkZl9zb3VyY2VfaWQnXT8uZXJyb3JzIH1cIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgQ1JNIFNvdXJjZSdcIlxuICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF92aWRlb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbFZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfdmlkZW9fdXJsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfdmlkZW9fdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsQm9va0RlbW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX2Jvb2tfZGVtb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxCb29rRGVtb1VybCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX2Jvb2tfZGVtb191cmxcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9ib29rX2RlbW9fdXJsJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsQ3RhSWZyYW1lJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF9jdGFfaWZyYW1lXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsQ3RhSWZyYW1lJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfY3RhX2lmcmFtZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2N0YV9pZnJhbWUnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfam9pbl9tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSm9pbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9qb2luX21lc3NhZ2VcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9qb2luX21lc3NhZ2UnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHJpYWxfcGRmX2Rvd25sb2FkX3RleHRcIiBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsUGRmRG93bmxvYWRUZXh0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcGRmX2Rvd25sb2FkX3RleHRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9wZGZfZG93bmxvYWRfdGV4dCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgbWF0Y2hIZWlnaHQ9XCJjYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ1RyaWFsIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid0cmlhbF9pbWFnZSdcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsndHJpYWxfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmlhbF9pbWFnZTJcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsSW1hZ2UyJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW3RpdGxlXT1cIidUcmlhbCBJbWFnZTInXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlMidcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsndHJpYWxfaW1hZ2UyJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidHJpYWxfcGRmX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFBkZkltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbFBkZkltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbdGl0bGVdPVwiJ1RyaWFsIFBkZiBJbWFnZSdcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfcGRmX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9wZGZfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmlhbF9pbWFnZV9iZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVHJpYWxJbWFnZUJnJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlQmcnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFt0aXRsZV09XCInVHJpYWwgSW1hZ2UgQmcnXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlX2JnJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZV9iZyddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlX2JnMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVHJpYWxJbWFnZUJnMicgfCB0cmFuc2xvY28gfX0gPHNwYW4gY2xhc3M9XCJpbmZvLWNpcmNsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxJbWFnZUJnMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW3RpdGxlXT1cIidUcmlhbCBJbWFnZSBCZzInXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlX2JnMidcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsndHJpYWxfaW1hZ2VfYmcyJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgIDwvcC1hY2NvcmRpb24+XG4gICAgICA8IS0tIHRyaWFsIGltYWdlIHNlY3Rpb24gZW5kIC0tPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWVuZCBtdC0zXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwiYmFjaygpXCI+XG4gICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj57eyAnQnV0dG9uLlN1Ym1pdCcgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy1jb250YWluZXI+XG48ZGl2ICpuZ0lmPVwiIWRhdGE/Lmhvc3RfbmFtZSAmJiAhaXNMb2FkaW5nXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5Eb21haW5Db25maWcuRW5hYmxlQ29uZmlnVGFiJyB8IHRyYW5zbG9jb1wiPiA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI3BhcnRuZXJDcm9wcGVyIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+VXBsb2FkIFBhcnRuZXIgSW1hZ2U8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8c21hbGw+WW91IGNhbiB1cGxvYWQgSlBHLCBQTkcsIG9yIEdJRiBmaWxlcy4gQXZvaWQgaW1hZ2VzIHdpdGggY2VsZWJyaXRpZXMsIG51ZGl0eSwgb3IgYXJ0d29yay48L3NtYWxsPlxuICAgIDxwdy1pbWFnZS1jcm9wcGVyXG4gICAgICBhc3BlY3RSYXRpbz1cImF1dG9cIlxuICAgICAgKGltYWdlU2VsZWN0aW9uRXZlbnQpPVwib25QYXJ0bmVySW1hZ2VTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VQYXJ0bmVyTW9kYWwoKVwiXG4gICAgPjwvcHctaW1hZ2UtY3JvcHBlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|