@smarterplan/ngx-smarterplan-admin 0.1.61 → 0.1.63
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/README.md +24 -24
- package/esm2020/lib/admin/admin.component.mjs +5 -5
- package/esm2020/lib/chevron/chevron.component.mjs +5 -5
- package/esm2020/lib/guest-link/guest-link.component.mjs +5 -5
- package/esm2020/lib/guide.guard.mjs +4 -4
- package/esm2020/lib/helpers.mjs +1 -1
- package/esm2020/lib/name-from-id.pipe.mjs +4 -4
- package/esm2020/lib/ngx-smarterplan-admin-routing.module.mjs +5 -5
- package/esm2020/lib/ngx-smarterplan-admin.module.mjs +5 -5
- package/esm2020/lib/ngx-smarterplan-admin.service.mjs +4 -4
- package/esm2020/lib/organisation/organisation.component.mjs +5 -5
- package/esm2020/lib/sp-admin.guard.mjs +7 -12
- package/esm2020/lib/user/detail-organisation/detail-organisation.component.mjs +5 -5
- package/esm2020/lib/user/form-mission/form-mission.component.mjs +5 -5
- package/esm2020/lib/user/form-organisation/form-organisation.component.mjs +5 -5
- package/esm2020/lib/user/user-mission-form/user-mission-form.component.mjs +5 -5
- package/esm2020/lib/user/user.component.mjs +5 -5
- package/esm2020/lib/visitor/create-batch/create-batch.component.mjs +5 -5
- package/esm2020/lib/visitor/template/template.component.mjs +5 -5
- package/esm2020/lib/visitor/visitor.component.mjs +5 -5
- package/esm2020/public-api.mjs +1 -1
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs +71 -76
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs +71 -76
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/lib/sp-admin.guard.d.ts +2 -3
- package/package.json +14 -13
- package/lib/admin/admin.component.d.ts.map +0 -1
- package/lib/chevron/chevron.component.d.ts.map +0 -1
- package/lib/guest-link/guest-link.component.d.ts.map +0 -1
- package/lib/guide.guard.d.ts.map +0 -1
- package/lib/helpers.d.ts.map +0 -1
- package/lib/name-from-id.pipe.d.ts.map +0 -1
- package/lib/ngx-smarterplan-admin-routing.module.d.ts.map +0 -1
- package/lib/ngx-smarterplan-admin.module.d.ts.map +0 -1
- package/lib/ngx-smarterplan-admin.service.d.ts.map +0 -1
- package/lib/organisation/organisation.component.d.ts.map +0 -1
- package/lib/sp-admin.guard.d.ts.map +0 -1
- package/lib/user/detail-organisation/detail-organisation.component.d.ts.map +0 -1
- package/lib/user/form-mission/form-mission.component.d.ts.map +0 -1
- package/lib/user/form-organisation/form-organisation.component.d.ts.map +0 -1
- package/lib/user/user-mission-form/user-mission-form.component.d.ts.map +0 -1
- package/lib/user/user.component.d.ts.map +0 -1
- package/lib/visitor/create-batch/create-batch.component.d.ts.map +0 -1
- package/lib/visitor/template/template.component.d.ts.map +0 -1
- package/lib/visitor/visitor.component.d.ts.map +0 -1
- package/public-api.d.ts.map +0 -1
- package/smarterplan-ngx-smarterplan-admin.d.ts.map +0 -1
|
@@ -162,10 +162,10 @@ export class OrganisationComponent {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
|
-
OrganisationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
166
|
-
OrganisationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: OrganisationComponent, selector: "lib-organisation", ngImport: i0, template: "<div class=\"container-fluid\" class=\"dashboard-tab\">\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\n <div class=\"row\">\n <div class=\"col-md-8 col-lg-6\">\n\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n\n <div *ngIf=\"!create && !editing\">\n <div class=\"d-flex justify-content-between align-items-center p-1\">\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\n type=\"text\"> \n </div>\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\n translate}}</button> -->\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <lib-loader></lib-loader>\n </div>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\n (click)=\"onToggleDetail(index)\">\n <div class=\"d-flex justify-content-between align-items-center\">\n {{a.name}}\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\n </div>\n\n <div *ngIf=\"index==details\">\n <ul class=\"list-group list-group-flush\">\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activit\u00E9' | translate}}</li> -->\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\n </li>\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\n a.organisation.siret : 'Not provided' | translate }}</li>\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt | date:'long' }}\n </li>\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\n {{'Administrator User' | translate}} :</li>\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\n {{'Administrator User(s)' | translate}} :</li>\n <li class=\"list-group-item list-group-item-action\"\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\n (click)=\"onRemoveAdmin(admin)\">\n {{'Remove'|translate}}</button> \n </li>\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\n </ul>\n\n </ng-container>\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\n </ng-container>\n <ng-container *ngIf=\"a.properties.length > 0\">\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"ml-4\">{{property}}</li>\n </ul>\n </li>\n </ng-container>\n </ul>\n <div class=\"action-button-container\">\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\n (click)=\"onEdit(a.organisation)\">\n {{'Edit' | translate}}</button>\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\n (click)=\"onArchive(a.organisation)\" disabled>\n {{'Archive' | translate}}</button>\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\n (click)=\"onDeleteOrg(a.organisation)\">\n {{'Delete' | translate}}</button>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <div *ngIf=\"form && (create || editing)\">\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\n formControlName=\"name\">\n <div class=\"invalid-feedback\">\n {{'A name is required' | translate}}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\n </div>\n </div>\n <div *ngIf=\"working\">\n <lib-loader></lib-loader>\n </div>\n <div class=\"action-button-container\">\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\n </div>\n </form>\n </div>\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\n </spOrganisationForm>-->\n </div>\n </div>\n</div>\n\n<!-- <div>{{'Administrator User' | translate}}</div>\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\n <div *ngIf=\"form\" class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\n formControlName=\"email\">\n <div class=\"invalid-feedback\">\n {{'An email is required' | translate}}\n </div>\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\n </div>\n </div>\n </div> -->", styles: [".form-group{margin:1.5rem 0}.search-button{width:-moz-fit-content;width:fit-content}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"], components: [{ type: i1.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }, { type: i4.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i3.TranslatePipe, "date": i5.DatePipe } });
|
|
167
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
165
|
+
OrganisationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: OrganisationComponent, deps: [{ token: i1.OrganisationService }, { token: i2.FormBuilder }, { token: i1.BaseUserService }, { token: i1.MissionService }, { token: i3.TranslateService }, { token: i1.PropertyService }], target: i0.ɵɵFactoryTarget.Component });
|
|
166
|
+
OrganisationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: OrganisationComponent, selector: "lib-organisation", ngImport: i0, template: "<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\r\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"!create && !editing\">\r\n <div class=\"d-flex justify-content-between align-items-center p-1\">\r\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\r\n type=\"text\"> \r\n </div>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\r\n translate}}</button> -->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.name}}\r\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\r\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\r\n </div>\r\n\r\n <div *ngIf=\"index==details\">\r\n <ul class=\"list-group list-group-flush\">\r\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activit\u00E9' | translate}}</li> -->\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\r\n a.organisation.siret : 'Not provided' | translate }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt | date:'long' }}\r\n </li>\r\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\r\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User' | translate}} :</li>\r\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User(s)' | translate}} :</li>\r\n <li class=\"list-group-item list-group-item-action\"\r\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\r\n (click)=\"onRemoveAdmin(admin)\">\r\n {{'Remove'|translate}}</button> \r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\r\n </ul>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\r\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\r\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"a.properties.length > 0\">\r\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\">{{property}}</li>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onEdit(a.organisation)\">\r\n {{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onArchive(a.organisation)\" disabled>\r\n {{'Archive' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onDeleteOrg(a.organisation)\">\r\n {{'Delete' | translate}}</button>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"form && (create || editing)\">\r\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\r\n </spOrganisationForm>-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <div>{{'Administrator User' | translate}}</div>\r\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\r\n <div *ngIf=\"form\" class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\r\n formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n {{'An email is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\r\n </div>\r\n </div>\r\n </div> -->", styles: [".form-group{margin:1.5rem 0}.search-button{width:fit-content}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"], components: [{ type: i1.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }, { type: i4.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i3.TranslatePipe, "date": i5.DatePipe } });
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: OrganisationComponent, decorators: [{
|
|
168
168
|
type: Component,
|
|
169
|
-
args: [{ selector: 'lib-organisation', template: "<div class=\"container-fluid\" class=\"dashboard-tab\">\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\n <div class=\"row\">\n <div class=\"col-md-8 col-lg-6\">\n\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n\n <div *ngIf=\"!create && !editing\">\n <div class=\"d-flex justify-content-between align-items-center p-1\">\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\n type=\"text\"> \n </div>\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\n translate}}</button> -->\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <lib-loader></lib-loader>\n </div>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\n (click)=\"onToggleDetail(index)\">\n <div class=\"d-flex justify-content-between align-items-center\">\n {{a.name}}\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\n </div>\n\n <div *ngIf=\"index==details\">\n <ul class=\"list-group list-group-flush\">\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activit\u00E9' | translate}}</li> -->\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\n </li>\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\n a.organisation.siret : 'Not provided' | translate }}</li>\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt | date:'long' }}\n </li>\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\n {{'Administrator User' | translate}} :</li>\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\n {{'Administrator User(s)' | translate}} :</li>\n <li class=\"list-group-item list-group-item-action\"\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\n (click)=\"onRemoveAdmin(admin)\">\n {{'Remove'|translate}}</button> \n </li>\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\n </ul>\n\n </ng-container>\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\n </ng-container>\n <ng-container *ngIf=\"a.properties.length > 0\">\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"ml-4\">{{property}}</li>\n </ul>\n </li>\n </ng-container>\n </ul>\n <div class=\"action-button-container\">\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\n (click)=\"onEdit(a.organisation)\">\n {{'Edit' | translate}}</button>\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\n (click)=\"onArchive(a.organisation)\" disabled>\n {{'Archive' | translate}}</button>\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\n (click)=\"onDeleteOrg(a.organisation)\">\n {{'Delete' | translate}}</button>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <div *ngIf=\"form && (create || editing)\">\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\n formControlName=\"name\">\n <div class=\"invalid-feedback\">\n {{'A name is required' | translate}}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\n </div>\n </div>\n <div *ngIf=\"working\">\n <lib-loader></lib-loader>\n </div>\n <div class=\"action-button-container\">\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\n </div>\n </form>\n </div>\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\n </spOrganisationForm>-->\n </div>\n </div>\n</div>\n\n<!-- <div>{{'Administrator User' | translate}}</div>\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\n <div *ngIf=\"form\" class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\n formControlName=\"email\">\n <div class=\"invalid-feedback\">\n {{'An email is required' | translate}}\n </div>\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\n </div>\n </div>\n </div> -->", styles: [".form-group{margin:1.5rem 0}.search-button{width:-moz-fit-content;width:fit-content}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"] }]
|
|
169
|
+
args: [{ selector: 'lib-organisation', template: "<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\r\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"!create && !editing\">\r\n <div class=\"d-flex justify-content-between align-items-center p-1\">\r\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\r\n type=\"text\"> \r\n </div>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\r\n translate}}</button> -->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.name}}\r\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\r\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\r\n </div>\r\n\r\n <div *ngIf=\"index==details\">\r\n <ul class=\"list-group list-group-flush\">\r\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activit\u00E9' | translate}}</li> -->\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\r\n a.organisation.siret : 'Not provided' | translate }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt | date:'long' }}\r\n </li>\r\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\r\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User' | translate}} :</li>\r\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User(s)' | translate}} :</li>\r\n <li class=\"list-group-item list-group-item-action\"\r\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\r\n (click)=\"onRemoveAdmin(admin)\">\r\n {{'Remove'|translate}}</button> \r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\r\n </ul>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\r\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\r\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"a.properties.length > 0\">\r\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\">{{property}}</li>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onEdit(a.organisation)\">\r\n {{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onArchive(a.organisation)\" disabled>\r\n {{'Archive' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onDeleteOrg(a.organisation)\">\r\n {{'Delete' | translate}}</button>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"form && (create || editing)\">\r\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\r\n </spOrganisationForm>-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <div>{{'Administrator User' | translate}}</div>\r\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\r\n <div *ngIf=\"form\" class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\r\n formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n {{'An email is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\r\n </div>\r\n </div>\r\n </div> -->", styles: [".form-group{margin:1.5rem 0}.search-button{width:fit-content}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"] }]
|
|
170
170
|
}], ctorParameters: function () { return [{ type: i1.OrganisationService }, { type: i2.FormBuilder }, { type: i1.BaseUserService }, { type: i1.MissionService }, { type: i3.TranslateService }, { type: i1.PropertyService }]; } });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL29yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvb3JnYW5pc2F0aW9uL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFJSCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQStFLGFBQWEsRUFBbUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXROLE1BQU0sT0FBTyxxQkFBcUI7SUFrQzlCLFlBQ1ksVUFBK0IsRUFDL0IsRUFBZSxFQUNmLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGVBQWdDO1FBTGhDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFYixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsVUFBSyxHQUFHLElBQUksQ0FBQztRQUliLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBTXRCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQiwyQ0FBMkM7UUFDM0MseUNBQXlDO1FBQ3pDLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFXeEIsQ0FBQztJQUVMLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxJQUFJLENBQUMsY0FBYzthQUNwQixnQ0FBZ0MsQ0FDN0Isc0NBQXNDLENBQ3pDO2FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNyQixJQUFJLFFBQVEsRUFBRTtnQkFDVixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDckIsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO3dCQUNiLE9BQU87cUJBQ1Y7b0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUMxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHOzRCQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJOzRCQUN6QixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7NEJBQzVCLGFBQWEsRUFBRSxFQUFFOzRCQUNqQixVQUFVLEVBQUUsRUFBRTt5QkFDakIsQ0FBQztxQkFDTDtvQkFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLEtBQUssRUFBRTt3QkFDN0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUN2QixDQUFDLENBQUMsY0FBYyxDQUNuQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQ2xCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNwQyxDQUFDO3dCQUNGLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7NEJBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdkM7Z0NBQ0ksSUFBSSxFQUFFLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0NBQy9CLE9BQU8sRUFBRSxDQUFDOzZCQUNiLENBQ0osQ0FBQzt5QkFDTDtxQkFDSjtvQkFDRCxpQkFBaUI7b0JBQ2pCLE1BQU0sVUFBVSxHQUNaLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FDbkQsQ0FBQyxDQUFDLGNBQWMsQ0FDbkIsQ0FBQztvQkFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVO3lCQUMzQyxNQUFNLENBQ0gsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNULENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUM1Qzt5QkFDQSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUNMLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztZQUNkLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQztTQUVoQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQWlCO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUN0QixJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDcEIsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUVyQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVc7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQztRQUNULElBQUk7WUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2IsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUF5QixDQUFDLENBQUM7YUFDOUU7aUJBQU07Z0JBQ0gsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5RDtTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQUM7UUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBaUI7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNyRSxJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxFQUFFLEtBQUssc0NBQXNDLEVBQ25EO1lBQ0UsTUFBTSxrQkFBa0IsR0FDcEIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDN0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO1lBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDtJQUNMLENBQUM7O2tIQWhOUSxxQkFBcUI7c0dBQXJCLHFCQUFxQix3RENmbEMsNjRTQWtMc0I7MkZEbktULHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UsIE1pc3Npb25TZXJ2aWNlLCBPcmdhbmlzYXRpb24sIE9yZ2FuaXNhdGlvblNlcnZpY2UsIFByb2ZpbGUsIFByb2ZpbGVFbnRpdHksIFByb3BlcnR5U2VydmljZSwgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCBSb2xlU3RhdHVzLCB1cGxvYWRGaWxlVG9TMyB9IGZyb20gXCJAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1vcmdhbmlzYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBhZG1pbnMgPSBbXTtcblxuICAgIGNsaWVudHMgPSBbXTtcblxuICAgIGRldGFpbHMgPSAtMTtcblxuICAgIHF1ZXJ5ID0gXCJcIjtcblxuICAgIGVycm9yID0gbnVsbDtcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIGNyZWF0ZSA9IGZhbHNlO1xuXG4gICAgd29ya2luZyA9IGZhbHNlO1xuXG4gICAgaXNBZGRpbmdBZG1pbiA9IGZhbHNlO1xuXG4gICAgbWU6IFByb2ZpbGU7XG5cbiAgICBvcmc6IE9yZ2FuaXNhdGlvbjtcblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGVkaXRpbmcgPSBmYWxzZTtcblxuICAgIC8vIGZ1bGxBY2Nlc3MgdHJ1ZSBnaXZlcyBhY2Nlc3MgdG8gYWxsIG9yZ3NcbiAgICAvLyB0aGlzIGlzIHJlc2VydmVkIHRvIFNtYXJ0ZXJwbGFuIEFETUlOc1xuICAgIGZ1bGxBY2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZpbGVUb1VwbG9hZDogRmlsZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG9yZ1NlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9wZXJ0eVNlcnZpY2U6IFByb3BlcnR5U2VydmljZSxcbiAgICApIHsgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXRMaXN0IGZldGNoZXMgYSBmcmVzaCBvcmdhbmlzYXRpb24gbGlzdCBmcm9tIHNlcnZlclxuICAgICAqL1xuICAgIGFzeW5jIHJlc2V0TGlzdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLmdldE1pc3Npb25zQnlPcmRlcmVkT3JnYW5pc2F0aW9uKFxuICAgICAgICAgICAgICAgIFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbihhc3luYyAobWlzc2lvbnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZGVsZXRlZEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGllbnQuaGFzT3duUHJvcGVydHkobS5vcmdhbmlzYXRpb25JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50W20ub3JnYW5pc2F0aW9uSURdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbS5vcmdhbmlzYXRpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogbS5vcmdhbmlzYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbk1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZG1pbiA9IGNsaWVudFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0ub3JnYW5pc2F0aW9uSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5hZG1pbk1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaXMpID0+IG1pcy51c2VyLmlkID09PSBtLnVzZXJJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZG1pbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXS5hZG1pbk1pc3Npb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiBuZXcgUHJvZmlsZUVudGl0eShtLnVzZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uOiBtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnR5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wZXJ0eS5kZWxldGVkQXQgJiYgcHJvcGVydHkuc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnNwYWNlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50cyA9IE9iamVjdC52YWx1ZXMoY2xpZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBvblRvZ2dsZURldGFpbCBmb2xkcy91bmZvbGRzIGRldGFpbHMgZm9yIGEgZ2l2ZW4gb3JnYW5pc2F0aW9uXG4gICAgICogQHBhcmFtIGkgaW5kZXggb2YgdGhlIG9yZ2FuaXNhdGlvbiB0byBiZSB0b2dnbGVkXG4gICAgICovXG4gICAgb25Ub2dnbGVEZXRhaWwoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gaW5kZXggPT09IHRoaXMuZGV0YWlscyA/IC0xIDogaW5kZXg7XG4gICAgfVxuXG4gICAgb25BZGQoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgICAgIGFkZHJlc3M6IFtcIlwiXSxcbiAgICAgICAgICAgIGNpdHk6IFtcIlwiXSxcbiAgICAgICAgICAgIHBvc3RhbDogW251bGxdLFxuICAgICAgICAgICAgc2lyZXQ6IFtudWxsXSxcblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkVkaXQob3JnOiBPcmdhbmlzYXRpb24pIHtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBpZDogW29yZy5pZF0sXG4gICAgICAgICAgICBuYW1lOiBbb3JnLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgICAgICBhZGRyZXNzOiBbb3JnLmFkZHJlc3NdLFxuICAgICAgICAgICAgY2l0eTogW29yZy5jaXR5XSxcbiAgICAgICAgICAgIHBvc3RhbDogW29yZy5wb3N0YWxdLFxuICAgICAgICAgICAgc2lyZXQ6IFtvcmcuc2lyZXRdLFxuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsKCkge1xuICAgICAgICAvLyB0aGlzLmZvcm0gPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJuYW1lXCIpO1xuICAgIH1cblxuICAgIGdldCBlbWFpbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcInVzZXJcIikuZ2V0KFwiZW1haWxcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBvcmdhbmlzYXRpb25cbiAgICAgKiBAc2VlIDE3NFxuICAgICAqL1xuICAgIGFzeW5jIG9uU3VibWl0T3JnKCkge1xuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xuICAgICAgICBsZXQgb3JnYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIG9yZ2EgPSBhd2FpdCB0aGlzLm9yZ1NlcnZpY2UuY3JlYXRlT3JnYW5pc2F0aW9uKGZvcm1WYWx1ZSBhcyBPcmdhbmlzYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcmdhID0gYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xuICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgb25BcmNoaXZlKF8pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJVbmltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIG9uRGlzbWlzcygpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgb25EZWxldGVPcmcob3JnOiBPcmdhbmlzYXRpb24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmRlbGV0ZU9yZ2FuaXNhdGlvblwiKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgd2luZG93LmNvbmZpcm0obWVzc2FnZSkgJiZcbiAgICAgICAgICAgIG9yZy5pZCAhPT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0RlbGV0ZSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZ2V0UHJvcGVydGllc0Zvck9yZ2FuaXNhdGlvbihvcmcuaWQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZ2FuaXNhdGlvbihvcmcuaWQpO1xuICAgICAgICAgICAgKGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZ2FuaXNhdGlvbihvcmcuaWQpKS5tYXAoXG4gICAgICAgICAgICAgICAgKG0pID0+IHRoaXMubWlzc2lvblNlcnZpY2Uuc29mdERlbGV0ZU1pc3Npb24obS5pZCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1RvRGVsZXRlLm1hcChhc3luYyAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZGVsZXRlUHJvcGVydHkocHJvcGVydHkuaWQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgY2xhc3M9XCJkYXNoYm9hcmQtdGFiXCI+XG4gIDxoMz57eydTbWFydGVyUGxhbiBDbGllbnQgT3JnYW5pc2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvaDM+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggY29sLWxnLTZcIj5cblxuICAgICAgPGRpdiAqbmdJZj1cImVycm9yXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgYWxlcnQtZGlzbWlzc2libGUgZmFkZSBzaG93XCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgIDxzdHJvbmc+e3snRXJyb3InIHwgdHJhbnNsYXRlfX0hPC9zdHJvbmc+IFdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIGZ1bGZpbCB5b3VyIHJlcXVlc3QuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJhbGVydFwiIChjbGljayk9XCJvbkRpc21pc3MoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhY3JlYXRlICYmICFlZGl0aW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHAtMVwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtYnV0dG9uXCIgWyhuZ01vZGVsKV09XCJxdWVyeVwiIGkxOG4tcGxhY2Vob2xkZXIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIj4mbmJzcDtcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiIChjbGljayk9XCJvbkFkZCgpXCI+e3snQWRkIG5ldyBjbGllbnQgb3JnYW5pc2F0aW9uJyB8XG4gICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPGxpYi1sb2FkZXI+PC9saWItbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIiAqbmdGb3I9XCJsZXQgYSBvZiBjbGllbnRzOyBpbmRleCBhcyBpbmRleFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoaW5kZXgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICB7e2EubmFtZX19XG4gICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJpbmRleD09ZGV0YWlsc1wiPjwvbGliLWNoZXZyb24+XG4gICAgICAgICAgICAgIDwhLS0gPGljLWljb24gW2ljb25dPVwiaW5kZXg9PWRldGFpbHMgPyBjaGV2cm9uRG93biA6IGNoZXZyb25SaWdodFwiPjwvaWMtaWNvbj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImluZGV4PT1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWN0aXZpdMOpJyB8IHRyYW5zbGF0ZX19PC9saT4gLS0+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uYWRkcmVzcyB9fTwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3sgJ1Bvc3RhbCBDb2RlJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5wb3N0YWwgfX1cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLmNpdHkgfX08L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1NJUkVUJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5zaXJldCA/XG4gICAgICAgICAgICAgICAgICBhLm9yZ2FuaXNhdGlvbi5zaXJldCA6ICdOb3QgcHJvdmlkZWQnIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydDcmVhdGVkJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5jcmVhdGVkQXQgfCBkYXRlOidsb25nJyB9fVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoIDw9IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7eydBZG1pbmlzdHJhdG9yIFVzZXInIHwgdHJhbnNsYXRlfX0gOjwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID4gMVwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcihzKScgfCB0cmFuc2xhdGV9fSA6PC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFkbWluIG9mIGEuYWRtaW5NaXNzaW9uczsgaW5kZXggYXMgaW5kZXhcIiAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1sLTRcIj4ge3thZG1pbi51c2VyLmRpc3BsYXlOYW1lfX0gKHt7YWRtaW4udXNlci5lbWFpbH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGxcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUFkbWluKGFkbWluKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1JlbW92ZSd8dHJhbnNsYXRlfX08L2J1dHRvbj4gXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snUGhvbmUnfX06IHt7YWRtaW4udXNlci5waG9uZX19PC9saT4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYS5hZG1pbk1pc3Npb25zLmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctd2FybmluZ1wiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2Utd2FybmluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7J1dhcm5pbmcnIHwgdHJhbnNsYXRlfX08L3NwYW4+IHt7J05vIEFkbWluaXN0cmF0b3IgVXNlcid8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEucHJvcGVydGllcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb2NhdGlvbnMnIHwgdHJhbnNsYXRlfX06IDwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiBhLnByb3BlcnRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPnt7cHJvcGVydHl9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0KGEub3JnYW5pc2F0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAge3snRWRpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFyY2hpdmUoYS5vcmdhbmlzYXRpb24pXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICB7eydBcmNoaXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlT3JnKGEub3JnYW5pc2F0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAge3snRGVsZXRlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybSAmJiAoY3JlYXRlIHx8IGVkaXRpbmcpXCI+XG4gICAgICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdE9yZygpXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJuYW1lLmludmFsaWQgJiYgbmFtZS50b3VjaGVkXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgICAgICAge3snQSBuYW1lIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDaXR5JyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNpdHlcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J1Bvc3RhbCBjb2RlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBvc3RhbFwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic2lyZXRcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3b3JraW5nXCI+XG4gICAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndvcmtpbmcgfHwgZm9ybS5pbnZhbGlkXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwid29ya2luZ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIj57eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tPHNwT3JnYW5pc2F0aW9uRm9ybSBbbW9kZWxdPVwiIGVkaXRpbmdPcmdhbmlzYXRpb25cIiAoc3VibWl0KT1cIm9uU2F2ZSgkZXZlbnQpXCIgKGNhbmNlbCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICAgICAgICAgIDwvc3BPcmdhbmlzYXRpb25Gb3JtPi0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIDxkaXY+e3snQWRtaW5pc3RyYXRvciBVc2VyJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJ1c2VyXCIgKm5nSWY9XCJjcmVhdGUgfHwgaXNBZGRpbmdBZG1pblwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0VtYWlsJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJlbWFpbC5pbnZhbGlkICYmIGVtYWlsLnRvdWNoZWRcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3snQW4gZW1haWwgaXMgcmVxdWlyZWQnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snRmlyc3QgbmFtZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTGFzdCBuYW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J1Bob25lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+Il19
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL29yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvb3JnYW5pc2F0aW9uL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFJSCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQStFLGFBQWEsRUFBbUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXROLE1BQU0sT0FBTyxxQkFBcUI7SUFrQzlCLFlBQ1ksVUFBK0IsRUFDL0IsRUFBZSxFQUNmLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGVBQWdDO1FBTGhDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFYixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsVUFBSyxHQUFHLElBQUksQ0FBQztRQUliLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGtC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U0FBUzsrQkFDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBGb3JtQnVpbGRlcixcclxuICAgIEZvcm1Hcm91cCxcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSwgTWlzc2lvblNlcnZpY2UsIE9yZ2FuaXNhdGlvbiwgT3JnYW5pc2F0aW9uU2VydmljZSwgUHJvZmlsZSwgUHJvZmlsZUVudGl0eSwgUHJvcGVydHlTZXJ2aWNlLCByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIFJvbGVTdGF0dXMsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIkBzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItb3JnYW5pc2F0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb3JnYW5pc2F0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgYWRtaW5zID0gW107XHJcblxyXG4gICAgY2xpZW50cyA9IFtdO1xyXG5cclxuICAgIGRldGFpbHMgPSAtMTtcclxuXHJcbiAgICBxdWVyeSA9IFwiXCI7XHJcblxyXG4gICAgZXJyb3IgPSBudWxsO1xyXG5cclxuICAgIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgICBjcmVhdGUgPSBmYWxzZTtcclxuXHJcbiAgICB3b3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgaXNBZGRpbmdBZG1pbiA9IGZhbHNlO1xyXG5cclxuICAgIG1lOiBQcm9maWxlO1xyXG5cclxuICAgIG9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBlZGl0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gZnVsbEFjY2VzcyB0cnVlIGdpdmVzIGFjY2VzcyB0byBhbGwgb3Jnc1xyXG4gICAgLy8gdGhpcyBpcyByZXNlcnZlZCB0byBTbWFydGVycGxhbiBBRE1JTnNcclxuICAgIGZ1bGxBY2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmaWxlVG9VcGxvYWQ6IEZpbGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBvcmdTZXJ2aWNlOiBPcmdhbmlzYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVzZXRMaXN0IGZldGNoZXMgYSBmcmVzaCBvcmdhbmlzYXRpb24gbGlzdCBmcm9tIHNlcnZlclxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNldExpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRNaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgICAgIFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKG1pc3Npb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnQgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kZWxldGVkQXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWVudC5oYXNPd25Qcm9wZXJ0eShtLm9yZ2FuaXNhdGlvbklEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbS5vcmdhbmlzYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uOiBtLm9yZ2FuaXNhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5NaXNzaW9uczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxyZWFkeUFkbWluID0gY2xpZW50W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5hZG1pbk1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pcykgPT4gbWlzLnVzZXIuaWQgPT09IG0udXNlcklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZG1pbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50W20ub3JnYW5pc2F0aW9uSURdLmFkbWluTWlzc2lvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiBuZXcgUHJvZmlsZUVudGl0eShtLnVzZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb246IG0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5nZXRQcm9wZXJ0aWVzRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRbbS5vcmdhbmlzYXRpb25JRF0ucHJvcGVydGllcyA9IHByb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydHkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcGVydHkuZGVsZXRlZEF0ICYmIHByb3BlcnR5LnNwYWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkuc3BhY2UubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGllbnRzID0gT2JqZWN0LnZhbHVlcyhjbGllbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogb25Ub2dnbGVEZXRhaWwgZm9sZHMvdW5mb2xkcyBkZXRhaWxzIGZvciBhIGdpdmVuIG9yZ2FuaXNhdGlvblxyXG4gICAgICogQHBhcmFtIGkgaW5kZXggb2YgdGhlIG9yZ2FuaXNhdGlvbiB0byBiZSB0b2dnbGVkXHJcbiAgICAgKi9cclxuICAgIG9uVG9nZ2xlRGV0YWlsKGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gaW5kZXggPT09IHRoaXMuZGV0YWlscyA/IC0xIDogaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGQoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgYWRkcmVzczogW1wiXCJdLFxyXG4gICAgICAgICAgICBjaXR5OiBbXCJcIl0sXHJcbiAgICAgICAgICAgIHBvc3RhbDogW251bGxdLFxyXG4gICAgICAgICAgICBzaXJldDogW251bGxdLFxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkVkaXQob3JnOiBPcmdhbmlzYXRpb24pIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGlkOiBbb3JnLmlkXSxcclxuICAgICAgICAgICAgbmFtZTogW29yZy5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiBbb3JnLmFkZHJlc3NdLFxyXG4gICAgICAgICAgICBjaXR5OiBbb3JnLmNpdHldLFxyXG4gICAgICAgICAgICBwb3N0YWw6IFtvcmcucG9zdGFsXSxcclxuICAgICAgICAgICAgc2lyZXQ6IFtvcmcuc2lyZXRdLFxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICAvLyB0aGlzLmZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVtYWlsKCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJ1c2VyXCIpLmdldChcImVtYWlsXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBvcmdhbmlzYXRpb25cclxuICAgICAqIEBzZWUgMTc0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uU3VibWl0T3JnKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmdhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xyXG4gICAgICAgICAgICAgICAgb3JnYSA9IGF3YWl0IHRoaXMub3JnU2VydmljZS5jcmVhdGVPcmdhbmlzYXRpb24oZm9ybVZhbHVlIGFzIE9yZ2FuaXNhdGlvbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcmdhID0gYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXJjaGl2ZShfKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVbmltcGxlbWVudGVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGlzbWlzcygpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRlbGV0ZU9yZyhvcmc6IE9yZ2FuaXNhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5kZWxldGVPcmdhbmlzYXRpb25cIik7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aW5kb3cuY29uZmlybShtZXNzYWdlKSAmJlxyXG4gICAgICAgICAgICBvcmcuaWQgIT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc1RvRGVsZXRlID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24ob3JnLmlkKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZ2FuaXNhdGlvbihvcmcuaWQpO1xyXG4gICAgICAgICAgICAoYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZy5pZCkpLm1hcChcclxuICAgICAgICAgICAgICAgIChtKSA9PiB0aGlzLm1pc3Npb25TZXJ2aWNlLnNvZnREZWxldGVNaXNzaW9uKG0uaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0RlbGV0ZS5tYXAoYXN5bmMgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZGVsZXRlUHJvcGVydHkocHJvcGVydHkuaWQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIGNsYXNzPVwiZGFzaGJvYXJkLXRhYlwiPlxyXG4gIDxoMz57eydTbWFydGVyUGxhbiBDbGllbnQgT3JnYW5pc2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvaDM+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy02XCI+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBhbGVydC1kaXNtaXNzaWJsZSBmYWRlIHNob3dcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICA8c3Ryb25nPnt7J0Vycm9yJyB8IHRyYW5zbGF0ZX19ITwvc3Ryb25nPiBXZSBoYXZlbid0IGJlZW4gYWJsZSB0byBmdWxmaWwgeW91ciByZXF1ZXN0LlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJhbGVydFwiIChjbGljayk9XCJvbkRpc21pc3MoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWNyZWF0ZSAmJiAhZWRpdGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHAtMVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1idXR0b25cIiBbKG5nTW9kZWwpXT1cInF1ZXJ5XCIgaTE4bi1wbGFjZWhvbGRlciBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCI+Jm5ic3A7XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uQWRkKClcIj57eydBZGQgbmV3IGNsaWVudCBvcmdhbmlzYXRpb24nIHxcclxuICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBhIG9mIGNsaWVudHM7IGluZGV4IGFzIGluZGV4XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKGluZGV4KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIHt7YS5uYW1lfX1cclxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiaW5kZXg9PWRldGFpbHNcIj48L2xpYi1jaGV2cm9uPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGljLWljb24gW2ljb25dPVwiaW5kZXg9PWRldGFpbHMgPyBjaGV2cm9uRG93biA6IGNoZXZyb25SaWdodFwiPjwvaWMtaWNvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImluZGV4PT1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FjdGl2aXTDqScgfCB0cmFuc2xhdGV9fTwvbGk+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uYWRkcmVzcyB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eyAnUG9zdGFsIENvZGUnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLnBvc3RhbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLmNpdHkgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLnNpcmV0ID9cclxuICAgICAgICAgICAgICAgICAgYS5vcmdhbmlzYXRpb24uc2lyZXQgOiAnTm90IHByb3ZpZGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydDcmVhdGVkJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5jcmVhdGVkQXQgfCBkYXRlOidsb25nJyB9fVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoIDw9IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcicgfCB0cmFuc2xhdGV9fSA6PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiYS5hZG1pbk1pc3Npb25zLmxlbmd0aCA+IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcihzKScgfCB0cmFuc2xhdGV9fSA6PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhZG1pbiBvZiBhLmFkbWluTWlzc2lvbnM7IGluZGV4IGFzIGluZGV4XCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPiB7e2FkbWluLnVzZXIuZGlzcGxheU5hbWV9fSAoe3thZG1pbi51c2VyLmVtYWlsfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUFkbWluKGFkbWluKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snUmVtb3ZlJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snUGhvbmUnfX06IHt7YWRtaW4udXNlci5waG9uZX19PC9saT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXdhcm5pbmdcIj48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXdhcm5pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7J1dhcm5pbmcnIHwgdHJhbnNsYXRlfX08L3NwYW4+IHt7J05vIEFkbWluaXN0cmF0b3IgVXNlcid8IHRyYW5zbGF0ZX19IDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLnByb3BlcnRpZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb2NhdGlvbnMnIHwgdHJhbnNsYXRlfX06IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCIgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIGEucHJvcGVydGllc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPnt7cHJvcGVydHl9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQoYS5vcmdhbmlzYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J0VkaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXJjaGl2ZShhLm9yZ2FuaXNhdGlvbilcIiBkaXNhYmxlZD5cclxuICAgICAgICAgICAgICAgICAge3snQXJjaGl2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVPcmcoYS5vcmdhbmlzYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybSAmJiAoY3JlYXRlIHx8IGVkaXRpbmcpXCI+XHJcbiAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0T3JnKClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwibmFtZS5pbnZhbGlkICYmIG5hbWUudG91Y2hlZFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDaXR5JyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjaXR5XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUG9zdGFsIGNvZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBvc3RhbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J1NJUkVUJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzaXJldFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIndvcmtpbmdcIj5cclxuICAgICAgICAgICAgPGxpYi1sb2FkZXI+PC9saWItbG9hZGVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndvcmtpbmcgfHwgZm9ybS5pbnZhbGlkXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJ3b3JraW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCI+e3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tPHNwT3JnYW5pc2F0aW9uRm9ybSBbbW9kZWxdPVwiIGVkaXRpbmdPcmdhbmlzYXRpb25cIiAoc3VibWl0KT1cIm9uU2F2ZSgkZXZlbnQpXCIgKGNhbmNlbCk9XCJvbkNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9zcE9yZ2FuaXNhdGlvbkZvcm0+LS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXY+e3snQWRtaW5pc3RyYXRvciBVc2VyJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInVzZXJcIiAqbmdJZj1cImNyZWF0ZSB8fCBpc0FkZGluZ0FkbWluXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1cIiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0VtYWlsJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwiZW1haWwuaW52YWxpZCAmJiBlbWFpbC50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FuIGVtYWlsIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0ZpcnN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTGFzdCBuYW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUGhvbmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+Il19
|
|
@@ -7,25 +7,20 @@ export class SpAdminGuard {
|
|
|
7
7
|
this.userService = userService;
|
|
8
8
|
this.router = router;
|
|
9
9
|
}
|
|
10
|
-
canActivate() {
|
|
11
|
-
|
|
12
|
-
if (this.userService.cu) {
|
|
13
|
-
canGo = this.userService.isSPAdmin();
|
|
14
|
-
}
|
|
15
|
-
if (canGo) {
|
|
10
|
+
canActivate(_route, _state) {
|
|
11
|
+
if (this.userService.cu && this.userService.isSPAdmin()) {
|
|
16
12
|
return true;
|
|
17
13
|
}
|
|
18
14
|
alert("You are not authorised to access this page");
|
|
19
|
-
this.router.
|
|
20
|
-
return false;
|
|
15
|
+
return this.router.parseUrl('/');
|
|
21
16
|
}
|
|
22
17
|
}
|
|
23
|
-
SpAdminGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
24
|
-
SpAdminGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
18
|
+
SpAdminGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SpAdminGuard, deps: [{ token: i1.BaseUserService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
SpAdminGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SpAdminGuard, providedIn: 'root' });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SpAdminGuard, decorators: [{
|
|
26
21
|
type: Injectable,
|
|
27
22
|
args: [{
|
|
28
23
|
providedIn: 'root'
|
|
29
24
|
}]
|
|
30
25
|
}], ctorParameters: function () { return [{ type: i1.BaseUserService }, { type: i2.Router }]; } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3AtYWRtaW4uZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi9zcC1hZG1pbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTNDLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLFlBQW9CLFdBQTRCLEVBQVUsTUFBYztRQUFwRCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUksQ0FBQztJQUU3RSxXQUFXLENBQ1AsTUFBOEIsRUFDOUIsTUFBMkI7UUFFM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3JELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7O3lHQVpRLFlBQVk7NkdBQVosWUFBWSxjQUZULE1BQU07MkZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwQWRtaW5HdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gICAgY2FuQWN0aXZhdGUoXHJcbiAgICAgICAgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgICAgIF9zdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxyXG4gICAgKTogYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLmN1ICYmIHRoaXMudXNlclNlcnZpY2UuaXNTUEFkbWluKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFsZXJ0KFwiWW91IGFyZSBub3QgYXV0aG9yaXNlZCB0byBhY2Nlc3MgdGhpcyBwYWdlXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5wYXJzZVVybCgnLycpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -174,11 +174,11 @@ export class DetailOrganisationComponent {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
|
-
DetailOrganisationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
178
|
-
DetailOrganisationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
177
|
+
DetailOrganisationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailOrganisationComponent, deps: [{ token: i1.OrganisationService }, { token: i2.FormBuilder }, { token: i1.PropertyService }, { token: i1.MissionService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
178
|
+
DetailOrganisationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DetailOrganisationComponent, selector: "lib-detail-organisation", inputs: { org: "org", currentOrg: "currentOrg", isSP: "isSP" }, outputs: { orgChanged: "orgChanged" }, usesOnChanges: true, ngImport: i0, template: "<div>\r\n <h5>{{'Organisation Details' | translate }}</h5>\r\n <div *ngIf=\"!editForm\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{ org.name }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Logo' | translate }}: {{ org.logoUrl ? \"\" : \"No logo uploaded\"}} \r\n <img class=\"logo-img\" *ngIf=\"signedLogo\" [src]=\"signedLogo\">\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate }}: {{\r\n org.siret ? org.siret : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate }}: {{\r\n org.address ? org.address : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate }}: {{org.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Contact information' | translate}}:\r\n {{ org.contactDetails ? org.contactDetails : (\"No data\" | translate)}}</li>\r\n <!-- <li class=\"list-group-item bg-transparent\" *ngIf=\"isSP\">\r\n <div class=\"row ml-0\">\r\n <div>\r\n {{'Active token' | translate }}:\r\n {{ org.shareToken ? prettifyToken() : ('No' | translate) }}\r\n </div>\r\n <div *ngIf=\"org.shareToken && !tokenExpired\" ngxClipboard [cbContent]=\"org.shareToken\"\r\n [style.cursor]=\"'pointer'\" style=\"margin-left: 5px; max-width: 20px;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n </li> -->\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP || myOrg\"\r\n (click)=\"onEdit()\"> {{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\r\n (click)=\"onDelete()\"> {{'Delete' | translate}}</button>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\r\n (click)=\"onToken()\">{{'Generate token' | translate}}</button> -->\r\n </div>\r\n </div>\r\n\r\n <!--Edit Form-->\r\n <div *ngIf=\"editForm\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"editForm\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Contact information' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"contactDetails\"\r\n placeholder=\"{{'Name, phone, email' | translate}}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Logo' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <label for=\"file\" class=\"btn btn-label-file rounded-pill\">\r\n <input type=\"file\" id=\"file\" (change)=\"handleFileInput($event)\" />\r\n {{'Add logo image' | translate}}</label>\r\n <p class=\"fileToUploadName\" *ngIf=\"fileToUpload\">{{fileToUpload.name}}</p>\r\n </div>\r\n \r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"editForm.invalid\">{{'Save' |\r\n translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' |\r\n translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--Loading-->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <!--Stripe-->\r\n <!-- <hr>\r\n <h5>{{'stripe.account' | translate }}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.connectedAccountStripeID\">\r\n {{'stripe.connected' | translate }}: {{org.connectedAccountStripeID.substring(0, 15) }}...</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.stripeOnBoardingCompleted !== null\">\r\n {{'stripe.completed' | translate }}: {{org.stripeOnBoardingCompleted }}</li>\r\n </ul> -->\r\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.logo-img{height:100px;object-fit:contain;margin:4px 10px}\n"], components: [{ type: i1.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i3.TranslatePipe } });
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DetailOrganisationComponent, decorators: [{
|
|
180
180
|
type: Component,
|
|
181
|
-
args: [{ selector: 'lib-detail-organisation', template: "<div>\n <h5>{{'Organisation Details' | translate }}</h5>\n <div *ngIf=\"!editForm\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{ org.name }}</li>\n <li class=\"list-group-item bg-transparent\">{{'Logo' | translate }}: {{ org.logoUrl ? \"\" : \"No logo uploaded\"}} \n <img class=\"logo-img\" *ngIf=\"signedLogo\" [src]=\"signedLogo\">\n </li>\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate }}: {{\n org.siret ? org.siret : (\"No data\" | translate)}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate }}: {{\n org.address ? org.address : (\"No data\" | translate)}}</li>\n <li class=\"list-group-item bg-transparent\">{{'City' | translate }}: {{org.city }}</li>\n <li class=\"list-group-item bg-transparent\">{{'Contact information' | translate}}:\n {{ org.contactDetails ? org.contactDetails : (\"No data\" | translate)}}</li>\n <!-- <li class=\"list-group-item bg-transparent\" *ngIf=\"isSP\">\n <div class=\"row ml-0\">\n <div>\n {{'Active token' | translate }}:\n {{ org.shareToken ? prettifyToken() : ('No' | translate) }}\n </div>\n <div *ngIf=\"org.shareToken && !tokenExpired\" ngxClipboard [cbContent]=\"org.shareToken\"\n [style.cursor]=\"'pointer'\" style=\"margin-left: 5px; max-width: 20px;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n </li> -->\n </ul>\n <div class=\"action-button-container\">\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP || myOrg\"\n (click)=\"onEdit()\"> {{'Edit' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\n (click)=\"onDelete()\"> {{'Delete' | translate}}</button>\n <!-- <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\n (click)=\"onToken()\">{{'Generate token' | translate}}</button> -->\n </div>\n </div>\n\n <!--Edit Form-->\n <div *ngIf=\"editForm\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"editForm\">\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\n formControlName=\"name\">\n <div class=\"invalid-feedback\">\n {{'A name is required' | translate}}\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Contact information' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"contactDetails\"\n placeholder=\"{{'Name, phone, email' | translate}}\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\n </div>\n </div>\n \n <div class=\"form-group row\">\n <label class=\"col-sm-3 col-form-label\">{{'Logo' | translate}}</label>\n <div class=\"col-sm-9\">\n <label for=\"file\" class=\"btn btn-label-file rounded-pill\">\n <input type=\"file\" id=\"file\" (change)=\"handleFileInput($event)\" />\n {{'Add logo image' | translate}}</label>\n <p class=\"fileToUploadName\" *ngIf=\"fileToUpload\">{{fileToUpload.name}}</p>\n </div>\n \n </div>\n <div class=\"action-button-container\">\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\n [disabled]=\"editForm.invalid\">{{'Save' |\n translate}}</button>\n <button type=\"button\" (click)=\"onCancel()\"\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' |\n translate}}</button>\n </div>\n </form>\n </div>\n <!--Loading-->\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <lib-loader></lib-loader>\n </div>\n\n <!--Stripe-->\n <!-- <hr>\n <h5>{{'stripe.account' | translate }}</h5>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.connectedAccountStripeID\">\n {{'stripe.connected' | translate }}: {{org.connectedAccountStripeID.substring(0, 15) }}...</li>\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.stripeOnBoardingCompleted !== null\">\n {{'stripe.completed' | translate }}: {{org.stripeOnBoardingCompleted }}</li>\n </ul> -->\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.logo-img{height:100px;object-fit:contain;margin:4px 10px}\n"] }]
|
|
181
|
+
args: [{ selector: 'lib-detail-organisation', template: "<div>\r\n <h5>{{'Organisation Details' | translate }}</h5>\r\n <div *ngIf=\"!editForm\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{ org.name }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Logo' | translate }}: {{ org.logoUrl ? \"\" : \"No logo uploaded\"}} \r\n <img class=\"logo-img\" *ngIf=\"signedLogo\" [src]=\"signedLogo\">\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate }}: {{\r\n org.siret ? org.siret : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate }}: {{\r\n org.address ? org.address : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate }}: {{org.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Contact information' | translate}}:\r\n {{ org.contactDetails ? org.contactDetails : (\"No data\" | translate)}}</li>\r\n <!-- <li class=\"list-group-item bg-transparent\" *ngIf=\"isSP\">\r\n <div class=\"row ml-0\">\r\n <div>\r\n {{'Active token' | translate }}:\r\n {{ org.shareToken ? prettifyToken() : ('No' | translate) }}\r\n </div>\r\n <div *ngIf=\"org.shareToken && !tokenExpired\" ngxClipboard [cbContent]=\"org.shareToken\"\r\n [style.cursor]=\"'pointer'\" style=\"margin-left: 5px; max-width: 20px;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n </li> -->\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP || myOrg\"\r\n (click)=\"onEdit()\"> {{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\r\n (click)=\"onDelete()\"> {{'Delete' | translate}}</button>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\r\n (click)=\"onToken()\">{{'Generate token' | translate}}</button> -->\r\n </div>\r\n </div>\r\n\r\n <!--Edit Form-->\r\n <div *ngIf=\"editForm\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"editForm\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Contact information' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"contactDetails\"\r\n placeholder=\"{{'Name, phone, email' | translate}}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Logo' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <label for=\"file\" class=\"btn btn-label-file rounded-pill\">\r\n <input type=\"file\" id=\"file\" (change)=\"handleFileInput($event)\" />\r\n {{'Add logo image' | translate}}</label>\r\n <p class=\"fileToUploadName\" *ngIf=\"fileToUpload\">{{fileToUpload.name}}</p>\r\n </div>\r\n \r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"editForm.invalid\">{{'Save' |\r\n translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' |\r\n translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--Loading-->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <!--Stripe-->\r\n <!-- <hr>\r\n <h5>{{'stripe.account' | translate }}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.connectedAccountStripeID\">\r\n {{'stripe.connected' | translate }}: {{org.connectedAccountStripeID.substring(0, 15) }}...</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.stripeOnBoardingCompleted !== null\">\r\n {{'stripe.completed' | translate }}: {{org.stripeOnBoardingCompleted }}</li>\r\n </ul> -->\r\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}.logo-img{height:100px;object-fit:contain;margin:4px 10px}\n"] }]
|
|
182
182
|
}], ctorParameters: function () { return [{ type: i1.OrganisationService }, { type: i2.FormBuilder }, { type: i1.PropertyService }, { type: i1.MissionService }, { type: i3.TranslateService }]; }, propDecorators: { org: [{
|
|
183
183
|
type: Input
|
|
184
184
|
}], currentOrg: [{
|
|
@@ -188,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
188
188
|
}], orgChanged: [{
|
|
189
189
|
type: Output
|
|
190
190
|
}] } });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLW9yZ2FuaXNhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL2RldGFpbC1vcmdhbmlzYXRpb24vZGV0YWlsLW9yZ2FuaXNhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL2RldGFpbC1vcmdhbmlzYXRpb24vZGV0YWlsLW9yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFDSCxZQUFZLEVBQUUsYUFBYSxFQUMzQix3QkFBd0IsRUFBRSxjQUFjLEVBQzNDLE1BQU0sbUNBQW1DLENBQUM7Ozs7OztBQVMzQyxNQUFNLE9BQU8sMkJBQTJCO0lBMkJwQyxZQUNZLG1CQUF3QztJQUNoRCxzQ0FBc0M7SUFDOUIsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDaEMsY0FBOEIsRUFDOUIsU0FBMkI7UUFMM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUV4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBMUI3QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQU1uRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQW1CckIsQ0FBQztJQUVMLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFB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bXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIGRlbGV0ZUZyb21TMywgZ2V0U2lnbmVkRmlsZSwgT3JnYW5pc2F0aW9uLCBPcmdhbmlzYXRpb25TZXJ2aWNlLFxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCwgdXBsb2FkRmlsZVRvUzMsIFByb3BlcnR5U2VydmljZSwgTWlzc2lvblNlcnZpY2Vcbn0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItZGV0YWlsLW9yZ2FuaXNhdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbC1vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RldGFpbC1vcmdhbmlzYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxPcmdhbmlzYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIG9yZzogT3JnYW5pc2F0aW9uO1xuXG4gICAgQElucHV0KCkgY3VycmVudE9yZzogT3JnYW5pc2F0aW9uO1xuXG4gICAgQElucHV0KCkgaXNTUDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBvcmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgbXlPcmc6IGJvb2xlYW47XG5cbiAgICB0b2tlbkV4cGlyZWQ6IGJvb2xlYW47XG5cbiAgICBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBjb25uZWN0aW5nU3RyaXBlID0gZmFsc2U7XG5cbiAgICBtb2RhbFJlZjtcblxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgZWRpdEZvcm06IEZvcm1Hcm91cDtcblxuICAgIGZpbGVUb1VwbG9hZDogRmlsZTtcblxuICAgIHNpZ25lZExvZ286IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG9yZ2FuaXNhdGlvblNlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXG4gICAgICAgIC8vIHByaXZhdGUgbG9jYWxTdHJpcGU6IFN0cmlwZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgKSB7IH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm15T3JnID0gdGhpcy5jdXJyZW50T3JnLmlkID09PSB0aGlzLm9yZy5pZDtcbiAgICAgICAgaWYgKCF0aGlzLm9yZy5jb25uZWN0ZWRBY2NvdW50U3RyaXBlSUQgJiYgKHRoaXMubXlPcmcgfHwgdGhpcy5pc1NQKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb25uZWN0U3RyaXBlTGluaygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yZy5sb2dvVXJsKSB7XG4gICAgICAgICAgICB0aGlzLnNpZ25lZExvZ28gPSBhd2FpdCBnZXRTaWduZWRGaWxlKHRoaXMub3JnLmxvZ29VcmwpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5teU9yZyA9IHRoaXMuY3VycmVudE9yZy5pZCA9PT0gdGhpcy5vcmcuaWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRva2VucyB3ZXJlIHN1cHBvc2VkIHRvIGJlIHVzZWQgaWYgT3JnYW5pc2F0aW9uIGV4aXN0cyBhbHJlYWR5IChjcmVhdGVkIGJ5IG9uZSBhY2NvdW50KSBhbmQgaXQgc2hvdWxkIGJlIHJlc3VzZWQgKGJ5IGFub3RoZXIgYWNjb3VudCkgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGR1cGxpY2F0ZS5cbiAgICAgKi9cbiAgICAvLyBhc3luYyBvblRva2VuKCkge1xuICAgIC8vICAgICBjb25zdCB0b2tlbiA9IHV1aWR2NCgpO1xuICAgIC8vICAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUoKTtcbiAgICAvLyAgICAgZXhwaXJlcy5zZXREYXRlKGV4cGlyZXMuZ2V0RGF0ZSgpICsgNyk7IC8vIDcgZGF5cyBleHBpcmF0aW9uXG4gICAgLy8gICAgIHRoaXMub3JnID0gYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbih7XG4gICAgLy8gICAgICAgICBpZDogdGhpcy5vcmcuaWQsXG4gICAgLy8gICAgICAgICBzaGFyZVRva2VuOiB0b2tlbixcbiAgICAvLyAgICAgICAgIHRva2VuRXhwaXJlc0F0OiBleHBpcmVzLmdldFRpbWUoKSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICAgIHRoaXMub3JnQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgIC8vIH1cblxuICAgIHByZXR0aWZ5VG9rZW4oKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXhwaXJhdGlvbkRhdGUgPSBuZXcgRGF0ZSh0aGlzLm9yZy50b2tlbkV4cGlyZXNBdCk7XG4gICAgICAgIGNvbnN0IGRpZmZUaW1lID0gZXhwaXJhdGlvbkRhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGlmZkRheXMgPSBNYXRoLmNlaWwoZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICAgICAgICBjb25zdCBleHBpcmF0aW9uU3RyaW5nID1cbiAgICAgICAgICAgIGRpZmZUaW1lIDwgMCA/IFwiZXhwaXJlZCFcIiA6IGBleHBpcmVzIGluICR7ZGlmZkRheXN9IGRheXNgO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5vcmcuc2hhcmVUb2tlbi5zbGljZSgwLCA2KX0uLi4gJHtleHBpcmF0aW9uU3RyaW5nfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlZCBOZXcgU3RyaXBlIEFjY291bnQgYW5kIGxhdW5jaGVzIG9uYm9hcmRpbmcgcHJvY2VkdXJlIChtYWlsLCBwaG9uZSwgYnVzaW5lc3MgZGV0YWlscy4uKSBieSBTdHJpcGVcbiAgICAgKiBAcmV0dXJucyBudWxsXG4gICAgICovXG4gICAgLy8gYXN5bmMgb25DcmVhdGVTdHJpcGUoKSB7XG4gICAgLy8gICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgLy8gICAgIC8vIE1ha2UgdGhlIHJlcXVlc3RcbiAgICAvLyAgICAgY29uc3QgcmVzcG9uc2VBY2NvdW50ID0gYXdhaXQgQVBJLnBvc3QoXG4gICAgLy8gICAgICAgICBcInN0cmlwZUFwaVwiLFxuICAgIC8vICAgICAgICAgXCIvY3JlYXRlL2FjY291bnRcIixcbiAgICAvLyAgICAgICAgIHt9LFxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhyZXNwb25zZUFjY291bnQpO1xuICAgIC8vICAgICBpZiAocmVzcG9uc2VBY2NvdW50LmVycikge1xuICAgIC8vICAgICAgICAgdGhpcy5oYW5kbGVTdHJpcGVFcnJvcihyZXNwb25zZUFjY291bnQpO1xuICAgIC8vICAgICAgICAgcmV0dXJuO1xuICAgIC8vICAgICB9XG5cbiAgICAvLyAgICAgY29uc3QgeyBhY2NvdW50IH0gPSByZXNwb25zZUFjY291bnQ7XG4gICAgLy8gICAgIC8vIHNhdmUgYWNjb3VudCBpZCB0byBvcmdhbmlzYXRpb25cbiAgICAvLyAgICAgYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLnVwZGF0ZSh7XG4gICAgLy8gICAgICAgICBpZDogdGhpcy5vcmcuaWQsXG4gICAgLy8gICAgICAgICBjb25uZWN0ZWRBY2NvdW50U3RyaXBlSUQ6IGFjY291bnQuaWQsXG4gICAgLy8gICAgICAgICBzdHJpcGVPbkJvYXJkaW5nQ29tcGxldGVkOiBmYWxzZSxcbiAgICAvLyAgICAgfSk7XG5cbiAgICAvLyAgICAgY29uc3QgeyBvcmlnaW4gfSA9IGRvY3VtZW50LmxvY2F0aW9uO1xuICAgIC8vICAgICBjb25zdCByZXNwb25zZUFjY291bnRMaW5rcyA9IGF3YWl0IHRoaXMubG9jYWxTdHJpcGUuY3JlYXRlQWNjb3VudExpbmsoXG4gICAgLy8gICAgICAgICBhY2NvdW50LmlkLFxuICAgIC8vICAgICAgICAgb3JpZ2luLFxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBpZiAocmVzcG9uc2VBY2NvdW50TGlua3MuZXJyKSB7XG4gICAgLy8gICAgICAgICB0aGlzLmhhbmRsZVN0cmlwZUVycm9yKHJlc3BvbnNlQWNjb3VudExpbmtzKTtcbiAgICAvLyAgICAgICAgIHJldHVybjtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlQWNjb3VudExpbmtzLmFjY291bnRMaW5rcy51cmw7XG4gICAgLy8gICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIC8vIH1cblxuICAgIC8vIGFzeW5jIG9uQ29tcGxldGVPbmJvYXJkaW5nU3RyaXBlKCkge1xuICAgIC8vICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIC8vICAgICBjb25zdCByZXNwb25zZUFjY291bnRMaW5rcyA9IGF3YWl0IHRoaXMubG9jYWxTdHJpcGUuY3JlYXRlQWNjb3VudExpbmsoXG4gICAgLy8gICAgICAgICB0aGlzLm9yZy5jb25uZWN0ZWRBY2NvdW50U3RyaXBlSUQsXG4gICAgLy8gICAgICAgICBvcmlnaW4sXG4gICAgLy8gICAgICk7XG4gICAgLy8gICAgIGlmIChyZXNwb25zZUFjY291bnRMaW5rcy5lcnIpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuaGFuZGxlU3RyaXBlRXJyb3IocmVzcG9uc2VBY2NvdW50TGlua3MpO1xuICAgIC8vICAgICAgICAgcmV0dXJuO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVzcG9uc2VBY2NvdW50TGlua3MuYWNjb3VudExpbmtzLnVybDtcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgLy8gfVxuXG4gICAgLy8gaGFuZGxlU3RyaXBlRXJyb3Ioc3RyaXBlUmVzcG9uc2UpIHtcbiAgICAvLyAgICAgYWxlcnQoc3RyaXBlUmVzcG9uc2UuZXJyLnJhdy5tZXNzYWdlKTtcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGUgbGluayBmb3IgTGF1bmNoaW5nIE9BdXRoIGNvbm5lY3Rpb24gd2l0aCBTdHJpcGU6IGh0dHBzOi8vc3RyaXBlLmNvbS9kb2NzL2Nvbm5lY3Qvb2F1dGgtc3RhbmRhcmQtYWNjb3VudHMjaW50ZWdyYXRpbmctb2F1dGhcbiAgICAgKi9cbiAgICBzZXRDb25uZWN0U3RyaXBlTGluaygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoeXBlcmxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIFwiI2xpbmtTdHJpcGVcIixcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoaHlwZXJsaW5rKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50SUQgPSBcImNhX0tRaFlPbGdSMWlwT3hMQkJRSGZRZUNMb2F5U1JWRDVQXCI7IC8vIFRPRE8gY2hhbmdlIGZvciBsaXZlIFN0cmlwZSBBY2NvdW50XG4gICAgICAgICAgICAgICAgY29uc3QgeyBvcmlnaW4gfSA9IGRvY3VtZW50LmxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblVybCA9IGAke29yaWdpbn0vc3RyaXBlL3JlZGlyZWN0YDtcbiAgICAgICAgICAgICAgICBoeXBlcmxpbmsuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBcImhyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgYGh0dHBzOi8vY29ubmVjdC5zdHJpcGUuY29tL29hdXRoL2F1dGhvcml6ZT9yZXNwb25zZV90eXBlPWNvZGUmY2xpZW50X2lkPSR7Y2xpZW50SUR9JnNjb3BlPXJlYWRfd3JpdGUmcmVkaXJlY3RfdXJpPSR7cmV0dXJuVXJsfSZzdGF0ZT0ke3RoaXMub3JnLmlkfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMjAwKTsgLy8gd2FpdCB1bnRpbCB0aGUgZWxlbWVudCBpcyByZW5kZXJlZFxuICAgIH1cblxuICAgIC8qKiBFZGl0ICovXG4gICAgb25FZGl0KCkge1xuICAgICAgICB0aGlzLmVkaXRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpZDogdGhpcy5vcmcuaWQsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm9yZy5uYW1lLFxuICAgICAgICAgICAgc2lyZXQ6IHRoaXMub3JnLnNpcmV0LFxuICAgICAgICAgICAgY2l0eTogdGhpcy5vcmcuY2l0eSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMub3JnLmFkZHJlc3MsXG4gICAgICAgICAgICBjb250YWN0RGV0YWlsczogdGhpcy5vcmcuY29udGFjdERldGFpbHMsXG4gICAgICAgICAgICBwb3N0YWw6IHRoaXMub3JnLnBvc3RhbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdEZvcm0uZ2V0KFwibmFtZVwiKTtcbiAgICB9XG5cbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5lZGl0Rm9ybS52YWx1ZTtcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KGZvcm1WYWx1ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkT3JnID1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9yZ2FuaXNhdGlvblNlcnZpY2UudXBkYXRlT3JnYW5pc2F0aW9uKGZvcm1WYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm9yZyA9IHVwZGF0ZWRPcmc7XG4gICAgICAgICAgICBpZiAodGhpcy5maWxlVG9VcGxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcmcubG9nb1VybCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGV0ZUZyb21TMyh0aGlzLm9yZy5sb2dvVXJsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBsb2FkRmlsZVRvUzMoXCJsb2dvcy9cIiwgdGhpcy5maWxlVG9VcGxvYWQsIHRoaXMub3JnLmlkKS50aGVuKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9yZ2FuaXNhdGlvblNlcnZpY2UudXBkYXRlT3JnYW5pc2F0aW9uKHsgaWQ6IHRoaXMub3JnLmlkLCBsb2dvVXJsOiB1cmwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRGb3JtID0gbnVsbDtcbiAgICB9XG5cbiAgICBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5lZGl0Rm9ybSA9IG51bGw7XG4gICAgfVxuXG4gICAgaGFuZGxlRmlsZUlucHV0KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSB0YXJnZXQuZmlsZXMuaXRlbSgwKTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkRlbGV0ZSgpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmRlbGV0ZU9yZ2FuaXNhdGlvblwiKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgd2luZG93LmNvbmZpcm0obWVzc2FnZSkgJiYgdGhpcy5vcmcuaWQgIT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9EZWxldGUgPVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24odGhpcy5vcmcuaWQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLnNvZnREZXRlbGVPcmcodGhpcy5vcmcuaWQpO1xuICAgICAgICAgICAgKGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZ2FuaXNhdGlvbih0aGlzLm9yZy5pZCkpLm1hcChcbiAgICAgICAgICAgICAgICAobSkgPT4gdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtLmlkKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9EZWxldGUubWFwKGFzeW5jIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5kZWxldGVQcm9wZXJ0eShwcm9wZXJ0eS5pZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5vcmdDaGFuZ2VkLmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2PlxuICAgIDxoNT57eydPcmdhbmlzYXRpb24gRGV0YWlscycgfCB0cmFuc2xhdGUgfX08L2g1PlxuICAgIDxkaXYgKm5nSWY9XCIhZWRpdEZvcm1cIj5cbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19OiB7eyBvcmcubmFtZSB9fTwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb2dvJyB8IHRyYW5zbGF0ZSB9fToge3sgb3JnLmxvZ29VcmwgPyBcIlwiIDogXCJObyBsb2dvIHVwbG9hZGVkXCJ9fSBcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibG9nby1pbWdcIiAqbmdJZj1cInNpZ25lZExvZ29cIiBbc3JjXT1cInNpZ25lZExvZ29cIj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydTSVJFVCcgfCB0cmFuc2xhdGUgfX06IHt7XG4gICAgICAgICAgICAgICAgb3JnLnNpcmV0ID8gb3JnLnNpcmV0IDogKFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlKX19PC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlIH19OiB7e1xuICAgICAgICAgICAgICAgIG9yZy5hZGRyZXNzID8gb3JnLmFkZHJlc3MgOiAoXCJObyBkYXRhXCIgfCB0cmFuc2xhdGUpfX08L2xpPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQ2l0eScgfCB0cmFuc2xhdGUgfX06IHt7b3JnLmNpdHkgfX08L2xpPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQ29udGFjdCBpbmZvcm1hdGlvbicgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICB7eyBvcmcuY29udGFjdERldGFpbHMgPyBvcmcuY29udGFjdERldGFpbHMgOiAoXCJObyBkYXRhXCIgfCB0cmFuc2xhdGUpfX08L2xpPlxuICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImlzU1BcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1sLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FjdGl2ZSB0b2tlbicgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmcuc2hhcmVUb2tlbiA/IHByZXR0aWZ5VG9rZW4oKSA6ICgnTm8nIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9yZy5zaGFyZVRva2VuICYmICF0b2tlbkV4cGlyZWRcIiBuZ3hDbGlwYm9hcmQgW2NiQ29udGVudF09XCJvcmcuc2hhcmVUb2tlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDsgbWF4LXdpZHRoOiAyMHB4O1wiIG5nYlRvb2x0aXA9XCJDb3BpZWQhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiY2xpY2s6Ymx1clwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOmNvbnRlbnQtY29weVwiIGRhdGEtaW5saW5lPVwiZmFsc2VcIiBkYXRhLXdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaGVpZ2h0PVwiMjBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT4gLS0+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtdC0yIG1sLTMgYWN0aW9uLWJ1dHRvblwiICpuZ0lmPVwiaXNTUCB8fCBteU9yZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdCgpXCI+IHt7J0VkaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXQtMiBtbC0zIGFjdGlvbi1idXR0b25cIiAqbmdJZj1cImlzU1BcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+IHt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG10LTIgbWwtMyBhY3Rpb24tYnV0dG9uXCIgKm5nSWY9XCJpc1NQXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub2tlbigpXCI+e3snR2VuZXJhdGUgdG9rZW4nIHwgdHJhbnNsYXRlfX08L2J1dHRvbj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLUVkaXQgRm9ybS0tPlxuICAgIDxkaXYgKm5nSWY9XCJlZGl0Rm9ybVwiPlxuICAgICAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJuYW1lLmludmFsaWQgJiYgbmFtZS50b3VjaGVkXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDb250YWN0IGluZm9ybWF0aW9uJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjb250YWN0RGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J05hbWUsIHBob25lLCBlbWFpbCcgfCB0cmFuc2xhdGV9fVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ2l0eScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2l0eVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUG9zdGFsIGNvZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBvc3RhbFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNpcmV0XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydMb2dvJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlsZVwiIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIHJvdW5kZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiZmlsZVwiIChjaGFuZ2UpPVwiaGFuZGxlRmlsZUlucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgIHt7J0FkZCBsb2dvIGltYWdlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZpbGVUb1VwbG9hZE5hbWVcIiAqbmdJZj1cImZpbGVUb1VwbG9hZFwiPnt7ZmlsZVRvVXBsb2FkLm5hbWV9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVkaXRGb3JtLmludmFsaWRcIj57eydTYXZlJyB8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCI+e3snQ2FuY2VsJyB8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDwhLS1Mb2FkaW5nLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS1TdHJpcGUtLT5cbiAgICA8IS0tIDxocj5cbiAgICA8aDU+e3snc3RyaXBlLmFjY291bnQnIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIoaXNTUCB8fCBteU9yZykgJiYgb3JnLmNvbm5lY3RlZEFjY291bnRTdHJpcGVJRFwiPlxuICAgICAgICAgICAge3snc3RyaXBlLmNvbm5lY3RlZCcgfCB0cmFuc2xhdGUgfX06IHt7b3JnLmNvbm5lY3RlZEFjY291bnRTdHJpcGVJRC5zdWJzdHJpbmcoMCwgMTUpIH19Li4uPC9saT5cbiAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIoaXNTUCB8fCBteU9yZykgJiYgb3JnLnN0cmlwZU9uQm9hcmRpbmdDb21wbGV0ZWQgIT09IG51bGxcIj5cbiAgICAgICAgICAgIHt7J3N0cmlwZS5jb21wbGV0ZWQnIHwgdHJhbnNsYXRlIH19OiB7e29yZy5zdHJpcGVPbkJvYXJkaW5nQ29tcGxldGVkIH19PC9saT5cbiAgICA8L3VsPiAtLT5cbjwvZGl2PiJdfQ==
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLW9yZ2FuaXNhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL2RldGFpbC1vcmdhbmlzYXRpb24vZGV0YWlsLW9yZ2FuaXNhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL2RldGFpbC1vcmdhbmlzYXRpb24vZGV0YWlsLW9yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFDSCxZQUFZLEVBQUUsYUFBYSxFQUMzQix3QkFBd0IsRUFBRSxjQUFjLEVBQzNDLE1BQU0sbUNBQW1DLENBQUM7Ozs7OztBQVMzQyxNQUFNLE9BQU8sMkJBQTJCO0lBMkJwQyxZQUNZLG1CQUF3QztJQUNoRCxzQ0FBc0M7SUFDOUIsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDaEMsY0FBOEIsRUFDOUIsU0FBMkI7UUFMM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUV4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBMUI3QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQU1uRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQW1CckIsQ0FBQztJQUVMLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFB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bXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIGRlbGV0ZUZyb21TMywgZ2V0U2lnbmVkRmlsZSwgT3JnYW5pc2F0aW9uLCBPcmdhbmlzYXRpb25TZXJ2aWNlLFxyXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCB1cGxvYWRGaWxlVG9TMywgUHJvcGVydHlTZXJ2aWNlLCBNaXNzaW9uU2VydmljZVxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1kZXRhaWwtb3JnYW5pc2F0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWwtb3JnYW5pc2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RldGFpbC1vcmdhbmlzYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV0YWlsT3JnYW5pc2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpIG9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIEBJbnB1dCgpIGN1cnJlbnRPcmc6IE9yZ2FuaXNhdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKSBpc1NQOiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvcmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAgIG15T3JnOiBib29sZWFuO1xyXG5cclxuICAgIHRva2VuRXhwaXJlZDogYm9vbGVhbjtcclxuXHJcbiAgICBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgY29ubmVjdGluZ1N0cmlwZSA9IGZhbHNlO1xyXG5cclxuICAgIG1vZGFsUmVmO1xyXG5cclxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIGVkaXRGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgZmlsZVRvVXBsb2FkOiBGaWxlO1xyXG5cclxuICAgIHNpZ25lZExvZ286IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG9yZ2FuaXNhdGlvblNlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgLy8gcHJpdmF0ZSBsb2NhbFN0cmlwZTogU3RyaXBlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLm15T3JnID0gdGhpcy5jdXJyZW50T3JnLmlkID09PSB0aGlzLm9yZy5pZDtcclxuICAgICAgICBpZiAoIXRoaXMub3JnLmNvbm5lY3RlZEFjY291bnRTdHJpcGVJRCAmJiAodGhpcy5teU9yZyB8fCB0aGlzLmlzU1ApKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29ubmVjdFN0cmlwZUxpbmsoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3JnLmxvZ29VcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5zaWduZWRMb2dvID0gYXdhaXQgZ2V0U2lnbmVkRmlsZSh0aGlzLm9yZy5sb2dvVXJsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMubXlPcmcgPSB0aGlzLmN1cnJlbnRPcmcuaWQgPT09IHRoaXMub3JnLmlkO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUb2tlbnMgd2VyZSBzdXBwb3NlZCB0byBiZSB1c2VkIGlmIE9yZ2FuaXNhdGlvbiBleGlzdHMgYWxyZWFkeSAoY3JlYXRlZCBieSBvbmUgYWNjb3VudCkgYW5kIGl0IHNob3VsZCBiZSByZXN1c2VkIChieSBhbm90aGVyIGFjY291bnQpIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBkdXBsaWNhdGUuXHJcbiAgICAgKi9cclxuICAgIC8vIGFzeW5jIG9uVG9rZW4oKSB7XHJcbiAgICAvLyAgICAgY29uc3QgdG9rZW4gPSB1dWlkdjQoKTtcclxuICAgIC8vICAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUoKTtcclxuICAgIC8vICAgICBleHBpcmVzLnNldERhdGUoZXhwaXJlcy5nZXREYXRlKCkgKyA3KTsgLy8gNyBkYXlzIGV4cGlyYXRpb25cclxuICAgIC8vICAgICB0aGlzLm9yZyA9IGF3YWl0IHRoaXMub3JnYW5pc2F0aW9uU2VydmljZS51cGRhdGVPcmdhbmlzYXRpb24oe1xyXG4gICAgLy8gICAgICAgICBpZDogdGhpcy5vcmcuaWQsXHJcbiAgICAvLyAgICAgICAgIHNoYXJlVG9rZW46IHRva2VuLFxyXG4gICAgLy8gICAgICAgICB0b2tlbkV4cGlyZXNBdDogZXhwaXJlcy5nZXRUaW1lKCksXHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyAgICAgdGhpcy5vcmdDaGFuZ2VkLmVtaXQodHJ1ZSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHJldHRpZnlUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUodGhpcy5vcmcudG9rZW5FeHBpcmVzQXQpO1xyXG4gICAgICAgIGNvbnN0IGRpZmZUaW1lID0gZXhwaXJhdGlvbkRhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcclxuICAgICAgICBjb25zdCBkaWZmRGF5cyA9IE1hdGguY2VpbChkaWZmVGltZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgICAgICAgY29uc3QgZXhwaXJhdGlvblN0cmluZyA9XHJcbiAgICAgICAgICAgIGRpZmZUaW1lIDwgMCA/IFwiZXhwaXJlZCFcIiA6IGBleHBpcmVzIGluICR7ZGlmZkRheXN9IGRheXNgO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9yZy5zaGFyZVRva2VuLnNsaWNlKDAsIDYpfS4uLiAke2V4cGlyYXRpb25TdHJpbmd9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZWQgTmV3IFN0cmlwZSBBY2NvdW50IGFuZCBsYXVuY2hlcyBvbmJvYXJkaW5nIHByb2NlZHVyZSAobWFpbCwgcGhvbmUsIGJ1c2luZXNzIGRldGFpbHMuLikgYnkgU3RyaXBlXHJcbiAgICAgKiBAcmV0dXJucyBudWxsXHJcbiAgICAgKi9cclxuICAgIC8vIGFzeW5jIG9uQ3JlYXRlU3RyaXBlKCkge1xyXG4gICAgLy8gICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAvLyAgICAgLy8gTWFrZSB0aGUgcmVxdWVzdFxyXG4gICAgLy8gICAgIGNvbnN0IHJlc3BvbnNlQWNjb3VudCA9IGF3YWl0IEFQSS5wb3N0KFxyXG4gICAgLy8gICAgICAgICBcInN0cmlwZUFwaVwiLFxyXG4gICAgLy8gICAgICAgICBcIi9jcmVhdGUvYWNjb3VudFwiLFxyXG4gICAgLy8gICAgICAgICB7fSxcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlQWNjb3VudCk7XHJcbiAgICAvLyAgICAgaWYgKHJlc3BvbnNlQWNjb3VudC5lcnIpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5oYW5kbGVTdHJpcGVFcnJvcihyZXNwb25zZUFjY291bnQpO1xyXG4gICAgLy8gICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICBjb25zdCB7IGFjY291bnQgfSA9IHJlc3BvbnNlQWNjb3VudDtcclxuICAgIC8vICAgICAvLyBzYXZlIGFjY291bnQgaWQgdG8gb3JnYW5pc2F0aW9uXHJcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLnVwZGF0ZSh7XHJcbiAgICAvLyAgICAgICAgIGlkOiB0aGlzLm9yZy5pZCxcclxuICAgIC8vICAgICAgICAgY29ubmVjdGVkQWNjb3VudFN0cmlwZUlEOiBhY2NvdW50LmlkLFxyXG4gICAgLy8gICAgICAgICBzdHJpcGVPbkJvYXJkaW5nQ29tcGxldGVkOiBmYWxzZSxcclxuICAgIC8vICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgY29uc3QgeyBvcmlnaW4gfSA9IGRvY3VtZW50LmxvY2F0aW9uO1xyXG4gICAgLy8gICAgIGNvbnN0IHJlc3BvbnNlQWNjb3VudExpbmtzID0gYXdhaXQgdGhpcy5sb2NhbFN0cmlwZS5jcmVhdGVBY2NvdW50TGluayhcclxuICAgIC8vICAgICAgICAgYWNjb3VudC5pZCxcclxuICAgIC8vICAgICAgICAgb3JpZ2luLFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgaWYgKHJlc3BvbnNlQWNjb3VudExpbmtzLmVycikge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmhhbmRsZVN0cmlwZUVycm9yKHJlc3BvbnNlQWNjb3VudExpbmtzKTtcclxuICAgIC8vICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlQWNjb3VudExpbmtzLmFjY291bnRMaW5rcy51cmw7XHJcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gYXN5bmMgb25Db21wbGV0ZU9uYm9hcmRpbmdTdHJpcGUoKSB7XHJcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIC8vICAgICBjb25zdCByZXNwb25zZUFjY291bnRMaW5rcyA9IGF3YWl0IHRoaXMubG9jYWxTdHJpcGUuY3JlYXRlQWNjb3VudExpbmsoXHJcbiAgICAvLyAgICAgICAgIHRoaXMub3JnLmNvbm5lY3RlZEFjY291bnRTdHJpcGVJRCxcclxuICAgIC8vICAgICAgICAgb3JpZ2luLFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgaWYgKHJlc3BvbnNlQWNjb3VudExpbmtzLmVycikge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmhhbmRsZVN0cmlwZUVycm9yKHJlc3BvbnNlQWNjb3VudExpbmtzKTtcclxuICAgIC8vICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlQWNjb3VudExpbmtzLmFjY291bnRMaW5rcy51cmw7XHJcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaGFuZGxlU3RyaXBlRXJyb3Ioc3RyaXBlUmVzcG9uc2UpIHtcclxuICAgIC8vICAgICBhbGVydChzdHJpcGVSZXNwb25zZS5lcnIucmF3Lm1lc3NhZ2UpO1xyXG4gICAgLy8gICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgbGluayBmb3IgTGF1bmNoaW5nIE9BdXRoIGNvbm5lY3Rpb24gd2l0aCBTdHJpcGU6IGh0dHBzOi8vc3RyaXBlLmNvbS9kb2NzL2Nvbm5lY3Qvb2F1dGgtc3RhbmRhcmQtYWNjb3VudHMjaW50ZWdyYXRpbmctb2F1dGhcclxuICAgICAqL1xyXG4gICAgc2V0Q29ubmVjdFN0cmlwZUxpbmsoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGh5cGVybGluayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBcIiNsaW5rU3RyaXBlXCIsXHJcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChoeXBlcmxpbmspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudElEID0gXCJjYV9LUWhZT2xnUjFpcE94TEJCUUhmUWVDTG9heVNSVkQ1UFwiOyAvLyBUT0RPIGNoYW5nZSBmb3IgbGl2ZSBTdHJpcGUgQWNjb3VudFxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBvcmlnaW4gfSA9IGRvY3VtZW50LmxvY2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVXJsID0gYCR7b3JpZ2lufS9zdHJpcGUvcmVkaXJlY3RgO1xyXG4gICAgICAgICAgICAgICAgaHlwZXJsaW5rLnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgICAgICAgICAgICBcImhyZWZcIixcclxuICAgICAgICAgICAgICAgICAgICBgaHR0cHM6Ly9jb25uZWN0LnN0cmlwZS5jb20vb2F1dGgvYXV0aG9yaXplP3Jlc3BvbnNlX3R5cGU9Y29kZSZjbGllbnRfaWQ9JHtjbGllbnRJRH0mc2NvcGU9cmVhZF93cml0ZSZyZWRpcmVjdF91cmk9JHtyZXR1cm5Vcmx9JnN0YXRlPSR7dGhpcy5vcmcuaWR9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApOyAvLyB3YWl0IHVudGlsIHRoZSBlbGVtZW50IGlzIHJlbmRlcmVkXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVkaXQgKi9cclxuICAgIG9uRWRpdCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLm9yZy5pZCxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5vcmcubmFtZSxcclxuICAgICAgICAgICAgc2lyZXQ6IHRoaXMub3JnLnNpcmV0LFxyXG4gICAgICAgICAgICBjaXR5OiB0aGlzLm9yZy5jaXR5LFxyXG4gICAgICAgICAgICBhZGRyZXNzOiB0aGlzLm9yZy5hZGRyZXNzLFxyXG4gICAgICAgICAgICBjb250YWN0RGV0YWlsczogdGhpcy5vcmcuY29udGFjdERldGFpbHMsXHJcbiAgICAgICAgICAgIHBvc3RhbDogdGhpcy5vcmcucG9zdGFsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdEZvcm0uZ2V0KFwibmFtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmVkaXRGb3JtLnZhbHVlO1xyXG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRPcmcgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9yZyA9IHVwZGF0ZWRPcmc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVUb1VwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3JnLmxvZ29VcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKHRoaXMub3JnLmxvZ29VcmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdXBsb2FkRmlsZVRvUzMoXCJsb2dvcy9cIiwgdGhpcy5maWxlVG9VcGxvYWQsIHRoaXMub3JnLmlkKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jICh1cmwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbih7IGlkOiB0aGlzLm9yZy5pZCwgbG9nb1VybDogdXJsIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVkaXRGb3JtID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRGb3JtID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGaWxlSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSB0YXJnZXQuZmlsZXMuaXRlbSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRlbGV0ZSgpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZGVsZXRlT3JnYW5pc2F0aW9uXCIpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2luZG93LmNvbmZpcm0obWVzc2FnZSkgJiYgdGhpcy5vcmcuaWQgIT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc1RvRGVsZXRlID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24odGhpcy5vcmcuaWQpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9yZ2FuaXNhdGlvblNlcnZpY2Uuc29mdERldGVsZU9yZyh0aGlzLm9yZy5pZCk7XHJcbiAgICAgICAgICAgIChhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zQnlPcmdhbmlzYXRpb24odGhpcy5vcmcuaWQpKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtLmlkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9EZWxldGUubWFwKGFzeW5jIChwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmRlbGV0ZVByb3BlcnR5KHByb3BlcnR5LmlkKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLm9yZ0NoYW5nZWQuZW1pdCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICAgIDxoNT57eydPcmdhbmlzYXRpb24gRGV0YWlscycgfCB0cmFuc2xhdGUgfX08L2g1PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFlZGl0Rm9ybVwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19OiB7eyBvcmcubmFtZSB9fTwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0xvZ28nIHwgdHJhbnNsYXRlIH19OiB7eyBvcmcubG9nb1VybCA/IFwiXCIgOiBcIk5vIGxvZ28gdXBsb2FkZWRcIn19IFxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImxvZ28taW1nXCIgKm5nSWY9XCJzaWduZWRMb2dvXCIgW3NyY109XCJzaWduZWRMb2dvXCI+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1NJUkVUJyB8IHRyYW5zbGF0ZSB9fToge3tcclxuICAgICAgICAgICAgICAgIG9yZy5zaXJldCA/IG9yZy5zaXJldCA6IChcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZSl9fTwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlIH19OiB7e1xyXG4gICAgICAgICAgICAgICAgb3JnLmFkZHJlc3MgPyBvcmcuYWRkcmVzcyA6IChcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZSl9fTwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlIH19OiB7e29yZy5jaXR5IH19PC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQ29udGFjdCBpbmZvcm1hdGlvbicgfCB0cmFuc2xhdGV9fTpcclxuICAgICAgICAgICAgICAgIHt7IG9yZy5jb250YWN0RGV0YWlscyA/IG9yZy5jb250YWN0RGV0YWlscyA6IChcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZSl9fTwvbGk+XHJcbiAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCJpc1NQXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1sLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBY3RpdmUgdG9rZW4nIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmcuc2hhcmVUb2tlbiA/IHByZXR0aWZ5VG9rZW4oKSA6ICgnTm8nIHwgdHJhbnNsYXRlKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcmcuc2hhcmVUb2tlbiAmJiAhdG9rZW5FeHBpcmVkXCIgbmd4Q2xpcGJvYXJkIFtjYkNvbnRlbnRdPVwib3JnLnNoYXJlVG9rZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDsgbWF4LXdpZHRoOiAyMHB4O1wiIG5nYlRvb2x0aXA9XCJDb3BpZWQhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJjbGljazpibHVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTpjb250ZW50LWNvcHlcIiBkYXRhLWlubGluZT1cImZhbHNlXCIgZGF0YS13aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaGVpZ2h0PVwiMjBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtdC0yIG1sLTMgYWN0aW9uLWJ1dHRvblwiICpuZ0lmPVwiaXNTUCB8fCBteU9yZ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0KClcIj4ge3snRWRpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG10LTIgbWwtMyBhY3Rpb24tYnV0dG9uXCIgKm5nSWY9XCJpc1NQXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+IHt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXQtMiBtbC0zIGFjdGlvbi1idXR0b25cIiAqbmdJZj1cImlzU1BcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9rZW4oKVwiPnt7J0dlbmVyYXRlIHRva2VuJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLUVkaXQgRm9ybS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImVkaXRGb3JtXCI+XHJcbiAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJuYW1lLmludmFsaWQgJiYgbmFtZS50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ29udGFjdCBpbmZvcm1hdGlvbicgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNvbnRhY3REZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydOYW1lLCBwaG9uZSwgZW1haWwnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydBZGRyZXNzJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjaXR5XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUG9zdGFsIGNvZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwb3N0YWxcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydTSVJFVCcgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNpcmV0XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTG9nbycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlXCIgY2xhc3M9XCJidG4gYnRuLWxhYmVsLWZpbGUgcm91bmRlZC1waWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImZpbGVcIiAoY2hhbmdlKT1cImhhbmRsZUZpbGVJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgIHt7J0FkZCBsb2dvIGltYWdlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmlsZVRvVXBsb2FkTmFtZVwiICpuZ0lmPVwiZmlsZVRvVXBsb2FkXCI+e3tmaWxlVG9VcGxvYWQubmFtZX19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZWRpdEZvcm0uaW52YWxpZFwiPnt7J1NhdmUnIHxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIj57eydDYW5jZWwnIHxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1Mb2FkaW5nLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tU3RyaXBlLS0+XHJcbiAgICA8IS0tIDxocj5cclxuICAgIDxoNT57eydzdHJpcGUuYWNjb3VudCcgfCB0cmFuc2xhdGUgfX08L2g1PlxyXG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIoaXNTUCB8fCBteU9yZykgJiYgb3JnLmNvbm5lY3RlZEFjY291bnRTdHJpcGVJRFwiPlxyXG4gICAgICAgICAgICB7eydzdHJpcGUuY29ubmVjdGVkJyB8IHRyYW5zbGF0ZSB9fToge3tvcmcuY29ubmVjdGVkQWNjb3VudFN0cmlwZUlELnN1YnN0cmluZygwLCAxNSkgfX0uLi48L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiKGlzU1AgfHwgbXlPcmcpICYmIG9yZy5zdHJpcGVPbkJvYXJkaW5nQ29tcGxldGVkICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgIHt7J3N0cmlwZS5jb21wbGV0ZWQnIHwgdHJhbnNsYXRlIH19OiB7e29yZy5zdHJpcGVPbkJvYXJkaW5nQ29tcGxldGVkIH19PC9saT5cclxuICAgIDwvdWw+IC0tPlxyXG48L2Rpdj4iXX0=
|