@c8y/ngx-components 1021.2.1 → 1021.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts +2 -1
  2. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  3. package/assets-navigator/asset-selector/asset-selector.component.d.ts +2 -1
  4. package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
  5. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts +1 -0
  6. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts.map +1 -1
  7. package/cockpit-config/cockpit-config.service.d.ts.map +1 -1
  8. package/cockpit-config/cockpit-configuration.component.d.ts +1 -0
  9. package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
  10. package/cockpit-config/root-node-config.component.d.ts +2 -1
  11. package/cockpit-config/root-node-config.component.d.ts.map +1 -1
  12. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  13. package/core/common/get-group-icon.pipe.d.ts.map +1 -1
  14. package/core/common/global-config.service.d.ts +1 -1
  15. package/core/common/global-config.service.d.ts.map +1 -1
  16. package/core/login/login.component.d.ts.map +1 -1
  17. package/core/login/login.service.d.ts +1 -1
  18. package/core/login/login.service.d.ts.map +1 -1
  19. package/device-profile/device-profile-list.component.d.ts +31 -14
  20. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  21. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +6 -3
  22. package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +7 -4
  23. package/esm2022/assets-navigator/asset-selector/miller-view.component.mjs +1 -1
  24. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.mjs +1 -1
  25. package/esm2022/auth-configuration/sso-configuration/template-parts/basic-configuration.component.mjs +5 -3
  26. package/esm2022/cockpit-config/cockpit-config.service.mjs +7 -3
  27. package/esm2022/cockpit-config/cockpit-configuration.component.mjs +6 -3
  28. package/esm2022/cockpit-config/root-node-config.component.mjs +8 -4
  29. package/esm2022/cockpit-config/setup/cockpit-setup-step3.component.mjs +1 -1
  30. package/esm2022/context-dashboard/context-dashboard.service.mjs +3 -2
  31. package/esm2022/core/common/get-group-icon.pipe.mjs +4 -1
  32. package/esm2022/core/common/global-config.service.mjs +3 -2
  33. package/esm2022/core/login/login.component.mjs +8 -3
  34. package/esm2022/core/login/login.service.mjs +5 -2
  35. package/esm2022/device-grid/columns/group.filtering-form-renderer.component.mjs +1 -1
  36. package/esm2022/device-profile/device-profile-list.component.mjs +102 -27
  37. package/esm2022/protocol-lwm2m/components/configuration/typed-forms/firmware-settings.component.mjs +11 -2
  38. package/esm2022/repository/shared/repository.model.mjs +2 -1
  39. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +12 -6
  40. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +5 -3
  42. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +19 -9
  44. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +2 -1
  46. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
  48. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-device-profile.mjs +110 -35
  50. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +10 -1
  52. package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -0
  54. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components.mjs +16 -4
  56. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  57. package/locales/locales.pot +20 -2
  58. package/package.json +1 -1
  59. package/protocol-lwm2m/components/configuration/typed-forms/firmware-settings.component.d.ts +10 -0
  60. package/protocol-lwm2m/components/configuration/typed-forms/firmware-settings.component.d.ts.map +1 -1
  61. package/repository/shared/repository.model.d.ts +2 -1
  62. package/repository/shared/repository.model.d.ts.map +1 -1
  63. package/repository/shared/repository.service.d.ts +1 -1
@@ -15,6 +15,7 @@ export class BasicConfigurationComponent {
15
15
  this.tenantService = tenantService;
16
16
  this.REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP = gettext("The redirect URL is automatically set to the application used by the user. In case of an error, it will be correctly displayed on the application's page.");
17
17
  this.flowControlledByUI = false;
18
+ this.redirectToPlatform = '';
18
19
  }
19
20
  shouldShow(field) {
20
21
  return field in this.templateModel;
@@ -26,10 +27,11 @@ export class BasicConfigurationComponent {
26
27
  host: `https://${domainName}`,
27
28
  defaultRedirectUrl: `https://${domainName}/tenant/oauth`
28
29
  };
30
+ this.redirectToPlatform = this.templateModel.redirectToPlatform || '';
29
31
  this.flowControlledByUI = !this.templateModel.redirectToPlatform;
30
32
  }
31
33
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BasicConfigurationComponent, deps: [{ token: i1.TenantService }], target: i0.ɵɵFactoryTarget.Component }); }
32
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: BasicConfigurationComponent, selector: "c8y-basic-configuration", inputs: { templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\"\n *ngIf=\"templateModel\"\n >\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('keyCloakAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'https://example.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('aadAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('tenant')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'c8y.onmicrosoft.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('applicationId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('realmName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"shouldShow('redirectToPlatform')\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n *ngIf=\"\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !=\n redirectToPlatformWarningParams.defaultRedirectUrl\n \"\n ></button>\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div\n class=\"form-group\"\n >\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{ 'Redirect to the user interface application`SSO authentication`' | translate }}\"\n for=\"flowControlledByUI\"\n >\n <input\n type=\"checkbox\"\n name=\"flowControlledByUI\"\n id=\"flowControlledByUI\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"flowControlledByUI && (templateModel.redirectToPlatform = '')\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Redirect to the user interface application`SSO authentication`' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientSecret')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('issuer')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate : { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('scopeId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('buttonName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('providerName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('audience')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div\n class=\"row\"\n *ngIf=\"shouldShow('visibleOnLoginPage')\"\n >\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: BasicConfigurationComponent, selector: "c8y-basic-configuration", inputs: { templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\"\n *ngIf=\"templateModel\"\n >\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('keyCloakAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'https://example.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('aadAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('tenant')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'c8y.onmicrosoft.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('applicationId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('realmName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"shouldShow('redirectToPlatform')\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n *ngIf=\"\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !=\n redirectToPlatformWarningParams.defaultRedirectUrl\n \"\n ></button>\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div\n class=\"form-group\"\n >\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{ 'Redirect to the user interface application`SSO authentication`' | translate }}\"\n for=\"flowControlledByUI\"\n >\n <input\n type=\"checkbox\"\n name=\"flowControlledByUI\"\n id=\"flowControlledByUI\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"templateModel.redirectToPlatform = flowControlledByUI ? '' : redirectToPlatform\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Redirect to the user interface application`SSO authentication`' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div *ngIf=\"flowControlledByUI && redirectToPlatform != ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/apps/*'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\" or to the full URIs of the used applications if the authorization server does not support patterns.\n </div>\n </div>\n <div *ngIf=\"!flowControlledByUI && redirectToPlatform === ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/tenant/oauth'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\".\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientSecret')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('issuer')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate : { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('scopeId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('buttonName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('providerName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('audience')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div\n class=\"row\"\n *ngIf=\"shouldShow('visibleOnLoginPage')\"\n >\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
33
35
  }
34
36
  __decorate([
35
37
  memoize(),
@@ -39,8 +41,8 @@ __decorate([
39
41
  ], BasicConfigurationComponent.prototype, "shouldShow", null);
40
42
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BasicConfigurationComponent, decorators: [{
41
43
  type: Component,
42
- args: [{ selector: 'c8y-basic-configuration', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\"\n *ngIf=\"templateModel\"\n >\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('keyCloakAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'https://example.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('aadAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('tenant')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'c8y.onmicrosoft.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('applicationId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('realmName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"shouldShow('redirectToPlatform')\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n *ngIf=\"\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !=\n redirectToPlatformWarningParams.defaultRedirectUrl\n \"\n ></button>\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div\n class=\"form-group\"\n >\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{ 'Redirect to the user interface application`SSO authentication`' | translate }}\"\n for=\"flowControlledByUI\"\n >\n <input\n type=\"checkbox\"\n name=\"flowControlledByUI\"\n id=\"flowControlledByUI\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"flowControlledByUI && (templateModel.redirectToPlatform = '')\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Redirect to the user interface application`SSO authentication`' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientSecret')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('issuer')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate : { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('scopeId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('buttonName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('providerName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('audience')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div\n class=\"row\"\n *ngIf=\"shouldShow('visibleOnLoginPage')\"\n >\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n</fieldset>\n" }]
44
+ args: [{ selector: 'c8y-basic-configuration', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<fieldset class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 m-b-xs-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Basic\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\"\n *ngIf=\"templateModel\"\n >\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('keyCloakAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"keyCloakAddress\"\n translate\n >\n Keycloak address\n </label>\n <input\n class=\"form-control\"\n id=\"keyCloakAddress\"\n name=\"keyCloakAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.keyCloakAddress\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'https://example.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('aadAddress')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"aadAddress\"\n translate\n >\n Azure AD address\n </label>\n <input\n class=\"form-control\"\n id=\"aadAddress\"\n name=\"aadAddress\"\n type=\"url\"\n required\n [(ngModel)]=\"templateModel.aadAddress\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://login.microsoftonline.de' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('tenant')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"tenant\"\n translate\n >\n Tenant\n </label>\n <input\n class=\"form-control\"\n id=\"tenant\"\n name=\"tenant\"\n required\n [(ngModel)]=\"templateModel.tenant\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'c8y.onmicrosoft.de' }\"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('applicationId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"applicationId\"\n translate\n >\n Application ID\n </label>\n <input\n class=\"form-control\"\n id=\"applicationId\"\n name=\"applicationId\"\n required\n [(ngModel)]=\"templateModel.applicationId\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('realmName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"realmName\"\n translate\n >\n Realm name\n </label>\n <input\n class=\"form-control\"\n id=\"realmName\"\n name=\"realmName\"\n required\n [(ngModel)]=\"templateModel.realmName\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"shouldShow('redirectToPlatform')\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"redirectToPlatform\"\n >\n {{ 'Redirect URL' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n *ngIf=\"\n !flowControlledByUI &&\n redirectToPlatformWarningParams &&\n templateModel.redirectToPlatform !=\n redirectToPlatformWarningParams.defaultRedirectUrl\n \"\n ></button>\n <ng-template #helpContent>\n <span\n ngNonBindable\n translate\n [translateParams]=\"redirectToPlatformWarningParams\"\n >\n For correct application behavior you can use only \"{{ host }}\" or \"{{\n defaultRedirectUrl\n }}\", the latter one is recommended.\n </span>\n </ng-template>\n </label>\n <input\n class=\"form-control\"\n id=\"redirectToPlatform\"\n name=\"redirectToPlatform\"\n type=\"url\"\n [required]=\"!flowControlledByUI\"\n [disabled]=\"flowControlledByUI\"\n [(ngModel)]=\"templateModel.redirectToPlatform\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n redirectToPlatformWarningParams?.defaultRedirectUrl ||\n 'https://tenant.domain.com'\n }\n \"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <div\n class=\"form-group\"\n >\n <label\n class=\"c8y-switch m-t-24\"\n title=\"{{ 'Redirect to the user interface application`SSO authentication`' | translate }}\"\n for=\"flowControlledByUI\"\n >\n <input\n type=\"checkbox\"\n name=\"flowControlledByUI\"\n id=\"flowControlledByUI\"\n [(ngModel)]=\"flowControlledByUI\"\n (change)=\"templateModel.redirectToPlatform = flowControlledByUI ? '' : redirectToPlatform\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Redirect to the user interface application`SSO authentication`' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ REDIRECT_TO_THE_USER_INTERFACE_APPLICATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div *ngIf=\"flowControlledByUI && redirectToPlatform != ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/apps/*'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\" or to the full URIs of the used applications if the authorization server does not support patterns.\n </div>\n </div>\n <div *ngIf=\"!flowControlledByUI && redirectToPlatform === ''\">\n <div class=\"alert alert-warning max-width-100 m-b-32\"\n ngNonBindable\n translate\n [translateParams]=\"{\n redirectURI: '<tenant_domain>/tenant/oauth'\n }\">\n Make sure that \"Valid Redirect URIs\" in the authorization server is set to \"{{ redirectURI }}\".\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientSecret')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientSecret\"\n translate\n >\n Client secret\n </label>\n <input\n class=\"form-control\"\n id=\"clientSecret\"\n name=\"clientSecret\"\n required\n [(ngModel)]=\"templateModel.clientSecret\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('clientId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"clientId\"\n translate\n >\n Client ID\n </label>\n <input\n class=\"form-control\"\n id=\"clientId\"\n name=\"clientId\"\n required\n [(ngModel)]=\"templateModel.clientId\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '254234981c-78a8-4588\u2026' }\n \"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('issuer')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"issuer\"\n translate\n >\n Token issuer\n </label>\n <input\n class=\"form-control\"\n id=\"issuer\"\n name=\"issuer\"\n required\n [(ngModel)]=\"templateModel.issuer\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate : { example: 'https://login.microsoftonline.de/237652-3727' }\n \"\n />\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('scopeId')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"scopeId\"\n translate\n >\n Scope ID\n </label>\n <input\n class=\"form-control\"\n id=\"scopeId\"\n name=\"scopeId\"\n [(ngModel)]=\"templateModel.scopeId\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '237652-3727' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('buttonName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"buttonName\"\n translate\n >\n Button name\n </label>\n <input\n class=\"form-control\"\n id=\"buttonName\"\n name=\"buttonName\"\n required\n [(ngModel)]=\"templateModel.buttonName\"\n [placeholder]=\"'e.g. Log in with Azure AD' | translate\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('providerName')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"providerName\"\n translate\n >\n Provider name\n </label>\n <input\n class=\"form-control\"\n id=\"providerName\"\n name=\"providerName\"\n required\n [(ngModel)]=\"templateModel.providerName\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Azure AD' }\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"shouldShow('audience')\"\n >\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"audience\"\n translate\n >\n Audience\n </label>\n <input\n class=\"form-control\"\n id=\"audience\"\n name=\"audience\"\n required\n [(ngModel)]=\"templateModel.audience\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://test.example.com' }\n \"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div\n class=\"row\"\n *ngIf=\"shouldShow('visibleOnLoginPage')\"\n >\n <div class=\"col-sm-6\">\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Visible on login page' | translate }}\"\n for=\"visibleOnLoginPage\"\n >\n <input\n id=\"visibleOnLoginPage\"\n name=\"visibleOnLoginPage\"\n type=\"checkbox\"\n [(ngModel)]=\"templateModel.visibleOnLoginPage\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Visible on login page' | translate }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n</fieldset>\n" }]
43
45
  }], ctorParameters: () => [{ type: i1.TenantService }], propDecorators: { templateModel: [{
44
46
  type: Input
45
47
  }], shouldShow: [] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vc3NvLWNvbmZpZ3VyYXRpb24vdGVtcGxhdGUtcGFydHMvYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vc3NvLWNvbmZpZ3VyYXRpb24vdGVtcGxhdGUtcGFydHMvYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU85QyxNQUFNLE9BQU8sMkJBQTJCO0lBVXRDLFlBQW9CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBUGhELHVEQUFrRCxHQUFHLE9BQU8sQ0FDMUQsMkpBQTJKLENBQzVKLENBQUM7UUFHRix1QkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFd0IsQ0FBQztJQUdwRCxVQUFVLENBQUMsS0FBYTtRQUN0QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLCtCQUErQixHQUFHO1lBQ3JDLElBQUksRUFBRSxXQUFXLFVBQVUsRUFBRTtZQUM3QixrQkFBa0IsRUFBRSxXQUFXLFVBQVUsZUFBZTtTQUN6RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztJQUNuRSxDQUFDOzhHQXpCVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixnSUNYeEMsa3lZQXlaQSx1MUREaFppQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7QUFlbkU7SUFEQyxPQUFPLEVBQUU7Ozs7NkRBR1Q7MkZBZlUsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHlCQUF5QixpQkFFcEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7a0ZBRzFELGFBQWE7c0JBQXJCLEtBQUs7Z0JBWU4sVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGVuYW50U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJhc2ljLWNvbmZpZ3VyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgQmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdGVtcGxhdGVNb2RlbDtcblxuICBSRURJUkVDVF9UT19USEVfVVNFUl9JTlRFUkZBQ0VfQVBQTElDQVRJT05fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgXCJUaGUgcmVkaXJlY3QgVVJMIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZSBhcHBsaWNhdGlvbiB1c2VkIGJ5IHRoZSB1c2VyLiBJbiBjYXNlIG9mIGFuIGVycm9yLCBpdCB3aWxsIGJlIGNvcnJlY3RseSBkaXNwbGF5ZWQgb24gdGhlIGFwcGxpY2F0aW9uJ3MgcGFnZS5cIlxuICApO1xuXG4gIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXM6IHsgZGVmYXVsdFJlZGlyZWN0VXJsOiBzdHJpbmc7IGhvc3Q/OiBzdHJpbmcgfTtcbiAgZmxvd0NvbnRyb2xsZWRCeVVJID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlKSB7fVxuXG4gIEBtZW1vaXplKClcbiAgc2hvdWxkU2hvdyhmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZpZWxkIGluIHRoaXMudGVtcGxhdGVNb2RlbDtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSAoYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLmN1cnJlbnQoKSkuZGF0YTtcbiAgICBjb25zdCB7IGRvbWFpbk5hbWUgfSA9IGN1cnJlbnRUZW5hbnQ7XG4gICAgdGhpcy5yZWRpcmVjdFRvUGxhdGZvcm1XYXJuaW5nUGFyYW1zID0ge1xuICAgICAgaG9zdDogYGh0dHBzOi8vJHtkb21haW5OYW1lfWAsXG4gICAgICBkZWZhdWx0UmVkaXJlY3RVcmw6IGBodHRwczovLyR7ZG9tYWluTmFtZX0vdGVuYW50L29hdXRoYFxuICAgIH07XG4gICAgdGhpcy5mbG93Q29udHJvbGxlZEJ5VUkgPSAhdGhpcy50ZW1wbGF0ZU1vZGVsLnJlZGlyZWN0VG9QbGF0Zm9ybTtcbiAgfVxufVxuIiwiPGZpZWxkc2V0IGNsYXNzPVwicC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMiBtLWIteHMtOFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEJhc2ljXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05IGNvbC1tZC0xMCBjb2wtbGctOVwiXG4gICAgICAqbmdJZj1cInRlbXBsYXRlTW9kZWxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygna2V5Q2xvYWtBZGRyZXNzJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImtleUNsb2FrQWRkcmVzc1wiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBLZXljbG9hayBhZGRyZXNzXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJrZXlDbG9ha0FkZHJlc3NcIlxuICAgICAgICAgICAgICBuYW1lPVwia2V5Q2xvYWtBZGRyZXNzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInVybFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5rZXlDbG9ha0FkZHJlc3NcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdodHRwczovL2V4YW1wbGUuZGUnIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnYWFkQWRkcmVzcycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJhYWRBZGRyZXNzXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEF6dXJlIEFEIGFkZHJlc3NcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBpZD1cImFhZEFkZHJlc3NcIlxuICAgICAgICAgICAgICBuYW1lPVwiYWFkQWRkcmVzc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWFkQWRkcmVzc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmRlJyB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCd0ZW5hbnQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwidGVuYW50XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFRlbmFudFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwidGVuYW50XCJcbiAgICAgICAgICAgICAgbmFtZT1cInRlbmFudFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC50ZW5hbnRcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdjOHkub25taWNyb3NvZnQuZGUnIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnYXBwbGljYXRpb25JZCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJhcHBsaWNhdGlvbklkXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEFwcGxpY2F0aW9uIElEXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJhcHBsaWNhdGlvbklkXCJcbiAgICAgICAgICAgICAgbmFtZT1cImFwcGxpY2F0aW9uSWRcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYXBwbGljYXRpb25JZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ3JlYWxtTmFtZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJyZWFsbU5hbWVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmVhbG0gbmFtZVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwicmVhbG1OYW1lXCJcbiAgICAgICAgICAgICAgbmFtZT1cInJlYWxtTmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5yZWFsbU5hbWVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJzaG91bGRTaG93KCdyZWRpcmVjdFRvUGxhdGZvcm0nKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwicmVkaXJlY3RUb1BsYXRmb3JtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1JlZGlyZWN0IFVSTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJoZWxwQ29udGVudFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFmbG93Q29udHJvbGxlZEJ5VUkgJiZcbiAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlTW9kZWwucmVkaXJlY3RUb1BsYXRmb3JtICE9XG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXMuZGVmYXVsdFJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlbHBDb250ZW50PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwicmVkaXJlY3RUb1BsYXRmb3JtV2FybmluZ1BhcmFtc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRm9yIGNvcnJlY3QgYXBwbGljYXRpb24gYmVoYXZpb3IgeW91IGNhbiB1c2Ugb25seSBcInt7IGhvc3QgfX1cIiBvciBcInt7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWRpcmVjdFVybFxuICAgICAgICAgICAgICAgICAgfX1cIiwgdGhlIGxhdHRlciBvbmUgaXMgcmVjb21tZW5kZWQuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwicmVkaXJlY3RUb1BsYXRmb3JtXCJcbiAgICAgICAgICAgICAgbmFtZT1cInJlZGlyZWN0VG9QbGF0Zm9ybVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiIWZsb3dDb250cm9sbGVkQnlVSVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93Q29udHJvbGxlZEJ5VUlcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwucmVkaXJlY3RUb1BsYXRmb3JtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICdlLmcuIHt7IGV4YW1wbGUgfX0nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXM/LmRlZmF1bHRSZWRpcmVjdFVybCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly90ZW5hbnQuZG9tYWluLmNvbSdcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1zd2l0Y2ggbS10LTI0XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVkaXJlY3QgdG8gdGhlIHVzZXIgaW50ZXJmYWNlIGFwcGxpY2F0aW9uYFNTTyBhdXRoZW50aWNhdGlvbmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgZm9yPVwiZmxvd0NvbnRyb2xsZWRCeVVJXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmxvd0NvbnRyb2xsZWRCeVVJXCJcbiAgICAgICAgICAgICAgICBpZD1cImZsb3dDb250cm9sbGVkQnlVSVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbG93Q29udHJvbGxlZEJ5VUlcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmxvd0NvbnRyb2xsZWRCeVVJICYmICh0ZW1wbGF0ZU1vZGVsLnJlZGlyZWN0VG9QbGF0Zm9ybSA9ICcnKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ1JlZGlyZWN0IHRvIHRoZSB1c2VyIGludGVyZmFjZSBhcHBsaWNhdGlvbmBTU08gYXV0aGVudGljYXRpb25gJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgUkVESVJFQ1RfVE9fVEhFX1VTRVJfSU5URVJGQUNFX0FQUExJQ0FUSU9OX1RPT0xUSVAgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCdjbGllbnRTZWNyZXQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2xpZW50U2VjcmV0XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsaWVudCBzZWNyZXRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBpZD1cImNsaWVudFNlY3JldFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjbGllbnRTZWNyZXRcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuY2xpZW50U2VjcmV0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnY2xpZW50SWQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2xpZW50SWRcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2xpZW50IElEXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJjbGllbnRJZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjbGllbnRJZFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5jbGllbnRJZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJzI1NDIzNDk4MWMtNzhhOC00NTg44oCmJyB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ2lzc3VlcicpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJpc3N1ZXJcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVG9rZW4gaXNzdWVyXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJpc3N1ZXJcIlxuICAgICAgICAgICAgICBuYW1lPVwiaXNzdWVyXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLmlzc3VlclwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19J1xuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5kZS8yMzc2NTItMzcyNycgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnc2NvcGVJZCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJzY29wZUlkXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNjb3BlIElEXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJzY29wZUlkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNjb3BlSWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuc2NvcGVJZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnMjM3NjUyLTM3MjcnIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCdidXR0b25OYW1lJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImJ1dHRvbk5hbWVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQnV0dG9uIG5hbWVcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBpZD1cImJ1dHRvbk5hbWVcIlxuICAgICAgICAgICAgICBuYW1lPVwiYnV0dG9uTmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5idXR0b25OYW1lXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIExvZyBpbiB3aXRoIEF6dXJlIEFEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ3Byb3ZpZGVyTmFtZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJwcm92aWRlck5hbWVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUHJvdmlkZXIgbmFtZVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwicHJvdmlkZXJOYW1lXCJcbiAgICAgICAgICAgICAgbmFtZT1cInByb3ZpZGVyTmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5wcm92aWRlck5hbWVcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdBenVyZSBBRCcgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ2F1ZGllbmNlJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImF1ZGllbmNlXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEF1ZGllbmNlXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJhdWRpZW5jZVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJhdWRpZW5jZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hdWRpZW5jZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ2h0dHBzOi8vdGVzdC5leGFtcGxlLmNvbScgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93XCJcbiAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCd2aXNpYmxlT25Mb2dpblBhZ2UnKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1Zpc2libGUgb24gbG9naW4gcGFnZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgZm9yPVwidmlzaWJsZU9uTG9naW5QYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJ2aXNpYmxlT25Mb2dpblBhZ2VcIlxuICAgICAgICAgICAgICBuYW1lPVwidmlzaWJsZU9uTG9naW5QYWdlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLnZpc2libGVPbkxvZ2luUGFnZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ1Zpc2libGUgb24gbG9naW4gcGFnZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2ZpZWxkc2V0PlxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vc3NvLWNvbmZpZ3VyYXRpb24vdGVtcGxhdGUtcGFydHMvYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vc3NvLWNvbmZpZ3VyYXRpb24vdGVtcGxhdGUtcGFydHMvYmFzaWMtY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU85QyxNQUFNLE9BQU8sMkJBQTJCO0lBV3RDLFlBQW9CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBUmhELHVEQUFrRCxHQUFHLE9BQU8sQ0FDMUQsMkpBQTJKLENBQzVKLENBQUM7UUFHRix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO0lBRTJCLENBQUM7SUFHcEQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLElBQUksQ0FBQywrQkFBK0IsR0FBRztZQUNyQyxJQUFJLEVBQUUsV0FBVyxVQUFVLEVBQUU7WUFDN0Isa0JBQWtCLEVBQUUsV0FBVyxVQUFVLGVBQWU7U0FDekQsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO0lBQ25FLENBQUM7OEdBM0JVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLGdJQ1h4QyxzNWFBOGFBLHUxRERyYWlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOztBQWdCbkU7SUFEQyxPQUFPLEVBQUU7Ozs7NkRBR1Q7MkZBaEJVLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx5QkFBeUIsaUJBRXBCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO2tGQUcxRCxhQUFhO3NCQUFyQixLQUFLO2dCQWFOLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRlbmFudFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1iYXNpYy1jb25maWd1cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2ljLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHRlbXBsYXRlTW9kZWw7XG5cbiAgUkVESVJFQ1RfVE9fVEhFX1VTRVJfSU5URVJGQUNFX0FQUExJQ0FUSU9OX1RPT0xUSVAgPSBnZXR0ZXh0KFxuICAgIFwiVGhlIHJlZGlyZWN0IFVSTCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGUgYXBwbGljYXRpb24gdXNlZCBieSB0aGUgdXNlci4gSW4gY2FzZSBvZiBhbiBlcnJvciwgaXQgd2lsbCBiZSBjb3JyZWN0bHkgZGlzcGxheWVkIG9uIHRoZSBhcHBsaWNhdGlvbidzIHBhZ2UuXCJcbiAgKTtcblxuICByZWRpcmVjdFRvUGxhdGZvcm1XYXJuaW5nUGFyYW1zOiB7IGRlZmF1bHRSZWRpcmVjdFVybDogc3RyaW5nOyBob3N0Pzogc3RyaW5nIH07XG4gIGZsb3dDb250cm9sbGVkQnlVSSA9IGZhbHNlO1xuICByZWRpcmVjdFRvUGxhdGZvcm0gPSAnJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UpIHt9XG5cbiAgQG1lbW9pemUoKVxuICBzaG91bGRTaG93KGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZmllbGQgaW4gdGhpcy50ZW1wbGF0ZU1vZGVsO1xuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoKSB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IChhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZSB9ID0gY3VycmVudFRlbmFudDtcbiAgICB0aGlzLnJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXMgPSB7XG4gICAgICBob3N0OiBgaHR0cHM6Ly8ke2RvbWFpbk5hbWV9YCxcbiAgICAgIGRlZmF1bHRSZWRpcmVjdFVybDogYGh0dHBzOi8vJHtkb21haW5OYW1lfS90ZW5hbnQvb2F1dGhgXG4gICAgfTtcbiAgICB0aGlzLnJlZGlyZWN0VG9QbGF0Zm9ybSA9IHRoaXMudGVtcGxhdGVNb2RlbC5yZWRpcmVjdFRvUGxhdGZvcm0gfHwgJyc7XG4gICAgdGhpcy5mbG93Q29udHJvbGxlZEJ5VUkgPSAhdGhpcy50ZW1wbGF0ZU1vZGVsLnJlZGlyZWN0VG9QbGF0Zm9ybTtcbiAgfVxufVxuIiwiPGZpZWxkc2V0IGNsYXNzPVwicC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMiBtLWIteHMtOFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEJhc2ljXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05IGNvbC1tZC0xMCBjb2wtbGctOVwiXG4gICAgICAqbmdJZj1cInRlbXBsYXRlTW9kZWxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygna2V5Q2xvYWtBZGRyZXNzJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImtleUNsb2FrQWRkcmVzc1wiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBLZXljbG9hayBhZGRyZXNzXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJrZXlDbG9ha0FkZHJlc3NcIlxuICAgICAgICAgICAgICBuYW1lPVwia2V5Q2xvYWtBZGRyZXNzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInVybFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5rZXlDbG9ha0FkZHJlc3NcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdodHRwczovL2V4YW1wbGUuZGUnIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnYWFkQWRkcmVzcycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJhYWRBZGRyZXNzXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEF6dXJlIEFEIGFkZHJlc3NcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBpZD1cImFhZEFkZHJlc3NcIlxuICAgICAgICAgICAgICBuYW1lPVwiYWFkQWRkcmVzc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWFkQWRkcmVzc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmRlJyB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCd0ZW5hbnQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwidGVuYW50XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFRlbmFudFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwidGVuYW50XCJcbiAgICAgICAgICAgICAgbmFtZT1cInRlbmFudFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC50ZW5hbnRcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdjOHkub25taWNyb3NvZnQuZGUnIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnYXBwbGljYXRpb25JZCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJhcHBsaWNhdGlvbklkXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEFwcGxpY2F0aW9uIElEXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJhcHBsaWNhdGlvbklkXCJcbiAgICAgICAgICAgICAgbmFtZT1cImFwcGxpY2F0aW9uSWRcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYXBwbGljYXRpb25JZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ3JlYWxtTmFtZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJyZWFsbU5hbWVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmVhbG0gbmFtZVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwicmVhbG1OYW1lXCJcbiAgICAgICAgICAgICAgbmFtZT1cInJlYWxtTmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5yZWFsbU5hbWVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJzaG91bGRTaG93KCdyZWRpcmVjdFRvUGxhdGZvcm0nKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwicmVkaXJlY3RUb1BsYXRmb3JtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1JlZGlyZWN0IFVSTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJoZWxwQ29udGVudFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFmbG93Q29udHJvbGxlZEJ5VUkgJiZcbiAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlTW9kZWwucmVkaXJlY3RUb1BsYXRmb3JtICE9XG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXMuZGVmYXVsdFJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlbHBDb250ZW50PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwicmVkaXJlY3RUb1BsYXRmb3JtV2FybmluZ1BhcmFtc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRm9yIGNvcnJlY3QgYXBwbGljYXRpb24gYmVoYXZpb3IgeW91IGNhbiB1c2Ugb25seSBcInt7IGhvc3QgfX1cIiBvciBcInt7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWRpcmVjdFVybFxuICAgICAgICAgICAgICAgICAgfX1cIiwgdGhlIGxhdHRlciBvbmUgaXMgcmVjb21tZW5kZWQuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwicmVkaXJlY3RUb1BsYXRmb3JtXCJcbiAgICAgICAgICAgICAgbmFtZT1cInJlZGlyZWN0VG9QbGF0Zm9ybVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiIWZsb3dDb250cm9sbGVkQnlVSVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93Q29udHJvbGxlZEJ5VUlcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwucmVkaXJlY3RUb1BsYXRmb3JtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICdlLmcuIHt7IGV4YW1wbGUgfX0nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybVdhcm5pbmdQYXJhbXM/LmRlZmF1bHRSZWRpcmVjdFVybCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly90ZW5hbnQuZG9tYWluLmNvbSdcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1zd2l0Y2ggbS10LTI0XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVkaXJlY3QgdG8gdGhlIHVzZXIgaW50ZXJmYWNlIGFwcGxpY2F0aW9uYFNTTyBhdXRoZW50aWNhdGlvbmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgZm9yPVwiZmxvd0NvbnRyb2xsZWRCeVVJXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmxvd0NvbnRyb2xsZWRCeVVJXCJcbiAgICAgICAgICAgICAgICBpZD1cImZsb3dDb250cm9sbGVkQnlVSVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbG93Q29udHJvbGxlZEJ5VUlcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidGVtcGxhdGVNb2RlbC5yZWRpcmVjdFRvUGxhdGZvcm0gPSBmbG93Q29udHJvbGxlZEJ5VUkgPyAnJyA6IHJlZGlyZWN0VG9QbGF0Zm9ybVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ1JlZGlyZWN0IHRvIHRoZSB1c2VyIGludGVyZmFjZSBhcHBsaWNhdGlvbmBTU08gYXV0aGVudGljYXRpb25gJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgUkVESVJFQ1RfVE9fVEhFX1VTRVJfSU5URVJGQUNFX0FQUExJQ0FUSU9OX1RPT0xUSVAgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTJcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmxvd0NvbnRyb2xsZWRCeVVJICYmIHJlZGlyZWN0VG9QbGF0Zm9ybSAhPSAnJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbWF4LXdpZHRoLTEwMCBtLWItMzJcIlxuICAgICAgICAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVSSTogJzx0ZW5hbnRfZG9tYWluPi9hcHBzLyonXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgTWFrZSBzdXJlIHRoYXQgXCJWYWxpZCBSZWRpcmVjdCBVUklzXCIgaW4gdGhlIGF1dGhvcml6YXRpb24gc2VydmVyIGlzIHNldCB0byBcInt7IHJlZGlyZWN0VVJJIH19XCIgb3IgdG8gdGhlIGZ1bGwgVVJJcyBvZiB0aGUgdXNlZCBhcHBsaWNhdGlvbnMgaWYgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgcGF0dGVybnMuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWZsb3dDb250cm9sbGVkQnlVSSAmJiByZWRpcmVjdFRvUGxhdGZvcm0gPT09ICcnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtYXgtd2lkdGgtMTAwIG0tYi0zMlwiXG4gICAgICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VVJJOiAnPHRlbmFudF9kb21haW4+L3RlbmFudC9vYXV0aCdcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICBNYWtlIHN1cmUgdGhhdCBcIlZhbGlkIFJlZGlyZWN0IFVSSXNcIiBpbiB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgaXMgc2V0IHRvIFwie3sgcmVkaXJlY3RVUkkgfX1cIi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCdjbGllbnRTZWNyZXQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2xpZW50U2VjcmV0XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsaWVudCBzZWNyZXRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBpZD1cImNsaWVudFNlY3JldFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjbGllbnRTZWNyZXRcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuY2xpZW50U2VjcmV0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnY2xpZW50SWQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2xpZW50SWRcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2xpZW50IElEXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJjbGllbnRJZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjbGllbnRJZFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5jbGllbnRJZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJzI1NDIzNDk4MWMtNzhhOC00NTg44oCmJyB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ2lzc3VlcicpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJpc3N1ZXJcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVG9rZW4gaXNzdWVyXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJpc3N1ZXJcIlxuICAgICAgICAgICAgICBuYW1lPVwiaXNzdWVyXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLmlzc3VlclwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19J1xuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5kZS8yMzc2NTItMzcyNycgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTZcIlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkU2hvdygnc2NvcGVJZCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJzY29wZUlkXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNjb3BlIElEXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJzY29wZUlkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNjb3BlSWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuc2NvcGVJZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnMjM3NjUyLTM3MjcnIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCdidXR0b25OYW1lJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImJ1dHRvbk5hbWVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQnV0dG9uIG5hbWVcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBpZD1cImJ1dHRvbk5hbWVcIlxuICAgICAgICAgICAgICBuYW1lPVwiYnV0dG9uTmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5idXR0b25OYW1lXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIExvZyBpbiB3aXRoIEF6dXJlIEFEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ3Byb3ZpZGVyTmFtZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJwcm92aWRlck5hbWVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUHJvdmlkZXIgbmFtZVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGlkPVwicHJvdmlkZXJOYW1lXCJcbiAgICAgICAgICAgICAgbmFtZT1cInByb3ZpZGVyTmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5wcm92aWRlck5hbWVcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6ICdBenVyZSBBRCcgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC1zbS02XCJcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3coJ2F1ZGllbmNlJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImF1ZGllbmNlXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEF1ZGllbmNlXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgaWQ9XCJhdWRpZW5jZVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJhdWRpZW5jZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hdWRpZW5jZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ2h0dHBzOi8vdGVzdC5leGFtcGxlLmNvbScgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93XCJcbiAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93KCd2aXNpYmxlT25Mb2dpblBhZ2UnKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1Zpc2libGUgb24gbG9naW4gcGFnZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgZm9yPVwidmlzaWJsZU9uTG9naW5QYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJ2aXNpYmxlT25Mb2dpblBhZ2VcIlxuICAgICAgICAgICAgICBuYW1lPVwidmlzaWJsZU9uTG9naW5QYWdlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLnZpc2libGVPbkxvZ2luUGFnZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ1Zpc2libGUgb24gbG9naW4gcGFnZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2ZpZWxkc2V0PlxuIl19
@@ -3,8 +3,9 @@ import { ApplicationService, InventoryService } from '@c8y/client';
3
3
  import { AppStateService, NavigatorService, OptionsService, Permissions, SearchService, TabsService } from '@c8y/ngx-components';
4
4
  import { AssetNodeService, ASSET_NAVIGATOR_CONFIG } from '@c8y/ngx-components/assets-navigator';
5
5
  import { isUndefined, startCase } from 'lodash-es';
6
- import { map } from 'rxjs/operators';
6
+ import { map, take } from 'rxjs/operators';
7
7
  import { DEFAULT_CONFIG, DEFAULT_HOME_DASHBOARD_NAME } from './cockpit-config.model';
8
+ import { uniqBy } from 'lodash-es';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@c8y/ngx-components";
10
11
  import * as i2 from "@c8y/ngx-components/assets-navigator";
@@ -40,9 +41,11 @@ export class CockpitConfigService {
40
41
  this.appState.currentApplicationConfig.subscribe(config => {
41
42
  if (config) {
42
43
  this.currentConfig = { ...DEFAULT_CONFIG, ...config };
43
- this.setRootNodes();
44
44
  }
45
45
  });
46
+ this.appState.currentApplicationConfig.pipe(take(1)).subscribe(() => {
47
+ this.setRootNodes();
48
+ });
46
49
  }
47
50
  /**
48
51
  * Save and apply new cockpit configuration
@@ -103,6 +106,7 @@ export class CockpitConfigService {
103
106
  // do nothing
104
107
  }
105
108
  }
109
+ this.nodes = uniqBy(this.nodes, 'path');
106
110
  this.refresh();
107
111
  }
108
112
  getAppDashboardName() {
@@ -185,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
185
189
  type: Inject,
186
190
  args: [ASSET_NAVIGATOR_CONFIG]
187
191
  }] }] });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ja3BpdC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvY2twaXQtY29uZmlnL2NvY2twaXQtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsZUFBZSxFQUdmLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFFYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN2QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQWlCLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQUtwRyxNQUFNLE9BQU8sb0JBQW9CO0lBUy9CLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQ1UsZ0JBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsUUFBeUIsRUFDekIsa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLFdBQXdCLEVBQ21C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QyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRTFELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxTQUFTLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUN0QyxPQUFPO29CQUNULENBQUM7b0JBRUQsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E3TVUsb0JBQW9CLG9TQXlCVCxzQkFBc0I7a0hBekJqQyxvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBMEJJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlLCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBFeHRlbnNpb25GYWN0b3J5LFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBPcHRpb25zU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFRhYixcbiAgVGFic1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBc3NldE5hdmlnYXRvckNvbmZpZyxcbiAgQXNzZXROb2RlU2VydmljZSxcbiAgQVNTRVRfTkFWSUdBVE9SX0NPTkZJR1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Fzc2V0cy1uYXZpZ2F0b3InO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQsIHN0YXJ0Q2FzZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb2NrcGl0Q29uZmlnLCBERUZBVUxUX0NPTkZJRywgREVGQVVMVF9IT01FX0RBU0hCT0FSRF9OQU1FIH0gZnJvbSAnLi9jb2NrcGl0LWNvbmZpZy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvY2twaXRDb25maWdTZXJ2aWNlIHtcbiAgY3VycmVudENvbmZpZzogQ29ja3BpdENvbmZpZyA9IERFRkFVTFRfQ09ORklHO1xuICBub2RlczogTmF2aWdhdG9yTm9kZVtdID0gW107XG4gIHByaXZhdGUgbmF2aWdhdGlvbkZhY3Rvcnk6IEV4dGVuc2lvbkZhY3Rvcnk8TmF2aWdhdG9yTm9kZT4gPSB7XG4gICAgZ2V0OiAoKSA9PiB0aGlzLm5vZGVzXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX05PREVfUFJJT1JJVFkgPSAyMDAwO1xuXG4gIGdldCBleGNsdWRlZEZlYXR1cmVLZXlzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRDb25maWcuZmVhdHVyZXMpLmZpbHRlcihcbiAgICAgIGtleSA9PiAhdGhpcy5jdXJyZW50Q29uZmlnLmZlYXR1cmVzW2tleV1cbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFic1NlcnZpY2U6IFRhYnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGFzc2V0Tm9kZVNlcnZpY2U6IEFzc2V0Tm9kZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVNTRVRfTkFWSUdBVE9SX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQXNzZXROYXZpZ2F0b3JDb25maWdcbiAgKSB7XG4gICAgdGhpcy5yZWdpc3RlckZpbHRlckZvckZlYXR1cmVzKCk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNTZXJ2aWNlLmhpZGVOYXZpZ2F0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLmhpZGVOYXZpZ2F0b3IgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmhpZGVOYXZpZ2F0b3I7XG4gICAgfVxuICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnLnN1YnNjcmliZShjb25maWcgPT4ge1xuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSBhcyBDb2NrcGl0Q29uZmlnO1xuICAgICAgICB0aGlzLnNldFJvb3ROb2RlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYW5kIGFwcGx5IG5ldyBjb2NrcGl0IGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIGNvbmZpZyAtIE5ldyBjb2NrcGl0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIHNhdmVDb25maWcoY29uZmlnOiBDb2NrcGl0Q29uZmlnKSB7XG4gICAgdGhpcy5jdXJyZW50Q29uZmlnID0gY29uZmlnO1xuICAgIGF3YWl0IHRoaXMuc3RvcmVBcHBsaWNhdGlvbkNvbmZpZyh0aGlzLmN1cnJlbnRDb25maWcpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwbGljYXRpb24odGhpcy5jdXJyZW50Q29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY3VycmVudCBhcHBsaWNhdGlvbiB1c2luZyB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29ja3BpdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvbihjb25maWc6IENvY2twaXRDb25maWcpIHtcbiAgICBpZiAoIWNvbmZpZy5hcHBUaXRsZSAmJiAhY29uZmlnLmljb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXBwbGljYXRpb24gPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRBcHBsaWNhdGlvbi52YWx1ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRBcHAgPSB7XG4gICAgICAuLi5hcHBsaWNhdGlvbixcbiAgICAgIG5hbWU6IGNvbmZpZy5hcHBUaXRsZSB8fCBhcHBsaWNhdGlvbi5uYW1lXG4gICAgfTtcblxuICAgIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgICAgLi4udXBkYXRlZEFwcC5tYW5pZmVzdCxcbiAgICAgIG5hbWU6IHVwZGF0ZWRBcHAubmFtZSxcbiAgICAgIGljb246IGNvbmZpZy5pY29uIHx8IHsgY2xhc3M6ICdjOHktY29ja3BpdCcgfVxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoe1xuICAgICAgaWQ6IHVwZGF0ZWRBcHAuaWQsXG4gICAgICBuYW1lOiB1cGRhdGVkQXBwLm5hbWUsXG4gICAgICBtYW5pZmVzdFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcHBTdGF0ZS5jdXJyZW50QXBwbGljYXRpb24ubmV4dCh1cGRhdGVkQXBwKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5vcHRpb25zU2VydmljZS5oaWRlTmF2aWdhdG9yID0gdGhpcy5jdXJyZW50Q29uZmlnLmhpZGVOYXZpZ2F0b3I7XG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLnJlZnJlc2goKTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgc2V0Um9vdE5vZGVzKCkge1xuICAgIHRoaXMuYWRkTm9kZXNUb0ZhY3RvcmllcygpO1xuICAgIHRoaXMubm9kZXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5jdXJyZW50Q29uZmlnLnJvb3ROb2Rlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKG5vZGUuaWQpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubm9kZXMucHVzaChcbiAgICAgICAgICAgIHRoaXMuYXNzZXROb2RlU2VydmljZS5jcmVhdGVBc3NldE5vZGUoe1xuICAgICAgICAgICAgICBtbzogZGF0YSxcbiAgICAgICAgICAgICAgaGlkZURldmljZXM6IG5vZGUuaGlkZURldmljZXMsXG4gICAgICAgICAgICAgIHByaW9yaXR5OiBpc1VuZGVmaW5lZCh0aGlzLm1vZHVsZUNvbmZpZz8ucm9vdE5vZGVQcmlvcml0eSlcbiAgICAgICAgICAgICAgICA/IHRoaXMuREVGQVVMVF9OT0RFX1BSSU9SSVRZXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1vZHVsZUNvbmZpZy5yb290Tm9kZVByaW9yaXR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBnZXRBcHBEYXNoYm9hcmROYW1lKCkge1xuICAgIHJldHVybiBgJHtERUZBVUxUX0hPTUVfREFTSEJPQVJEX05BTUUuc3Vic3RyaW5nKDAsIERFRkFVTFRfSE9NRV9EQVNIQk9BUkRfTkFNRS5sZW5ndGggLSAxKX1fJHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuc3RhdGUuYXBwLmlkXG4gICAgfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0b3JlQXBwbGljYXRpb25Db25maWcoY29uZmlnOiBDb2NrcGl0Q29uZmlnKSB7XG4gICAgYXdhaXQgdGhpcy5hcHBTdGF0ZS51cGRhdGVDdXJyZW50QXBwbGljYXRpb25Db25maWc8Q29ja3BpdENvbmZpZz4oY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTm9kZXNUb0ZhY3RvcmllcygpIHtcbiAgICBjb25zdCBub2RlSW5GYWN0b3JpZXMgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuZmFjdG9yaWVzLmZpbmQoXG4gICAgICBmYXRjb3J5ID0+IGZhdGNvcnkgPT09IHRoaXMubmF2aWdhdGlvbkZhY3RvcnlcbiAgICApO1xuICAgIGlmICghbm9kZUluRmFjdG9yaWVzKSB7XG4gICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuZmFjdG9yaWVzLnB1c2godGhpcy5uYXZpZ2F0aW9uRmFjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckZpbHRlckZvckZlYXR1cmVzKCkge1xuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5pdGVtcyQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuaXRlbXMkLnBpcGUoXG4gICAgICBtYXAobm9kZXMgPT4gdGhpcy5zZXRIaWRkZW5BdHRyTG9jayhub2RlcykpLFxuICAgICAgbWFwKG5vZGVzID0+IHRoaXMuZmlsdGVyTmF2aWdhdG9yTm9kZShub2RlcykpXG4gICAgKTtcbiAgICB0aGlzLnRhYnNTZXJ2aWNlLml0ZW1zJCA9IHRoaXMudGFic1NlcnZpY2UuaXRlbXMkLnBpcGUobWFwKHRhYnMgPT4gdGhpcy5maWx0ZXJUYWJzKHRhYnMpKSk7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLml0ZW1zJCA9IHRoaXMuc2VhcmNoU2VydmljZS5pdGVtcyQucGlwZShcbiAgICAgIG1hcChzZWFyY2ggPT4gKHRoaXMuY3VycmVudENvbmZpZy5mZWF0dXJlcy5zZWFyY2ggPyBzZWFyY2ggOiBbXSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SGlkZGVuQXR0ckxvY2sobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5jdXJyZW50Q29uZmlnLmZlYXR1cmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5vZGUuZmluZChzdGFydENhc2Uoa2V5KS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMucGVybWlzc2lvbnMuaGFzUm9sZShQZXJtaXNzaW9ucy5ST0xFX0FQUExJQ0FUSU9OX01BTkFHRU1FTlRfQURNSU4pICYmXG4gICAgICAgICAgICBjaGlsZE5vZGUubG9ja0hpZGRlbkF0dHIgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgY2hpbGROb2RlLmhpZGRlbiA9PT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY2hpbGROb2RlLmxvY2tIaWRkZW5BdHRyID0gY2hpbGROb2RlLmhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVGFicyh0YWJzOiBUYWJbXSkge1xuICAgIHJldHVybiB0YWJzLmZpbHRlcih0YWIgPT4gIXRoaXMuZXhjbHVkZWRGZWF0dXJlS2V5cy5zb21lKGtleSA9PiB0YWIuZmVhdHVyZUlkID09PSBrZXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyTmF2aWdhdG9yTm9kZShub2RlczogTmF2aWdhdG9yTm9kZVtdKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRDb25maWcpIHtcbiAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG4gICAgY29uc3QgZGlzYWJsZWRGZWF0dXJlcyA9IHRoaXMuZXhjbHVkZWRGZWF0dXJlS2V5cztcbiAgICBjb25zdCBmaWx0ZXJlZE5vZGVzID0gbm9kZXMuZmlsdGVyKFxuICAgICAgbm9kZSA9PiAhZGlzYWJsZWRGZWF0dXJlcy5zb21lKGtleSA9PiBub2RlLmZlYXR1cmVJZCA9PT0ga2V5KVxuICAgICk7XG5cbiAgICB0aGlzLnNob3dBbGxDaGlsZHJlbk5vZGVzKG5vZGVzKTtcbiAgICB0aGlzLmhpZGVDaGlsZHJlbk5vZGVzVGhhdEFyZURpc2FibGVkKG5vZGVzLCBkaXNhYmxlZEZlYXR1cmVzKTtcbiAgICByZXR1cm4gZmlsdGVyZWROb2RlcztcbiAgfVxuXG4gIHByaXZhdGUgaGlkZUNoaWxkcmVuTm9kZXNUaGF0QXJlRGlzYWJsZWQobm9kZXM6IE5hdmlnYXRvck5vZGVbXSwgZGlzYWJsZWRGZWF0dXJlczogc3RyaW5nW10pIHtcbiAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT5cbiAgICAgIGRpc2FibGVkRmVhdHVyZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBub2RlLmZpbmQoa2V5LCAnZmVhdHVyZUlkJyk7XG4gICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAgICAgICBjaGlsZE5vZGUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93QWxsQ2hpbGRyZW5Ob2Rlcyhub2RlczogTmF2aWdhdG9yTm9kZVtdKSB7XG4gICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY3VycmVudENvbmZpZy5mZWF0dXJlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBub2RlLmZpbmQoc3RhcnRDYXNlKGtleSkudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGUubG9ja0hpZGRlbkF0dHIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZE5vZGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ja3BpdC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvY2twaXQtY29uZmlnL2NvY2twaXQtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsZUFBZSxFQUdmLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFFYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN2QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixjQUFjLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7OztBQUtuQyxNQUFNLE9BQU8sb0JBQW9CO0lBUy9CLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQ1UsZ0JBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFD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QUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXNCO1FBQ2pELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFFMUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxJQUFJLFNBQVMsQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ3RDLE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWpOVSxvQkFBb0Isb1NBeUJULHNCQUFzQjtrSEF6QmpDLG9CQUFvQixjQUZuQixNQUFNOzsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkEwQkksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEV4dGVuc2lvbkZhY3RvcnksXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvclNlcnZpY2UsXG4gIE9wdGlvbnNTZXJ2aWNlLFxuICBQZXJtaXNzaW9ucyxcbiAgU2VhcmNoU2VydmljZSxcbiAgVGFiLFxuICBUYWJzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFzc2V0TmF2aWdhdG9yQ29uZmlnLFxuICBBc3NldE5vZGVTZXJ2aWNlLFxuICBBU1NFVF9OQVZJR0FUT1JfQ09ORklHXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgc3RhcnRDYXNlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvY2twaXRDb25maWcsIERFRkFVTFRfQ09ORklHLCBERUZBVUxUX0hPTUVfREFTSEJPQVJEX05BTUUgfSBmcm9tICcuL2NvY2twaXQtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvY2twaXRDb25maWdTZXJ2aWNlIHtcbiAgY3VycmVudENvbmZpZzogQ29ja3BpdENvbmZpZyA9IERFRkFVTFRfQ09ORklHO1xuICBub2RlczogTmF2aWdhdG9yTm9kZVtdID0gW107XG4gIHByaXZhdGUgbmF2aWdhdGlvbkZhY3Rvcnk6IEV4dGVuc2lvbkZhY3Rvcnk8TmF2aWdhdG9yTm9kZT4gPSB7XG4gICAgZ2V0OiAoKSA9PiB0aGlzLm5vZGVzXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX05PREVfUFJJT1JJVFkgPSAyMDAwO1xuXG4gIGdldCBleGNsdWRlZEZlYXR1cmVLZXlzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRDb25maWcuZmVhdHVyZXMpLmZpbHRlcihcbiAgICAgIGtleSA9PiAhdGhpcy5jdXJyZW50Q29uZmlnLmZlYXR1cmVzW2tleV1cbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFic1NlcnZpY2U6IFRhYnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGFzc2V0Tm9kZVNlcnZpY2U6IEFzc2V0Tm9kZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVNTRVRfTkFWSUdBVE9SX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQXNzZXROYXZpZ2F0b3JDb25maWdcbiAgKSB7XG4gICAgdGhpcy5yZWdpc3RlckZpbHRlckZvckZlYXR1cmVzKCk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNTZXJ2aWNlLmhpZGVOYXZpZ2F0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLmhpZGVOYXZpZ2F0b3IgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmhpZGVOYXZpZ2F0b3I7XG4gICAgfVxuICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnLnN1YnNjcmliZShjb25maWcgPT4ge1xuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSBhcyBDb2NrcGl0Q29uZmlnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hcHBTdGF0ZS5jdXJyZW50QXBwbGljYXRpb25Db25maWcucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRSb290Tm9kZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGFuZCBhcHBseSBuZXcgY29ja3BpdCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBjb25maWcgLSBOZXcgY29ja3BpdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhc3luYyBzYXZlQ29uZmlnKGNvbmZpZzogQ29ja3BpdENvbmZpZykge1xuICAgIHRoaXMuY3VycmVudENvbmZpZyA9IGNvbmZpZztcbiAgICBhd2FpdCB0aGlzLnN0b3JlQXBwbGljYXRpb25Db25maWcodGhpcy5jdXJyZW50Q29uZmlnKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcGxpY2F0aW9uKHRoaXMuY3VycmVudENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGN1cnJlbnQgYXBwbGljYXRpb24gdXNpbmcgdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIGNvbmZpZyAtIENvY2twaXQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb24oY29uZmlnOiBDb2NrcGl0Q29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcuYXBwVGl0bGUgJiYgIWNvbmZpZy5pY29uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFwcGxpY2F0aW9uID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50QXBwbGljYXRpb24udmFsdWU7XG5cbiAgICBjb25zdCB1cGRhdGVkQXBwID0ge1xuICAgICAgLi4uYXBwbGljYXRpb24sXG4gICAgICBuYW1lOiBjb25maWcuYXBwVGl0bGUgfHwgYXBwbGljYXRpb24ubmFtZVxuICAgIH07XG5cbiAgICBjb25zdCBtYW5pZmVzdCA9IHtcbiAgICAgIC4uLnVwZGF0ZWRBcHAubWFuaWZlc3QsXG4gICAgICBuYW1lOiB1cGRhdGVkQXBwLm5hbWUsXG4gICAgICBpY29uOiBjb25maWcuaWNvbiB8fCB7IGNsYXNzOiAnYzh5LWNvY2twaXQnIH1cbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHtcbiAgICAgIGlkOiB1cGRhdGVkQXBwLmlkLFxuICAgICAgbmFtZTogdXBkYXRlZEFwcC5uYW1lLFxuICAgICAgbWFuaWZlc3RcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uLm5leHQodXBkYXRlZEFwcCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMub3B0aW9uc1NlcnZpY2UuaGlkZU5hdmlnYXRvciA9IHRoaXMuY3VycmVudENvbmZpZy5oaWRlTmF2aWdhdG9yO1xuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5yZWZyZXNoKCk7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJvb3ROb2RlcygpIHtcbiAgICB0aGlzLmFkZE5vZGVzVG9GYWN0b3JpZXMoKTtcbiAgICB0aGlzLm5vZGVzLmxlbmd0aCA9IDA7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuY3VycmVudENvbmZpZy5yb290Tm9kZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChub2RlLmlkKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLm5vZGVzLnB1c2goXG4gICAgICAgICAgICB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuY3JlYXRlQXNzZXROb2RlKHtcbiAgICAgICAgICAgICAgbW86IGRhdGEsXG4gICAgICAgICAgICAgIGhpZGVEZXZpY2VzOiBub2RlLmhpZGVEZXZpY2VzLFxuICAgICAgICAgICAgICBwcmlvcml0eTogaXNVbmRlZmluZWQodGhpcy5tb2R1bGVDb25maWc/LnJvb3ROb2RlUHJpb3JpdHkpXG4gICAgICAgICAgICAgICAgPyB0aGlzLkRFRkFVTFRfTk9ERV9QUklPUklUWVxuICAgICAgICAgICAgICAgIDogdGhpcy5tb2R1bGVDb25maWcucm9vdE5vZGVQcmlvcml0eVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubm9kZXMgPSB1bmlxQnkodGhpcy5ub2RlcywgJ3BhdGgnKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGdldEFwcERhc2hib2FyZE5hbWUoKSB7XG4gICAgcmV0dXJuIGAke0RFRkFVTFRfSE9NRV9EQVNIQk9BUkRfTkFNRS5zdWJzdHJpbmcoMCwgREVGQVVMVF9IT01FX0RBU0hCT0FSRF9OQU1FLmxlbmd0aCAtIDEpfV8ke1xuICAgICAgdGhpcy5hcHBTdGF0ZS5zdGF0ZS5hcHAuaWRcbiAgICB9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RvcmVBcHBsaWNhdGlvbkNvbmZpZyhjb25maWc6IENvY2twaXRDb25maWcpIHtcbiAgICBhd2FpdCB0aGlzLmFwcFN0YXRlLnVwZGF0ZUN1cnJlbnRBcHBsaWNhdGlvbkNvbmZpZzxDb2NrcGl0Q29uZmlnPihjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGROb2Rlc1RvRmFjdG9yaWVzKCkge1xuICAgIGNvbnN0IG5vZGVJbkZhY3RvcmllcyA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5mYWN0b3JpZXMuZmluZChcbiAgICAgIGZhdGNvcnkgPT4gZmF0Y29yeSA9PT0gdGhpcy5uYXZpZ2F0aW9uRmFjdG9yeVxuICAgICk7XG4gICAgaWYgKCFub2RlSW5GYWN0b3JpZXMpIHtcbiAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5mYWN0b3JpZXMucHVzaCh0aGlzLm5hdmlnYXRpb25GYWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyRmlsdGVyRm9yRmVhdHVyZXMoKSB7XG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLml0ZW1zJCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5pdGVtcyQucGlwZShcbiAgICAgIG1hcChub2RlcyA9PiB0aGlzLnNldEhpZGRlbkF0dHJMb2NrKG5vZGVzKSksXG4gICAgICBtYXAobm9kZXMgPT4gdGhpcy5maWx0ZXJOYXZpZ2F0b3JOb2RlKG5vZGVzKSlcbiAgICApO1xuICAgIHRoaXMudGFic1NlcnZpY2UuaXRlbXMkID0gdGhpcy50YWJzU2VydmljZS5pdGVtcyQucGlwZShtYXAodGFicyA9PiB0aGlzLmZpbHRlclRhYnModGFicykpKTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2UuaXRlbXMkID0gdGhpcy5zZWFyY2hTZXJ2aWNlLml0ZW1zJC5waXBlKFxuICAgICAgbWFwKHNlYXJjaCA9PiAodGhpcy5jdXJyZW50Q29uZmlnLmZlYXR1cmVzLnNlYXJjaCA/IHNlYXJjaCA6IFtdKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIaWRkZW5BdHRyTG9jayhub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRDb25maWcuZmVhdHVyZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbm9kZS5maW5kKHN0YXJ0Q2FzZShrZXkpLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfQVBQTElDQVRJT05fTUFOQUdFTUVOVF9BRE1JTikgJiZcbiAgICAgICAgICAgIGNoaWxkTm9kZS5sb2NrSGlkZGVuQXR0ciA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBjaGlsZE5vZGUuaGlkZGVuID09PSB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjaGlsZE5vZGUubG9ja0hpZGRlbkF0dHIgPSBjaGlsZE5vZGUuaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJUYWJzKHRhYnM6IFRhYltdKSB7XG4gICAgcmV0dXJuIHRhYnMuZmlsdGVyKHRhYiA9PiAhdGhpcy5leGNsdWRlZEZlYXR1cmVLZXlzLnNvbWUoa2V5ID0+IHRhYi5mZWF0dXJlSWQgPT09IGtleSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJOYXZpZ2F0b3JOb2RlKG5vZGVzOiBOYXZpZ2F0b3JOb2RlW10pIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudENvbmZpZykge1xuICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cbiAgICBjb25zdCBkaXNhYmxlZEZlYXR1cmVzID0gdGhpcy5leGNsdWRlZEZlYXR1cmVLZXlzO1xuICAgIGNvbnN0IGZpbHRlcmVkTm9kZXMgPSBub2Rlcy5maWx0ZXIoXG4gICAgICBub2RlID0+ICFkaXNhYmxlZEZlYXR1cmVzLnNvbWUoa2V5ID0+IG5vZGUuZmVhdHVyZUlkID09PSBrZXkpXG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0FsbENoaWxkcmVuTm9kZXMobm9kZXMpO1xuICAgIHRoaXMuaGlkZUNoaWxkcmVuTm9kZXNUaGF0QXJlRGlzYWJsZWQobm9kZXMsIGRpc2FibGVkRmVhdHVyZXMpO1xuICAgIHJldHVybiBmaWx0ZXJlZE5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlQ2hpbGRyZW5Ob2Rlc1RoYXRBcmVEaXNhYmxlZChub2RlczogTmF2aWdhdG9yTm9kZVtdLCBkaXNhYmxlZEZlYXR1cmVzOiBzdHJpbmdbXSkge1xuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PlxuICAgICAgZGlzYWJsZWRGZWF0dXJlcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5vZGUuZmluZChrZXksICdmZWF0dXJlSWQnKTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgICAgIGNoaWxkTm9kZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNob3dBbGxDaGlsZHJlbk5vZGVzKG5vZGVzOiBOYXZpZ2F0b3JOb2RlW10pIHtcbiAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5jdXJyZW50Q29uZmlnLmZlYXR1cmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5vZGUuZmluZChzdGFydENhc2Uoa2V5KS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgaWYgKGNoaWxkTm9kZS5sb2NrSGlkZGVuQXR0ciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkTm9kZS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==