@adlfe/campaign-management-library 2.14.3 → 2.15.0
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/bundles/adlfe-campaign-management-library.umd.js +318 -102
- package/bundles/adlfe-campaign-management-library.umd.js.map +1 -1
- package/bundles/adlfe-campaign-management-library.umd.min.js +2 -2
- package/bundles/adlfe-campaign-management-library.umd.min.js.map +1 -1
- package/esm2015/lib/campaign-management/models/general-information-wa-req.model.js +24 -13
- package/esm2015/lib/campaign-management/modules/campaign-index/dialog/pending-approval-dialog-view/pending-approval-dialog-view.component.js +43 -26
- package/esm2015/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +185 -24
- package/esm2015/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +3 -3
- package/esm2015/lib/campaign-management/modules/new-campaign/new-campaign.component.js +44 -27
- package/esm2015/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +21 -15
- package/esm5/lib/campaign-management/models/general-information-wa-req.model.js +24 -13
- package/esm5/lib/campaign-management/modules/campaign-index/dialog/pending-approval-dialog-view/pending-approval-dialog-view.component.js +43 -26
- package/esm5/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +189 -24
- package/esm5/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +3 -3
- package/esm5/lib/campaign-management/modules/new-campaign/new-campaign.component.js +44 -27
- package/esm5/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +21 -15
- package/fesm2015/adlfe-campaign-management-library.js +314 -102
- package/fesm2015/adlfe-campaign-management-library.js.map +1 -1
- package/fesm5/adlfe-campaign-management-library.js +318 -102
- package/fesm5/adlfe-campaign-management-library.js.map +1 -1
- package/lib/campaign-management/models/general-information-wa-req.model.d.ts +1 -0
- package/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.d.ts +5 -0
- package/package.json +1 -1
|
@@ -181,9 +181,9 @@ __decorate([
|
|
|
181
181
|
GeneralInformationComponent = __decorate([
|
|
182
182
|
Component({
|
|
183
183
|
selector: 'lib-new-campaign-general-information',
|
|
184
|
-
template: "<form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"campaign-info\">\r\n <div class=\"campaign-info-child\">\r\n <mat-card>\r\n <mat-card-content>\r\n <h3 class=\"font-22px font-PoppinsBold mb-4\">General Information</h3>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Broadcast Name</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"campaignName\"\r\n placeholder=\"Enter Broadcast name\"\r\n />\r\n </mat-form-field>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n <mat-hint align=\"start\">\r\n {{ form.get('campaignName').value?.length || 0 }}/100\r\n </mat-hint>\r\n\r\n <div>\r\n <mat-error\r\n align=\"end\"\r\n *ngFor=\"let validation of validationMessages.campaignName\"\r\n >\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('campaignName').touched &&\r\n form.get('campaignName').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Channel</mat-label>\r\n\r\n <mat-select placeholder=\"Select channel\" formControlName=\"medium\">\r\n <mat-option\r\n *ngFor=\"let option of channelOption\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.medium\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('medium').touched &&\r\n form.get('medium').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'WA'\">\r\n <lib-general-information-wa\r\n [isTouchedForm]=\"isTouchedWAForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-wa>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'LINE'\">\r\n <lib-general-information-line\r\n [isTouchedForm]=\"isTouchedSMSForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-line>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'SMS'\">\r\n <lib-general-information-sms\r\n [isTouchedForm]=\"isTouchedSMSForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-sms>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'EMAIL'\">\r\n <lib-general-information-email\r\n [isTouchedForm]=\"isTouchedEmailForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-email>\r\n </ng-container>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <div class=\"campaign-info-child pl-20px\">\r\n <h3 class=\"font-22px font-PoppinsBold\">Broadcast Content</h3>\r\n\r\n <div\r\n [ngClass]=\"\r\n form.get('medium').value === 'SMS' || form.get('medium').value === 'EMAIL'\r\n ? 'campaign-border-preview'\r\n : 'campaign-preview'\r\n \"\r\n >\r\n <section\r\n *ngIf=\"\r\n form.get('medium').value === 'SMS' || form.get('medium').value === 'EMAIL'\r\n \"\r\n >\r\n <p\r\n *ngIf=\"getBody\"\r\n class=\"body my-2\"\r\n style=\"max-width: 500px; word-wrap: break-word\"\r\n [innerHTML]=\"getBody\"\r\n ></p>\r\n </section>\r\n\r\n <section *ngIf=\"form.get('medium').value === 'WA'\" class=\"campaign-preview__wa\">\r\n <div class=\"header-preview\">\r\n <div class=\"heading\">\r\n {{ getHeader }}\r\n </div>\r\n </div>\r\n <div class=\"body-preview\">\r\n <section *ngIf=\"getBody || getMedia || displayFile\">\r\n <div\r\n class=\"chat\"\r\n [ngClass]=\"{ 'no-bottom-border': getTemplate?.buttons?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"\r\n (getMedia === 'IMAGE' ||\r\n getTemplate?.header?.type?.toLowerCase() === 'image') &&\r\n displayFile\r\n \"\r\n style=\"max-width: 100%\"\r\n alt=\"image\"\r\n [src]=\"displayFile\"\r\n />\r\n\r\n <video\r\n *ngIf=\"\r\n (getMedia === 'VIDEO' ||\r\n getTemplate?.header?.type?.toLowerCase() === 'video') &&\r\n displayFile\r\n \"\r\n id=\"video\"\r\n style=\"width: 100%\"\r\n [src]=\"displayFile\"\r\n controls\r\n ></video>\r\n\r\n <div *ngIf=\"getMedia === 'DOCUMENT'\" style=\"display: flex\">\r\n <img\r\n style=\"width: 13px; height: 18px\"\r\n alt=\"document\"\r\n src=\"../../../../../assets/images/icon-file.png\"\r\n />\r\n\r\n <span style=\"margin-left: 10px\">Document</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getMedia === 'LOCATION'\">\r\n <agm-map\r\n style=\"width: 100%; height: 200px\"\r\n [disableDefaultUI]=\"true\"\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [zoom]=\"maps.zoom\"\r\n >\r\n <agm-marker\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [markerDraggable]=\"false\"\r\n ></agm-marker>\r\n </agm-map>\r\n <a\r\n [href]=\"\r\n 'https://www.google.com/maps/search/?api=1&query=' +\r\n maps.latitude +\r\n ',' +\r\n maps.longitude\r\n \"\r\n >\r\n https://www.google.com/maps/search/?api=1&query={{\r\n maps.latitude\r\n }},{{ maps.longitude }}\r\n </a>\r\n </ng-container>\r\n\r\n <p *ngIf=\"getBody\" class=\"body my-2\" [innerHTML]=\"getBody\"></p>\r\n\r\n <p\r\n *ngIf=\"getTemplate?.footer\"\r\n class=\"mb-2\"\r\n style=\"color: rgb(160, 160, 160)\"\r\n >\r\n {{ getTemplate.footer }}\r\n </p>\r\n </div>\r\n </section>\r\n <section *ngIf=\"getTemplate?.buttons?.length > 0\">\r\n <div\r\n *ngFor=\"let button of getTemplateButton\"\r\n class=\"params-btn pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text || button?.type }}\r\n </p>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"getTemplate?.buttons?.length > 3\"\r\n class=\"params-btn pb-0 pointer\"\r\n (click)=\"isShowMore = !isShowMore\"\r\n >\r\n <p class=\"mb-0\"><mat-icon>list</mat-icon> See all options</p>\r\n </div>\r\n </section>\r\n </div>\r\n </section>\r\n\r\n <section *ngIf=\"form.get('medium').value === 'LINE'\" class=\"campaign-preview__line\">\r\n <div class=\"header-preview\">\r\n <div class=\"heading\">\r\n {{ getHeader }}\r\n </div>\r\n </div>\r\n <div class=\"body-preview\">\r\n <!-- Template Line Text -->\r\n <section *ngIf=\"isText || !isJSON\" class=\"chat\">\r\n <p class=\"body my-2\" [innerHTML]=\"getBody\"></p>\r\n </section>\r\n\r\n <!-- Template Line Button | Confirmation -->\r\n <section\r\n *ngIf=\"['buttons', 'confirm'].includes(getTemplateLine?.type)\"\r\n class=\"chat\"\r\n [ngClass]=\"{ 'no-bottom-border': getTemplateLine?.actions?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"getTemplateLine?.thumbnailImageUrl\"\r\n style=\"max-width: 100%\"\r\n class=\"mb-1\"\r\n [src]=\"getTemplateLine?.thumbnailImageUrl\"\r\n />\r\n\r\n <p\r\n *ngIf=\"getTemplateLine?.title\"\r\n class=\"font-PoppinsBold mb-1\"\r\n [innerHTML]=\"getTemplateLine?.title\"\r\n ></p>\r\n\r\n <p\r\n *ngIf=\"getTemplateLine?.text\"\r\n class=\"mb-0\"\r\n [innerHTML]=\"getTemplateLine?.text\"\r\n ></p>\r\n </section>\r\n\r\n <!-- Template Line Carousel -->\r\n <div\r\n *ngIf=\"['carousel'].includes(getTemplateLine?.type)\"\r\n class=\"d-flex gap-2 overflow-auto\"\r\n >\r\n <div *ngFor=\"let column of getTemplateLine?.columns\">\r\n <section\r\n class=\"chat w-100\"\r\n [ngClass]=\"{ 'no-bottom-border': column?.actions?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"column.thumbnailImageUrl\"\r\n style=\"max-width: 100%\"\r\n class=\"mb-1\"\r\n [src]=\"column.thumbnailImageUrl\"\r\n />\r\n\r\n <p\r\n *ngIf=\"column.title\"\r\n class=\"font-PoppinsBold mb-1\"\r\n [innerHTML]=\"column.title\"\r\n ></p>\r\n\r\n <p\r\n *ngIf=\"column.text\"\r\n class=\"mb-0\"\r\n [innerHTML]=\"column.text\"\r\n ></p>\r\n </section>\r\n <section *ngIf=\"column?.actions?.length > 0\">\r\n <div\r\n *ngFor=\"let button of column?.actions\"\r\n class=\"params-btn mw-100 pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n\r\n <!-- Template Line Image Carousel -->\r\n <div\r\n *ngIf=\"['image_carousel'].includes(getTemplateLine?.type)\"\r\n class=\"d-flex gap-2 overflow-auto\"\r\n >\r\n <div *ngFor=\"let column of getTemplateLine?.columns\">\r\n <div class=\"image-container\">\r\n <img [src]=\"column.imageUrl\" alt=\"image\" />\r\n\r\n <div class=\"d-flex justify-content-center\">\r\n <p class=\"font-13px overlay-text\">\r\n {{ column.action.label }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Button Line -->\r\n <section\r\n *ngIf=\"\r\n getTemplateLine?.type !== 'confirm' &&\r\n getTemplateLine?.actions?.length > 0\r\n \"\r\n >\r\n <div\r\n *ngFor=\"let button of getTemplateLine?.actions\"\r\n class=\"params-btn pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n <section\r\n *ngIf=\"\r\n getTemplateLine?.type === 'confirm' &&\r\n getTemplateLine?.actions?.length > 0\r\n \"\r\n class=\"d-flex justify-content-around mw-70 bg-white\"\r\n >\r\n <div\r\n *ngFor=\"let button of getTemplateLine?.actions\"\r\n class=\"params-btn flex pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n <!-- ./ Button Line -->\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"d-flex\" style=\"flex-direction: column\">\r\n <span\r\n *ngIf=\"form.get('medium').value === 'SMS'\"\r\n style=\"text-align: right; width: 100%\"\r\n >\r\n {{ twilioResultCounter.fulltext }}\r\n </span>\r\n <span\r\n style=\"text-align: right; width: 100%; color: red\"\r\n *ngIf=\"twilioResultCounter.segments > 10 && form.get('medium').value === 'SMS'\"\r\n >\r\n Maximum Segment is 10\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ng-template #isSpinner>\r\n <div class=\"text-center my-auto\">\r\n <img src=\"../../../../../assets/images/spinner.svg\" />\r\n </div>\r\n</ng-template>\r\n",
|
|
185
|
-
styles: [".campaign-info{display:flex}.campaign-info-child{flex:1}.campaign-info .asterix--after:after{content:\"*\";color:red}.campaign-info .pl-20px{padding-left:20px}.campaign-info .mw-70{max-width:70%}.campaign-info .campaign-preview{width:75%}.campaign-info .campaign-preview .header-preview{padding:15px;min-height:60px;border-radius:10px 10px 0 0}.campaign-info .campaign-preview .header-preview .heading{width:100%;color:#e0e0e0;margin-left:5px;font-size:20px}.campaign-info .campaign-preview .body-preview{padding:15px;min-height:470px}.campaign-info .campaign-preview .body-preview .chat{width:70%;padding:11px;font-size:14px;line-height:22px;color:#494949;border-radius:8px;background:#fff;overflow-wrap:break-word;white-space:pre-line;box-shadow:12px 12px 20px rgba(44,59,113,.04)}.campaign-info .campaign-preview .body-preview .chat .body{max-height:400px;overflow-y:auto;overscroll-behavior-y:contain}.campaign-info .campaign-preview .body-preview .chat.no-bottom-border{border-bottom-left-radius:0;border-bottom-right-radius:0}.campaign-info .campaign-preview__wa .header-preview{background:#065f54}.campaign-info .campaign-preview__wa .body-preview{border-bottom-left-radius:8px;border-bottom-right-radius:8px;background-image:url(../../../../assets/svg/whatsapp-bg.svg);background-position:center;background-repeat:no-repeat;background-size:cover}.campaign-info .campaign-preview__wa .body-preview .params-btn{width:auto;max-width:70%;color:#34b7f1;background:#fff;box-shadow:12px 12px 20px rgba(44,59,113,.04);border-radius:0;font-size:16px;line-height:43px;padding:0;text-align:center;font-family:Poppins;overflow-wrap:break-word}.campaign-info .campaign-preview__wa .body-preview .params-btn b{font-family:PoppinsBold}.campaign-info .campaign-preview__line .header-preview{background:#273046}.campaign-info .campaign-preview__line .body-preview{background:#7692bf;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.campaign-info .campaign-preview__line .body-preview .params-btn{width:auto;max-width:70%;color:#34b7f1;background:#fff;box-shadow:12px 12px 20px rgba(44,59,113,.04);border-radius:0;font-size:16px;line-height:43px;padding:0;text-align:center;font-family:Poppins;overflow-wrap:break-word}.campaign-info .campaign-preview__line .body-preview .params-btn b{font-family:PoppinsBold}.campaign-info .campaign-preview__line .body-preview .image-container{position:relative;width:200px;height:200px}.campaign-info .campaign-preview__line .body-preview .image-container img{display:block;width:100%;height:100%}.campaign-info .campaign-preview__line .body-preview .image-container .overlay-text{top:170px;position:absolute;padding:2px 5px;color:#fff;background-color:rgba(49,57,60,.62);border-radius:10px}.campaign-info .campaign-border-preview{width:100%;min-height:100px;padding:32px;border:1px solid #e2e2e2;border-radius:8px}"]
|
|
184
|
+
template: "<form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"campaign-info\">\r\n <div class=\"campaign-info-child\">\r\n <mat-card>\r\n <mat-card-content>\r\n <h3 class=\"font-22px font-PoppinsBold mb-4\">General Information</h3>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Broadcast Name</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"campaignName\"\r\n placeholder=\"Enter Broadcast name\"\r\n />\r\n </mat-form-field>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n <mat-hint align=\"start\">\r\n {{ form.get('campaignName').value?.length || 0 }}/100\r\n </mat-hint>\r\n\r\n <div>\r\n <mat-error\r\n align=\"end\"\r\n *ngFor=\"let validation of validationMessages.campaignName\"\r\n >\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('campaignName').touched &&\r\n form.get('campaignName').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Channel</mat-label>\r\n\r\n <mat-select placeholder=\"Select channel\" formControlName=\"medium\">\r\n <mat-option\r\n *ngFor=\"let option of channelOption\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.medium\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('medium').touched &&\r\n form.get('medium').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'WA'\">\r\n <lib-general-information-wa\r\n [isTouchedForm]=\"isTouchedWAForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-wa>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'LINE'\">\r\n <lib-general-information-line\r\n [isTouchedForm]=\"isTouchedSMSForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-line>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'SMS'\">\r\n <lib-general-information-sms\r\n [isTouchedForm]=\"isTouchedSMSForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-sms>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'EMAIL'\">\r\n <lib-general-information-email\r\n [isTouchedForm]=\"isTouchedEmailForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-email>\r\n </ng-container>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <div class=\"campaign-info-child pl-20px\">\r\n <h3 class=\"font-22px font-PoppinsBold\">Broadcast Content</h3>\r\n\r\n <div\r\n [ngClass]=\"\r\n form.get('medium').value === 'SMS' || form.get('medium').value === 'EMAIL'\r\n ? 'campaign-border-preview'\r\n : 'campaign-preview'\r\n \"\r\n >\r\n <section\r\n *ngIf=\"\r\n form.get('medium').value === 'SMS' || form.get('medium').value === 'EMAIL'\r\n \"\r\n >\r\n <p\r\n *ngIf=\"getBody\"\r\n class=\"body my-2\"\r\n style=\"max-width: 500px; word-wrap: break-word\"\r\n [innerHTML]=\"getBody\"\r\n ></p>\r\n </section>\r\n\r\n <section *ngIf=\"form.get('medium').value === 'WA'\" class=\"campaign-preview__wa\">\r\n <div class=\"header-preview\">\r\n <div class=\"heading\">\r\n {{ getHeader }}\r\n </div>\r\n </div>\r\n <div class=\"body-preview\">\r\n <section *ngIf=\"getBody || getMedia || displayFile\">\r\n <div\r\n class=\"chat\"\r\n [ngClass]=\"{ 'no-bottom-border': getTemplate?.buttons?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"\r\n (getMedia === 'IMAGE' ||\r\n getTemplate?.header?.type?.toLowerCase() === 'image') &&\r\n displayFile\r\n \"\r\n style=\"max-width: 100%\"\r\n alt=\"image\"\r\n [src]=\"displayFile\"\r\n />\r\n\r\n <video\r\n *ngIf=\"\r\n (getMedia === 'VIDEO' ||\r\n getTemplate?.header?.type?.toLowerCase() === 'video') &&\r\n displayFile\r\n \"\r\n id=\"video\"\r\n style=\"width: 100%\"\r\n [src]=\"displayFile\"\r\n controls\r\n ></video>\r\n\r\n <div *ngIf=\"getMedia === 'DOCUMENT'\" style=\"display: flex\">\r\n <img\r\n style=\"width: 13px; height: 18px\"\r\n alt=\"document\"\r\n src=\"../../../../../assets/images/icon-file.png\"\r\n />\r\n\r\n <span style=\"margin-left: 10px\">Document</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getMedia === 'LOCATION'\">\r\n <agm-map\r\n style=\"width: 100%; height: 200px\"\r\n [disableDefaultUI]=\"true\"\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [zoom]=\"maps.zoom\"\r\n >\r\n <agm-marker\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [markerDraggable]=\"false\"\r\n ></agm-marker>\r\n </agm-map>\r\n <a\r\n [href]=\"\r\n 'https://www.google.com/maps/search/?api=1&query=' +\r\n maps.latitude +\r\n ',' +\r\n maps.longitude\r\n \"\r\n >\r\n https://www.google.com/maps/search/?api=1&query={{\r\n maps.latitude\r\n }},{{ maps.longitude }}\r\n </a>\r\n </ng-container>\r\n\r\n <p *ngIf=\"getBody\" class=\"body my-2\" [innerHTML]=\"getBody\"></p>\r\n\r\n <p\r\n *ngIf=\"getTemplate?.footer\"\r\n class=\"mb-2\"\r\n style=\"color: rgb(160, 160, 160)\"\r\n >\r\n {{ getTemplate.footer }}\r\n </p>\r\n </div>\r\n </section>\r\n <section *ngIf=\"getTemplate?.buttons?.length > 0\">\r\n <div\r\n *ngFor=\"let button of getTemplateButton\"\r\n class=\"params-btn pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text || button?.type }}\r\n </p>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"getTemplate?.buttons?.length > 3\"\r\n class=\"params-btn pb-0 pointer\"\r\n (click)=\"isShowMore = !isShowMore\"\r\n >\r\n <p class=\"mb-0\"><mat-icon>list</mat-icon> See all options</p>\r\n </div>\r\n </section>\r\n <!-- ========================================== -->\r\n <!-- WA CAROUSEL PREVIEW -->\r\n <!-- ========================================== -->\r\n <div\r\n *ngIf=\"getTemplate?.carousel?.length > 0\"\r\n class=\"d-flex gap-2 mt-2 pb-2 wa-carousel-scroll\"\r\n style=\"\r\n width: 100%;\r\n padding-right: 16px;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n \"\r\n >\r\n <div\r\n *ngFor=\"let card of getTemplate?.carousel\"\r\n class=\"chat\"\r\n style=\"\r\n min-width: 220px;\r\n flex-shrink: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n background: #ffffff;\r\n border-radius: 8px;\r\n border: 1px solid #d1d7db;\r\n display: flex;\r\n flex-direction: column;\r\n \"\r\n >\r\n <img\r\n *ngIf=\"card.header?.url || card.headerURL\"\r\n style=\"width: 100%; height: 110px; object-fit: cover\"\r\n [src]=\"card.header?.url || card.headerURL\"\r\n alt=\"Carousel Header Image\"\r\n />\r\n <div style=\"padding: 8px 12px; flex-grow: 1\">\r\n <p\r\n *ngIf=\"card.body?.text\"\r\n class=\"mb-1\"\r\n style=\"\r\n white-space: pre-wrap;\r\n font-size: 13px;\r\n color: #111b21;\r\n \"\r\n >\r\n {{ card.body?.text }}\r\n </p>\r\n </div>\r\n <section\r\n *ngIf=\"card.buttons?.length > 0 || card.button?.length > 0\"\r\n style=\"width: 100%\"\r\n >\r\n <div\r\n *ngFor=\"let btn of card.buttons || card.button\"\r\n class=\"pointer\"\r\n style=\"\r\n border-top: 1px solid #e0e0e0;\r\n width: 100%;\r\n padding: 10px 0;\r\n background: #ffffff;\r\n \"\r\n >\r\n <p\r\n class=\"mb-0 text-center\"\r\n style=\"\r\n color: #00a5f4;\r\n font-size: 14px;\r\n font-weight: 500;\r\n \"\r\n >\r\n {{ btn?.text || btn?.type || 'Button' }}\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n <!-- ========================================== -->\r\n </div>\r\n </section>\r\n\r\n <section *ngIf=\"form.get('medium').value === 'LINE'\" class=\"campaign-preview__line\">\r\n <div class=\"header-preview\">\r\n <div class=\"heading\">\r\n {{ getHeader }}\r\n </div>\r\n </div>\r\n <div class=\"body-preview\">\r\n <section *ngIf=\"isText || !isJSON\" class=\"chat\">\r\n <p class=\"body my-2\" [innerHTML]=\"getBody\"></p>\r\n </section>\r\n\r\n <section\r\n *ngIf=\"['buttons', 'confirm'].includes(getTemplateLine?.type)\"\r\n class=\"chat\"\r\n [ngClass]=\"{ 'no-bottom-border': getTemplateLine?.actions?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"getTemplateLine?.thumbnailImageUrl\"\r\n style=\"max-width: 100%\"\r\n class=\"mb-1\"\r\n [src]=\"getTemplateLine?.thumbnailImageUrl\"\r\n />\r\n\r\n <p\r\n *ngIf=\"getTemplateLine?.title\"\r\n class=\"font-PoppinsBold mb-1\"\r\n [innerHTML]=\"getTemplateLine?.title\"\r\n ></p>\r\n\r\n <p\r\n *ngIf=\"getTemplateLine?.text\"\r\n class=\"mb-0\"\r\n [innerHTML]=\"getTemplateLine?.text\"\r\n ></p>\r\n </section>\r\n <div\r\n *ngIf=\"['carousel'].includes(getTemplateLine?.type)\"\r\n class=\"d-flex gap-2 overflow-auto\"\r\n >\r\n <div *ngFor=\"let column of getTemplateLine?.columns\">\r\n <section\r\n class=\"chat w-100\"\r\n [ngClass]=\"{ 'no-bottom-border': column?.actions?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"column.thumbnailImageUrl\"\r\n style=\"max-width: 100%\"\r\n class=\"mb-1\"\r\n [src]=\"column.thumbnailImageUrl\"\r\n />\r\n\r\n <p\r\n *ngIf=\"column.title\"\r\n class=\"font-PoppinsBold mb-1\"\r\n [innerHTML]=\"column.title\"\r\n ></p>\r\n\r\n <p\r\n *ngIf=\"column.text\"\r\n class=\"mb-0\"\r\n [innerHTML]=\"column.text\"\r\n ></p>\r\n </section>\r\n <section *ngIf=\"column?.actions?.length > 0\">\r\n <div\r\n *ngFor=\"let button of column?.actions\"\r\n class=\"params-btn mw-100 pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"['image_carousel'].includes(getTemplateLine?.type)\"\r\n class=\"d-flex gap-2 overflow-auto\"\r\n >\r\n <div *ngFor=\"let column of getTemplateLine?.columns\">\r\n <div class=\"image-container\">\r\n <img [src]=\"column.imageUrl\" alt=\"image\" />\r\n\r\n <div class=\"d-flex justify-content-center\">\r\n <p class=\"font-13px overlay-text\">\r\n {{ column.action.label }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <section\r\n *ngIf=\"\r\n getTemplateLine?.type !== 'confirm' &&\r\n getTemplateLine?.actions?.length > 0\r\n \"\r\n >\r\n <div\r\n *ngFor=\"let button of getTemplateLine?.actions\"\r\n class=\"params-btn pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n <section\r\n *ngIf=\"\r\n getTemplateLine?.type === 'confirm' &&\r\n getTemplateLine?.actions?.length > 0\r\n \"\r\n class=\"d-flex justify-content-around mw-70 bg-white\"\r\n >\r\n <div\r\n *ngFor=\"let button of getTemplateLine?.actions\"\r\n class=\"params-btn flex pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"d-flex\" style=\"flex-direction: column\">\r\n <span\r\n *ngIf=\"form.get('medium').value === 'SMS'\"\r\n style=\"text-align: right; width: 100%\"\r\n >\r\n {{ twilioResultCounter.fulltext }}\r\n </span>\r\n <span\r\n style=\"text-align: right; width: 100%; color: red\"\r\n *ngIf=\"twilioResultCounter.segments > 10 && form.get('medium').value === 'SMS'\"\r\n >\r\n Maximum Segment is 10\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ng-template #isSpinner>\r\n <div class=\"text-center my-auto\">\r\n <img src=\"../../../../../assets/images/spinner.svg\" />\r\n </div>\r\n</ng-template>\r\n",
|
|
185
|
+
styles: [".campaign-info{display:flex}.campaign-info-child{flex:1}.campaign-info .asterix--after:after{content:\"*\";color:red}.campaign-info .pl-20px{padding-left:20px}.campaign-info .mw-70{max-width:70%}.campaign-info .campaign-preview{width:75%}.campaign-info .campaign-preview .header-preview{padding:15px;min-height:60px;border-radius:10px 10px 0 0}.campaign-info .campaign-preview .header-preview .heading{width:100%;color:#e0e0e0;margin-left:5px;font-size:20px}.campaign-info .campaign-preview .body-preview{padding:15px;min-height:470px}.campaign-info .campaign-preview .body-preview .chat{width:70%;padding:11px;font-size:14px;line-height:22px;color:#494949;border-radius:8px;background:#fff;overflow-wrap:break-word;white-space:pre-line;box-shadow:12px 12px 20px rgba(44,59,113,.04)}.campaign-info .campaign-preview .body-preview .chat .body{max-height:400px;overflow-y:auto;overscroll-behavior-y:contain}.campaign-info .campaign-preview .body-preview .chat.no-bottom-border{border-bottom-left-radius:0;border-bottom-right-radius:0}.campaign-info .campaign-preview__wa .header-preview{background:#065f54}.campaign-info .campaign-preview__wa .body-preview{border-bottom-left-radius:8px;border-bottom-right-radius:8px;background-image:url(../../../../assets/svg/whatsapp-bg.svg);background-position:center;background-repeat:no-repeat;background-size:cover}.campaign-info .campaign-preview__wa .body-preview .params-btn{width:auto;max-width:70%;color:#34b7f1;background:#fff;box-shadow:12px 12px 20px rgba(44,59,113,.04);border-radius:0;font-size:16px;line-height:43px;padding:0;text-align:center;font-family:Poppins;overflow-wrap:break-word}.campaign-info .campaign-preview__wa .body-preview .params-btn b{font-family:PoppinsBold}.campaign-info .campaign-preview__line .header-preview{background:#273046}.campaign-info .campaign-preview__line .body-preview{background:#7692bf;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.campaign-info .campaign-preview__line .body-preview .params-btn{width:auto;max-width:70%;color:#34b7f1;background:#fff;box-shadow:12px 12px 20px rgba(44,59,113,.04);border-radius:0;font-size:16px;line-height:43px;padding:0;text-align:center;font-family:Poppins;overflow-wrap:break-word}.campaign-info .campaign-preview__line .body-preview .params-btn b{font-family:PoppinsBold}.campaign-info .campaign-preview__line .body-preview .image-container{position:relative;width:200px;height:200px}.campaign-info .campaign-preview__line .body-preview .image-container img{display:block;width:100%;height:100%}.campaign-info .campaign-preview__line .body-preview .image-container .overlay-text{top:170px;position:absolute;padding:2px 5px;color:#fff;background-color:rgba(49,57,60,.62);border-radius:10px}.campaign-info .campaign-border-preview{width:100%;min-height:100px;padding:32px;border:1px solid #e2e2e2;border-radius:8px}.wa-carousel-scroll::-webkit-scrollbar{height:4px}.wa-carousel-scroll::-webkit-scrollbar-track{background:0 0}.wa-carousel-scroll::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.15);border-radius:10px}.wa-carousel-scroll::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.3)}"]
|
|
186
186
|
})
|
|
187
187
|
], GeneralInformationComponent);
|
|
188
188
|
export { GeneralInformationComponent };
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1pbmZvcm1hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vZ2VuZXJhbC1pbmZvcm1hdGlvbi9nZW5lcmFsLWluZm9ybWF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUNILHdDQUF3QyxFQUN4QyxtQkFBbUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQWVoQyxJQUFhLDJCQUEyQixHQUF4QyxNQUFhLDJCQUEyQjtJQXlCcEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQWZwQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsd0JBQW1CLEdBQUc7WUFDekIsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLGdDQUFnQztTQUM3QyxDQUFDO1FBd0tLLHlCQUFvQixHQUFHLEdBQVMsRUFBRTs7WUFDckMsTUFBTSxhQUFhLFNBQUcsSUFBSSxDQUFDLHNCQUFzQiwwQ0FB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Vyw0Q0FBSSxTQUFTLENBQUM7SUFDaEYsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQVU7UUFDL0IsT0FBTyxVQUFVO2FBQ1osVUFBVSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQzthQUM3QyxVQUFVLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUM7YUFDekQsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FxQ0osQ0FBQTs7WUF2TWtDLFlBQVk7O0FBdkIzQztJQURDLE1BQU0sRUFBRTt1RUFJTjtBQWtCTTtJQUFSLEtBQUssRUFBRTttRUFBZ0M7QUF2Qi9CLDJCQUEyQjtJQUx2QyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsc0NBQXNDO1FBQ2hELDZxbkJBQW1EOztLQUV0RCxDQUFDO0dBQ1csMkJBQTJCLENBZ092QztTQWhPWSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTZWdtZW50ZWRNZXNzYWdlIH0gZnJvbSAnc21zLXNlZ21lbnRzLWNhbGN1bGF0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgR2VuZXJhbEluZm9ybWF0aW9uTWVzc2FnZVZhbGlkYXRpb25Db25zdCxcclxuICAgIFBsYXRmb3JtT3B0aW9uQ29uc3QsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9jb25zdCc7XHJcblxyXG5pbnRlcmZhY2UgSU1hcHMge1xyXG4gICAgem9vbTogbnVtYmVyO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlcjtcclxuICAgIGxvbmdpdHVkZTogbnVtYmVyO1xyXG4gICAgaXNEcmFnZ2FibGU6IGJvb2xlYW47XHJcbiAgICBpc0RvdWJsZUNsaWNrWm9vbTogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1uZXctY2FtcGFpZ24tZ2VuZXJhbC1pbmZvcm1hdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhbC1pbmZvcm1hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9nZW5lcmFsLWluZm9ybWF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmFsSW5mb3JtYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZ2VuZXJhbEluZm9ybWF0aW9uOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgICAgIHBhcmVudDogRm9ybUdyb3VwO1xyXG4gICAgICAgIGNoaWxkOiBGb3JtR3JvdXA7XHJcbiAgICB9PjtcclxuXHJcbiAgICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGNoYW5uZWxPcHRpb246IGFueVtdO1xyXG4gICAgcHVibGljIGdlbmVyYWxJbmZvcm1hdGlvbkZvcm06IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBpc1RvdWNoZWRXQUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1RvdWNoZWRTTVNGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNUb3VjaGVkRW1haWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTaG93TW9yZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZhbGlkYXRpb25NZXNzYWdlczogYW55O1xyXG4gICAgcHVibGljIG1hcHM6IElNYXBzO1xyXG4gICAgcHVibGljIHR3aWxpb1Jlc3VsdENvdW50ZXIgPSB7XHJcbiAgICAgICAgc2VnbWVudHM6IDAsXHJcbiAgICAgICAgY2hhcmFjdGVyczogMCxcclxuICAgICAgICBlbmNvZGluZzogJycsXHJcbiAgICAgICAgZnVsbHRleHQ6IGBFbmNvZGUgLSAvIENoYXJzIDAgLyBTZWdtZW50IDFgLFxyXG4gICAgfTtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkT25seU1vZGU6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbE9wdGlvbiA9IFBsYXRmb3JtT3B0aW9uQ29uc3Q7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBHZW5lcmFsSW5mb3JtYXRpb25NZXNzYWdlVmFsaWRhdGlvbkNvbnN0O1xyXG4gICAgICAgIHRoaXMubWFwcyA9IHtcclxuICAgICAgICAgICAgem9vbTogMTUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBudWxsLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IG51bGwsXHJcbiAgICAgICAgICAgIGlzRHJhZ2dhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBpc0RvdWJsZUNsaWNrWm9vbTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdERpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBpZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBjYW1wYWlnbk5hbWU6IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKV0pLFxyXG4gICAgICAgICAgICBtZWRpdW06IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUb3VjaGVkV0FGb3JtID0gIXRoaXMuaXNUb3VjaGVkV0FGb3JtO1xyXG4gICAgICAgICAgICB0aGlzLmlzVG91Y2hlZFNNU0Zvcm0gPSAhdGhpcy5pc1RvdWNoZWRTTVNGb3JtO1xyXG4gICAgICAgICAgICB0aGlzLmlzVG91Y2hlZEVtYWlsRm9ybSA9ICF0aGlzLmlzVG91Y2hlZEVtYWlsRm9ybTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICAgICAgICBjaGlsZDogdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGVja1R3aWxpb0NvdW50ZXIoKTtcclxuICAgICAgICB9LCA0MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEVkaXQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsaW4uY2FtcGFpZ24nKVxyXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJykpXHJcbiAgICAgICAgICAgIDoge307XHJcblxyXG4gICAgICAgIGlmIChPYmplY3QuZW50cmllcyhjYW1wYWlnbikubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2lkJykuc2V0VmFsdWUoY2FtcGFpZ24/LmdlbmVyYWxJbmZvcm1hdGlvbj8uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhbXBhaWduTmFtZScpLnNldFZhbHVlKGNhbXBhaWduPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0uY2FtcGFpZ25OYW1lKTtcclxuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtZWRpdW0nKS5zZXRWYWx1ZShjYW1wYWlnbj8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtLm1lZGl1bSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGlzYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seU1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR2VuZXJhbEluZm9ybWF0aW9uRm9ybShmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0gPSBmb3JtO1xyXG4gICAgICAgIHRoaXMuaXNTaG93TW9yZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbi5lbWl0KHtcclxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICAgIGNoaWxkOiB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldE1lZGlhID09PSAnTE9DQVRJT04nKSB0aGlzLmdldExvY2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEhlYWRlcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LmZyb20/Lm5hbWUgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEJvZHlTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBib2R5ID1cclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZXh0IHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRm9ybT8uZ2V0UmF3VmFsdWUoKT8udGVtcGxhdGU/LmJvZHk/LnRleHQgfHxcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5ib2R5Py50ZXh0O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBib2R5XHJcbiAgICAgICAgICAgICAgICA/LnNwbGl0KC9cXFxcbnxcXG4vKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJzxiciAvPicpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoL1xcXFx0fFxcdC8pXHJcbiAgICAgICAgICAgICAgICAuam9pbignICAgICcpID8/ICcnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Qm9keSgpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPVxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LnRleHQgfHxcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZW1wbGF0ZT8uYm9keT8udGV4dCB8fFxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LmJvZHk/LnRleHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgICAgICAgdGhpcy5maXhHZW5lcmF0ZWRIdG1sKFxyXG4gICAgICAgICAgICAgICAgYm9keVxyXG4gICAgICAgICAgICAgICAgICAgID8uc3BsaXQoL1xcXFxufFxcbi8pXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJzxiciAvPicpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KC9cXFxcdHxcXHQvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgICAgJykgPz8gJydcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldE1lZGlhKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRm9ybT8uZ2V0UmF3VmFsdWUoKT8ubWVkaWEgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFRlbXBsYXRlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRm9ybT8uZ2V0UmF3VmFsdWUoKT8udGVtcGxhdGUgfHwge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFRlbXBsYXRlQnV0dG9uKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgbGltaXQgPVxyXG4gICAgICAgICAgICAhdGhpcy5pc1Nob3dNb3JlICYmIHRoaXMuZ2V0VGVtcGxhdGU/LmJ1dHRvbnM/Lmxlbmd0aCA+IDNcclxuICAgICAgICAgICAgICAgID8gMlxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdldFRlbXBsYXRlPy5idXR0b25zPy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5nZXRUZW1wbGF0ZT8uYnV0dG9uc10uc3BsaWNlKDAsIGxpbWl0KSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheUZpbGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LnRhcmdldFVSTCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZW1wbGF0ZT8uaGVhZGVyPy51cmxcclxuICAgICAgICAgICAgKT8ucmVwbGFjZSgnYWRsc2FuZGJveC5jb20nLCAnYWRsc2FuZGJveC5uZXQnKSA/PyAnJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogTElORSAqL1xyXG4gICAgZ2V0IGlzVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5jaGFubmVsID09PSAnVEVYVCc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSlNPTigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5pc0pTT047XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFRlbXBsYXRlTGluZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzSlNPTlxyXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZW1wbGF0ZT8uYm9keT8udGV4dClcclxuICAgICAgICAgICAgOiB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LnRlbXBsYXRlPy5ib2R5Py50ZXh0O1xyXG4gICAgfVxyXG4gICAgLyogLi8gTElORSAqL1xyXG5cclxuICAgIHByaXZhdGUgZ2V0TG9jYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXBzLmxhdGl0dWRlID0gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5sYXRpdHVkZTtcclxuICAgICAgICB0aGlzLm1hcHMubG9uZ2l0dWRlID0gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5sb25naXR1ZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXhHZW5lcmF0ZWRIdG1sKGh0bWxTdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gaHRtbFN0cmluZ1xyXG4gICAgICAgICAgICAucmVwbGFjZUFsbCgvZGl2IHNyYz1cImh0dHAvZywgJ2ltZyBzcmM9XCJodHRwJylcclxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoL2RpdiBzcmM9XCJkYXRhOmltYWdlL2csICdpbWcgc3JjPVwiZGF0YTppbWFnZScpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKC9EcmFnIGFuZCBkcm9wIHlvdXIgaW1hZ2UgaGVyZS9nLCAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hlY2tUd2lsaW9Db3VudGVyID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlc0dlbmVyYWwgPSB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHZhbHVlc0dlbmVyYWw/LmNoYW5uZWwgPT09ICdURVhUJykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWdtZW50ZWRNZXNzYWdlID0gbmV3IFNlZ21lbnRlZE1lc3NhZ2UodGhpcy5nZXRCb2R5U3RyaW5nKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRlZE1lc3NhZ2Uuc2VnbWVudHNDb3VudCxcclxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBzZWdtZW50ZWRNZXNzYWdlLmVuY29kaW5nTmFtZSxcclxuICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6IHNlZ21lbnRlZE1lc3NhZ2UubnVtYmVyT2ZVbmljb2RlU2NhbGFycyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvUmVzdWx0Q291bnRlciA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICAgICAgICAgIGZ1bGx0ZXh0OiBgRW5jb2RlICR7cmVzdWx0LmVuY29kaW5nfSAvIENoYXJzICR7cmVzdWx0LmNoYXJhY3RlcnN9IC8gU2VnbWVudCAke3Jlc3VsdC5zZWdtZW50c31gLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZVJlc3VsdCA9IHRoaXMuZ2V0Qm9keVN0cmluZztcclxuICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZXNHZW5lcmFsPy50ZW1wbGF0ZT8uYm9keT8uZXhhbXBsZXMgfHwgW10pLm1hcCgoZW50cnksIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IGB7eyR7ZW50cnl9fX1gO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNHZW5lcmFsLnBhcmFtQm9keVtpbmRleF0/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVJlc3VsdCA9IHZhbHVlUmVzdWx0LnNwbGl0KHBsYWNlaG9sZGVyKS5qb2luKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWdtZW50ZWRNZXNzYWdlID0gbmV3IFNlZ21lbnRlZE1lc3NhZ2UodmFsdWVSZXN1bHQpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICBzZWdtZW50czogc2VnbWVudGVkTWVzc2FnZS5zZWdtZW50c0NvdW50LFxyXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHNlZ21lbnRlZE1lc3NhZ2UuZW5jb2RpbmdOYW1lLFxyXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyczogc2VnbWVudGVkTWVzc2FnZS5udW1iZXJPZlVuaWNvZGVTY2FsYXJzLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy50d2lsaW9SZXN1bHRDb3VudGVyID0ge1xyXG4gICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgZnVsbHRleHQ6IGBFbmNvZGUgJHtyZXN1bHQuZW5jb2Rpbmd9IC8gQ2hhcnMgJHtyZXN1bHQuY2hhcmFjdGVyc30gLyBTZWdtZW50ICR7cmVzdWx0LnNlZ21lbnRzfWAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1pbmZvcm1hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vZ2VuZXJhbC1pbmZvcm1hdGlvbi9nZW5lcmFsLWluZm9ybWF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUNILHdDQUF3QyxFQUN4QyxtQkFBbUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQWVoQyxJQUFhLDJCQUEyQixHQUF4QyxNQUFhLDJCQUEyQjtJQXlCcEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQWZwQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsd0JBQW1CLEdBQUc7WUFDekIsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLGdDQUFnQztTQUM3QyxDQUFDO1FBd0tLLHlCQUFvQixHQUFHLEdBQVMsRUFBRTs7WUFDckMsTUFBTSxhQUFhLFNBQUcsSUFBSSxDQUFDLHNCQUFzQiwwQ0FB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Vyw0Q0FBSSxTQUFTLENBQUM7SUFDaEYsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQVU7UUFDL0IsT0FBTyxVQUFVO2FBQ1osVUFBVSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQzthQUM3QyxVQUFVLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUM7YUFDekQsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FxQ0osQ0FBQTs7WUF2TWtDLFlBQVk7O0FBdkIzQztJQURDLE1BQU0sRUFBRTt1RUFJTjtBQWtCTTtJQUFSLEtBQUssRUFBRTttRUFBZ0M7QUF2Qi9CLDJCQUEyQjtJQUx2QyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsc0NBQXNDO1FBQ2hELGludkJBQW1EOztLQUV0RCxDQUFDO0dBQ1csMkJBQTJCLENBZ092QztTQWhPWSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTZWdtZW50ZWRNZXNzYWdlIH0gZnJvbSAnc21zLXNlZ21lbnRzLWNhbGN1bGF0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgR2VuZXJhbEluZm9ybWF0aW9uTWVzc2FnZVZhbGlkYXRpb25Db25zdCxcclxuICAgIFBsYXRmb3JtT3B0aW9uQ29uc3QsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9jb25zdCc7XHJcblxyXG5pbnRlcmZhY2UgSU1hcHMge1xyXG4gICAgem9vbTogbnVtYmVyO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlcjtcclxuICAgIGxvbmdpdHVkZTogbnVtYmVyO1xyXG4gICAgaXNEcmFnZ2FibGU6IGJvb2xlYW47XHJcbiAgICBpc0RvdWJsZUNsaWNrWm9vbTogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1uZXctY2FtcGFpZ24tZ2VuZXJhbC1pbmZvcm1hdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhbC1pbmZvcm1hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9nZW5lcmFsLWluZm9ybWF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmFsSW5mb3JtYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZ2VuZXJhbEluZm9ybWF0aW9uOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgICAgIHBhcmVudDogRm9ybUdyb3VwO1xyXG4gICAgICAgIGNoaWxkOiBGb3JtR3JvdXA7XHJcbiAgICB9PjtcclxuXHJcbiAgICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGNoYW5uZWxPcHRpb246IGFueVtdO1xyXG4gICAgcHVibGljIGdlbmVyYWxJbmZvcm1hdGlvbkZvcm06IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBpc1RvdWNoZWRXQUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1RvdWNoZWRTTVNGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNUb3VjaGVkRW1haWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTaG93TW9yZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHZhbGlkYXRpb25NZXNzYWdlczogYW55O1xyXG4gICAgcHVibGljIG1hcHM6IElNYXBzO1xyXG4gICAgcHVibGljIHR3aWxpb1Jlc3VsdENvdW50ZXIgPSB7XHJcbiAgICAgICAgc2VnbWVudHM6IDAsXHJcbiAgICAgICAgY2hhcmFjdGVyczogMCxcclxuICAgICAgICBlbmNvZGluZzogJycsXHJcbiAgICAgICAgZnVsbHRleHQ6IGBFbmNvZGUgLSAvIENoYXJzIDAgLyBTZWdtZW50IDFgLFxyXG4gICAgfTtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkT25seU1vZGU6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbE9wdGlvbiA9IFBsYXRmb3JtT3B0aW9uQ29uc3Q7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBHZW5lcmFsSW5mb3JtYXRpb25NZXNzYWdlVmFsaWRhdGlvbkNvbnN0O1xyXG4gICAgICAgIHRoaXMubWFwcyA9IHtcclxuICAgICAgICAgICAgem9vbTogMTUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBudWxsLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IG51bGwsXHJcbiAgICAgICAgICAgIGlzRHJhZ2dhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBpc0RvdWJsZUNsaWNrWm9vbTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdERpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBpZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBjYW1wYWlnbk5hbWU6IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKV0pLFxyXG4gICAgICAgICAgICBtZWRpdW06IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUb3VjaGVkV0FGb3JtID0gIXRoaXMuaXNUb3VjaGVkV0FGb3JtO1xyXG4gICAgICAgICAgICB0aGlzLmlzVG91Y2hlZFNNU0Zvcm0gPSAhdGhpcy5pc1RvdWNoZWRTTVNGb3JtO1xyXG4gICAgICAgICAgICB0aGlzLmlzVG91Y2hlZEVtYWlsRm9ybSA9ICF0aGlzLmlzVG91Y2hlZEVtYWlsRm9ybTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICAgICAgICBjaGlsZDogdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGVja1R3aWxpb0NvdW50ZXIoKTtcclxuICAgICAgICB9LCA0MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEVkaXQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsaW4uY2FtcGFpZ24nKVxyXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJykpXHJcbiAgICAgICAgICAgIDoge307XHJcblxyXG4gICAgICAgIGlmIChPYmplY3QuZW50cmllcyhjYW1wYWlnbikubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2lkJykuc2V0VmFsdWUoY2FtcGFpZ24/LmdlbmVyYWxJbmZvcm1hdGlvbj8uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhbXBhaWduTmFtZScpLnNldFZhbHVlKGNhbXBhaWduPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0uY2FtcGFpZ25OYW1lKTtcclxuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtZWRpdW0nKS5zZXRWYWx1ZShjYW1wYWlnbj8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtLm1lZGl1bSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGlzYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seU1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR2VuZXJhbEluZm9ybWF0aW9uRm9ybShmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0gPSBmb3JtO1xyXG4gICAgICAgIHRoaXMuaXNTaG93TW9yZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbi5lbWl0KHtcclxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICAgIGNoaWxkOiB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldE1lZGlhID09PSAnTE9DQVRJT04nKSB0aGlzLmdldExvY2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEhlYWRlcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LmZyb20/Lm5hbWUgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEJvZHlTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBib2R5ID1cclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZXh0IHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRm9ybT8uZ2V0UmF3VmFsdWUoKT8udGVtcGxhdGU/LmJvZHk/LnRleHQgfHxcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5ib2R5Py50ZXh0O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBib2R5XHJcbiAgICAgICAgICAgICAgICA/LnNwbGl0KC9cXFxcbnxcXG4vKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJzxiciAvPicpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoL1xcXFx0fFxcdC8pXHJcbiAgICAgICAgICAgICAgICAuam9pbignICAgICcpID8/ICcnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Qm9keSgpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPVxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LnRleHQgfHxcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZW1wbGF0ZT8uYm9keT8udGV4dCB8fFxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LmJvZHk/LnRleHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgICAgICAgdGhpcy5maXhHZW5lcmF0ZWRIdG1sKFxyXG4gICAgICAgICAgICAgICAgYm9keVxyXG4gICAgICAgICAgICAgICAgICAgID8uc3BsaXQoL1xcXFxufFxcbi8pXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJzxiciAvPicpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KC9cXFxcdHxcXHQvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgICAgJykgPz8gJydcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldE1lZGlhKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRm9ybT8uZ2V0UmF3VmFsdWUoKT8ubWVkaWEgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFRlbXBsYXRlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRm9ybT8uZ2V0UmF3VmFsdWUoKT8udGVtcGxhdGUgfHwge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFRlbXBsYXRlQnV0dG9uKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgbGltaXQgPVxyXG4gICAgICAgICAgICAhdGhpcy5pc1Nob3dNb3JlICYmIHRoaXMuZ2V0VGVtcGxhdGU/LmJ1dHRvbnM/Lmxlbmd0aCA+IDNcclxuICAgICAgICAgICAgICAgID8gMlxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdldFRlbXBsYXRlPy5idXR0b25zPy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5nZXRUZW1wbGF0ZT8uYnV0dG9uc10uc3BsaWNlKDAsIGxpbWl0KSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheUZpbGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LnRhcmdldFVSTCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZW1wbGF0ZT8uaGVhZGVyPy51cmxcclxuICAgICAgICAgICAgKT8ucmVwbGFjZSgnYWRsc2FuZGJveC5jb20nLCAnYWRsc2FuZGJveC5uZXQnKSA/PyAnJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogTElORSAqL1xyXG4gICAgZ2V0IGlzVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5jaGFubmVsID09PSAnVEVYVCc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSlNPTigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5pc0pTT047XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFRlbXBsYXRlTGluZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzSlNPTlxyXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy50ZW1wbGF0ZT8uYm9keT8udGV4dClcclxuICAgICAgICAgICAgOiB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk/LnRlbXBsYXRlPy5ib2R5Py50ZXh0O1xyXG4gICAgfVxyXG4gICAgLyogLi8gTElORSAqL1xyXG5cclxuICAgIHByaXZhdGUgZ2V0TG9jYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXBzLmxhdGl0dWRlID0gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5sYXRpdHVkZTtcclxuICAgICAgICB0aGlzLm1hcHMubG9uZ2l0dWRlID0gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25Gb3JtPy5nZXRSYXdWYWx1ZSgpPy5sb25naXR1ZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXhHZW5lcmF0ZWRIdG1sKGh0bWxTdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gaHRtbFN0cmluZ1xyXG4gICAgICAgICAgICAucmVwbGFjZUFsbCgvZGl2IHNyYz1cImh0dHAvZywgJ2ltZyBzcmM9XCJodHRwJylcclxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoL2RpdiBzcmM9XCJkYXRhOmltYWdlL2csICdpbWcgc3JjPVwiZGF0YTppbWFnZScpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKC9EcmFnIGFuZCBkcm9wIHlvdXIgaW1hZ2UgaGVyZS9nLCAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hlY2tUd2lsaW9Db3VudGVyID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlc0dlbmVyYWwgPSB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkZvcm0/LmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHZhbHVlc0dlbmVyYWw/LmNoYW5uZWwgPT09ICdURVhUJykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWdtZW50ZWRNZXNzYWdlID0gbmV3IFNlZ21lbnRlZE1lc3NhZ2UodGhpcy5nZXRCb2R5U3RyaW5nKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRlZE1lc3NhZ2Uuc2VnbWVudHNDb3VudCxcclxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBzZWdtZW50ZWRNZXNzYWdlLmVuY29kaW5nTmFtZSxcclxuICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6IHNlZ21lbnRlZE1lc3NhZ2UubnVtYmVyT2ZVbmljb2RlU2NhbGFycyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvUmVzdWx0Q291bnRlciA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICAgICAgICAgIGZ1bGx0ZXh0OiBgRW5jb2RlICR7cmVzdWx0LmVuY29kaW5nfSAvIENoYXJzICR7cmVzdWx0LmNoYXJhY3RlcnN9IC8gU2VnbWVudCAke3Jlc3VsdC5zZWdtZW50c31gLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZVJlc3VsdCA9IHRoaXMuZ2V0Qm9keVN0cmluZztcclxuICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZXNHZW5lcmFsPy50ZW1wbGF0ZT8uYm9keT8uZXhhbXBsZXMgfHwgW10pLm1hcCgoZW50cnksIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IGB7eyR7ZW50cnl9fX1gO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNHZW5lcmFsLnBhcmFtQm9keVtpbmRleF0/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVJlc3VsdCA9IHZhbHVlUmVzdWx0LnNwbGl0KHBsYWNlaG9sZGVyKS5qb2luKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWdtZW50ZWRNZXNzYWdlID0gbmV3IFNlZ21lbnRlZE1lc3NhZ2UodmFsdWVSZXN1bHQpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICBzZWdtZW50czogc2VnbWVudGVkTWVzc2FnZS5zZWdtZW50c0NvdW50LFxyXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHNlZ21lbnRlZE1lc3NhZ2UuZW5jb2RpbmdOYW1lLFxyXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyczogc2VnbWVudGVkTWVzc2FnZS5udW1iZXJPZlVuaWNvZGVTY2FsYXJzLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy50d2lsaW9SZXN1bHRDb3VudGVyID0ge1xyXG4gICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgZnVsbHRleHQ6IGBFbmNvZGUgJHtyZXN1bHQuZW5jb2Rpbmd9IC8gQ2hhcnMgJHtyZXN1bHQuY2hhcmFjdGVyc30gLyBTZWdtZW50ICR7cmVzdWx0LnNlZ21lbnRzfWAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4iXX0=
|