@c8y/ngx-components 1021.22.140 → 1021.22.141

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.
@@ -1 +1 @@
1
- {"version":3,"file":"access-mapping.component.d.ts","sourceRoot":"","sources":["../../../../../auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAEhF,qBAKa,sBAAsB;IA8BrB,OAAO,CAAC,gBAAgB;IA7B3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,aAAa,MAAC;IAEvB,2CAA2C,sLAEzC;IACF,0CAA0C,qDAExC;IAEF,4DAA4D,8MAE1D;IACF,2DAA2D,mHAEzD;IAEF,8CAA8C,8MAE5C;IACF,6CAA6C,iHAE3C;IAEF,yBAAyB,+BAAyC;IAClE,qBAAqB,2BAAqC;gBAEtC,gBAAgB,EAAE,gBAAgB;IAEtD,WAAW,IAAI,IAAI;IAMnB,gBAAgB;IAYhB,mBAAmB;IAWnB,QAAQ,CAAC,aAAa,EAAE,aAAa;IAIrC,wBAAwB,CAAC,gBAAgB,EAAE,gBAAgB;IAI3D,8BAA8B,CAC5B,sBAAsB,EAAE,OAAO,EAC/B,gCAAgC,UAAQ;IAQ1C,IAAI,sBAAsB,QAEzB;IAED,IAAI,gCAAgC,QAEnC;IAED,IAAI,cAAc,QAEjB;IAED,iBAAiB,CAAC,cAAc,KAAA;IAKhC,OAAO,KAAK,2BAA2B,GAEtC;IAED,OAAO,CAAC,iBAAiB;yCApGd,sBAAsB;2CAAtB,sBAAsB;CAiHlC"}
1
+ {"version":3,"file":"access-mapping.component.d.ts","sourceRoot":"","sources":["../../../../../auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAEhF,qBAKa,sBAAsB;IA8BrB,OAAO,CAAC,gBAAgB;IA7B3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,aAAa,MAAC;IAEvB,2CAA2C,sLAEzC;IACF,0CAA0C,qDAExC;IAEF,4DAA4D,8MAE1D;IACF,2DAA2D,mHAEzD;IAEF,8CAA8C,8MAE5C;IACF,6CAA6C,iHAE3C;IAEF,yBAAyB,+BAAyC;IAClE,qBAAqB,2BAAqC;gBAEtC,gBAAgB,EAAE,gBAAgB;IAEtD,WAAW,IAAI,IAAI;IAMnB,gBAAgB;IAYhB,mBAAmB;IAWnB,QAAQ,CAAC,aAAa,EAAE,aAAa;IAIrC,wBAAwB,CAAC,gBAAgB,EAAE,gBAAgB;IAI3D,8BAA8B,CAC5B,sBAAsB,EAAE,OAAO,EAC/B,gCAAgC,UAAQ;IAQ1C,IAAI,sBAAsB,QAEzB;IAED,IAAI,gCAAgC,QAEnC;IAED,IAAI,cAAc,QAEjB;IAED,iBAAiB,CAAC,cAAc,KAAA;IAKhC,OAAO,KAAK,2BAA2B,GAEtC;IAED,OAAO,CAAC,iBAAiB;yCApGd,sBAAsB;2CAAtB,sBAAsB;CAuHlC"}
@@ -82,18 +82,23 @@ export class AccessMappingComponent {
82
82
  inventoryMappings: [],
83
83
  configuration: {
84
84
  mapRolesOnlyForNewUser: false,
85
- manageRolesOnlyFromAccessMapping: false,
86
- mapFromIdToken: true
85
+ manageRolesOnlyFromAccessMapping: false
87
86
  }
88
87
  }
89
88
  });
89
+ const { configuration } = this.templateModel.onNewUser.dynamicMapping;
90
+ const { mapRolesOnlyForNewUser, manageRolesOnlyFromAccessMapping, mapFromIdToken } = configuration;
91
+ configuration.mapFromIdToken =
92
+ mapFromIdToken !== undefined
93
+ ? mapFromIdToken
94
+ : mapRolesOnlyForNewUser === false && manageRolesOnlyFromAccessMapping === false;
90
95
  }
91
96
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccessMappingComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AccessMappingComponent, selector: "c8y-sso-access-mapping", inputs: { apps: "apps", groups: "groups", inventoryRoles: "inventoryRoles", templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i5.DynamicAccessMappingComponent, selector: "c8y-sso-dynamic-access-mapping", inputs: ["groups", "apps", "accessMapping", "accessMappingIndex"], outputs: ["onRemoveAccessMapping"] }, { kind: "component", type: i6.InventoryRolesMappingComponent, selector: "c8y-sso-inventory-roles-mapping", inputs: ["inventoryMapping", "inventoryMappingIndex", "inventoryRoles"], outputs: ["onRemoveInventoryMapping"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AccessMappingComponent, selector: "c8y-sso-access-mapping", inputs: { apps: "apps", groups: "groups", inventoryRoles: "inventoryRoles", templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-access-token\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-id-token\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i5.DynamicAccessMappingComponent, selector: "c8y-sso-dynamic-access-mapping", inputs: ["groups", "apps", "accessMapping", "accessMappingIndex"], outputs: ["onRemoveAccessMapping"] }, { kind: "component", type: i6.InventoryRolesMappingComponent, selector: "c8y-sso-inventory-roles-mapping", inputs: ["inventoryMapping", "inventoryMappingIndex", "inventoryRoles"], outputs: ["onRemoveInventoryMapping"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
93
98
  }
94
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccessMappingComponent, decorators: [{
95
100
  type: Component,
96
- args: [{ selector: 'c8y-sso-access-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
101
+ args: [{ selector: 'c8y-sso-access-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-access-token\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-id-token\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
97
102
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { apps: [{
98
103
  type: Input
99
104
  }], groups: [{
@@ -103,4 +108,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
103
108
  }], templateModel: [{
104
109
  type: Input
105
110
  }] } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL2FjY2Vzcy1tYXBwaW5nL2FjY2Vzcy1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy9hY2Nlc3MtbWFwcGluZy9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQVExRCxNQUFNLE9BQU8sc0JBQXNCO0lBOEJqQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXhCdEQsZ0RBQTJDLEdBQUcsT0FBTyxDQUNuRCxtTEFBbUwsQ0FDcEwsQ0FBQztRQUNGLCtDQUEwQyxHQUFHLE9BQU8sQ0FDbEQsa0RBQWtELENBQ25ELENBQUM7UUFFRixpRUFBNEQsR0FBRyxPQUFPLENBQ3BFLDJNQUEyTSxDQUM1TSxDQUFDO1FBQ0YsZ0VBQTJELEdBQUcsT0FBTyxDQUNuRSxnSEFBZ0gsQ0FDakgsQ0FBQztRQUVGLG1EQUE4QyxHQUFHLE9BQU8sQ0FDdEQsMk1BQTJNLENBQzVNLENBQUM7UUFDRixrREFBNkMsR0FBRyxPQUFPLENBQ3JELDhHQUE4RyxDQUMvRyxDQUFDO1FBRUYsOEJBQXlCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsMEJBQXFCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFRCxDQUFDO0lBRTFELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLFlBQVksR0FBa0I7WUFDbEMsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGVBQWUsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUNwRTtZQUNELFVBQVUsRUFBRSxFQUFFO1lBQ2QsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLHFCQUFxQixHQUFxQjtZQUM5QyxJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsZUFBZSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3BFO1lBQ0Qsa0JBQWtCLEVBQUUsRUFBRTtTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxRQUFRLENBQUMsYUFBNEI7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELHdCQUF3QixDQUFDLGdCQUFrQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELDhCQUE4QixDQUM1QixzQkFBK0IsRUFDL0IsZ0NBQWdDLEdBQUcsS0FBSztRQUV4QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDakYsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdDQUFnQztZQUMvRCxnQ0FBZ0MsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxzQkFBc0IsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxnQ0FBZ0M7UUFDbEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsZ0NBQWdDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLENBQUM7SUFDekQsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQWM7UUFDOUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBWSwyQkFBMkI7UUFDckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQ3pDLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixpQkFBaUIsRUFBRSxFQUFFO2dCQUNyQixhQUFhLEVBQUU7b0JBQ2Isc0JBQXNCLEVBQUUsS0FBSztvQkFDN0IsZ0NBQWdDLEVBQUUsS0FBSztvQkFDdkMsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWhIVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpTUNabkMsMm5QQTRNQSxraEREbE1pQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MkZBRXhELHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSx3QkFBd0IsaUJBRW5CLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO3FGQUcxRCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHB1bGwsIGRlZmF1bHRzRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElJZGVudGlmaWVkLCBJVXNlckdyb3VwIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW52ZW50b3J5TWFwcGluZywgQWNjZXNzTWFwcGluZyB9IGZyb20gJy4uLy4uL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby1hY2Nlc3MtbWFwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgQWNjZXNzTWFwcGluZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGFwcHM6IElBcHBsaWNhdGlvbltdO1xuICBASW5wdXQoKSBncm91cHM6IElVc2VyR3JvdXBbXTtcbiAgQElucHV0KCkgaW52ZW50b3J5Um9sZXM6IElJZGVudGlmaWVkW107XG4gIEBJbnB1dCgpIHRlbXBsYXRlTW9kZWw7XG5cbiAgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgdGhlIGZpcnN0IGxvZ2luLCB0aGVuIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBlZGl0IHRoZSB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4sIHRoZXNlIG1hcHBpbmdzIHdpbGwgbm90IGJlIGV4ZWN1dGVkLidcbiAgKTtcbiAgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fT1BUSU9OID0gZ2V0dGV4dChcbiAgICAnVXNlIGR5bmFtaWMgYWNjZXNzIG1hcHBpbmcgb25seSBvbiB1c2VyIGNyZWF0aW9uJ1xuICApO1xuXG4gIFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgdGhlIGZpcnN0IGxvZ2luLCB0aGVuIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBlZGl0IHRoZSB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4gb25seSB0aGUgcm9sZXMgbGlzdGVkIGluIHRoZSBhY2Nlc3MgbWFwcGluZ3Mgd2lsbCBiZSB1cGRhdGVkLidcbiAgKTtcbiAgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9PUFRJT04gPSBnZXR0ZXh0KFxuICAgICdSb2xlcyBzZWxlY3RlZCBpbiB0aGUgcnVsZXMgYmVsb3cgd2lsbCBiZSByZWFzc2lnbmVkIHRvIGEgdXNlciBvbiBlYWNoIGxvZyBpbiBhbmQgb3RoZXIgb25lcyB3aWxsIGJlIHVuY2hhbmdlZCdcbiAgKTtcblxuICBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9UT09MVElQID0gZ2V0dGV4dChcbiAgICAnVGhlIGFjY2VzcyBtYXBwaW5nIHdpbGwgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBmaXJzdCBsb2dpbi4gVGhlIGFkbWluaXN0cmF0b3IgY2Fubm90IGVkaXQgdGhlIFNTTyB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4gYWxsIHRoZSByb2xlcyB3aWxsIGJlIGNsZWFyZWQgYW5kIHRoZSBtYXBwaW5nIHdpbGwgYmUgZXhlY3V0ZWQgYWdhaW4uJ1xuICApO1xuICBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9PUFRJT04gPSBnZXR0ZXh0KFxuICAgICdSb2xlcyBzZWxlY3RlZCBpbiB0aGUgcnVsZXMgYmVsb3cgd2lsbCBiZSByZWFzc2lnbmVkIHRvIGEgdXNlciBvbiBlYWNoIGxvZyBpbiBhbmQgb3RoZXIgb25lcyB3aWxsIGJlIGNsZWFyZWQnXG4gICk7XG5cbiAgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiA9IGdldHRleHQoJ1JldHJpZXZlIGZyb20gQWNjZXNzIHRva2VuJyk7XG4gIFJFVFJJVkVfRlJPTV9JRF9UT0tFTiA9IGdldHRleHQoJ1JldHJpZXZlIGZyb20gSUQgdG9rZW4nKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIpIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGVNb2RlbCAmJiB0aGlzLmFwcHMgJiYgdGhpcy5ncm91cHMpIHtcbiAgICAgIHRoaXMuc2V0RHluYW1pY01hcHBpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhZGRBY2Nlc3NNYXBwaW5nKCkge1xuICAgIGNvbnN0IGVtcHR5TWFwcGluZzogQWNjZXNzTWFwcGluZyA9IHtcbiAgICAgIHdoZW46IHtcbiAgICAgICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICBjaGlsZFByZWRpY2F0ZXM6IFt7IHBhcmFtZXRlclBhdGg6ICcnLCBvcGVyYXRvcjogJ0VRJywgdmFsdWU6ICcnIH1dXG4gICAgICB9LFxuICAgICAgdGhlbkdyb3VwczogW10sXG4gICAgICB0aGVuQXBwbGljYXRpb25zOiBbXVxuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5tYXBwaW5ncy5wdXNoKGVtcHR5TWFwcGluZyk7XG4gIH1cblxuICBhZGRJbnZlbnRvcnlNYXBwaW5nKCkge1xuICAgIGNvbnN0IGVtcHR5SW52ZW50b3J5TWFwcGluZzogSW52ZW50b3J5TWFwcGluZyA9IHtcbiAgICAgIHdoZW46IHtcbiAgICAgICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICBjaGlsZFByZWRpY2F0ZXM6IFt7IHBhcmFtZXRlclBhdGg6ICcnLCBvcGVyYXRvcjogJ0VRJywgdmFsdWU6ICcnIH1dXG4gICAgICB9LFxuICAgICAgdGhlbkludmVudG9yeVJvbGVzOiBbXVxuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncy5wdXNoKGVtcHR5SW52ZW50b3J5TWFwcGluZyk7XG4gIH1cblxuICBvblJlbW92ZShhY2Nlc3NNYXBwaW5nOiBBY2Nlc3NNYXBwaW5nKSB7XG4gICAgcHVsbCh0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLCBhY2Nlc3NNYXBwaW5nKTtcbiAgfVxuXG4gIG9uUmVtb3ZlSW52ZW50b3J5TWFwcGluZyhpbnZlbnRvcnlNYXBwaW5nOiBJbnZlbnRvcnlNYXBwaW5nKSB7XG4gICAgcHVsbCh0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLmludmVudG9yeU1hcHBpbmdzLCBpbnZlbnRvcnlNYXBwaW5nKTtcbiAgfVxuXG4gIHNldER5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbihcbiAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBib29sZWFuLFxuICAgIG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFwUm9sZXNPbmx5Rm9yTmV3VXNlciA9IG1hcFJvbGVzT25seUZvck5ld1VzZXI7XG4gICAgdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmcgPVxuICAgICAgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmc7XG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIGdldCBtYXBSb2xlc09ubHlGb3JOZXdVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbi5tYXBSb2xlc09ubHlGb3JOZXdVc2VyO1xuICB9XG5cbiAgZ2V0IG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbi5tYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZztcbiAgfVxuXG4gIGdldCBtYXBGcm9tSWRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFwRnJvbUlkVG9rZW47XG4gIH1cblxuICBzZXRNYXBGcm9tSWRUb2tlbihtYXBGcm9tSWRUb2tlbikge1xuICAgIHRoaXMuZHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uLm1hcEZyb21JZFRva2VuID0gbWFwRnJvbUlkVG9rZW47XG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREeW5hbWljTWFwcGluZygpIHtcbiAgICBkZWZhdWx0c0RlZXAodGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlciwge1xuICAgICAgZHluYW1pY01hcHBpbmc6IHtcbiAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICBpbnZlbnRvcnlNYXBwaW5nczogW10sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBmYWxzZSxcbiAgICAgICAgICBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZzogZmFsc2UsXG4gICAgICAgICAgbWFwRnJvbUlkVG9rZW46IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEFjY2VzcyBtYXBwaW5nXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTkgY29sLW1kLTEwIGNvbC1sZy05XCI+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgcC0yNFwiPlxuICAgICAgICA8bGVnZW5kPnt7ICdTb3VyY2Ugb2YgZHluYW1pYyBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBSRVRSSVZFX0ZST01fQUNDRVNTX1RPS0VOIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nU291cmNlXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiIW1hcEZyb21JZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRNYXBGcm9tSWRUb2tlbihmYWxzZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IFJFVFJJVkVfRlJPTV9BQ0NFU1NfVE9LRU4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgUkVUUklWRV9GUk9NX0lEX1RPS0VOIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nU291cmNlXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWFwRnJvbUlkVG9rZW5cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldE1hcEZyb21JZFRva2VuKHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCI+XG4gICAgICAgIDxsZWdlbmQ+e3sgJ0R5bmFtaWMgYWNjZXNzIG1hcHBpbmcgcHJpbmNpcGxlJyB8IHRyYW5zbGF0ZSB9fTwvbGVnZW5kPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFVTRV9BQ0NFU1NfTUFQUElOR19PTl9VU0VSX0NSRUFUSU9OX09QVElPTiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyBpbnB1dC1zbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJkeW5hbWljQWNjZXNzTWFwcGluZ0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWludmVudG9yeS1yb2xlcy1tYXBwaW5nLS1vbi11c2VyLWNyZWF0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWFwUm9sZXNPbmx5Rm9yTmV3VXNlclwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0RHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uKHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBVU0VfQUNDRVNTX01BUFBJTkdfT05fVVNFUl9DUkVBVElPTl9PUFRJT04gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fVE9PTFRJUCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktaW52ZW50b3J5LXJvbGVzLW1hcHBpbmctLW90aGVyLW9uZXMtd2lsbC1iZS11bmNoYW5nZWRcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhbWFwUm9sZXNPbmx5Rm9yTmV3VXNlciAmJiBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZ1wiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0RHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7IFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9UT09MVElQIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgQ0xFQVJfQU5EX1VQREFURURfUk9MRVNfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktaW52ZW50b3J5LXJvbGVzLW1hcHBpbmctLW90aGVyLW9uZXMtd2lsbC1iZS1jbGVhcmVkXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiIW1hcFJvbGVzT25seUZvck5ld1VzZXIgJiYgIW1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXREeW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24oZmFsc2UsIGZhbHNlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7IENMRUFSX0FORF9VUERBVEVEX1JPTEVTX09OX0VBQ0hfTE9HX0lOX09QVElPTiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7IENMRUFSX0FORF9VUERBVEVEX1JPTEVTX09OX0VBQ0hfTE9HX0lOX1RPT0xUSVAgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9maWVsZHNldD5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTE2XCI+XG4gICAgICAgIDxsZWdlbmQ+e3sgJ0R5bmFtaWMgYWNjZXNzIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgW2ljb25dPVwiJ2xpc3QnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIGFjY2VzcyBtYXBwaW5nIHJ1bGVzIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidDbGljayBiZWxvdyB0byBhZGQgYSBuZXcgbWFwcGluZy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgYWNjZXNzTWFwcGluZyBvZiB0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5tYXBwaW5ncztcbiAgICAgICAgICAgIGluZGV4IGFzIGlkeFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LXNzby1keW5hbWljLWFjY2Vzcy1tYXBwaW5nXG4gICAgICAgICAgICBbYWNjZXNzTWFwcGluZ109XCJhY2Nlc3NNYXBwaW5nXCJcbiAgICAgICAgICAgIChvblJlbW92ZUFjY2Vzc01hcHBpbmcpPVwib25SZW1vdmUoYWNjZXNzTWFwcGluZylcIlxuICAgICAgICAgICAgW2FwcHNdPVwiYXBwc1wiXG4gICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICBbYWNjZXNzTWFwcGluZ0luZGV4XT1cImlkeFwiXG4gICAgICAgICAgPjwvYzh5LXNzby1keW5hbWljLWFjY2Vzcy1tYXBwaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRkLWFjY2Vzcy1tYXBwaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEFjY2Vzc01hcHBpbmcoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMTZcIj5cbiAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICB7eyAnSW52ZW50b3J5IHJvbGVzIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGVnZW5kPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgKm5nSWY9XCJ0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIFtpY29uXT1cIidsaXN0J1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidObyBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZyBydWxlcyBkZWZpbmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInQ2xpY2sgYmVsb3cgdG8gYWRkIGEgbmV3IG1hcHBpbmcuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGludmVudG9yeU1hcHBpbmcgb2YgdGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcuaW52ZW50b3J5TWFwcGluZ3M7XG4gICAgICAgICAgICBpbmRleCBhcyBpZHhcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1zc28taW52ZW50b3J5LXJvbGVzLW1hcHBpbmdcbiAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgICBbaW52ZW50b3J5TWFwcGluZ109XCJpbnZlbnRvcnlNYXBwaW5nXCJcbiAgICAgICAgICAgIChvblJlbW92ZUludmVudG9yeU1hcHBpbmcpPVwib25SZW1vdmVJbnZlbnRvcnlNYXBwaW5nKGludmVudG9yeU1hcHBpbmcpXCJcbiAgICAgICAgICAgIFtpbnZlbnRvcnlNYXBwaW5nSW5kZXhdPVwiaWR4XCJcbiAgICAgICAgICA+PC9jOHktc3NvLWludmVudG9yeS1yb2xlcy1tYXBwaW5nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRkLWludmVudG9yeS1tYXBwaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEludmVudG9yeU1hcHBpbmcoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL2FjY2Vzcy1tYXBwaW5nL2FjY2Vzcy1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy9hY2Nlc3MtbWFwcGluZy9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQVExRCxNQUFNLE9BQU8sc0JBQXNCO0lBOEJqQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXhCdEQsZ0RBQTJDLEdBQUcsT0FBTyxDQUNuRCxtTEFBbUwsQ0FDcEwsQ0FBQztRQUNGLCtDQUEwQyxHQUFHLE9BQU8sQ0FDbEQsa0RBQWtELENBQ25ELENBQUM7UUFFRixpRUFBNEQsR0FBRyxPQUFPLENBQ3BFLDJNQUEyTSxDQUM1TSxDQUFDO1FBQ0YsZ0VBQTJELEdBQUcsT0FBTyxDQUNuRSxnSEFBZ0gsQ0FDakgsQ0FBQztRQUVGLG1EQUE4QyxHQUFHLE9BQU8sQ0FDdEQsMk1BQTJNLENBQzVNLENBQUM7UUFDRixrREFBNkMsR0FBRyxPQUFPLENBQ3JELDhHQUE4RyxDQUMvRyxDQUFDO1FBRUYsOEJBQXlCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsMEJBQXFCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFRCxDQUFDO0lBRTFELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLFlBQVksR0FBa0I7WUFDbEMsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGVBQWUsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUNwRTtZQUNELFVBQVUsRUFBRSxFQUFFO1lBQ2QsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLHFCQUFxQixHQUFxQjtZQUM5QyxJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsZUFBZSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3BFO1lBQ0Qsa0JBQWtCLEVBQUUsRUFBRTtTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxRQUFRLENBQUMsYUFBNEI7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELHdCQUF3QixDQUFDLGdCQUFrQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELDhCQUE4QixDQUM1QixzQkFBK0IsRUFDL0IsZ0NBQWdDLEdBQUcsS0FBSztRQUV4QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDakYsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdDQUFnQztZQUMvRCxnQ0FBZ0MsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxzQkFBc0IsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxnQ0FBZ0M7UUFDbEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsZ0NBQWdDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLENBQUM7SUFDekQsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQWM7UUFDOUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBWSwyQkFBMkI7UUFDckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQ3pDLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixpQkFBaUIsRUFBRSxFQUFFO2dCQUNyQixhQUFhLEVBQUU7b0JBQ2Isc0JBQXNCLEVBQUUsS0FBSztvQkFDN0IsZ0NBQWdDLEVBQUUsS0FBSztpQkFDeEM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFDdEUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLGdDQUFnQyxFQUFFLGNBQWMsRUFBRSxHQUNoRixhQUFhLENBQUM7UUFDaEIsYUFBYSxDQUFDLGNBQWM7WUFDMUIsY0FBYyxLQUFLLFNBQVM7Z0JBQzFCLENBQUMsQ0FBQyxjQUFjO2dCQUNoQixDQUFDLENBQUMsc0JBQXNCLEtBQUssS0FBSyxJQUFJLGdDQUFnQyxLQUFLLEtBQUssQ0FBQztJQUN2RixDQUFDOzhHQXRIVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpTUNabkMsK3ZQQThNQSxraEREcE1pQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MkZBRXhELHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSx3QkFBd0IsaUJBRW5CLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO3FGQUcxRCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHB1bGwsIGRlZmF1bHRzRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElJZGVudGlmaWVkLCBJVXNlckdyb3VwIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW52ZW50b3J5TWFwcGluZywgQWNjZXNzTWFwcGluZyB9IGZyb20gJy4uLy4uL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby1hY2Nlc3MtbWFwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgQWNjZXNzTWFwcGluZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGFwcHM6IElBcHBsaWNhdGlvbltdO1xuICBASW5wdXQoKSBncm91cHM6IElVc2VyR3JvdXBbXTtcbiAgQElucHV0KCkgaW52ZW50b3J5Um9sZXM6IElJZGVudGlmaWVkW107XG4gIEBJbnB1dCgpIHRlbXBsYXRlTW9kZWw7XG5cbiAgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgdGhlIGZpcnN0IGxvZ2luLCB0aGVuIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBlZGl0IHRoZSB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4sIHRoZXNlIG1hcHBpbmdzIHdpbGwgbm90IGJlIGV4ZWN1dGVkLidcbiAgKTtcbiAgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fT1BUSU9OID0gZ2V0dGV4dChcbiAgICAnVXNlIGR5bmFtaWMgYWNjZXNzIG1hcHBpbmcgb25seSBvbiB1c2VyIGNyZWF0aW9uJ1xuICApO1xuXG4gIFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgdGhlIGZpcnN0IGxvZ2luLCB0aGVuIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBlZGl0IHRoZSB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4gb25seSB0aGUgcm9sZXMgbGlzdGVkIGluIHRoZSBhY2Nlc3MgbWFwcGluZ3Mgd2lsbCBiZSB1cGRhdGVkLidcbiAgKTtcbiAgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9PUFRJT04gPSBnZXR0ZXh0KFxuICAgICdSb2xlcyBzZWxlY3RlZCBpbiB0aGUgcnVsZXMgYmVsb3cgd2lsbCBiZSByZWFzc2lnbmVkIHRvIGEgdXNlciBvbiBlYWNoIGxvZyBpbiBhbmQgb3RoZXIgb25lcyB3aWxsIGJlIHVuY2hhbmdlZCdcbiAgKTtcblxuICBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9UT09MVElQID0gZ2V0dGV4dChcbiAgICAnVGhlIGFjY2VzcyBtYXBwaW5nIHdpbGwgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBmaXJzdCBsb2dpbi4gVGhlIGFkbWluaXN0cmF0b3IgY2Fubm90IGVkaXQgdGhlIFNTTyB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4gYWxsIHRoZSByb2xlcyB3aWxsIGJlIGNsZWFyZWQgYW5kIHRoZSBtYXBwaW5nIHdpbGwgYmUgZXhlY3V0ZWQgYWdhaW4uJ1xuICApO1xuICBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9PUFRJT04gPSBnZXR0ZXh0KFxuICAgICdSb2xlcyBzZWxlY3RlZCBpbiB0aGUgcnVsZXMgYmVsb3cgd2lsbCBiZSByZWFzc2lnbmVkIHRvIGEgdXNlciBvbiBlYWNoIGxvZyBpbiBhbmQgb3RoZXIgb25lcyB3aWxsIGJlIGNsZWFyZWQnXG4gICk7XG5cbiAgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiA9IGdldHRleHQoJ1JldHJpZXZlIGZyb20gQWNjZXNzIHRva2VuJyk7XG4gIFJFVFJJVkVfRlJPTV9JRF9UT0tFTiA9IGdldHRleHQoJ1JldHJpZXZlIGZyb20gSUQgdG9rZW4nKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIpIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGVNb2RlbCAmJiB0aGlzLmFwcHMgJiYgdGhpcy5ncm91cHMpIHtcbiAgICAgIHRoaXMuc2V0RHluYW1pY01hcHBpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhZGRBY2Nlc3NNYXBwaW5nKCkge1xuICAgIGNvbnN0IGVtcHR5TWFwcGluZzogQWNjZXNzTWFwcGluZyA9IHtcbiAgICAgIHdoZW46IHtcbiAgICAgICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICBjaGlsZFByZWRpY2F0ZXM6IFt7IHBhcmFtZXRlclBhdGg6ICcnLCBvcGVyYXRvcjogJ0VRJywgdmFsdWU6ICcnIH1dXG4gICAgICB9LFxuICAgICAgdGhlbkdyb3VwczogW10sXG4gICAgICB0aGVuQXBwbGljYXRpb25zOiBbXVxuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5tYXBwaW5ncy5wdXNoKGVtcHR5TWFwcGluZyk7XG4gIH1cblxuICBhZGRJbnZlbnRvcnlNYXBwaW5nKCkge1xuICAgIGNvbnN0IGVtcHR5SW52ZW50b3J5TWFwcGluZzogSW52ZW50b3J5TWFwcGluZyA9IHtcbiAgICAgIHdoZW46IHtcbiAgICAgICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICBjaGlsZFByZWRpY2F0ZXM6IFt7IHBhcmFtZXRlclBhdGg6ICcnLCBvcGVyYXRvcjogJ0VRJywgdmFsdWU6ICcnIH1dXG4gICAgICB9LFxuICAgICAgdGhlbkludmVudG9yeVJvbGVzOiBbXVxuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncy5wdXNoKGVtcHR5SW52ZW50b3J5TWFwcGluZyk7XG4gIH1cblxuICBvblJlbW92ZShhY2Nlc3NNYXBwaW5nOiBBY2Nlc3NNYXBwaW5nKSB7XG4gICAgcHVsbCh0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLCBhY2Nlc3NNYXBwaW5nKTtcbiAgfVxuXG4gIG9uUmVtb3ZlSW52ZW50b3J5TWFwcGluZyhpbnZlbnRvcnlNYXBwaW5nOiBJbnZlbnRvcnlNYXBwaW5nKSB7XG4gICAgcHVsbCh0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLmludmVudG9yeU1hcHBpbmdzLCBpbnZlbnRvcnlNYXBwaW5nKTtcbiAgfVxuXG4gIHNldER5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbihcbiAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBib29sZWFuLFxuICAgIG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFwUm9sZXNPbmx5Rm9yTmV3VXNlciA9IG1hcFJvbGVzT25seUZvck5ld1VzZXI7XG4gICAgdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmcgPVxuICAgICAgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmc7XG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIGdldCBtYXBSb2xlc09ubHlGb3JOZXdVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbi5tYXBSb2xlc09ubHlGb3JOZXdVc2VyO1xuICB9XG5cbiAgZ2V0IG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbi5tYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZztcbiAgfVxuXG4gIGdldCBtYXBGcm9tSWRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFwRnJvbUlkVG9rZW47XG4gIH1cblxuICBzZXRNYXBGcm9tSWRUb2tlbihtYXBGcm9tSWRUb2tlbikge1xuICAgIHRoaXMuZHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uLm1hcEZyb21JZFRva2VuID0gbWFwRnJvbUlkVG9rZW47XG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREeW5hbWljTWFwcGluZygpIHtcbiAgICBkZWZhdWx0c0RlZXAodGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlciwge1xuICAgICAgZHluYW1pY01hcHBpbmc6IHtcbiAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICBpbnZlbnRvcnlNYXBwaW5nczogW10sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBmYWxzZSxcbiAgICAgICAgICBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZzogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHsgY29uZmlndXJhdGlvbiB9ID0gdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZztcbiAgICBjb25zdCB7IG1hcFJvbGVzT25seUZvck5ld1VzZXIsIG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nLCBtYXBGcm9tSWRUb2tlbiB9ID1cbiAgICAgIGNvbmZpZ3VyYXRpb247XG4gICAgY29uZmlndXJhdGlvbi5tYXBGcm9tSWRUb2tlbiA9XG4gICAgICBtYXBGcm9tSWRUb2tlbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gbWFwRnJvbUlkVG9rZW5cbiAgICAgICAgOiBtYXBSb2xlc09ubHlGb3JOZXdVc2VyID09PSBmYWxzZSAmJiBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZyA9PT0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaDQgdGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHNcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQWNjZXNzIG1hcHBpbmdcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTAgY29sLWxnLTlcIj5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCI+XG4gICAgICAgIDxsZWdlbmQ+e3sgJ1NvdXJjZSBvZiBkeW5hbWljIGFjY2VzcyBtYXBwaW5nJyB8IHRyYW5zbGF0ZSB9fTwvbGVnZW5kPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFJFVFJJVkVfRlJPTV9BQ0NFU1NfVE9LRU4gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiZHluYW1pY0FjY2Vzc01hcHBpbmdTb3VyY2VcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiZHluYW1pYy1hY2Nlc3MtbWFwcGluZy1mcm9tLWFjY2Vzcy10b2tlblwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiFtYXBGcm9tSWRUb2tlblwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0TWFwRnJvbUlkVG9rZW4oZmFsc2UpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBSRVRSSVZFX0ZST01fQUNDRVNTX1RPS0VOIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFJFVFJJVkVfRlJPTV9JRF9UT0tFTiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyBpbnB1dC1zbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJkeW5hbWljQWNjZXNzTWFwcGluZ1NvdXJjZVwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJkeW5hbWljLWFjY2Vzcy1tYXBwaW5nLWZyb20taWQtdG9rZW5cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtYXBGcm9tSWRUb2tlblwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0TWFwRnJvbUlkVG9rZW4odHJ1ZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IFJFVFJJVkVfRlJPTV9JRF9UT0tFTiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9maWVsZHNldD5cblxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIj5cbiAgICAgICAgPGxlZ2VuZD57eyAnRHluYW1pYyBhY2Nlc3MgbWFwcGluZyBwcmluY2lwbGUnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fT1BUSU9OIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktaW52ZW50b3J5LXJvbGVzLW1hcHBpbmctLW9uLXVzZXItY3JlYXRpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtYXBSb2xlc09ubHlGb3JOZXdVc2VyXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXREeW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24odHJ1ZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IFVTRV9BQ0NFU1NfTUFQUElOR19PTl9VU0VSX0NSRUFUSU9OX09QVElPTiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyBVU0VfQUNDRVNTX01BUFBJTkdfT05fVVNFUl9DUkVBVElPTl9UT09MVElQIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9PUFRJT04gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiZHluYW1pY0FjY2Vzc01hcHBpbmdDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1pbnZlbnRvcnktcm9sZXMtbWFwcGluZy0tb3RoZXItb25lcy13aWxsLWJlLXVuY2hhbmdlZFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiFtYXBSb2xlc09ubHlGb3JOZXdVc2VyICYmIG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXREeW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24oZmFsc2UsIHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge3sgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9PUFRJT04gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyBVUERBVEVfUk9MRVNfTElTVEVEX0lOX0FDQ0VTU19NQVBQSU5HX09OX0VBQ0hfTE9HX0lOX1RPT0xUSVAgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9PUFRJT04gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiZHluYW1pY0FjY2Vzc01hcHBpbmdDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1pbnZlbnRvcnktcm9sZXMtbWFwcGluZy0tb3RoZXItb25lcy13aWxsLWJlLWNsZWFyZWRcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhbWFwUm9sZXNPbmx5Rm9yTmV3VXNlciAmJiAhbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmdcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldER5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbihmYWxzZSwgZmFsc2UpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge3sgQ0xFQVJfQU5EX1VQREFURURfUk9MRVNfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgQ0xFQVJfQU5EX1VQREFURURfUk9MRVNfT05fRUFDSF9MT0dfSU5fVE9PTFRJUCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMTZcIj5cbiAgICAgICAgPGxlZ2VuZD57eyAnRHluYW1pYyBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgICpuZ0lmPVwidGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcubWFwcGluZ3MubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICBbaWNvbl09XCInbGlzdCdcIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gYWNjZXNzIG1hcHBpbmcgcnVsZXMgZGVmaW5lZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3VidGl0bGVdPVwiJ0NsaWNrIGJlbG93IHRvIGFkZCBhIG5ldyBtYXBwaW5nLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBhY2Nlc3NNYXBwaW5nIG9mIHRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzO1xuICAgICAgICAgICAgaW5kZXggYXMgaWR4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktc3NvLWR5bmFtaWMtYWNjZXNzLW1hcHBpbmdcbiAgICAgICAgICAgIFthY2Nlc3NNYXBwaW5nXT1cImFjY2Vzc01hcHBpbmdcIlxuICAgICAgICAgICAgKG9uUmVtb3ZlQWNjZXNzTWFwcGluZyk9XCJvblJlbW92ZShhY2Nlc3NNYXBwaW5nKVwiXG4gICAgICAgICAgICBbYXBwc109XCJhcHBzXCJcbiAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgIFthY2Nlc3NNYXBwaW5nSW5kZXhdPVwiaWR4XCJcbiAgICAgICAgICA+PC9jOHktc3NvLWR5bmFtaWMtYWNjZXNzLW1hcHBpbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC10LTE2XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJhZGQtYWNjZXNzLW1hcHBpbmctYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIGFjY2VzcyBtYXBwaW5nJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkQWNjZXNzTWFwcGluZygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjOHlJY29uPVwicGx1cy1jaXJjbGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyAnQWRkIGFjY2VzcyBtYXBwaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgcC0xNlwiPlxuICAgICAgICA8bGVnZW5kPlxuICAgICAgICAgIHt7ICdJbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLmludmVudG9yeU1hcHBpbmdzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgW2ljb25dPVwiJ2xpc3QnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIGludmVudG9yeSByb2xlcyBtYXBwaW5nIHJ1bGVzIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidDbGljayBiZWxvdyB0byBhZGQgYSBuZXcgbWFwcGluZy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgaW52ZW50b3J5TWFwcGluZyBvZiB0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncztcbiAgICAgICAgICAgIGluZGV4IGFzIGlkeFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LXNzby1pbnZlbnRvcnktcm9sZXMtbWFwcGluZ1xuICAgICAgICAgICAgW2ludmVudG9yeVJvbGVzXT1cImludmVudG9yeVJvbGVzXCJcbiAgICAgICAgICAgIFtpbnZlbnRvcnlNYXBwaW5nXT1cImludmVudG9yeU1hcHBpbmdcIlxuICAgICAgICAgICAgKG9uUmVtb3ZlSW52ZW50b3J5TWFwcGluZyk9XCJvblJlbW92ZUludmVudG9yeU1hcHBpbmcoaW52ZW50b3J5TWFwcGluZylcIlxuICAgICAgICAgICAgW2ludmVudG9yeU1hcHBpbmdJbmRleF09XCJpZHhcIlxuICAgICAgICAgID48L2M4eS1zc28taW52ZW50b3J5LXJvbGVzLW1hcHBpbmc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC10LTE2XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJhZGQtaW52ZW50b3J5LW1hcHBpbmctYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIGludmVudG9yeSByb2xlcyBtYXBwaW5nJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkSW52ZW50b3J5TWFwcGluZygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjOHlJY29uPVwicGx1cy1jaXJjbGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyAnQWRkIGludmVudG9yeSByb2xlcyBtYXBwaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -18,19 +18,19 @@ export class UserDataMappingComponent {
18
18
  }
19
19
  }
20
20
  get useIdToken() {
21
- return this.templateModel.useIdToken;
21
+ return this.templateModel.useIdToken || false;
22
22
  }
23
23
  setUseIdToken(useIdToken) {
24
24
  this.templateModel.useIdToken = useIdToken;
25
25
  this.controlContainer.control.markAsDirty();
26
26
  }
27
27
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UserDataMappingComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UserDataMappingComponent, selector: "c8y-sso-user-data-mapping", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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: i3.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 }] }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UserDataMappingComponent, selector: "c8y-sso-user-data-mapping", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-access-token\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-id-token\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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: i3.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 }] }); }
29
29
  }
30
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UserDataMappingComponent, decorators: [{
31
31
  type: Component,
32
- args: [{ selector: 'c8y-sso-user-data-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
32
+ args: [{ selector: 'c8y-sso-user-data-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-access-token\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-id-token\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
33
33
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { templateModel: [{
34
34
  type: Input
35
35
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL3VzZXItZGF0YS1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy91c2VyLWRhdGEtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU8xRCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBTHRELGdCQUFXLEdBQUcsT0FBTyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFFOUYsOEJBQXlCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsMEJBQXFCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFRCxDQUFDO0lBRTFELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs4R0F0QlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsNkdDVHJDLHk4SUF5SUEsNnVDRGxJaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7OzJGQUV4RCx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsMkJBQTJCLGlCQUV0QixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztxRkFHMUQsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby11c2VyLWRhdGEtbWFwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWRhdGEtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgVXNlckRhdGFNYXBwaW5nQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGVtcGxhdGVNb2RlbDtcbiAgQ0xBSU1fTkFNRVMgPSBnZXR0ZXh0KCdUb2tlbiBjbGFpbXMgY2FuIGJlIGNoZWNrZWQgaW4gQXVkaXQgTG9ncyB1bmRlciBTaW5nbGUgc2lnbi1vbiB0eXBlLicpO1xuXG4gIFJFVFJJVkVfRlJPTV9BQ0NFU1NfVE9LRU4gPSBnZXR0ZXh0KCdSZXRyaWV2ZSBmcm9tIEFjY2VzcyB0b2tlbicpO1xuICBSRVRSSVZFX0ZST01fSURfVE9LRU4gPSBnZXR0ZXh0KCdSZXRyaWV2ZSBmcm9tIElEIHRva2VuJyk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMudGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncykge1xuICAgICAgdGhpcy50ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzID0ge307XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVzZUlkVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVNb2RlbC51c2VJZFRva2VuO1xuICB9XG5cbiAgc2V0VXNlSWRUb2tlbih1c2VJZFRva2VuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLnVzZUlkVG9rZW4gPSB1c2VJZFRva2VuO1xuICAgIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaDQgdGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHNcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgVXNlciBkYXRhIG1hcHBpbmdzXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTkgY29sLW1kLTEwIGNvbC1sZy05XCI+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgcC0yNFwiPlxuICAgICAgICA8bGVnZW5kPnt7ICdTb3VyY2Ugb2YgdXNlciBkYXRhIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyBpbnB1dC1zbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJ1c2VyQWNjZXNzTWFwcGluZ1NvdXJjZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiF1c2VJZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRVc2VJZFRva2VuKGZhbHNlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwidXNlckFjY2Vzc01hcHBpbmdTb3VyY2VcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VJZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRVc2VJZFRva2VuKHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCI+XG4gICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAge3sgJ0NsYWltIG5hbWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7IENMQUlNX05BTUVTIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJmaXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBGaXJzdCBuYW1lXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzLmZpcnN0TmFtZUNsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdnaXZlbl9uYW1lJyB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTGFzdCBuYW1lXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5sYXN0TmFtZUNsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdmYW1pbHlfbmFtZScgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5lbWFpbENsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdlbWFpbCcgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFBob25lIG51bWJlclxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBpZD1cInBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MucGhvbmVOdW1iZXJDbGFpbU5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAncGhvbmVfbnVtYmVyJyB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL3VzZXItZGF0YS1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy91c2VyLWRhdGEtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU8xRCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBTHRELGdCQUFXLEdBQUcsT0FBTyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFFOUYsOEJBQXlCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsMEJBQXFCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFRCxDQUFDO0lBRTFELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7OEdBdEJVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZHQ1RyQyx1a0pBMklBLDZ1Q0RwSWlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzsyRkFFeEQsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLDJCQUEyQixpQkFFdEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7cUZBRzFELGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zc28tdXNlci1kYXRhLW1hcHBpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1kYXRhLW1hcHBpbmcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJEYXRhTWFwcGluZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRlbXBsYXRlTW9kZWw7XG4gIENMQUlNX05BTUVTID0gZ2V0dGV4dCgnVG9rZW4gY2xhaW1zIGNhbiBiZSBjaGVja2VkIGluIEF1ZGl0IExvZ3MgdW5kZXIgU2luZ2xlIHNpZ24tb24gdHlwZS4nKTtcblxuICBSRVRSSVZFX0ZST01fQUNDRVNTX1RPS0VOID0gZ2V0dGV4dCgnUmV0cmlldmUgZnJvbSBBY2Nlc3MgdG9rZW4nKTtcbiAgUkVUUklWRV9GUk9NX0lEX1RPS0VOID0gZ2V0dGV4dCgnUmV0cmlldmUgZnJvbSBJRCB0b2tlbicpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcikge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncyA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldCB1c2VJZFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlTW9kZWwudXNlSWRUb2tlbiB8fCBmYWxzZTtcbiAgfVxuXG4gIHNldFVzZUlkVG9rZW4odXNlSWRUb2tlbikge1xuICAgIHRoaXMudGVtcGxhdGVNb2RlbC51c2VJZFRva2VuID0gdXNlSWRUb2tlbjtcbiAgICB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIFVzZXIgZGF0YSBtYXBwaW5nc1xuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05IGNvbC1tZC0xMCBjb2wtbGctOVwiPlxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMjRcIj5cbiAgICAgICAgPGxlZ2VuZD57eyAnU291cmNlIG9mIHVzZXIgZGF0YSBtYXBwaW5nJyB8IHRyYW5zbGF0ZSB9fTwvbGVnZW5kPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFJFVFJJVkVfRlJPTV9BQ0NFU1NfVE9LRU4gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwidXNlckFjY2Vzc01hcHBpbmdTb3VyY2VcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwidXNlci1hY2Nlc3MtbWFwcGluZy1mcm9tLWFjY2Vzcy10b2tlblwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiF1c2VJZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRVc2VJZFRva2VuKGZhbHNlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwidXNlckFjY2Vzc01hcHBpbmdTb3VyY2VcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwidXNlci1hY2Nlc3MtbWFwcGluZy1mcm9tLWlkLXRva2VuXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidXNlSWRUb2tlblwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VXNlSWRUb2tlbih0cnVlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgUkVUUklWRV9GUk9NX0lEX1RPS0VOIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgcC0yNFwiPlxuICAgICAgICA8bGVnZW5kPlxuICAgICAgICAgIHt7ICdDbGFpbSBuYW1lcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyBDTEFJTV9OQU1FUyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbGVnZW5kPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgRmlyc3QgbmFtZVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5maXJzdE5hbWVDbGFpbU5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnZ2l2ZW5fbmFtZScgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJsYXN0TmFtZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIExhc3QgbmFtZVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBpZD1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MubGFzdE5hbWVDbGFpbU5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnZmFtaWx5X25hbWUnIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBFbWFpbFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICBpZD1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MuZW1haWxDbGFpbU5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnZW1haWwnIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwicGhvbmVOdW1iZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBQaG9uZSBudW1iZXJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzLnBob25lTnVtYmVyQ2xhaW1OYW1lXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogJ3Bob25lX251bWJlcicgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1404,18 +1404,18 @@ class UserDataMappingComponent {
1404
1404
  }
1405
1405
  }
1406
1406
  get useIdToken() {
1407
- return this.templateModel.useIdToken;
1407
+ return this.templateModel.useIdToken || false;
1408
1408
  }
1409
1409
  setUseIdToken(useIdToken) {
1410
1410
  this.templateModel.useIdToken = useIdToken;
1411
1411
  this.controlContainer.control.markAsDirty();
1412
1412
  }
1413
1413
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UserDataMappingComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
1414
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UserDataMappingComponent, selector: "c8y-sso-user-data-mapping", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.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: i1$1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1414
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UserDataMappingComponent, selector: "c8y-sso-user-data-mapping", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-access-token\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-id-token\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.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: i1$1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1415
1415
  }
1416
1416
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UserDataMappingComponent, decorators: [{
1417
1417
  type: Component,
1418
- args: [{ selector: 'c8y-sso-user-data-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
1418
+ args: [{ selector: 'c8y-sso-user-data-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-access-token\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n data-cy=\"user-access-mapping-from-id-token\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
1419
1419
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { templateModel: [{
1420
1420
  type: Input
1421
1421
  }] } });
@@ -1701,18 +1701,23 @@ class AccessMappingComponent {
1701
1701
  inventoryMappings: [],
1702
1702
  configuration: {
1703
1703
  mapRolesOnlyForNewUser: false,
1704
- manageRolesOnlyFromAccessMapping: false,
1705
- mapFromIdToken: true
1704
+ manageRolesOnlyFromAccessMapping: false
1706
1705
  }
1707
1706
  }
1708
1707
  });
1708
+ const { configuration } = this.templateModel.onNewUser.dynamicMapping;
1709
+ const { mapRolesOnlyForNewUser, manageRolesOnlyFromAccessMapping, mapFromIdToken } = configuration;
1710
+ configuration.mapFromIdToken =
1711
+ mapFromIdToken !== undefined
1712
+ ? mapFromIdToken
1713
+ : mapRolesOnlyForNewUser === false && manageRolesOnlyFromAccessMapping === false;
1709
1714
  }
1710
1715
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccessMappingComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
1711
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AccessMappingComponent, selector: "c8y-sso-access-mapping", inputs: { apps: "apps", groups: "groups", inventoryRoles: "inventoryRoles", templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i1$1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: DynamicAccessMappingComponent, selector: "c8y-sso-dynamic-access-mapping", inputs: ["groups", "apps", "accessMapping", "accessMappingIndex"], outputs: ["onRemoveAccessMapping"] }, { kind: "component", type: InventoryRolesMappingComponent, selector: "c8y-sso-inventory-roles-mapping", inputs: ["inventoryMapping", "inventoryMappingIndex", "inventoryRoles"], outputs: ["onRemoveInventoryMapping"] }, { kind: "pipe", type: i1$1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1716
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AccessMappingComponent, selector: "c8y-sso-access-mapping", inputs: { apps: "apps", groups: "groups", inventoryRoles: "inventoryRoles", templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-access-token\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-id-token\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i1$1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: DynamicAccessMappingComponent, selector: "c8y-sso-dynamic-access-mapping", inputs: ["groups", "apps", "accessMapping", "accessMappingIndex"], outputs: ["onRemoveAccessMapping"] }, { kind: "component", type: InventoryRolesMappingComponent, selector: "c8y-sso-inventory-roles-mapping", inputs: ["inventoryMapping", "inventoryMappingIndex", "inventoryRoles"], outputs: ["onRemoveInventoryMapping"] }, { kind: "pipe", type: i1$1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1712
1717
  }
1713
1718
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccessMappingComponent, decorators: [{
1714
1719
  type: Component,
1715
- args: [{ selector: 'c8y-sso-access-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
1720
+ args: [{ selector: 'c8y-sso-access-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-access-token\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n data-cy=\"dynamic-access-mapping-from-id-token\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
1716
1721
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { apps: [{
1717
1722
  type: Input
1718
1723
  }], groups: [{