@posiwise/admin-module 0.0.149 → 0.0.150
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/index.mjs +2 -1
- package/esm2022/lib/admin-module.routing.mjs +50 -5
- package/esm2022/lib/admin.module.mjs +16 -1
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +3 -3
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +11 -10
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +12 -11
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +3 -3
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +2 -2
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +21 -9
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +15 -13
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +3 -3
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +3 -3
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +3 -3
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +3 -3
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +3 -3
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +3 -3
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +2 -2
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +3 -3
- package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +3 -3
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +14 -13
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +3 -3
- package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +3 -3
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +3 -3
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +3 -3
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +5 -3
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +3 -3
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +3 -3
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +3 -3
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +3 -3
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +3 -3
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +231 -0
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +33 -0
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +108 -0
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +54 -0
- package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +61 -0
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +16 -15
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +1 -1
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +1 -1
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +1 -1
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +1 -1
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +8 -7
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +16 -15
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +3 -3
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +16 -15
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +15 -14
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +15 -14
- package/esm2022/lib/components/tracking/events/events.component.mjs +15 -14
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +16 -15
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +3 -3
- package/esm2022/lib/shared/interface/resource.interface.mjs +2 -0
- package/esm2022/lib/shared/routers/routers.mjs +5 -2
- package/fesm2022/posiwise-admin-module.mjs +679 -202
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/admin.module.d.ts +73 -68
- package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +3 -0
- package/lib/components/config/global-config-list/global-config-list.component.d.ts +3 -0
- package/lib/components/credentials/credentials/credentials.component.d.ts +3 -0
- package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +3 -0
- package/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.d.ts +2 -0
- package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +3 -0
- package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +3 -0
- package/lib/components/faqs/add-faq/add-faq.component.d.ts +3 -0
- package/lib/components/faqs/edit-faq/edit-faq.component.d.ts +3 -0
- package/lib/components/faqs/faqs-list/faqs-list.component.d.ts +3 -0
- package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +3 -0
- package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +3 -0
- package/lib/components/incidents/add-edit-incident/add-edit-incident.component.d.ts +3 -0
- package/lib/components/incidents/incidents-list/incidents-list.component.d.ts +3 -0
- package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +3 -0
- package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +3 -0
- package/lib/components/mailer/mailer-details/mailer-details.component.d.ts +3 -0
- package/lib/components/mailer/mailer-list/mailer-list.component.d.ts +3 -0
- package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +3 -0
- package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +3 -0
- package/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.d.ts +3 -0
- package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +4 -0
- package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +3 -0
- package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +3 -0
- package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +3 -0
- package/lib/components/permissions/roles-list/roles-list.component.d.ts +3 -0
- package/lib/components/products/products-list/products-list.component.d.ts +3 -0
- package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +62 -0
- package/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.d.ts +10 -0
- package/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.d.ts +70 -0
- package/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.d.ts +24 -0
- package/lib/components/resources/resources-lists-insight/resources-lists-insight.component.d.ts +22 -0
- package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +3 -0
- package/lib/components/subscriptions/subscription-products/subscription-products.component.d.ts +3 -0
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +3 -0
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.d.ts +4 -1
- package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +4 -1
- package/lib/components/tips/tips-list/tips-list.component.d.ts +3 -0
- package/lib/components/users/users-list/users-list.component.d.ts +3 -0
- package/lib/shared/interface/resource.interface.d.ts +73 -0
- package/lib/shared/routers/routers.d.ts +3 -0
- package/package.json +1 -1
|
@@ -11,16 +11,18 @@ import { ROUTERS } from '../../../../shared/routers/routers';
|
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@posiwise/admin-module-utils";
|
|
13
13
|
import * as i2 from "@posiwise/common-services";
|
|
14
|
-
import * as i3 from "primeng/
|
|
15
|
-
import * as i4 from "primeng/
|
|
16
|
-
import * as i5 from "primeng/
|
|
17
|
-
import * as i6 from "
|
|
18
|
-
import * as i7 from "
|
|
19
|
-
import * as i8 from "
|
|
20
|
-
import * as i9 from "@
|
|
21
|
-
import * as i10 from "
|
|
22
|
-
import * as i11 from "@posiwise/
|
|
23
|
-
import * as i12 from "
|
|
14
|
+
import * as i3 from "primeng/api";
|
|
15
|
+
import * as i4 from "primeng/tooltip";
|
|
16
|
+
import * as i5 from "primeng/accordion";
|
|
17
|
+
import * as i6 from "primeng/autocomplete";
|
|
18
|
+
import * as i7 from "primeng/dropdown";
|
|
19
|
+
import * as i8 from "@angular/common";
|
|
20
|
+
import * as i9 from "@angular/forms";
|
|
21
|
+
import * as i10 from "ngx-ui-switch";
|
|
22
|
+
import * as i11 from "@posiwise/shared-components";
|
|
23
|
+
import * as i12 from "primeng/progressspinner";
|
|
24
|
+
import * as i13 from "@posiwise/directives";
|
|
25
|
+
import * as i14 from "@jsverse/transloco";
|
|
24
26
|
export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
25
27
|
constructor(injector, adminService, productService) {
|
|
26
28
|
super(injector);
|
|
@@ -203,7 +205,7 @@ export class DomainConfigBuildComponent extends AppBaseComponent {
|
|
|
203
205
|
});
|
|
204
206
|
}
|
|
205
207
|
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 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
206
|
-
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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n formControlName=\"master_subscription_id\">\n <option [value]=\"null\">Select Master Subscription</option>\n <option *ngFor=\"let item of masterSubscriptionsList\"\n [value]=\"item.id\">\n {{item?.organisation ? item?.organisation +' - '+ item.contact_name : item?.contact_name}}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['master_subscription_product_id']?.errors\n }\"\n formControlName=\"master_subscription_product_id\">\n <option [value]=\"null\">Select Master Product</option>\n <option *ngFor=\"let item of masterSubscriptionProductList\"\n [value]=\"item.id\">\n {{ item.name }}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['main_tos_id']?.errors }\"\n formControlName=\"main_tos_id\">\n <option [value]=\"null\">Select Main TOS</option>\n <option *ngFor=\"let item of subscriptionTosList\"\n [value]=\"item.id\">\n <span [innerHTML]=\"item.title\"></span>\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_subscription_id']?.errors }\"\n formControlName=\"crm_subscription_id\">\n <option [value]=\"null\">Select CRM Subscription</option>\n <option *ngFor=\"let item of crmSubscriptionsList\"\n [value]=\"item.id\">\n {{item?.organisation ? item?.organisation +' - '+ item.contact_name : item?.contact_name}}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_product_id']?.errors }\"\n formControlName=\"crm_product_id\">\n <option [value]=\"null\">Select CRM Product</option>\n <option *ngFor=\"let item of crmProductList\"\n [value]=\"item.id\">\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id']?.errors }\"\n formControlName=\"crm_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\"\n [value]=\"item.id\">\n {{ item.name }}\n </option>\n </select>\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 <h3>...Coming Soon...</h3>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_crm_source_id']?.errors\n }\" formControlName=\"cs_crm_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_pdf_source_id']?.errors\n }\" formControlName=\"cs_pdf_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_crm_source_id']?.errors\n }\" formControlName=\"trial_crm_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_pdf_source_id']?.errors\n }\" formControlName=\"trial_pdf_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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: i3.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: i4.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i4.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "component", type: i5.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: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i8.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: i9.CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i9.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i11.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i11.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i12.TranslocoPipe, name: "transloco" }] }); }
|
|
208
|
+
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 [showClear]=\"true\"\n [options]=\"masterSubscriptionsList\"\n formControlName=\"master_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n [placeholder]=\"'Select Master Subscription'\"\n optionValue=\"id\"\n >\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 </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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 >\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 </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 [showClear]=\"true\"\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 >\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 </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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 <h3>...Coming Soon...</h3>\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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 [showClear]=\"true\"\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: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.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: i5.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i5.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "component", type: i6.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: i7.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: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.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: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }] }); }
|
|
207
209
|
}
|
|
208
210
|
__decorate([
|
|
209
211
|
ValidateForm('form'),
|
|
@@ -213,9 +215,9 @@ __decorate([
|
|
|
213
215
|
], DomainConfigBuildComponent.prototype, "onSave", null);
|
|
214
216
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DomainConfigBuildComponent, decorators: [{
|
|
215
217
|
type: Component,
|
|
216
|
-
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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n formControlName=\"master_subscription_id\">\n <option [value]=\"null\">Select Master Subscription</option>\n <option *ngFor=\"let item of masterSubscriptionsList\"\n [value]=\"item.id\">\n {{item?.organisation ? item?.organisation +' - '+ item.contact_name : item?.contact_name}}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['master_subscription_product_id']?.errors\n }\"\n formControlName=\"master_subscription_product_id\">\n <option [value]=\"null\">Select Master Product</option>\n <option *ngFor=\"let item of masterSubscriptionProductList\"\n [value]=\"item.id\">\n {{ item.name }}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['main_tos_id']?.errors }\"\n formControlName=\"main_tos_id\">\n <option [value]=\"null\">Select Main TOS</option>\n <option *ngFor=\"let item of subscriptionTosList\"\n [value]=\"item.id\">\n <span [innerHTML]=\"item.title\"></span>\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_subscription_id']?.errors }\"\n formControlName=\"crm_subscription_id\">\n <option [value]=\"null\">Select CRM Subscription</option>\n <option *ngFor=\"let item of crmSubscriptionsList\"\n [value]=\"item.id\">\n {{item?.organisation ? item?.organisation +' - '+ item.contact_name : item?.contact_name}}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_product_id']?.errors }\"\n formControlName=\"crm_product_id\">\n <option [value]=\"null\">Select CRM Product</option>\n <option *ngFor=\"let item of crmProductList\"\n [value]=\"item.id\">\n {{item?.subscription_id ? item?.name +' - SubscriptionID = '+ item.subscription_id : item?.name}}\n </option>\n </select>\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 <select class=\"form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id']?.errors }\"\n formControlName=\"crm_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\"\n [value]=\"item.id\">\n {{ item.name }}\n </option>\n </select>\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 <h3>...Coming Soon...</h3>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_crm_source_id']?.errors\n }\" formControlName=\"cs_crm_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['cs_pdf_source_id']?.errors\n }\" formControlName=\"cs_pdf_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_crm_source_id']?.errors\n }\" formControlName=\"trial_crm_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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 <select class=\"form-select\" [ngClass]=\"{\n 'is-invalid': submitted && f['trial_pdf_source_id']?.errors\n }\" formControlName=\"trial_pdf_source_id\">\n <option [value]=\"null\">Select CRM Source</option>\n <option *ngFor=\"let item of crmSourcesList\" [value]=\"item.id\"> {{ item.name }} </option>\n </select>\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" }]
|
|
218
|
+
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 [showClear]=\"true\"\n [options]=\"masterSubscriptionsList\"\n formControlName=\"master_subscription_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['master_subscription_id']?.errors }\"\n [placeholder]=\"'Select Master Subscription'\"\n optionValue=\"id\"\n >\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 </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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 >\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 </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 [showClear]=\"true\"\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 >\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 </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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 <h3>...Coming Soon...</h3>\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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 [showClear]=\"true\"\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 [showClear]=\"true\"\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" }]
|
|
217
219
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AdminService }, { type: i2.ProductService }], propDecorators: { uploader: [{
|
|
218
220
|
type: ViewChildren,
|
|
219
221
|
args: [CustomUploaderComponent]
|
|
220
222
|
}], onSave: [] } });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1idWlsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZG9tYWluLWNvbmZpZy9kb21haW4tY29uZmlnLWRldGFpbHMvZG9tYWluLWNvbmZpZy1idWlsZC9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9kb21haW4tY29uZmlnL2RvbWFpbi1jb25maWctZGV0YWlscy9kb21haW4tY29uZmlnLWJ1aWxkL2RvbWFpbi1jb25maWctYnVpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNN0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGdCQUFnQjtJQTRC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Q0FBQztnQkFDcEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztTQUNKLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQTFOUSwwQkFBMEI7bUdBQTFCLDBCQUEwQiwyRkFDckIsdUJBQXVCLHVFQ3BCekMsZzA5QkE2Z0JBOztBRHhUSTtJQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7d0RBeUJwQjs0RkExTlEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNJLHdCQUF3QjtxSUFJSyxRQUFRO3NCQUE5QyxZQUFZO3VCQUFDLHVCQUF1QjtnQkFpTXJDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UsIEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL3NoYXJlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERvbWFpbkNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvZG9tYWluLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWRvbWFpbi1jb25maWctYnVpbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEb21haW5Db25maWdCdWlsZENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGRyZW4oQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQpIHVwbG9hZGVyOiBRdWVyeUxpc3Q8Q3VzdG9tVXBsb2FkZXJDb21wb25lbnQ+O1xuXG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGlkOiBudW1iZXI7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGRhdGE6IERvbWFpbkNvbmZpZztcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgbWFzdGVyU3Vic2NyaXB0aW9uUHJvZHVjdExpc3QgPSBbXTtcbiAgICBtYXN0ZXJTdWJzY3JpcHRpb25zTGlzdCA9IFtdO1xuICAgIHN1YnNjcmlwdGlvblRvc0xpc3QgPSBbXTtcbiAgICBjcm1Qcm9kdWN0TGlzdCA9IFtdO1xuICAgIGNybVN1YnNjcmlwdGlvbnNMaXN0ID0gW107XG4gICAgY3JtU291cmNlc0xpc3QgPSBbXTtcbiAgICBwcm9kdWN0c0xpc3QgPSBbXTtcbiAgICBjaGlsZExpc3QgPSBbXTtcblxuICAgIGlzTG9hZGluZzogYm9vbGVhbjtcblxuICAgIHNoYXJkVXJsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcEFkbWluLmRvbWFpbkNvbmZpZ0J1aWxkRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmlkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydpZCddKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5pZDtcbiAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkJykuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtYXN0ZXJfc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2lzX3Byb2R1Y3RfZG9tYWluJykuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fc3Vic2NyaXB0aW9uX2lkJykuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fcHJvZHVjdF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbWFzdGVyX3N1YnNjcmlwdGlvbl9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2lzX3Byb2R1Y3RfZG9tYWluJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX3N1YnNjcmlwdGlvbl9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9wcm9kdWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QWxsT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLmFkbWluU2VydmljZS5nZXRBdmFpbGFibGVEb21haW5PcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9uSWQpLFxuICAgICAgICAgICAgZ2V0UHJvZHVjdDogdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0TGlzdCh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCksXG4gICAgICAgICAgICBjb25maWc6IHRoaXMuYWRtaW5TZXJ2aWNlLmdldERvbWFpbkNvbmZpZ0J5SWQodGhpcy5pZCwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25zXG4gICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0TGlzdCA9IHJlcz8ub3B0aW9ucz8ubWFzdGVyX3N1YnNjcmlwdGlvbj8ucHJvZHVjdHM7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25zTGlzdCA9IHJlcz8ub3B0aW9ucz8ubWFzdGVyX3N1YnNjcmlwdGlvbj8uc3Vic2NyaXB0aW9ucztcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblRvc0xpc3QgPSByZXM/Lm9wdGlvbnM/Lm1hc3Rlcl9zdWJzY3JpcHRpb24/LnN1YnNjcmlwdGlvbl90b3M7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TdWJzY3JpcHRpb25zTGlzdCA9IHJlcz8ub3B0aW9ucz8ubWFzdGVyX2NybS5zdWJzY3JpcHRpb25zO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU291cmNlc0xpc3QgPSByZXM/Lm9wdGlvbnM/Lm1hc3Rlcl9jcm0uc291cmNlcztcbiAgICAgICAgICAgICAgICB0aGlzLmNybVByb2R1Y3RMaXN0ID0gcmVzPy5vcHRpb25zPy5tYXN0ZXJfY3JtLnByb2R1Y3RzO1xuICAgICAgICAgICAgICAgIC8vIGVuZCBvcHRpb25zXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0xpc3QgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzPy5nZXRQcm9kdWN0Py5wcm9kdWN0cyk7XG4gICAgICAgICAgICAgICAgLy8gY29uZmlnIHRvIHBhdGNoIHZhbHVlc1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlcy5jb25maWc7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZFVybCA9IHJlcz8uY29uZmlnPy5zaGFyZF91cmw7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIGNzX3Byb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdHNMaXN0LmZpbmQoeCA9PiB4LmlkID09PSB0aGlzLmRhdGE/LmNzX3Byb2R1Y3RfaWQpLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbF9wcm9kdWN0X2lkOiB0aGlzLnByb2R1Y3RzTGlzdC5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9PiB4LmlkID09PSB0aGlzLmRhdGE/LnRyaWFsX3Byb2R1Y3RfaWRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXM/LmNvbmZpZz8uY3NfY3RhX2lmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc19jdGFfaWZyYW1lOiBKU09OLnBhcnNlKHJlcz8uY29uZmlnPy5jc19jdGFfaWZyYW1lKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uY29uZmlnPy50cmlhbF9jdGFfaWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFsX2N0YV9pZnJhbWU6IEpTT04ucGFyc2UocmVzPy5jb25maWc/LnRyaWFsX2N0YV9pZnJhbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnVwbG9hZGVyLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRMaXN0ID0gdGhpcy51cGxvYWRlci50b0FycmF5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0T2JqKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHNlYXJjaFByb2R1Y3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RMaXN0KHsgc2VhcmNoOiBldmVudD8ucXVlcnkgfHwgJycgfSwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNMaXN0ID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3BvbnNlLnByb2R1Y3RzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBQcm9kdWN0cyhwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBwcm9kdWN0cy5maWx0ZXIoeCA9PiB4LmRlcGVuZGVuY3lfcHJvZHVjdHM/Lmxlbmd0aCA8IDEgJiYgeC5hY3RpdmUpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBncm91cEJ5KHByb2R1Y3RzLCAnY3VycmVuY3knKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gdGhpcy5zb3J0T2JqKHByb2R1Y3RzKTtcbiAgICAgICAgICAgIGxldCBncm91cGVkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0c1twXS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IE51bWJlcihiLnByaWNlX3Blcl91bml0KSAtIE51bWJlcihhLnByaWNlX3Blcl91bml0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBncm91cGVkQXJyYXkucHVzaCguLi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncm91cGVkQXJyYXkgPSBncm91cGVkQXJyYXkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHt4Lm5hbWV9IHwgJHt4LnJlZ2lvbn0gfCAke3guYmlsbGluZ19mcmVxdWVuY3l9IHwgJHt4Lm1pbl91bml0c30geCAkeyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHgucHJpY2VfcGVyX3VuaXQgLyAxMDBcbiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpfSB8ICR7eC5jdXJyZW5jeX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIG9uU2F2ZUZpbGUoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbTogQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQgPSB0aGlzLmNoaWxkTGlzdC5maW5kKFxuICAgICAgICAgICAgeCA9PiB4LmNvbnRyb2xOYW1lID09PSBldmVudC5uYW1lXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9O1xuICAgICAgICBpZiAoZXZlbnQuZmlsZSkge1xuICAgICAgICAgICAgZGF0YVtldmVudC5uYW1lXSA9IGV2ZW50LmZpbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhW2ByZW1vdmVfJHtldmVudC5uYW1lfWBdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWIkID0gdGhpcy5pZFxuICAgICAgICAgICAgPyB0aGlzLmFkbWluU2VydmljZS51cGRhdGVEb21haW5Db25maWcodGhpcy5pZCwgZm9ybURhdGEpXG4gICAgICAgICAgICA6IHRoaXMuYWRtaW5TZXJ2aWNlLmNyZWF0ZURvbWFpbkNvbmZpZyhmb3JtRGF0YSk7XG5cbiAgICAgICAgc3ViJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0RG9tYWluQ29uZmlnQnlJZCh0aGlzLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNsZWFyVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtldmVudC5uYW1lXSA9IHJlc3BvbnNlW2V2ZW50Lm5hbWVdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICBpdGVtLm9uQ2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmFwcENvbmZpZz8ubWFzdGVyX3N1YnNjcmlwdGlvbj8uc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgLi4udGhpcy5mb3JtLnZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGRhdGEuY3NfcHJvZHVjdF9pZCA9IHRoaXMuZm9ybS5nZXQoJ2NzX3Byb2R1Y3RfaWQnKS52YWx1ZT8uaWQgfHwgbnVsbDtcbiAgICAgICAgZGF0YS50cmlhbF9wcm9kdWN0X2lkID0gdGhpcy5mb3JtLmdldCgndHJpYWxfcHJvZHVjdF9pZCcpLnZhbHVlPy5pZCB8fCBudWxsO1xuICAgICAgICBkYXRhWydjc19jdGFfaWZyYW1lJ10gPSB0aGlzLmZvcm0udmFsdWU/LmNzX2N0YV9pZnJhbWUgfHwgJyc7XG4gICAgICAgIGRhdGFbJ3RyaWFsX2N0YV9pZnJhbWUnXSA9IHRoaXMuZm9ybS52YWx1ZT8udHJpYWxfY3RhX2lmcmFtZSB8fCAnJztcbiAgICAgICAgY29uc3Qgc3ViJCA9IHRoaXMuaWRcbiAgICAgICAgICAgID8gdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuaWQsIGRhdGEpXG4gICAgICAgICAgICA6IHRoaXMuYWRtaW5TZXJ2aWNlLmNyZWF0ZURvbWFpbkNvbmZpZyhkYXRhKTtcbiAgICAgICAgc3ViJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRG9tYWluQ29uZmlnLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlcnMuZG9tYWluQ29uZmlnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxoMz5QdWJsaWMgUGFnZXMgQ29uZmlndXJhdGlvbjwvaDM+XG48ZGl2IGNsYXNzPVwibWItNFwiPlxuICA8cD4gVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFuZCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIHB1YmxpYyBwYWdlcyBvZiB0aGlzIGRvbWFpbi4gPC9wPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZGF0YT8uaG9zdF9uYW1lXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLk1hc3RlclN1YnNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5NYXN0ZXJTdWJzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWFzdGVyX3N1YnNjcmlwdGlvbl9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+U2VsZWN0IE1hc3RlciBTdWJzY3JpcHRpb248L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWFzdGVyU3Vic2NyaXB0aW9uc0xpc3RcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbiA/IGl0ZW0/Lm9yZ2FuaXNhdGlvbiAgKycgLSAnKyBpdGVtLmNvbnRhY3RfbmFtZSA6IGl0ZW0/LmNvbnRhY3RfbmFtZX19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5NYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5NYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgIG5hbWU9XCJtYXN0ZXJfc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWRcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZCddPy5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+U2VsZWN0IE1hc3RlciBQcm9kdWN0PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3RMaXN0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uaWRcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5CbG9nRmVhdHVyZUtleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJibG9nX2ZlYXR1cmVfa2V5XCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5CbG9nRmVhdHVyZUtleScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYmxvZ19mZWF0dXJlX2tleVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Jsb2dfZmVhdHVyZV9rZXknXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuTWFpblRvcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJtYWluX3Rvc19pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuTWFpblRvcycgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYWluX3Rvc19pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYWluX3Rvc19pZFwiPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlNlbGVjdCBNYWluIFRPUzwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWJzY3JpcHRpb25Ub3NMaXN0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uaWRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIGNybSBzdWJzY3JpcHRpb24gZmllbGRzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNybVN1YnNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fc3Vic2NyaXB0aW9uX2lkXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dcm1TdWJzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3N1YnNjcmlwdGlvbl9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc3Vic2NyaXB0aW9uX2lkXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+U2VsZWN0IENSTSBTdWJzY3JpcHRpb248L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3JtU3Vic2NyaXB0aW9uc0xpc3RcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbiA/IGl0ZW0/Lm9yZ2FuaXNhdGlvbiAgKycgLSAnKyBpdGVtLmNvbnRhY3RfbmFtZSA6IGl0ZW0/LmNvbnRhY3RfbmFtZX19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dcm1Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNybV9wcm9kdWN0X2lkXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dcm1Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NybV9wcm9kdWN0X2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+U2VsZWN0IENSTSBQcm9kdWN0PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNybVByb2R1Y3RMaXN0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uaWRcIj5cbiAgICAgICAgICAgICAge3tpdGVtPy5zdWJzY3JpcHRpb25faWQgPyBpdGVtPy5uYW1lICArJyAtIFN1YnNjcmlwdGlvbklEID0gJysgaXRlbS5zdWJzY3JpcHRpb25faWQgOiBpdGVtPy5uYW1lfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNybVNvdXJjZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fc291cmNlX2lkXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dcm1Tb3VyY2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc291cmNlX2lkXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+U2VsZWN0IENSTSBTb3VyY2U8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3JtU291cmNlc0xpc3RcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBjcm0gc3Vic2NyaXB0aW9uIGZpZWxkcyBlbmQtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5BY3RpdmUnIHwgdHJhbnNsb2NvXCIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQWN0aXZlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJhY3RpdmVcIj5cbiAgICAgICAgICA8dWktc3dpdGNoIHNpemU9XCJzbWFsbFwiIHVuY2hlY2tlZExhYmVsPVwiZmFsc2VcIiBjaGVja2VkTGFiZWw9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCIgbmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2FjdGl2ZSddLmVycm9ycyB9XCI+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+XG4gICAgICAgICAgICA8cD5JZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGludGVncmF0aW5nIHRoZXNlIHBhZ2VzIGludG8geW91ciB3b3JrZmxvdyBvciBoYXZlIGZ1cnRoZXIgcXVlc3Rpb25zLCBmZWVsIGZyZWUgdG8gcmVhY2hcbiAgICAgICAgICAgICAgb3V0LjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtoZWFkZXJdPVwiJ0R5bmFtaWMgVmFsdWVzJ1wiPlxuICAgICAgICAgIDxoMz4uLi5Db21pbmcgU29vbi4uLjwvaDM+XG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidDb21pbmcgc29vbiBwYWdlcyAtIFN1YnNjcmliZSB0byBuZXdzbGV0dGVyJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8cD5Db21pbmdTb29uIFBhZ2VzIHdpbGwgZW5hYmxlIHVzZXJzIHRvIHN1YnNjcmliZSB0byBOZXdzbGV0dGVycyBhbmQgYXJlIGFjY2Vzc2libGUgYXQgdGhlIGludGVybmFsIHBhdGhzIC9qb2luL2NzMSxcbiAgICAgICAgICAgICAgL2pvaW4vY3MyLCBldGMuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gbGl2ZSBwYWdlIGxpbmsgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCIgKm5nSWY9XCJzaGFyZFVybFwiPlxuICAgICAgICAgICAgPHNwYW4+U2VlIHRoZSBsaXZlIHBhZ2UgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU2VlTGl2ZUNzJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+IDogPGEgW2hyZWZdPVwic2hhcmRVcmwgKyAnL2pvaW4vY3MxJ1wiIHRhcmdldD1cIl9ibGFua1wiPnt7IHNoYXJkVXJsIH19L2pvaW4vY3MxPC9hPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcHJvZHVjdF9pZFwiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwicHJvZHVjdHNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcHJvZHVjdF9pZFwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiIFtkZWxheV09XCIxMDAwXCIgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgnY3NfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCdjc19wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzQ3JtU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0NybVNvdXJjZUlkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2NybV9zb3VyY2VfaWQnXT8uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBmb3JtQ29udHJvbE5hbWU9XCJjc19jcm1fc291cmNlX2lkXCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+U2VsZWN0IENSTSBTb3VyY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3JtU291cmNlc0xpc3RcIiBbdmFsdWVdPVwiaXRlbS5pZFwiPiB7eyBpdGVtLm5hbWUgfX0gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQZGZTb3VyY2VJZCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcGRmX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfcGRmX3NvdXJjZV9pZCddPy5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIGZvcm1Db250cm9sTmFtZT1cImNzX3BkZl9zb3VyY2VfaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5TZWxlY3QgQ1JNIFNvdXJjZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjcm1Tb3VyY2VzTGlzdFwiIFt2YWx1ZV09XCJpdGVtLmlkXCI+IHt7IGl0ZW0ubmFtZSB9fSA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc1ZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJjc192aWRlb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc1ZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfdmlkZW9fdXJsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfdmlkZW9fdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzQm9va0RlbW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2Jvb2tfZGVtb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0Jvb2tEZW1vVXJsJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfYm9va19kZW1vX3VybFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2Jvb2tfZGVtb191cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NDdGFJZnJhbWUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2N0YV9pZnJhbWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0N0YUlmcmFtZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImNzX2N0YV9pZnJhbWVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19jdGFfaWZyYW1lJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzSm9pbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2pvaW5fbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSm9pbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJjc19qb2luX21lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19qb2luX21lc3NhZ2UnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX3BkZl9kb3dubG9hZF90ZXh0XCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUGRmRG93bmxvYWRUZXh0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcGRmX2Rvd25sb2FkX3RleHRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19wZGZfZG93bmxvYWRfdGV4dCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgbWF0Y2hIZWlnaHQ9XCJjYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc0ltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0ltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19pbWFnZSdcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsnY3NfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19pbWFnZTJcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzSW1hZ2UyJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0ltYWdlMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCIgW3RpdGxlXT1cIidDcyBJbWFnZTInXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2NzX2ltYWdlMidcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsnY3NfaW1hZ2UyJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY3NfcGRmX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc1BkZkltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc1BkZkltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIFBkZiBJbWFnZSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCInY3NfcGRmX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19wZGZfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19pbWFnZV9iZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuQ3NJbWFnZUJnJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0ltYWdlQmcnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgUGRmIEltYWdlIEJnJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19pbWFnZV9iZydcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsnY3NfaW1hZ2VfYmcnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19pbWFnZV9iZzJcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzSW1hZ2VCZzInIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2VCZzInIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgUGRmIEltYWdlIEJnMidcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCInY3NfaW1hZ2VfYmcyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZV9iZzInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgIDwhLS0gY3MgaW1hZ2Ugc2VjdGlvbiBlbmQgLS0+XG4gICAgICA8IS0tIHRyaWFsIHN0YXJ0IC0tPlxuICAgICAgPHAtYWNjb3JkaW9uPlxuICAgICAgICA8cC1hY2NvcmRpb25UYWIgW2hlYWRlcl09XCInSm9pbiBub3cgcGFnZXMgLSBTdWJzY3JpYmUgdG8gcHJvZHVjdCdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgPHA+VHJpYWwgUGFnZXMgd2lsbCBlbmFibGUgdXNlcnMgdG8gc2lnbiB1cCB0byByZWFsIHByb2R1Y3RzIGFuZCBhcmUgYWNjZXNzaWJsZSBhdCB0aGUgcGF0aCAvam9pbi90cmlhbDEsXG4gICAgICAgICAgICAgIC9qb2luL3RyaWFsMiwgZXRjLjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGxpdmUgcGFnZSBsaW5rIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiICpuZ0lmPVwic2hhcmRVcmxcIj5cbiAgICAgICAgICAgIDxzcGFuPlNlZSB0aGUgbGl2ZSBwYWdlIDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwIG1zLTFcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlNlZUxpdmVUcmlhbCcgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPiA6IDxhIFtocmVmXT1cInNoYXJkVXJsICsgJy9qb2luL3RyaWFsMSdcIiB0YXJnZXQ9XCJfYmxhbmtcIj57eyBzaGFyZFVybCB9fS9qb2luL3RyaWFsMTwvYT48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfcHJvZHVjdF9pZFwiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwicHJvZHVjdHNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcHJvZHVjdF9pZFwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiIFtkZWxheV09XCIxMDAwXCIgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgndHJpYWxfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCd0cmlhbF9wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsQ3JtU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxDcm1Tb3VyY2VJZCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9jcm1fc291cmNlX2lkJ10/LmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfY3JtX3NvdXJjZV9pZFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlNlbGVjdCBDUk0gU291cmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNybVNvdXJjZXNMaXN0XCIgW3ZhbHVlXT1cIml0ZW0uaWRcIj4ge3sgaXRlbS5uYW1lIH19IDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX3BkZl9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQZGZTb3VyY2VJZCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF9wZGZfc291cmNlX2lkJ10/LmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcGRmX3NvdXJjZV9pZFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlNlbGVjdCBDUk0gU291cmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNybVNvdXJjZXNMaXN0XCIgW3ZhbHVlXT1cIml0ZW0uaWRcIj4ge3sgaXRlbS5uYW1lIH19IDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX3ZpZGVvX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF92aWRlb191cmxcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF92aWRlb191cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxCb29rRGVtb1VybCcgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfYm9va19kZW1vX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEJvb2tEZW1vVXJsJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfYm9va19kZW1vX3VybFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2Jvb2tfZGVtb191cmwnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxDdGFJZnJhbWUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX2N0YV9pZnJhbWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxDdGFJZnJhbWUnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9jdGFfaWZyYW1lXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfY3RhX2lmcmFtZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEpvaW5NZXNzYWdlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF9qb2luX21lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX2pvaW5fbWVzc2FnZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2pvaW5fbWVzc2FnZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFBkZkRvd25sb2FkVGV4dCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmlhbF9wZGZfZG93bmxvYWRfdGV4dFwiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9wZGZfZG93bmxvYWRfdGV4dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX3BkZl9kb3dubG9hZF90ZXh0J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtYXRjaEhlaWdodD1cImNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidHJpYWxfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInVHJpYWwgSW1hZ2UnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVHJpYWxJbWFnZTInIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSW1hZ2UyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbdGl0bGVdPVwiJ1RyaWFsIEltYWdlMidcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfaW1hZ2UyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZTInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmlhbF9wZGZfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsUGRmSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsUGRmSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFt0aXRsZV09XCInVHJpYWwgUGRmIEltYWdlJ1wiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid0cmlhbF9wZGZfaW1hZ2UnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ3RyaWFsX3BkZl9pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlX2JnXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEltYWdlQmcnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSW1hZ2VCZycgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW3RpdGxlXT1cIidUcmlhbCBJbWFnZSBCZydcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfaW1hZ2VfYmcnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ3RyaWFsX2ltYWdlX2JnJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidHJpYWxfaW1hZ2VfYmcyXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEltYWdlQmcyJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlQmcyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbdGl0bGVdPVwiJ1RyaWFsIEltYWdlIEJnMidcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfaW1hZ2VfYmcyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZV9iZzInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgIDwhLS0gdHJpYWwgaW1hZ2Ugc2VjdGlvbiBlbmQgLS0+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtidXR0b25CdXN5XT1cImJ1dHRvbkJ1c3lcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPnt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L25nLWNvbnRhaW5lcj5cbjxkaXYgKm5nSWY9XCIhZGF0YT8uaG9zdF9uYW1lICYmICFpc0xvYWRpbmdcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5FbmFibGVDb25maWdUYWInIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuIl19
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1idWlsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZG9tYWluLWNvbmZpZy9kb21haW4tY29uZmlnLWRldGFpbHMvZG9tYWluLWNvbmZpZy1idWlsZC9kb21haW4tY29uZmlnLWJ1aWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9kb21haW4tY29uZmlnL2RvbWFpbi1jb25maWctZGV0YWlscy9kb21haW4tY29uZmlnLWJ1aWxkL2RvbWFpbi1jb25maWctYnVpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU03RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsZ0JBQWdCO0lB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QyxDQUFDO2dCQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1NBQ0osQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBMU5RLDBCQUEwQjttR0FBMUIsMEJBQTBCLDJGQUNyQix1QkFBdUIsdUVDcEJ6Qyxvbi9CQXFqQkE7O0FEaFdJO0lBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7Ozt3REF5QnBCOzRGQTFOUSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0ksd0JBQXdCO3FJQUlLLFFBQVE7c0JBQTlDLFlBQVk7dUJBQUMsdUJBQXVCO2dCQWlNckMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSwgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlLCBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgQ3VzdG9tVXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2Uvc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcblxuaW1wb3J0IGdyb3VwQnkgZnJvbSAnbG9kYXNoL2dyb3VwQnknO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRG9tYWluQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9kb21haW4tY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctZG9tYWluLWNvbmZpZy1idWlsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RvbWFpbi1jb25maWctYnVpbGQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERvbWFpbkNvbmZpZ0J1aWxkQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZHJlbihDdXN0b21VcGxvYWRlckNvbXBvbmVudCkgdXBsb2FkZXI6IFF1ZXJ5TGlzdDxDdXN0b21VcGxvYWRlckNvbXBvbmVudD47XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuXG4gICAgaWQ6IG51bWJlcjtcbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgZGF0YTogRG9tYWluQ29uZmlnO1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBtYXN0ZXJTdWJzY3JpcHRpb25Qcm9kdWN0TGlzdCA9IFtdO1xuICAgIG1hc3RlclN1YnNjcmlwdGlvbnNMaXN0ID0gW107XG4gICAgc3Vic2NyaXB0aW9uVG9zTGlzdCA9IFtdO1xuICAgIGNybVByb2R1Y3RMaXN0ID0gW107XG4gICAgY3JtU3Vic2NyaXB0aW9uc0xpc3QgPSBbXTtcbiAgICBjcm1Tb3VyY2VzTGlzdCA9IFtdO1xuICAgIHByb2R1Y3RzTGlzdCA9IFtdO1xuICAgIGNoaWxkTGlzdCA9IFtdO1xuXG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuXG4gICAgc2hhcmRVcmw6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZG9tYWluQ29uZmlnQnVpbGRGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ10pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnaXNfcHJvZHVjdF9kb21haW4nKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9wcm9kdWN0X2lkJykuZW5hYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnaXNfcHJvZHVjdF9kb21haW4nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fc3Vic2NyaXB0aW9uX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX3Byb2R1Y3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBbGxPcHRpb25zKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuYWRtaW5TZXJ2aWNlLmdldEF2YWlsYWJsZURvbWFpbk9wdGlvbnModGhpcy5zdWJzY3JpcHRpb25JZCksXG4gICAgICAgICAgICBnZXRQcm9kdWN0OiB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFByb2R1Y3RMaXN0KHt9LCB0aGlzLnN1YnNjcmlwdGlvbklkKSxcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5hZG1pblNlcnZpY2UuZ2V0RG9tYWluQ29uZmlnQnlJZCh0aGlzLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbnNcbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3RMaXN0ID0gcmVzPy5vcHRpb25zPy5tYXN0ZXJfc3Vic2NyaXB0aW9uPy5wcm9kdWN0cztcbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlclN1YnNjcmlwdGlvbnNMaXN0ID0gcmVzPy5vcHRpb25zPy5tYXN0ZXJfc3Vic2NyaXB0aW9uPy5zdWJzY3JpcHRpb25zO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uVG9zTGlzdCA9IHJlcz8ub3B0aW9ucz8ubWFzdGVyX3N1YnNjcmlwdGlvbj8uc3Vic2NyaXB0aW9uX3RvcztcbiAgICAgICAgICAgICAgICB0aGlzLmNybVN1YnNjcmlwdGlvbnNMaXN0ID0gcmVzPy5vcHRpb25zPy5tYXN0ZXJfY3JtLnN1YnNjcmlwdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1Tb3VyY2VzTGlzdCA9IHJlcz8ub3B0aW9ucz8ubWFzdGVyX2NybS5zb3VyY2VzO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtUHJvZHVjdExpc3QgPSByZXM/Lm9wdGlvbnM/Lm1hc3Rlcl9jcm0ucHJvZHVjdHM7XG4gICAgICAgICAgICAgICAgLy8gZW5kIG9wdGlvbnNcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzTGlzdCA9IHRoaXMuZ3JvdXBQcm9kdWN0cyhyZXM/LmdldFByb2R1Y3Q/LnByb2R1Y3RzKTtcbiAgICAgICAgICAgICAgICAvLyBjb25maWcgdG8gcGF0Y2ggdmFsdWVzXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzLmNvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJkVXJsID0gcmVzPy5jb25maWc/LnNoYXJkX3VybDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgY3NfcHJvZHVjdF9pZDogdGhpcy5wcm9kdWN0c0xpc3QuZmluZCh4ID0+IHguaWQgPT09IHRoaXMuZGF0YT8uY3NfcHJvZHVjdF9pZCksXG4gICAgICAgICAgICAgICAgICAgIHRyaWFsX3Byb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdHNMaXN0LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0+IHguaWQgPT09IHRoaXMuZGF0YT8udHJpYWxfcHJvZHVjdF9pZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uY29uZmlnPy5jc19jdGFfaWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzX2N0YV9pZnJhbWU6IEpTT04ucGFyc2UocmVzPy5jb25maWc/LmNzX2N0YV9pZnJhbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzPy5jb25maWc/LnRyaWFsX2N0YV9pZnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWxfY3RhX2lmcmFtZTogSlNPTi5wYXJzZShyZXM/LmNvbmZpZz8udHJpYWxfY3RhX2lmcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkZXIuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGlsZExpc3QgPSB0aGlzLnVwbG9hZGVyLnRvQXJyYXkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnRPYmoob2JqKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxuICAgICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgc2VhcmNoUHJvZHVjdChldmVudCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdExpc3QoeyBzZWFyY2g6IGV2ZW50Py5xdWVyeSB8fCAnJyB9LCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0xpc3QgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzcG9uc2UucHJvZHVjdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cFByb2R1Y3RzKHByb2R1Y3RzKSB7XG4gICAgICAgIGlmIChwcm9kdWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IHByb2R1Y3RzLmZpbHRlcih4ID0+IHguZGVwZW5kZW5jeV9wcm9kdWN0cz8ubGVuZ3RoIDwgMSAmJiB4LmFjdGl2ZSk7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IGdyb3VwQnkocHJvZHVjdHMsICdjdXJyZW5jeScpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSB0aGlzLnNvcnRPYmoocHJvZHVjdHMpO1xuICAgICAgICAgICAgbGV0IGdyb3VwZWRBcnJheSA9IFtdO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3RzW3BdLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGIucHJpY2VfcGVyX3VuaXQpIC0gTnVtYmVyKGEucHJpY2VfcGVyX3VuaXQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRBcnJheS5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwZWRBcnJheSA9IGdyb3VwZWRBcnJheS5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke3gubmFtZX0gfCAke3gucmVnaW9ufSB8ICR7eC5iaWxsaW5nX2ZyZXF1ZW5jeX0gfCAke3gubWluX3VuaXRzfSB4ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgeC5wcmljZV9wZXJfdW5pdCAvIDEwMFxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9IHwgJHt4LmN1cnJlbmN5fWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncm91cGVkQXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgb25TYXZlRmlsZShldmVudCkge1xuICAgICAgICBjb25zdCBpdGVtOiBDdXN0b21VcGxvYWRlckNvbXBvbmVudCA9IHRoaXMuY2hpbGRMaXN0LmZpbmQoXG4gICAgICAgICAgICB4ID0+IHguY29udHJvbE5hbWUgPT09IGV2ZW50Lm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHsgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkIH07XG4gICAgICAgIGlmIChldmVudC5maWxlKSB7XG4gICAgICAgICAgICBkYXRhW2V2ZW50Lm5hbWVdID0gZXZlbnQuZmlsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFbYHJlbW92ZV8ke2V2ZW50Lm5hbWV9YF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICBpZiAoa2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YiQgPSB0aGlzLmlkXG4gICAgICAgICAgICA/IHRoaXMuYWRtaW5TZXJ2aWNlLnVwZGF0ZURvbWFpbkNvbmZpZyh0aGlzLmlkLCBmb3JtRGF0YSlcbiAgICAgICAgICAgIDogdGhpcy5hZG1pblNlcnZpY2UuY3JlYXRlRG9tYWluQ29uZmlnKGZvcm1EYXRhKTtcblxuICAgICAgICBzdWIkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXREb21haW5Db25maWdCeUlkKHRoaXMuaWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2xlYXJWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2V2ZW50Lm5hbWVdID0gcmVzcG9uc2VbZXZlbnQubmFtZV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICBpdGVtLmJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICAgIGl0ZW0ub25DbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAVmFsaWRhdGVGb3JtKCdmb3JtJylcbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIG1hc3Rlcl9zdWJzY3JpcHRpb25faWQ6IHRoaXMuYXBwQ29uZmlnPy5tYXN0ZXJfc3Vic2NyaXB0aW9uPy5zdWJzY3JpcHRpb25faWQsXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAuLi50aGlzLmZvcm0udmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YS5jc19wcm9kdWN0X2lkID0gdGhpcy5mb3JtLmdldCgnY3NfcHJvZHVjdF9pZCcpLnZhbHVlPy5pZCB8fCBudWxsO1xuICAgICAgICBkYXRhLnRyaWFsX3Byb2R1Y3RfaWQgPSB0aGlzLmZvcm0uZ2V0KCd0cmlhbF9wcm9kdWN0X2lkJykudmFsdWU/LmlkIHx8IG51bGw7XG4gICAgICAgIGRhdGFbJ2NzX2N0YV9pZnJhbWUnXSA9IHRoaXMuZm9ybS52YWx1ZT8uY3NfY3RhX2lmcmFtZSB8fCAnJztcbiAgICAgICAgZGF0YVsndHJpYWxfY3RhX2lmcmFtZSddID0gdGhpcy5mb3JtLnZhbHVlPy50cmlhbF9jdGFfaWZyYW1lIHx8ICcnO1xuICAgICAgICBjb25zdCBzdWIkID0gdGhpcy5pZFxuICAgICAgICAgICAgPyB0aGlzLmFkbWluU2VydmljZS51cGRhdGVEb21haW5Db25maWcodGhpcy5pZCwgZGF0YSlcbiAgICAgICAgICAgIDogdGhpcy5hZG1pblNlcnZpY2UuY3JlYXRlRG9tYWluQ29uZmlnKGRhdGEpO1xuICAgICAgICBzdWIkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Eb21haW5Db25maWcuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucm91dGVycy5kb21haW5Db25maWddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGgzPlB1YmxpYyBQYWdlcyBDb25maWd1cmF0aW9uPC9oMz5cbjxkaXYgY2xhc3M9XCJtYi00XCI+XG4gIDxwPiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYW5kIHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgcHVibGljIHBhZ2VzIG9mIHRoaXMgZG9tYWluLiA8L3A+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuPC9kaXY+XG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZyAmJiBkYXRhPy5ob3N0X25hbWVcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuTWFzdGVyU3Vic2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm1hc3Rlcl9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLk1hc3RlclN1YnNjcmlwdGlvbicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJtYXN0ZXJTdWJzY3JpcHRpb25zTGlzdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWFzdGVyX3N1YnNjcmlwdGlvbl9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBNYXN0ZXIgU3Vic2NyaXB0aW9uJ1wiXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAge3tpdGVtPy5vcmdhbmlzYXRpb24gPyBpdGVtPy5vcmdhbmlzYXRpb24gICsnIC0gJysgaXRlbS5jb250YWN0X25hbWUgOiBpdGVtPy5jb250YWN0X25hbWV9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIHt7aXRlbT8ub3JnYW5pc2F0aW9uID8gaXRlbT8ub3JnYW5pc2F0aW9uICArJyAtICcrIGl0ZW0uY29udGFjdF9uYW1lIDogaXRlbT8uY29udGFjdF9uYW1lfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLk1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLk1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3QnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgbmFtZT1cIm1hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZFwiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIm1hc3RlclN1YnNjcmlwdGlvblByb2R1Y3RMaXN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1hc3Rlcl9zdWJzY3JpcHRpb25fcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWFzdGVyX3N1YnNjcmlwdGlvbl9wcm9kdWN0X2lkJ10/LmVycm9yc31cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgTWFzdGVyIFByb2R1Y3QnXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQmxvZ0ZlYXR1cmVLZXknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiYmxvZ19mZWF0dXJlX2tleVwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQmxvZ0ZlYXR1cmVLZXknIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJsb2dfZmVhdHVyZV9rZXlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydibG9nX2ZlYXR1cmVfa2V5J10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLk1haW5Ub3MnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibWFpbl90b3NfaWRcIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLk1haW5Ub3MnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwic3Vic2NyaXB0aW9uVG9zTGlzdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYWluX3Rvc19pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21haW5fdG9zX2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IE1haW4gVE9TJ1wiXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiaXRlbS50aXRsZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBjcm0gc3Vic2NyaXB0aW9uIGZpZWxkcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dcm1TdWJzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY3JtX3N1YnNjcmlwdGlvbl9pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3JtU3Vic2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImNybVN1YnNjcmlwdGlvbnNMaXN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjcm1fc3Vic2NyaXB0aW9uX2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IENSTSBTdWJzY3JpcHRpb24nXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgICB7e2l0ZW0/Lm9yZ2FuaXNhdGlvbiA/IGl0ZW0/Lm9yZ2FuaXNhdGlvbiAgKycgLSAnKyBpdGVtLmNvbnRhY3RfbmFtZSA6IGl0ZW0/LmNvbnRhY3RfbmFtZX19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAge3tpdGVtPy5vcmdhbmlzYXRpb24gPyBpdGVtPy5vcmdhbmlzYXRpb24gICsnIC0gJysgaXRlbS5jb250YWN0X25hbWUgOiBpdGVtPy5jb250YWN0X25hbWV9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3JtUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fcHJvZHVjdF9pZFwiXG4gICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuQ3JtUHJvZHVjdCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Qcm9kdWN0TGlzdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NybV9wcm9kdWN0X2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IENSTSBQcm9kdWN0J1wiXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAge3tpdGVtPy5zdWJzY3JpcHRpb25faWQgPyBpdGVtPy5uYW1lICArJyAtIFN1YnNjcmlwdGlvbklEID0gJysgaXRlbS5zdWJzY3JpcHRpb25faWQgOiBpdGVtPy5uYW1lfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgICB7e2l0ZW0/LnN1YnNjcmlwdGlvbl9pZCA/IGl0ZW0/Lm5hbWUgICsnIC0gU3Vic2NyaXB0aW9uSUQgPSAnKyBpdGVtLnN1YnNjcmlwdGlvbl9pZCA6IGl0ZW0/Lm5hbWV9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3JtU291cmNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNybV9zb3VyY2VfaWRcIlxuICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNybVNvdXJjZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICA+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+XG4gICAgICAgICAgICA8cD5JZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGludGVncmF0aW5nIHRoZXNlIHBhZ2VzIGludG8geW91ciB3b3JrZmxvdyBvciBoYXZlIGZ1cnRoZXIgcXVlc3Rpb25zLCBmZWVsIGZyZWUgdG8gcmVhY2hcbiAgICAgICAgICAgICAgb3V0LjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtoZWFkZXJdPVwiJ0R5bmFtaWMgVmFsdWVzJ1wiPlxuICAgICAgICAgIDxoMz4uLi5Db21pbmcgU29vbi4uLjwvaDM+XG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICAgIDxwLWFjY29yZGlvblRhYiBbaGVhZGVyXT1cIidDb21pbmcgc29vbiBwYWdlcyAtIFN1YnNjcmliZSB0byBuZXdzbGV0dGVyJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8cD5Db21pbmdTb29uIFBhZ2VzIHdpbGwgZW5hYmxlIHVzZXJzIHRvIHN1YnNjcmliZSB0byBOZXdzbGV0dGVycyBhbmQgYXJlIGFjY2Vzc2libGUgYXQgdGhlIGludGVybmFsIHBhdGhzIC9qb2luL2NzMSxcbiAgICAgICAgICAgICAgL2pvaW4vY3MyLCBldGMuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gbGl2ZSBwYWdlIGxpbmsgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCIgKm5nSWY9XCJzaGFyZFVybFwiPlxuICAgICAgICAgICAgPHNwYW4+U2VlIHRoZSBsaXZlIHBhZ2UgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuU2VlTGl2ZUNzJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+IDogPGEgW2hyZWZdPVwic2hhcmRVcmwgKyAnL2pvaW4vY3MxJ1wiIHRhcmdldD1cIl9ibGFua1wiPnt7IHNoYXJkVXJsIH19L2pvaW4vY3MxPC9hPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcHJvZHVjdF9pZFwiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwicHJvZHVjdHNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcHJvZHVjdF9pZFwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiIFtkZWxheV09XCIxMDAwXCIgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgnY3NfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCdjc19wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzQ3JtU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0NybVNvdXJjZUlkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNybVNvdXJjZXNMaXN0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNzX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19jcm1fc291cmNlX2lkJ10/LmVycm9ycyB9XCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IENSTSBTb3VyY2UnXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQZGZTb3VyY2VJZCcgfCB0cmFuc2xvY29cIiBuYW1lPVwiY3NfcGRmX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY3JtU291cmNlc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcGRmX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX3BkZl9zb3VyY2VfaWQnXT8uZXJyb3JzIH1cIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgQ1JNIFNvdXJjZSdcIlxuICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc1ZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJjc192aWRlb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc1ZpZGVvVXJsJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfdmlkZW9fdXJsXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3NfdmlkZW9fdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzQm9va0RlbW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2Jvb2tfZGVtb191cmxcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0Jvb2tEZW1vVXJsJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfYm9va19kZW1vX3VybFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NzX2Jvb2tfZGVtb191cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NDdGFJZnJhbWUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2N0YV9pZnJhbWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0N0YUlmcmFtZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImNzX2N0YV9pZnJhbWVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19jdGFfaWZyYW1lJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLkNzSm9pbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX2pvaW5fbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSm9pbk1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJjc19qb2luX21lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19qb2luX21lc3NhZ2UnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuQ3NQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImNzX3BkZl9kb3dubG9hZF90ZXh0XCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzUGRmRG93bmxvYWRUZXh0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3NfcGRmX2Rvd25sb2FkX3RleHRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjc19wZGZfZG93bmxvYWRfdGV4dCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgbWF0Y2hIZWlnaHQ9XCJjYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNzX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc0ltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0ltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIEltYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19pbWFnZSdcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsnY3NfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19pbWFnZTJcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzSW1hZ2UyJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0ltYWdlMicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW2FzcGVjdFJhdGlvXT1cIidjdXN0b20nXCIgW3RpdGxlXT1cIidDcyBJbWFnZTInXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ2NzX2ltYWdlMidcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsnY3NfaW1hZ2UyJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY3NfcGRmX2ltYWdlXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Dc1BkZkltYWdlJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc1BkZkltYWdlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIiBbdGl0bGVdPVwiJ0NzIFBkZiBJbWFnZSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCInY3NfcGRmX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19wZGZfaW1hZ2UnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19pbWFnZV9iZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuQ3NJbWFnZUJnJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5Dc0ltYWdlQmcnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgUGRmIEltYWdlIEJnJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidjc19pbWFnZV9iZydcIiBbcHJldmlld0RhdGFdPVwiZGF0YVsnY3NfaW1hZ2VfYmcnXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjc19pbWFnZV9iZzJcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLkNzSW1hZ2VCZzInIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLkNzSW1hZ2VCZzInIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInQ3MgUGRmIEltYWdlIEJnMidcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCInY3NfaW1hZ2VfYmcyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWydjc19pbWFnZV9iZzInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgIDwhLS0gY3MgaW1hZ2Ugc2VjdGlvbiBlbmQgLS0+XG4gICAgICA8IS0tIHRyaWFsIHN0YXJ0IC0tPlxuICAgICAgPHAtYWNjb3JkaW9uPlxuICAgICAgICA8cC1hY2NvcmRpb25UYWIgW2hlYWRlcl09XCInSm9pbiBub3cgcGFnZXMgLSBTdWJzY3JpYmUgdG8gcHJvZHVjdCdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgPHA+VHJpYWwgUGFnZXMgd2lsbCBlbmFibGUgdXNlcnMgdG8gc2lnbiB1cCB0byByZWFsIHByb2R1Y3RzIGFuZCBhcmUgYWNjZXNzaWJsZSBhdCB0aGUgcGF0aCAvam9pbi90cmlhbDEsXG4gICAgICAgICAgICAgIC9qb2luL3RyaWFsMiwgZXRjLjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGxpdmUgcGFnZSBsaW5rIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiICpuZ0lmPVwic2hhcmRVcmxcIj5cbiAgICAgICAgICAgIDxzcGFuPlNlZSB0aGUgbGl2ZSBwYWdlIDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwIG1zLTFcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlNlZUxpdmVUcmlhbCcgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPiA6IDxhIFtocmVmXT1cInNoYXJkVXJsICsgJy9qb2luL3RyaWFsMSdcIiB0YXJnZXQ9XCJfYmxhbmtcIj57eyBzaGFyZFVybCB9fS9qb2luL3RyaWFsMTwvYT48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxQcm9kdWN0JyB8IHRyYW5zbG9jb1wiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfcHJvZHVjdF9pZFwiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwicHJvZHVjdHNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfcHJvZHVjdF9pZFwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiIFtkZWxheV09XCIxMDAwXCIgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldCgndHJpYWxfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCd0cmlhbF9wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsQ3JtU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX2NybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxDcm1Tb3VyY2VJZCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9jcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfY3JtX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsUGRmU291cmNlSWQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX3BkZl9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQZGZTb3VyY2VJZCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjcm1Tb3VyY2VzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9wZGZfc291cmNlX2lkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfcGRmX3NvdXJjZV9pZCddPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBDUk0gU291cmNlJ1wiXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX3ZpZGVvX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsVmlkZW9VcmwnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF92aWRlb191cmxcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0cmlhbF92aWRlb191cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxCb29rRGVtb1VybCcgfCB0cmFuc2xvY29cIiBuYW1lPVwidHJpYWxfYm9va19kZW1vX3VybFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEJvb2tEZW1vVXJsJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJpYWxfYm9va19kZW1vX3VybFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2Jvb2tfZGVtb191cmwnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5Eb21haW5Db25maWcuVHJpYWxDdGFJZnJhbWUnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInRyaWFsX2N0YV9pZnJhbWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxDdGFJZnJhbWUnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9jdGFfaWZyYW1lXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndHJpYWxfY3RhX2lmcmFtZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEpvaW5NZXNzYWdlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJ0cmlhbF9qb2luX21lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxKb2luTWVzc2FnZScgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX2pvaW5fbWVzc2FnZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2pvaW5fbWVzc2FnZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbFBkZkRvd25sb2FkVGV4dCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmlhbF9wZGZfZG93bmxvYWRfdGV4dFwiIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uRG9tYWluQ29uZmlnLlRvb2x0aXAuVHJpYWxQZGZEb3dubG9hZFRleHQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9wZGZfZG93bmxvYWRfdGV4dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX3BkZl9kb3dubG9hZF90ZXh0J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBtYXRjaEhlaWdodD1cImNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidHJpYWxfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiIFt0aXRsZV09XCInVHJpYWwgSW1hZ2UnXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3RyaWFsX2ltYWdlJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlMlwiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVHJpYWxJbWFnZTInIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSW1hZ2UyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbdGl0bGVdPVwiJ1RyaWFsIEltYWdlMidcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfaW1hZ2UyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZTInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmlhbF9wZGZfaW1hZ2VcIj57eyAnQWRtaW4uRG9tYWluQ29uZmlnLlRyaWFsUGRmSW1hZ2UnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsUGRmSW1hZ2UnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHB3LWN1c3RvbS11cGxvYWRlciAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiIFt0aXRsZV09XCInVHJpYWwgUGRmIEltYWdlJ1wiIFthc3BlY3RSYXRpb109XCInY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid0cmlhbF9wZGZfaW1hZ2UnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ3RyaWFsX3BkZl9pbWFnZSddXCI+XG4gICAgICAgICAgICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyaWFsX2ltYWdlX2JnXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEltYWdlQmcnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5Ub29sdGlwLlRyaWFsSW1hZ2VCZycgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cHctY3VzdG9tLXVwbG9hZGVyIChzYXZlRXZlbnQpPVwib25TYXZlRmlsZSgkZXZlbnQpXCIgW3RpdGxlXT1cIidUcmlhbCBJbWFnZSBCZydcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfaW1hZ2VfYmcnXCIgW3ByZXZpZXdEYXRhXT1cImRhdGFbJ3RyaWFsX2ltYWdlX2JnJ11cIj5cbiAgICAgICAgICAgICAgPC9wdy1jdXN0b20tdXBsb2FkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidHJpYWxfaW1hZ2VfYmcyXCI+e3sgJ0FkbWluLkRvbWFpbkNvbmZpZy5UcmlhbEltYWdlQmcyJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cImluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdBZG1pbi5Eb21haW5Db25maWcuVG9vbHRpcC5UcmlhbEltYWdlQmcyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwdy1jdXN0b20tdXBsb2FkZXIgKHNhdmVFdmVudCk9XCJvblNhdmVGaWxlKCRldmVudClcIiBbdGl0bGVdPVwiJ1RyaWFsIEltYWdlIEJnMidcIiBbYXNwZWN0UmF0aW9dPVwiJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndHJpYWxfaW1hZ2VfYmcyJ1wiIFtwcmV2aWV3RGF0YV09XCJkYXRhWyd0cmlhbF9pbWFnZV9iZzInXVwiPlxuICAgICAgICAgICAgICA8L3B3LWN1c3RvbS11cGxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxuICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgIDwhLS0gdHJpYWwgaW1hZ2Ugc2VjdGlvbiBlbmQgLS0+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtidXR0b25CdXN5XT1cImJ1dHRvbkJ1c3lcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPnt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L25nLWNvbnRhaW5lcj5cbjxkaXYgKm5nSWY9XCIhZGF0YT8uaG9zdF9uYW1lICYmICFpc0xvYWRpbmdcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLkRvbWFpbkNvbmZpZy5FbmFibGVDb25maWdUYWInIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuIl19
|