From 1db5ec71256476691e47bfcf78364a8b14cec4bd Mon Sep 17 00:00:00 2001 From: Robin Meese <39960884+robson90@users.noreply.github.com> Date: Tue, 22 Oct 2024 11:46:29 +0200 Subject: [PATCH] Add new authenticator required action (#16) * Fix 'NoClassDefFoundError: org/apache/logging/log4j/util/Lazy' error * Fix 'HTTP 405 Method Not Allowed' error when calling the REST endpoint * Add JUnit test for event listener * Add resources * Edit JUnit-test to extract expected successfull login time from access-token instead of logs * Remove unnecessary environment variable configuration * Refactor JUnit test: Extract from access-token without adding new external dependencies. * Remove unnecessary dependency * Refactor: Change access modifiers of methods to private * Refactor JUnit test: Remove duplicate method * Rename test files to *IT.java and configure Maven Failsafe plugin * Fixing open conversations on PR, refactored MAVEN-Plugins * WiP added a functional Authenticator without any testing. Tests will be added next * WiP added UI testing for Terms and condition * Added UI_Tests to check functionality for required action authenticator * change package to verify * add steps for playwright tests * add steps for playwright tests #2 * added documentation * fix missing dash * add one more header * fixing comments * WiP added check for empty AuthenticatorConfig * WiP added check for empty AuthenticatorConfig #2 added TODO to test * WiP added check for empty AuthenticatorConfig #2 added TODO to test * Resolved all comments --------- Co-authored-by: Hassan El Mailoudi --- .github/workflows/build-and-test.yml | 7 +- README.md | 22 +- authenticator-required-action/README.md | 20 + authenticator-required-action/pom.xml | 56 + .../RequiredActionAuthenticator.java | 95 + .../RequiredActionAuthenticatorFactory.java | 88 + .../RequiredActionConstants.java | 5 + ...ycloak.authentication.AuthenticatorFactory | 1 + .../RequiredActionAuthenticatorIT.java | 205 ++ .../src/test/resources/log4j2.properties | 27 + .../test/resources/required-action-realm.json | 1888 +++++++++++++++++ docker-compose.yaml | 4 +- .../required-action-authenticator-config.png | Bin 0 -> 77470 bytes ...ired-action-available-required-actions.png | Bin 0 -> 70321 bytes docs/pics/required-action-flow.png | Bin 0 -> 62704 bytes pom.xml | 10 +- 16 files changed, 2416 insertions(+), 12 deletions(-) create mode 100644 authenticator-required-action/README.md create mode 100644 authenticator-required-action/pom.xml create mode 100644 authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticator.java create mode 100644 authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorFactory.java create mode 100644 authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionConstants.java create mode 100644 authenticator-required-action/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory create mode 100644 authenticator-required-action/src/test/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorIT.java create mode 100755 authenticator-required-action/src/test/resources/log4j2.properties create mode 100644 authenticator-required-action/src/test/resources/required-action-realm.json create mode 100644 docs/pics/required-action-authenticator-config.png create mode 100644 docs/pics/required-action-available-required-actions.png create mode 100644 docs/pics/required-action-flow.png diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 67341cb..bbd220d 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -10,6 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + - name: Install Playwright Browsers + run: npx playwright install --with-deps - name: Set up JDK 17 uses: actions/setup-java@v4 with: @@ -17,4 +22,4 @@ jobs: java-version: '17' cache: maven - name: Build project with Maven - run: mvn -B clean package + run: mvn -B clean verify diff --git a/README.md b/README.md index fdc27ea..ce8a3c4 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,17 @@ This Repository contains free to use Extensions for the OpenSource Project [Keycloak](https://github.com/keycloak/keycloak) -Contained Extensions: - -* Rest-Endpoints - * GetUsersByIdResource -> /admins/realms//users-by-id - * QueryParams: - * briefRepresentation true | false - * listWithIds List containing Ids of Users - * Returns List of Users +This repo contains the following extensions: + +## Authenticator-Required-Action + +You can add this Authenticator to your flow, so a User gets the defined Required-Action set on signing in. +[README.md - Authenticator-Required Action](./authenticator-required-action/README.md) + +## Rest-Endpoints + +* GetUsersByIdResource -> /admins/realms//users-by-id + * QueryParams: + * briefRepresentation true | false + * listWithIds List containing Ids of Users + * Returns List of Users diff --git a/authenticator-required-action/README.md b/authenticator-required-action/README.md new file mode 100644 index 0000000..a706c5b --- /dev/null +++ b/authenticator-required-action/README.md @@ -0,0 +1,20 @@ +# Authenticator-Required-Action +Imagine a user authenticates via an Identity Provider (IdP) and requires a specific action, such as resetting their password or agreeing to new terms of service. +This extension ensures that the configured required action is automatically set for the user once they authenticate through the Identity Provider. +```mermaid +flowchart LR + CompanyA(RealmCompanyA)-->UsersA + CompanyB(RealmCompanyB)-->UsersB + UsersA-- Connected via Idp alias: CompanyA ---RealmConciso + UsersB-- Connected via Idp alias: CompanyB ---RealmConciso +``` + +The First Broker login of Idp CompanyA is configured to set the 'TERMS_AND_CONDITIONS' for all users from CompanyA. Users from CompanyB dont have to accept the terms, so they dont get that action. + +## How to use +![required-action-flow.png](../docs/pics/required-action-flow.png) + +![required-action-authenticator-config.png](../docs/pics/required-action-authenticator-config.png) + +To see your available Required-Actions, go to Realm 'master' -> Provider info -> Search for 'req' or scroll down until you see 'required-action' in the column for SPI +![required-action-available-required-actions.png](../docs/pics/required-action-available-required-actions.png) diff --git a/authenticator-required-action/pom.xml b/authenticator-required-action/pom.xml new file mode 100644 index 0000000..4991490 --- /dev/null +++ b/authenticator-required-action/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + de.conciso.keycloak-extensions + parent + 1.0-SNAPSHOT + + + authenticator-required-action + + + UTF-8 + + + + + + org.keycloak + keycloak-core + + + org.keycloak + keycloak-server-spi + + + org.keycloak + keycloak-server-spi-private + + + org.keycloak + keycloak-services + + + com.microsoft.playwright + playwright + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.apache.maven.plugins + maven-failsafe-plugin + + + + + diff --git a/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticator.java b/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticator.java new file mode 100644 index 0000000..c8082b4 --- /dev/null +++ b/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticator.java @@ -0,0 +1,95 @@ +package de.conciso.keycloak.authentication.required_action; + +import jakarta.ws.rs.core.Response; +import org.jboss.logging.Logger; +import org.keycloak.authentication.AuthenticationFlowContext; +import org.keycloak.authentication.AuthenticationFlowError; +import org.keycloak.authentication.Authenticator; +import org.keycloak.events.Errors; +import org.keycloak.models.KeycloakSession; +import org.keycloak.models.RealmModel; +import org.keycloak.models.RequiredActionProviderModel; +import org.keycloak.models.UserModel; +import org.keycloak.sessions.AuthenticationSessionModel; + +import java.util.Optional; + +public class RequiredActionAuthenticator implements Authenticator { + private static final Logger LOGGER = Logger.getLogger(RequiredActionAuthenticator.class); + private static final String LOG_ERROR_MESSAGE_MISSING_AUTH_CONFIG = "AuthenticatorConfig is missing on RequiredActionAuthenticator"; + private static final String HTML_ERROR_MESSAGE = LOG_ERROR_MESSAGE_MISSING_AUTH_CONFIG + "!\nPlease contact your administrator"; + private static final String LOG_ERROR_MESSAGE_NON_EXISTENT_REQUIRED_ACTION = "AuthenticatorConfig references an unknown RequiredAction, please double check if it really exists: 'NON_EXISTENT_REQUIRED_ACTION'"; + + + @Override + public void authenticate(AuthenticationFlowContext context) { + var authenticatorConfig = Optional.ofNullable( + context.getAuthenticatorConfig() + .getConfig() + .get(RequiredActionConstants.CONFIG_REQUIRED_ACTION_KEY)); + if (authenticatorConfig.isEmpty()) { + LOGGER.error(LOG_ERROR_MESSAGE_MISSING_AUTH_CONFIG); + context.getEvent() + .realm(context.getRealm()) + .client(context.getSession().getContext().getClient()) + .user(context.getUser()) + .error(Errors.INVALID_CONFIG); + context.failure(AuthenticationFlowError.INTERNAL_ERROR, + htmlErrorResponse(context, + LOG_ERROR_MESSAGE_MISSING_AUTH_CONFIG + HTML_ERROR_MESSAGE)); + } else if (!doesRequiredActionExists(context, authenticatorConfig.get())) { + LOGGER.error(LOG_ERROR_MESSAGE_NON_EXISTENT_REQUIRED_ACTION); + context.getEvent() + .realm(context.getRealm()) + .client(context.getSession().getContext().getClient()) + .user(context.getUser()) + .error(Errors.INVALID_CONFIG); + context.failure(AuthenticationFlowError.INTERNAL_ERROR, + htmlErrorResponse(context, + LOG_ERROR_MESSAGE_NON_EXISTENT_REQUIRED_ACTION + HTML_ERROR_MESSAGE)); + } else { + context.getUser().addRequiredAction(authenticatorConfig.get()); + context.success(); + } + } + + private boolean doesRequiredActionExists(AuthenticationFlowContext context, String providerId) { + var requiredAction = context.getRealm().getRequiredActionProvidersStream() + .map(RequiredActionProviderModel::getProviderId) + .filter(id -> id.equals(providerId)) + .findFirst(); + return requiredAction.isPresent(); + } + + private Response htmlErrorResponse(AuthenticationFlowContext context, String errorMessage) { + AuthenticationSessionModel authSession = context.getAuthenticationSession(); + return context.form() + .setError(errorMessage, authSession.getAuthenticatedUser().getUsername(), + authSession.getClient().getClientId()) + .createErrorPage(Response.Status.INTERNAL_SERVER_ERROR); + } + + @Override + public void action(AuthenticationFlowContext context) { + } + + @Override + public boolean requiresUser() { + return true; + } + + @Override + public boolean configuredFor(KeycloakSession keycloakSession, RealmModel realmModel, UserModel userModel) { + return true; + } + + @Override + public void setRequiredActions(KeycloakSession keycloakSession, RealmModel realmModel, UserModel userModel) { + //intentionally empty + } + + @Override + public void close() { + + } +} diff --git a/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorFactory.java b/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorFactory.java new file mode 100644 index 0000000..5ad0bc8 --- /dev/null +++ b/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorFactory.java @@ -0,0 +1,88 @@ +package de.conciso.keycloak.authentication.required_action; + +import org.keycloak.Config; +import org.keycloak.authentication.Authenticator; +import org.keycloak.authentication.AuthenticatorFactory; +import org.keycloak.models.AuthenticationExecutionModel; +import org.keycloak.models.KeycloakSession; +import org.keycloak.models.KeycloakSessionFactory; +import org.keycloak.provider.ProviderConfigProperty; + +import java.util.List; + +public class RequiredActionAuthenticatorFactory implements AuthenticatorFactory { + + public static final String PROVIDER_ID = "required-action-authenticator"; + + @Override + public String getId() { + return PROVIDER_ID; + } + + @Override + public String getDisplayType() { + return "Set Required-Action Authentication"; + } + + @Override + public String getReferenceCategory() { + return "required-action"; + } + + @Override + public boolean isConfigurable() { + return true; + } + + @Override + public AuthenticationExecutionModel.Requirement[] getRequirementChoices() { + return new AuthenticationExecutionModel.Requirement[]{ + AuthenticationExecutionModel.Requirement.REQUIRED, + AuthenticationExecutionModel.Requirement.DISABLED}; + } + + @Override + public boolean isUserSetupAllowed() { + return false; + } + + @Override + public String getHelpText() { + return "Sets the configured RequiredAction for the authenticating User"; + } + + @Override + public List getConfigProperties() { + //TODO @Robin Maybe multivalued in the future ? + return List.of( + new ProviderConfigProperty( + RequiredActionConstants.CONFIG_REQUIRED_ACTION_KEY, + "Required Action", + "Specifies the Required Action, that will be assigned to the authenticating User", + ProviderConfigProperty.STRING_TYPE, + "", + false, + true) + ); + } + + @Override + public Authenticator create(KeycloakSession keycloakSession) { + return new RequiredActionAuthenticator(); + } + + @Override + public void init(Config.Scope scope) { + + } + + @Override + public void postInit(KeycloakSessionFactory keycloakSessionFactory) { + + } + + @Override + public void close() { + + } +} diff --git a/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionConstants.java b/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionConstants.java new file mode 100644 index 0000000..c6fc751 --- /dev/null +++ b/authenticator-required-action/src/main/java/de/conciso/keycloak/authentication/required_action/RequiredActionConstants.java @@ -0,0 +1,5 @@ +package de.conciso.keycloak.authentication.required_action; + +public final class RequiredActionConstants { + public static final String CONFIG_REQUIRED_ACTION_KEY = "REQUIRED_ACTION"; +} diff --git a/authenticator-required-action/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory b/authenticator-required-action/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory new file mode 100644 index 0000000..1c59fc5 --- /dev/null +++ b/authenticator-required-action/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory @@ -0,0 +1 @@ +de.conciso.keycloak.authentication.required_action.RequiredActionAuthenticatorFactory diff --git a/authenticator-required-action/src/test/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorIT.java b/authenticator-required-action/src/test/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorIT.java new file mode 100644 index 0000000..c074793 --- /dev/null +++ b/authenticator-required-action/src/test/java/de/conciso/keycloak/authentication/required_action/RequiredActionAuthenticatorIT.java @@ -0,0 +1,205 @@ +package de.conciso.keycloak.authentication.required_action; + +import com.microsoft.playwright.Browser; +import com.microsoft.playwright.BrowserType; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.Playwright; +import com.microsoft.playwright.options.AriaRole; +import dasniko.testcontainers.keycloak.KeycloakContainer; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.keycloak.representations.idm.AuthenticatorConfigRepresentation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.LoggingEvent; +import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.testcontainers.containers.output.WaitingConsumer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Stream; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; + +@Testcontainers +class RequiredActionAuthenticatorIT { + private static final Logger LOGGER = LoggerFactory.getLogger(RequiredActionAuthenticatorIT.class); + private static final String KEYCLOAK_VERSION = System.getProperty("keycloak.version", "latest"); + private static final String REALM_NAME = "required-action"; + private static final String ADMIN_USER = "admin"; + private static final String ADMIN_PASS = "admin"; + private static final String AUTHENTICATOR_CONFIG_ID = "9b46ecb5-2b16-40f0-beae-4fc4ba905292"; + private static final String LOG_AUTHENTICATOR_CONFIG_MISSING_ERROR = "AuthenticatorConfig is missing on RequiredActionAuthenticator"; + private static final String LOG_AUTHENTICATOR_CONFIG_REFERENCES_NON_EXISTENT_REQUIRED_ACTION = "AuthenticatorConfig references an unknown RequiredAction, please double check if it really exists: 'NON_EXISTENT_REQUIRED_ACTION'"; + + @Container + private static final KeycloakContainer keycloak = + new KeycloakContainer("quay.io/keycloak/keycloak:" + KEYCLOAK_VERSION) + .withEnv("KEYCLOAK_ADMIN", ADMIN_USER) + .withEnv("KEYCLOAK_ADMIN_PASSWORD", ADMIN_PASS) + .withLogConsumer(new Slf4jLogConsumer(LOGGER).withSeparateOutputStreams()) + .withProviderClassesFrom("target/classes") + .withRealmImportFile("required-action-realm.json"); + + private static Stream provideUserLogins() { + return Stream.of( + Arguments.of("dieterbohlen", "dietersPassword", "TERMS_AND_CONDITIONS"), + Arguments.of("mannimammut", "mannimammutsPassword", "UPDATE_PASSWORD"), + Arguments.of("peterpommes", "peterpommesPassword", "UPDATE_PROFILE") + ); + } + + @ParameterizedTest + @MethodSource("provideUserLogins") + void testThatUsersHaveCorrectRequiredActionAfterLogin(String userName, String password, String requiredAction) { + // Setting the specific required action to be added to the Authentication Config + var authenticatorConfig = new AuthenticatorConfigRepresentation(); + authenticatorConfig.setId(AUTHENTICATOR_CONFIG_ID); + authenticatorConfig.setAlias("RequiredAction"); + var configMap = new HashMap(); + configMap.put("REQUIRED_ACTION", requiredAction); + authenticatorConfig.setConfig(configMap); + + var keycloakAdminClient = keycloak.getKeycloakAdminClient().realm(REALM_NAME); + keycloakAdminClient.flows().updateAuthenticatorConfig(AUTHENTICATOR_CONFIG_ID, authenticatorConfig); + + assertThat(keycloakAdminClient.users().searchByUsername(userName, true).get(0).getRequiredActions()) + .isEmpty(); + + executeBrowserFlow(userName, password, requiredAction); + } + + void executeBrowserFlow(String userName, String password, String requiredAction) { + + try (Playwright playwright = Playwright.create()) { + BrowserType chromium = playwright.chromium(); + // comment me in if you want to run in headless mode ! + //Browser browser = chromium.launch(new BrowserType.LaunchOptions().setHeadless(false)); + Browser browser = chromium.launch(); + Page page = browser.newPage(); + + loginUser(browser, page, userName, password); + + // split here, for the specific required action + switch (requiredAction) { + case "TERMS_AND_CONDITIONS": + page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Accept")).click(); + break; + case "UPDATE_PASSWORD": + page.getByLabel("New Password").fill("Test123!"); + page.getByLabel("Confirm Password").fill("Test123!"); + page.getByLabel("Confirm Password").press("Enter"); + break; + case "UPDATE_PROFILE": + assertThat(keycloak.getKeycloakAdminClient().realm(REALM_NAME).users().searchByUsername(userName, true).get(0).getRequiredActions()).containsExactly(requiredAction); + page.getByText("Submit").click(); + break; + default: + Assertions.fail(); + } + + page.waitForURL(String.format("%s/realms/required-action/account/#/security/signingin", keycloak.getAuthServerUrl())); + + assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Signing in")).first()).isVisible(); + + browser.close(); + } + } + + @Test + void testThatFlowIsNotSuccessFulWhenAuthenticatorConfigIsEmpty() throws TimeoutException { + // Setting the AuthenticatorConfig to empty + var authenticatorConfig = new AuthenticatorConfigRepresentation(); + authenticatorConfig.setId(AUTHENTICATOR_CONFIG_ID); + authenticatorConfig.setAlias("RequiredAction"); + var configMap = new HashMap(); + configMap.put("REQUIRED_ACTION", ""); + authenticatorConfig.setConfig(configMap); + + var keycloakAdminClient = keycloak.getKeycloakAdminClient().realm(REALM_NAME); + keycloakAdminClient.flows().updateAuthenticatorConfig(AUTHENTICATOR_CONFIG_ID, authenticatorConfig); + + try (Playwright playwright = Playwright.create()) { + BrowserType chromium = playwright.chromium(); + Browser browser = chromium.launch(); + Page page = browser.newPage(); + + loginUser(browser, page, "dieterbohlen", "dietersPassword"); + + assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("We are sorry"))).isVisible(); + assertThat(page.getByText(LOG_AUTHENTICATOR_CONFIG_MISSING_ERROR)).isVisible(); + } + + final List logs = Arrays.stream(keycloak.getLogs().split("\n")).filter(i -> i.contains(LOG_AUTHENTICATOR_CONFIG_MISSING_ERROR)).toList(); + assertThat(logs).hasSize(1); + assertThat(logs.get(0)).contains( + "ERROR", + "[de.conciso.keycloak.authentication.required_action.RequiredActionAuthenticator]", + "AuthenticatorConfig is missing on RequiredActionAuthenticator" + ); + } + + @Test + void testThatErrorIsLoggedWhenAuthenticatorConfigReferencesNonExistentRequiredAction() { + final String NON_EXISTENT_REQUIRED_ACTION = "NON_EXISTENT_REQUIRED_ACTION"; + // Setting the AuthenticatorConfig to empty + var authenticatorConfig = new AuthenticatorConfigRepresentation(); + authenticatorConfig.setId(AUTHENTICATOR_CONFIG_ID); + authenticatorConfig.setAlias("RequiredAction"); + var configMap = new HashMap(); + configMap.put("REQUIRED_ACTION", NON_EXISTENT_REQUIRED_ACTION); + authenticatorConfig.setConfig(configMap); + + var keycloakAdminClient = keycloak.getKeycloakAdminClient().realm(REALM_NAME); + keycloakAdminClient.flows().updateAuthenticatorConfig(AUTHENTICATOR_CONFIG_ID, authenticatorConfig); + + try (Playwright playwright = Playwright.create()) { + BrowserType chromium = playwright.chromium(); + Browser browser = chromium.launch(); + Page page = browser.newPage(); + + loginUser(browser, page, "dieterbohlen", "dietersPassword"); + + assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("We are sorry"))).isVisible(); + assertThat(page.getByText(LOG_AUTHENTICATOR_CONFIG_REFERENCES_NON_EXISTENT_REQUIRED_ACTION)).isVisible(); + } + + final List logs = Arrays.stream(keycloak.getLogs().split("\n")).filter(i -> i.contains(LOG_AUTHENTICATOR_CONFIG_REFERENCES_NON_EXISTENT_REQUIRED_ACTION)).toList(); + assertThat(logs).hasSize(1); + assertThat(logs.get(0)).contains( + "ERROR", + "[de.conciso.keycloak.authentication.required_action.RequiredActionAuthenticator]", + String.format("AuthenticatorConfig references an unknown RequiredAction, please double check if it really exists: '%s'", NON_EXISTENT_REQUIRED_ACTION) + ); + + } + + private void loginUser(Browser browser, Page page, String username, String password) { + page.navigate(String.format("%s/realms/required-action/account/", keycloak.getAuthServerUrl())); + + page.getByText("Signing in").click(); + page.waitForURL("**/realms/required-action/protocol/openid-connect/auth**"); + + // Login Page + page.getByLabel("Username or email").click(); + page.getByLabel("Username or email").fill(username); + + page.getByLabel("Password").first().fill(password); + page.getByLabel("Password").first().press("Enter"); + } +} + + + diff --git a/authenticator-required-action/src/test/resources/log4j2.properties b/authenticator-required-action/src/test/resources/log4j2.properties new file mode 100755 index 0000000..6f20fe4 --- /dev/null +++ b/authenticator-required-action/src/test/resources/log4j2.properties @@ -0,0 +1,27 @@ +status = error +name = PropertiesConfig + +filters = threshold + +filter.threshold.type = ThresholdFilter +filter.threshold.level = debug + +appenders = console, file + +appender.file.type = File +appender.file.name = LOGFILE +appender.file.fileName = target/test.log +appender.file.layout.type = PatternLayout +appender.file.layout.pattern = %r [%t] {%-5p} %c %notEmpty{%x }- %m%n +appender.file.layout.alwaysWriteExceptions=true + +appender.console.type = Console +appender.console.name = STDOUT +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = %r [%t] %highlight{%-5p} %c %notEmpty{%x }- %m%n%ex{short}%n +appender.console.layout.alwaysWriteExceptions=false + +rootLogger.level = info +rootLogger.appenderRefs = stdout, file +rootLogger.appenderRef.stdout.ref = STDOUT +rootLogger.appenderRef.file.ref = LOGFILE \ No newline at end of file diff --git a/authenticator-required-action/src/test/resources/required-action-realm.json b/authenticator-required-action/src/test/resources/required-action-realm.json new file mode 100644 index 0000000..506cd73 --- /dev/null +++ b/authenticator-required-action/src/test/resources/required-action-realm.json @@ -0,0 +1,1888 @@ +{ + "id" : "6d1204b3-dd74-474f-be22-96839f19eed3", + "realm" : "required-action", + "notBefore" : 0, + "defaultSignatureAlgorithm" : "RS256", + "revokeRefreshToken" : false, + "refreshTokenMaxReuse" : 0, + "accessTokenLifespan" : 300, + "accessTokenLifespanForImplicitFlow" : 900, + "ssoSessionIdleTimeout" : 1800, + "ssoSessionMaxLifespan" : 36000, + "ssoSessionIdleTimeoutRememberMe" : 0, + "ssoSessionMaxLifespanRememberMe" : 0, + "offlineSessionIdleTimeout" : 2592000, + "offlineSessionMaxLifespanEnabled" : false, + "offlineSessionMaxLifespan" : 5184000, + "clientSessionIdleTimeout" : 0, + "clientSessionMaxLifespan" : 0, + "clientOfflineSessionIdleTimeout" : 0, + "clientOfflineSessionMaxLifespan" : 0, + "accessCodeLifespan" : 60, + "accessCodeLifespanUserAction" : 300, + "accessCodeLifespanLogin" : 1800, + "actionTokenGeneratedByAdminLifespan" : 43200, + "actionTokenGeneratedByUserLifespan" : 300, + "oauth2DeviceCodeLifespan" : 600, + "oauth2DevicePollingInterval" : 5, + "enabled" : true, + "sslRequired" : "external", + "registrationAllowed" : false, + "registrationEmailAsUsername" : false, + "rememberMe" : false, + "verifyEmail" : false, + "loginWithEmailAllowed" : true, + "duplicateEmailsAllowed" : false, + "resetPasswordAllowed" : false, + "editUsernameAllowed" : false, + "bruteForceProtected" : false, + "permanentLockout" : false, + "maxFailureWaitSeconds" : 900, + "minimumQuickLoginWaitSeconds" : 60, + "waitIncrementSeconds" : 60, + "quickLoginCheckMilliSeconds" : 1000, + "maxDeltaTimeSeconds" : 43200, + "failureFactor" : 30, + "roles" : { + "realm" : [ { + "id" : "804d1742-aaf9-409e-8b00-05b4d2e270d7", + "name" : "default-roles-required-action", + "description" : "${role_default-roles}", + "composite" : true, + "composites" : { + "realm" : [ "offline_access", "uma_authorization" ], + "client" : { + "account" : [ "view-profile", "manage-account" ] + } + }, + "clientRole" : false, + "containerId" : "6d1204b3-dd74-474f-be22-96839f19eed3", + "attributes" : { } + }, { + "id" : "2ce170cd-7c86-40e2-9d0f-95b1291a1992", + "name" : "uma_authorization", + "description" : "${role_uma_authorization}", + "composite" : false, + "clientRole" : false, + "containerId" : "6d1204b3-dd74-474f-be22-96839f19eed3", + "attributes" : { } + }, { + "id" : "240dd58e-89d2-49ba-a825-58dd2f736bf6", + "name" : "offline_access", + "description" : "${role_offline-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "6d1204b3-dd74-474f-be22-96839f19eed3", + "attributes" : { } + } ], + "client" : { + "realm-management" : [ { + "id" : "9ca175c8-2a66-4b05-b2b4-c52873f9e9c9", + "name" : "view-users", + "description" : "${role_view-users}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-users", "query-groups" ] + } + }, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "c9ad427a-5a07-42d5-9f6f-e32c6b067f58", + "name" : "manage-clients", + "description" : "${role_manage-clients}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "0091b601-3e18-46d0-8f08-f08e9edbf24f", + "name" : "create-client", + "description" : "${role_create-client}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "d761d28d-1b6d-4f3c-a752-9e6509f9331d", + "name" : "query-realms", + "description" : "${role_query-realms}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "784ca7fc-e2ef-4297-8c7c-b17d3d468c81", + "name" : "realm-admin", + "description" : "${role_realm-admin}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "view-users", "manage-clients", "create-client", "query-realms", "manage-authorization", "view-events", "view-identity-providers", "view-authorization", "view-realm", "manage-events", "query-clients", "manage-identity-providers", "query-users", "query-groups", "manage-realm", "impersonation", "manage-users", "view-clients" ] + } + }, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "643e296a-0bb1-4dcb-a68a-f8ea49769189", + "name" : "manage-authorization", + "description" : "${role_manage-authorization}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "16a748fa-767f-414d-9eee-f4ea861c3b10", + "name" : "view-events", + "description" : "${role_view-events}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "72d41ecc-f412-4eb8-91ea-4eb65fcff477", + "name" : "view-identity-providers", + "description" : "${role_view-identity-providers}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "d25034d5-0a0c-4c09-b6cc-a10717c3fd7d", + "name" : "view-authorization", + "description" : "${role_view-authorization}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "34b9a683-5266-47d1-945a-91dc86365fde", + "name" : "view-realm", + "description" : "${role_view-realm}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "257cc5fe-9af4-46b2-ac7e-75b322554a4c", + "name" : "manage-events", + "description" : "${role_manage-events}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "614a905a-e950-4ecf-b508-b18963f6955c", + "name" : "query-clients", + "description" : "${role_query-clients}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "987d1e58-f5f9-4dd5-a36f-24a881dbc96f", + "name" : "manage-identity-providers", + "description" : "${role_manage-identity-providers}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "4c9aa670-b51e-4fcd-a0e1-09eaa72fb60e", + "name" : "query-users", + "description" : "${role_query-users}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "c2e48179-563e-408c-a73a-6315e43f3dd0", + "name" : "query-groups", + "description" : "${role_query-groups}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "527d8142-8b92-4626-8b42-297567b3cd65", + "name" : "manage-realm", + "description" : "${role_manage-realm}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "1b0a4571-dcdb-41d6-b43a-93cd878c30dc", + "name" : "impersonation", + "description" : "${role_impersonation}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "69137655-7229-4b50-94ce-62f4fd86948b", + "name" : "manage-users", + "description" : "${role_manage-users}", + "composite" : false, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + }, { + "id" : "38ae5226-3113-4498-839b-fbe271e540f6", + "name" : "view-clients", + "description" : "${role_view-clients}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-clients" ] + } + }, + "clientRole" : true, + "containerId" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "attributes" : { } + } ], + "security-admin-console" : [ ], + "admin-cli" : [ ], + "account-console" : [ ], + "broker" : [ { + "id" : "1bbd06bc-8aa4-4e3a-8ee4-be78d2f78499", + "name" : "read-token", + "description" : "${role_read-token}", + "composite" : false, + "clientRole" : true, + "containerId" : "31eb8481-2800-4c8e-869b-dc579b26f3df", + "attributes" : { } + } ], + "account" : [ { + "id" : "cd5feec3-45e1-44c3-83fe-6f793455a3d8", + "name" : "manage-consent", + "description" : "${role_manage-consent}", + "composite" : true, + "composites" : { + "client" : { + "account" : [ "view-consent" ] + } + }, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "994c1232-c6a6-486c-814d-67d66193f392", + "name" : "view-applications", + "description" : "${role_view-applications}", + "composite" : false, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "7d882933-3a23-424c-bb34-cb737407604c", + "name" : "view-groups", + "description" : "${role_view-groups}", + "composite" : false, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "3b4581a7-7bc9-4f1c-b3a9-957e46fffba0", + "name" : "view-profile", + "description" : "${role_view-profile}", + "composite" : false, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "6d629beb-a790-4353-83a9-d826dea6b97c", + "name" : "manage-account-links", + "description" : "${role_manage-account-links}", + "composite" : false, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "a997e7bf-01f3-4a01-89cd-a1aacf5f1020", + "name" : "view-consent", + "description" : "${role_view-consent}", + "composite" : false, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "d83522dd-7a9d-4ca9-8129-3b073fe8b5d2", + "name" : "manage-account", + "description" : "${role_manage-account}", + "composite" : true, + "composites" : { + "client" : { + "account" : [ "manage-account-links" ] + } + }, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + }, { + "id" : "50fcba29-be64-4980-be93-e13dd043032b", + "name" : "delete-account", + "description" : "${role_delete-account}", + "composite" : false, + "clientRole" : true, + "containerId" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "attributes" : { } + } ] + } + }, + "groups" : [ ], + "defaultRole" : { + "id" : "804d1742-aaf9-409e-8b00-05b4d2e270d7", + "name" : "default-roles-required-action", + "description" : "${role_default-roles}", + "composite" : true, + "clientRole" : false, + "containerId" : "6d1204b3-dd74-474f-be22-96839f19eed3" + }, + "requiredCredentials" : [ "password" ], + "otpPolicyType" : "totp", + "otpPolicyAlgorithm" : "HmacSHA1", + "otpPolicyInitialCounter" : 0, + "otpPolicyDigits" : 6, + "otpPolicyLookAheadWindow" : 1, + "otpPolicyPeriod" : 30, + "otpPolicyCodeReusable" : false, + "otpSupportedApplications" : [ "totpAppFreeOTPName", "totpAppGoogleName", "totpAppMicrosoftAuthenticatorName" ], + "localizationTexts" : { }, + "webAuthnPolicyRpEntityName" : "keycloak", + "webAuthnPolicySignatureAlgorithms" : [ "ES256" ], + "webAuthnPolicyRpId" : "", + "webAuthnPolicyAttestationConveyancePreference" : "not specified", + "webAuthnPolicyAuthenticatorAttachment" : "not specified", + "webAuthnPolicyRequireResidentKey" : "not specified", + "webAuthnPolicyUserVerificationRequirement" : "not specified", + "webAuthnPolicyCreateTimeout" : 0, + "webAuthnPolicyAvoidSameAuthenticatorRegister" : false, + "webAuthnPolicyAcceptableAaguids" : [ ], + "webAuthnPolicyExtraOrigins" : [ ], + "webAuthnPolicyPasswordlessRpEntityName" : "keycloak", + "webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ], + "webAuthnPolicyPasswordlessRpId" : "", + "webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified", + "webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified", + "webAuthnPolicyPasswordlessRequireResidentKey" : "not specified", + "webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified", + "webAuthnPolicyPasswordlessCreateTimeout" : 0, + "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false, + "webAuthnPolicyPasswordlessAcceptableAaguids" : [ ], + "webAuthnPolicyPasswordlessExtraOrigins" : [ ], + "scopeMappings" : [ { + "clientScope" : "offline_access", + "roles" : [ "offline_access" ] + } ], + "clientScopeMappings" : { + "account" : [ { + "client" : "account-console", + "roles" : [ "manage-account", "view-groups" ] + } ] + }, + "clients" : [ { + "id" : "481ced1f-c380-4c4f-8b02-5e78ae4a2822", + "clientId" : "account", + "name" : "${client_account}", + "rootUrl" : "${authBaseUrl}", + "baseUrl" : "/realms/required-action/account/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ "/realms/required-action/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "5f71f314-d2df-4c86-b34f-3a03f81cfcfa", + "clientId" : "account-console", + "name" : "${client_account-console}", + "rootUrl" : "${authBaseUrl}", + "baseUrl" : "/realms/required-action/account/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ "/realms/required-action/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+", + "pkce.code.challenge.method" : "S256" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "d0c5344d-492e-44a4-af16-8ba21b9453d5", + "name" : "audience resolve", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-audience-resolve-mapper", + "consentRequired" : false, + "config" : { } + } ], + "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "d65684a2-67c5-46bc-b40c-6249e460003b", + "clientId" : "admin-cli", + "name" : "${client_admin-cli}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : false, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "31eb8481-2800-4c8e-869b-dc579b26f3df", + "clientId" : "broker", + "name" : "${client_broker}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "940b769f-8de4-4b8d-86ed-a8f4acc8c252", + "clientId" : "realm-management", + "name" : "${client_realm-management}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "8a8c87e9-7338-4940-ae28-a624bd5bd9ff", + "clientId" : "security-admin-console", + "name" : "${client_security-admin-console}", + "rootUrl" : "${authAdminUrl}", + "baseUrl" : "/admin/required-action/console/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ "/admin/required-action/console/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+", + "pkce.code.challenge.method" : "S256" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "21066f66-c44e-42b5-b952-3139e3832b72", + "name" : "locale", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "locale", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "locale", + "jsonType.label" : "String" + } + } ], + "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + } ], + "clientScopes" : [ { + "id" : "8c818f6d-8f2b-4ecf-889e-119e54b42f0c", + "name" : "role_list", + "description" : "SAML role list", + "protocol" : "saml", + "attributes" : { + "consent.screen.text" : "${samlRoleListScopeConsentText}", + "display.on.consent.screen" : "true" + }, + "protocolMappers" : [ { + "id" : "6dbe57be-bd86-42e6-a6c3-72eb85c7e468", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + } ] + }, { + "id" : "61acfc87-863d-4b59-88b5-903ae6837d02", + "name" : "acr", + "description" : "OpenID Connect scope for add acr (authentication context class reference) to the token", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "false" + }, + "protocolMappers" : [ { + "id" : "085bb380-2c42-4d0a-ad67-54a948ed1807", + "name" : "acr loa level", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-acr-mapper", + "consentRequired" : false, + "config" : { + "id.token.claim" : "true", + "introspection.token.claim" : "true", + "access.token.claim" : "true", + "userinfo.token.claim" : "true" + } + } ] + }, { + "id" : "d68267ae-53ee-448a-beb4-5d777491df30", + "name" : "address", + "description" : "OpenID Connect built-in scope: address", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${addressScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "78bfb0c2-0fe7-4413-8ef4-5d06a9f61a4b", + "name" : "address", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-address-mapper", + "consentRequired" : false, + "config" : { + "user.attribute.formatted" : "formatted", + "user.attribute.country" : "country", + "introspection.token.claim" : "true", + "user.attribute.postal_code" : "postal_code", + "userinfo.token.claim" : "true", + "user.attribute.street" : "street", + "id.token.claim" : "true", + "user.attribute.region" : "region", + "access.token.claim" : "true", + "user.attribute.locality" : "locality" + } + } ] + }, { + "id" : "c5591fcd-10da-49ea-ae9c-c57258090d2a", + "name" : "roles", + "description" : "OpenID Connect scope for add user roles to the access token", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${rolesScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "b0bed8ec-ec4a-4c20-b112-f4cb79c6ed32", + "name" : "realm roles", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-realm-role-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "multivalued" : "true", + "user.attribute" : "foo", + "access.token.claim" : "true", + "claim.name" : "realm_access.roles", + "jsonType.label" : "String" + } + }, { + "id" : "d345638c-5c78-460c-9bdf-5d845ac3aefa", + "name" : "client roles", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-client-role-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "multivalued" : "true", + "user.attribute" : "foo", + "access.token.claim" : "true", + "claim.name" : "resource_access.${client_id}.roles", + "jsonType.label" : "String" + } + }, { + "id" : "df4b585e-4b26-45dc-847f-a53cc2f6a7e3", + "name" : "audience resolve", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-audience-resolve-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "194f945f-f039-4dc1-a6a6-3dc2543d1e24", + "name" : "microprofile-jwt", + "description" : "Microprofile - JWT built-in scope", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "false" + }, + "protocolMappers" : [ { + "id" : "bdaaf03c-4e69-4e66-8d42-c724d3c75b00", + "name" : "upn", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "upn", + "jsonType.label" : "String" + } + }, { + "id" : "e98bdc55-d276-48cf-89d2-447cd2aaf464", + "name" : "groups", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-realm-role-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "multivalued" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "foo", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "groups", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "837ffc86-a47f-473a-a409-43e0baf64fce", + "name" : "profile", + "description" : "OpenID Connect built-in scope: profile", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${profileScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "e8514d42-292d-4111-9827-f5d80a475b39", + "name" : "nickname", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "nickname", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "nickname", + "jsonType.label" : "String" + } + }, { + "id" : "cae698b2-9615-41ff-91a2-e2ed0e73bbac", + "name" : "website", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "website", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "website", + "jsonType.label" : "String" + } + }, { + "id" : "9621d327-71ca-4897-9404-a1061e2f29b2", + "name" : "locale", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "locale", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "locale", + "jsonType.label" : "String" + } + }, { + "id" : "739227b7-c148-4ad0-9059-03f5aa4ea864", + "name" : "middle name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "middleName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "middle_name", + "jsonType.label" : "String" + } + }, { + "id" : "29282b67-9ee3-4c07-b7a7-433797f0fa4a", + "name" : "gender", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "gender", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "gender", + "jsonType.label" : "String" + } + }, { + "id" : "83df5c22-f874-4e37-a4ee-3da1ae6f528a", + "name" : "zoneinfo", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "zoneinfo", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "zoneinfo", + "jsonType.label" : "String" + } + }, { + "id" : "38dab969-7d3f-4ced-81ca-306573707dd5", + "name" : "birthdate", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "birthdate", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "birthdate", + "jsonType.label" : "String" + } + }, { + "id" : "f4a103e3-63be-4717-86f3-1e85ec3bd0e6", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : false, + "config" : { + "id.token.claim" : "true", + "introspection.token.claim" : "true", + "access.token.claim" : "true", + "userinfo.token.claim" : "true" + } + }, { + "id" : "93495e94-fc3e-4d18-b50e-e48fabbff72b", + "name" : "picture", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "picture", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "picture", + "jsonType.label" : "String" + } + }, { + "id" : "ffcc9388-15f0-499c-8147-910b1700cf4c", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "580c49c1-837c-4895-9fdc-6f216fb6d2a1", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "a8caecbc-d930-4838-9628-dde776243156", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "954a21b2-165c-4eba-8158-b4680092a35a", + "name" : "updated at", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "updatedAt", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "updated_at", + "jsonType.label" : "long" + } + }, { + "id" : "8d8c768f-15c5-4c47-94a0-5c5c41b84abd", + "name" : "profile", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "profile", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "profile", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "48af82a4-fe11-423c-ba3a-54777a1b82ec", + "name" : "web-origins", + "description" : "OpenID Connect scope for add allowed web origins to the access token", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "false", + "consent.screen.text" : "" + }, + "protocolMappers" : [ { + "id" : "86833e35-5b7c-4848-9dd5-6d0c4e765aa5", + "name" : "allowed web origins", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-allowed-origins-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "0656ec7e-4ba0-4e8a-a15a-6935c37a9b93", + "name" : "offline_access", + "description" : "OpenID Connect built-in scope: offline_access", + "protocol" : "openid-connect", + "attributes" : { + "consent.screen.text" : "${offlineAccessScopeConsentText}", + "display.on.consent.screen" : "true" + } + }, { + "id" : "0ecbf793-ce72-4e9a-8d83-92f4eceb3c1c", + "name" : "email", + "description" : "OpenID Connect built-in scope: email", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${emailScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "34b9e41a-423f-4dd6-b942-37b71552d656", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "1c596a45-f98e-4e35-bcd7-d7e0588517fa", + "name" : "email verified", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "emailVerified", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email_verified", + "jsonType.label" : "boolean" + } + } ] + }, { + "id" : "fe13dc1c-16e0-4611-86e4-b4e2694830f7", + "name" : "phone", + "description" : "OpenID Connect built-in scope: phone", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "consent.screen.text" : "${phoneScopeConsentText}" + }, + "protocolMappers" : [ { + "id" : "16e7d078-f7f1-4846-9ec0-043f1cd87bf3", + "name" : "phone number", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "phoneNumber", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "phone_number", + "jsonType.label" : "String" + } + }, { + "id" : "baba8fed-86ed-4f1c-9f31-fcbbecf2ee0b", + "name" : "phone number verified", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "introspection.token.claim" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "phoneNumberVerified", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "phone_number_verified", + "jsonType.label" : "boolean" + } + } ] + } ], + "defaultDefaultClientScopes" : [ "role_list", "profile", "email", "roles", "web-origins", "acr" ], + "defaultOptionalClientScopes" : [ "offline_access", "address", "phone", "microprofile-jwt" ], + "browserSecurityHeaders" : { + "contentSecurityPolicyReportOnly" : "", + "xContentTypeOptions" : "nosniff", + "referrerPolicy" : "no-referrer", + "xRobotsTag" : "none", + "xFrameOptions" : "SAMEORIGIN", + "contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "xXSSProtection" : "1; mode=block", + "strictTransportSecurity" : "max-age=31536000; includeSubDomains" + }, + "smtpServer" : { }, + "eventsEnabled" : false, + "eventsListeners" : [ "jboss-logging" ], + "enabledEventTypes" : [ ], + "adminEventsEnabled" : false, + "adminEventsDetailsEnabled" : false, + "identityProviders" : [ ], + "identityProviderMappers" : [ ], + "components" : { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ { + "id" : "cdedba02-9c4b-43ad-b638-6f37708d0fcd", + "name" : "Allowed Client Scopes", + "providerId" : "allowed-client-templates", + "subType" : "authenticated", + "subComponents" : { }, + "config" : { + "allow-default-scopes" : [ "true" ] + } + }, { + "id" : "db8eeff0-6c2b-496d-9710-e8d9d5df8f2c", + "name" : "Full Scope Disabled", + "providerId" : "scope", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { } + }, { + "id" : "726a27c2-c88c-48f0-9bf1-a7e1bfe6315c", + "name" : "Max Clients Limit", + "providerId" : "max-clients", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "max-clients" : [ "200" ] + } + }, { + "id" : "3fc18d76-359d-4b4e-87ed-691ef36b6088", + "name" : "Allowed Protocol Mapper Types", + "providerId" : "allowed-protocol-mappers", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "saml-user-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-address-mapper", "saml-role-list-mapper", "oidc-usermodel-property-mapper", "saml-user-property-mapper", "oidc-usermodel-attribute-mapper" ] + } + }, { + "id" : "0047597e-631e-4d3c-a1e8-19b181c9cf68", + "name" : "Allowed Protocol Mapper Types", + "providerId" : "allowed-protocol-mappers", + "subType" : "authenticated", + "subComponents" : { }, + "config" : { + "allowed-protocol-mapper-types" : [ "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-address-mapper", "oidc-full-name-mapper", "oidc-usermodel-attribute-mapper", "oidc-usermodel-property-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper" ] + } + }, { + "id" : "b8aa76ca-61ef-4ab7-a516-08c31a7af62a", + "name" : "Trusted Hosts", + "providerId" : "trusted-hosts", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "host-sending-registration-request-must-match" : [ "true" ], + "client-uris-must-match" : [ "true" ] + } + }, { + "id" : "85ee92f9-7919-4230-a7ec-614a14adeef5", + "name" : "Consent Required", + "providerId" : "consent-required", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { } + }, { + "id" : "7fc80f56-c5cf-485e-81ff-ed59c75a0741", + "name" : "Allowed Client Scopes", + "providerId" : "allowed-client-templates", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "allow-default-scopes" : [ "true" ] + } + } ], + "org.keycloak.keys.KeyProvider" : [ { + "id" : "dfbc7b81-1627-4609-9ff6-8c5560c6fc21", + "name" : "rsa-generated", + "providerId" : "rsa-generated", + "subComponents" : { }, + "config" : { + "privateKey" : [ "MIIEogIBAAKCAQEAyz8jJRO3G8RyX5OcRUoRnVf0fx8hw1bhh/aA77alGCdtV0lhgSyGpC6wAjQPHKJxpX2qAMeJuPx37WVMmhR+HR65sOCYPbXj2hUTFqEkfsEEGWq8Yxk3nR2+eMpOT4QZtEAvX5609kyW/O6QgtcbCsYlKlEJk46ttjFqNWkgGpvnWluIqoQRGJoxTx/q3Vfr3eHf16WJJBp8nIWebyY+Bpo0fdQRrFIpjDPq+6XpeEEaRJEKey3L4fGPPABycx+D/XYKK0cFK3vKjz4wxs2tqXUuos7V2ojhTHUiq4pGewXdqh3wA/KanFzt6RwNeT0Inx786Z3F+Cfw9iCXLT9wYQIDAQABAoIBAFHjD8Fd9p3Q4bXhTopaI8uthrv66or9w6MYbW1nPJAFPpf24Dp/moWmq9JPcDE8v6YKAccLndDyo0z5zcmcbQ1FdlItwxjF4lXYvNaWuRH6qTCmYN1aaR47wCSBediuo/6MB6oyUr2TMRgZ9A5LJUGLgKjSepXBW/q2YRDA2KbvJbh3m6fDvN0cYk85N25LkQCZHS19eTFhhOrbgKspWhPh9KZ5KA9dDnYB/TsOFaYNnxZMMdeJ5OWBBTOV0VrUul+HYQMUSfnzq+z79o8MLIkp5k0fs4MIDeF7kfz4JbpIv7rloJIAOYnRvC1cs9Oxgh3I24Ysdk+WBIkk/n7HyVsCgYEA+yL69xIce6L3vDyoqMsckfe0k+Upg7L2eTArvYIcNieMd4sHLr6FAVtREUQz1xAPjpkcX9vbhgygN715anLJog+c4FbSUQNMhV64AnqHwajpFPcGCwHsn0hsp0sHB9GZbm6M64nNa1gOKT/XXlVMSb4WMMwumFVgJ7nTQF6YLXMCgYEAzy69h/WckUcG3N++mrwagCQFsYdks8ZdhKw3BNN7bMNqtgRYjBK+iIchnZmwByFIwnkrEWete2uXU09IMQ89wPZoJQpzdlKf3PkbVonK4fWY1xuMDgNWReh3CHe8isy/qe+4rS8hNYyI/5GqjQ65S4upmdH5zBYBje/686fJddsCgYANItNFwSjEPs3+hp271oP0DqTfZ4k4XlAOHrrq+rdHDeKHDjqd81E5tPEUmiCsCycFKnUVfoaJCHgI8lw7eS2a0H5ALcpqemWyRDYTyxz2wEMQ2arzQHKEEmG8jmwbuJbx885jM54PE1gKSFCXmpaW9N5sRwHY7f5Nlaa7IzeKiQKBgAMmDrNWRD7g+XW54MexPCXeZkfAawNgbGNryppELIgGoESL5FycnFCu3Q/sGgTBuL1b4g+tp7FMfUxC1DIKrUGVfRezBPYzY0KUdpnmFjNA7EW4oXRFELaXRdfXGgJyAievAPuAz9xkemCH8jOama5QPQ+dZVJ4syVZFFNHpYQpAoGAHXRkywDBvxb/R0q+/tZh0yjzB1c9+eKBc0XBJnfytL5YPC8mzCY6FhqFApewpORQyQMP/6ZX24HSGe7FUjjpe+nbLu708oUw0d3h6PdLjda17+Rh0O/zuOOhKwYY14VzvAmBjrjN3pwZ6pkEmW7OdQCIChskXJmAlYVo89suJ2c=" ], + "keyUse" : [ "SIG" ], + "certificate" : [ "MIICrTCCAZUCBgGSQ0hD5jANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA9yZXF1aXJlZC1hY3Rpb24wHhcNMjQwOTMwMTQxMjQyWhcNMzQwOTMwMTQxNDIyWjAaMRgwFgYDVQQDDA9yZXF1aXJlZC1hY3Rpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLPyMlE7cbxHJfk5xFShGdV/R/HyHDVuGH9oDvtqUYJ21XSWGBLIakLrACNA8conGlfaoAx4m4/HftZUyaFH4dHrmw4Jg9tePaFRMWoSR+wQQZarxjGTedHb54yk5PhBm0QC9fnrT2TJb87pCC1xsKxiUqUQmTjq22MWo1aSAam+daW4iqhBEYmjFPH+rdV+vd4d/XpYkkGnychZ5vJj4GmjR91BGsUimMM+r7pel4QRpEkQp7Lcvh8Y88AHJzH4P9dgorRwUre8qPPjDGza2pdS6iztXaiOFMdSKrikZ7Bd2qHfAD8pqcXO3pHA15PQifHvzpncX4J/D2IJctP3BhAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAZt5mCaF2sZF9wpERfTdXTGSgf0U03ihaEcfsTJrZuclcy3YyD+/20HnMzBpsQ9Yyn1H4juBfVXBjj7jFvKp6V53l80vsyGb27lJejhQUjyolgtF0oTAvxXxNGVoEmQw6a63Ah2gQqd0gOyXUd8SIfz4ZRW2Y/j/PHQD6uqU4Fb8xu9nGWh18WECj3/uoPH/DVnEcIZD3gJKkcC347lA8GnCiW0hkXBI4W5y6R+VAg3sDzn+5nkeW0L7hMvl43xruz9ffPMoZjeJm40OLiCAiLHN+W5IavDhdu5UDQWowDb8OLP8e4GQ6OSjVFTUE7p8tVufP5W6S91UOHeHSEe5lI=" ], + "priority" : [ "100" ] + } + }, { + "id" : "1eed8b04-a1cb-433c-a0d7-ef80f3f8fc61", + "name" : "aes-generated", + "providerId" : "aes-generated", + "subComponents" : { }, + "config" : { + "kid" : [ "9a74fc2f-2a1a-4c13-8d48-861c9b99b883" ], + "secret" : [ "SUda6U6nGDMD6dimITVPbw" ], + "priority" : [ "100" ] + } + }, { + "id" : "a35d916b-1d3e-427d-aa4d-c00c0e66fef4", + "name" : "hmac-generated", + "providerId" : "hmac-generated", + "subComponents" : { }, + "config" : { + "kid" : [ "c0fbc628-3d38-42f4-8eff-a57c9231d67a" ], + "secret" : [ "FzJnfnthnlhr3lUKM1V44CSAcbR4d8ff0z7yIjm6Bv8ijUedsKKV_aqaHX6PgMgdivXisfXRU3E5YS6wfO_CIw" ], + "priority" : [ "100" ], + "algorithm" : [ "HS256" ] + } + }, { + "id" : "22492d1a-7bbd-4812-9224-5aee3045294b", + "name" : "rsa-enc-generated", + "providerId" : "rsa-enc-generated", + "subComponents" : { }, + "config" : { + "privateKey" : [ "MIIEpAIBAAKCAQEAuSCftU3gpJQD/Izq70TGFd9eJRlsGcJ5DL6sV/uIWf3i55uMh7ZaSVxnBzBXijsiTzdOqwMFXzHcSYPfqoXwBlILhD74iDwYgtkq3e48EnjSUvt+RRlkQDW6l+9cqKD81pcn6NqY1Yxz1wG8liHd9pUsTY43JjhdNzeWKByYJNCsHPAWvKUjZGLIbk5QlZC7SkLC49bv+BbQZBdiLDjNXo2drCIIuAfRFJmBePkGVJEV2+ps7ajgMJWkM1s8hMV/NdIIX0HdspBrv/4isDbsFmQS5htpgJvVrUWPdvzyogfOaHSRMLahy9+Vr+as9n6BCD2bX9MLg4fKgTNo9/L3SwIDAQABAoIBADoipRS17pAwTSovhI173uq6eOGUoK5cNFBMxmlgu3prMKjD37c0jBjSlCYdR7hIhqcyupkYe0TgLwnFCGWP5wbNGAHBFqINoTLiCMSlziaM25ukj4wag7FoTf7tc38fAxdOY4GLuAgDsdL4oCTTYNVRFhcKzIXLmHZBFf3lsN+KQG6QRW+negl60h5op2rYcAmB9yzJiEKCJa8v7zRa4fhBn4C2ndmrJeXHj2+avVZMUGejf2VEnVXqh1l7mJ1+qoD4Kn/hiWVj3ZKANmOkkIbLBw3wwpBbtIkfxlFW7RsTedBL7Vo3dDH3Lytl/e/tJV48544XGKEcXZdP9qbuS6UCgYEA9buEt0B1RIx3Iwxzvb7dbIW7U7+HuUXMu/xZEfRp36RWiwMlNlle/5AJwDBVTDF06gd5tIrhXKjZLGRrs68rl09gGc4om/lTRFKFmB22oB4Bd6B9xAKZ8HsrkBXhOnn1jEb0yeZc4mlbNCjoIek7Zi2HwmydpwGteyiK1mcWKk0CgYEAwNzXrDwCX2NgHFun4xHpYzShAApFqPKhjE5ygv1/5l43JoiLmGgpr2rVAzCEqvFHFt1URAW1/5osJESlbzWAh8hb+9as71D/RUn8NYQ3MN4WqygppAKwwEXVBJ71PXiWctHcpvDt5yWfqgVCmuALpGMbOkD8zIAmESFyjol2Q/cCgYEAtykTbkgEYJjWgHBaoPbwMmCn1W+wqZ9mUERy25gzhjgHLcylYxJQZesl6XPdUFKY04vI4pKWEivk3FrpkGAj/L90YSeySzgXIZjk7RJQup5C97jPpVdPCNm2CcrVO3IGXY3SDd/AIh7nlURcalJfLPUI+RlelUoB1gfNHKxv8A0CgYAcnOcWc3S6qCirLGH1C0Q/5p/4PI3nKdAT29ObYXanO9Ucz2c+fj2o+8WMipc0MUWlu8JzsRE2Ua4410JgBGUEQBJ9g3T2sGKe6gIUAoCZrGlajUPYRFnqvLGE1Px3WTug30fIMLhq8acFd3BRP+oaQmXYt6mJwX1kTz0KrpQwMwKBgQDVxOgQehMs2srTEW8FeI09ATsRPu7WQsIQYuo3s8hghELY0/2XUtaLQVq16aWgn4ajl7OsmFQc5kxvE5uuCee2x4lc0nQzw5d9Sn2qkJlavwC3n/WA0f8dBYV0Id7He73XL5WMyUVuwWpwiT37QYrmtLpAnQwa6iH+jHmjEyTTaA==" ], + "keyUse" : [ "ENC" ], + "certificate" : [ "MIICrTCCAZUCBgGSQ0hELDANBgkqhkiG9w0BAQsFADAaMRgwFgYDVQQDDA9yZXF1aXJlZC1hY3Rpb24wHhcNMjQwOTMwMTQxMjQyWhcNMzQwOTMwMTQxNDIyWjAaMRgwFgYDVQQDDA9yZXF1aXJlZC1hY3Rpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5IJ+1TeCklAP8jOrvRMYV314lGWwZwnkMvqxX+4hZ/eLnm4yHtlpJXGcHMFeKOyJPN06rAwVfMdxJg9+qhfAGUguEPviIPBiC2Srd7jwSeNJS+35FGWRANbqX71yooPzWlyfo2pjVjHPXAbyWId32lSxNjjcmOF03N5YoHJgk0Kwc8Ba8pSNkYshuTlCVkLtKQsLj1u/4FtBkF2IsOM1ejZ2sIgi4B9EUmYF4+QZUkRXb6mztqOAwlaQzWzyExX810ghfQd2ykGu//iKwNuwWZBLmG2mAm9WtRY92/PKiB85odJEwtqHL35Wv5qz2foEIPZtf0wuDh8qBM2j38vdLAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAJ6UEBe3gqGQ5juBVVyovv5Uao0HfdTOWqHBPuUPXopTqeeAW6eVmfFh10e8JltnlfafT1mPfd3nDYD7JPdlKMMlZdL92DoYTx45vtld59Nk72fwf5lmZ2xc6T4kJG8MPH0mNf5oroTTZ71SE/pfEbhAMBE3I3e3977n5HJu+00Ir4DB1xaEV5155BW8SY0Azx/ekaO2bWf1cbropul9ZAxvq0QJQjKPwVXFAWf1r9M0MMCEMeqJKYh2rV/im/JJm/76XuxahKgy2yKrwXkwUKeaa+lxhnEWsvHMtMUa6AJBuFi4MmWtvbxcC5xHresKERhu0aToXszNHBYtwoBlCjc=" ], + "priority" : [ "100" ], + "algorithm" : [ "RSA-OAEP" ] + } + } ] + }, + "internationalizationEnabled" : false, + "supportedLocales" : [ ], + "authenticationFlows" : [ { + "id" : "6b68fc0a-9a5b-4802-8905-5be8f1f802b3", + "alias" : "Account verification options", + "description" : "Method with which to verity the existing account", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-email-verification", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Verify Existing Account by Re-authentication", + "userSetupAllowed" : false + } ] + }, { + "id" : "392e1ee1-ea41-4032-80b0-43116e0def51", + "alias" : "AuthN", + "description" : "", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : false, + "authenticationExecutions" : [ { + "authenticator" : "auth-username-password-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 0, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorConfig" : "Req", + "authenticator" : "required-action-authenticator", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 1, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "05267f8b-ada8-4f80-a05e-9785b4d22e1a", + "alias" : "Browser - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-otp-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "d8efa2e8-72b0-45a2-a17c-5750536a7e89", + "alias" : "Direct Grant - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "direct-grant-validate-otp", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "d7b1fee5-e630-4535-a5ae-296ab22c5756", + "alias" : "First broker login - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-otp-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "dcd597cc-452a-408e-9ed7-6eb90f7f97b7", + "alias" : "Handle Existing Account", + "description" : "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-confirm-link", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Account verification options", + "userSetupAllowed" : false + } ] + }, { + "id" : "13e2ebf0-0898-4f9e-8463-69beb652ee62", + "alias" : "Required-Action-Browser FLOW", + "description" : "", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : false, + "authenticationExecutions" : [ { + "authenticator" : "auth-cookie", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 0, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 1, + "autheticatorFlow" : true, + "flowAlias" : "AuthN", + "userSetupAllowed" : false + } ] + }, { + "id" : "c827ab09-f810-465b-b982-bf936fb46c3a", + "alias" : "Reset - Conditional OTP", + "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "reset-otp", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "be5a6343-d99e-4657-bf92-f02fb6c4c280", + "alias" : "User creation or linking", + "description" : "Flow for the existing/non-existing user alternatives", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticatorConfig" : "create unique user config", + "authenticator" : "idp-create-user-if-unique", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Handle Existing Account", + "userSetupAllowed" : false + } ] + }, { + "id" : "be8d8810-2f64-4665-b68c-6b6aaf6773ab", + "alias" : "Verify Existing Account by Re-authentication", + "description" : "Reauthentication of existing account", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-username-password-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "First broker login - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "40646673-4496-4aa4-866b-0a8be6f0a37d", + "alias" : "browser", + "description" : "browser based authentication", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-cookie", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-spnego", + "authenticatorFlow" : false, + "requirement" : "DISABLED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "identity-provider-redirector", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 25, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 30, + "autheticatorFlow" : true, + "flowAlias" : "forms", + "userSetupAllowed" : false + } ] + }, { + "id" : "8d59560c-9cab-43b1-a4e9-177785fe3935", + "alias" : "clients", + "description" : "Base authentication for clients", + "providerId" : "client-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "client-secret", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "client-jwt", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "client-secret-jwt", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 30, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "client-x509", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 40, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "1f374eeb-8749-4ad4-bfc9-dd1c9d2f49f6", + "alias" : "direct grant", + "description" : "OpenID Connect Resource Owner Grant", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "direct-grant-validate-username", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "direct-grant-validate-password", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 30, + "autheticatorFlow" : true, + "flowAlias" : "Direct Grant - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "9bce60a9-3584-478d-bcc0-41b926a4caad", + "alias" : "docker auth", + "description" : "Used by Docker clients to authenticate against the IDP", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "docker-http-basic-authenticator", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "ecfeb6fc-71b6-40fb-a9ad-7ea6843bba4f", + "alias" : "first broker login", + "description" : "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticatorConfig" : "review profile config", + "authenticator" : "idp-review-profile", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "User creation or linking", + "userSetupAllowed" : false + } ] + }, { + "id" : "c0f5845e-e01e-4ed8-a213-59546894877b", + "alias" : "forms", + "description" : "Username, password, otp and other auth forms.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-username-password-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Browser - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "bb4e2b10-64fc-4d36-be54-fd2feadbe5fe", + "alias" : "registration", + "description" : "registration flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-page-form", + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : true, + "flowAlias" : "registration form", + "userSetupAllowed" : false + } ] + }, { + "id" : "2c12bf9a-94f8-4da6-848f-9623170a5bb2", + "alias" : "registration form", + "description" : "registration form", + "providerId" : "form-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-user-creation", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "registration-password-action", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 50, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "registration-recaptcha-action", + "authenticatorFlow" : false, + "requirement" : "DISABLED", + "priority" : 60, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "a8886f6f-a820-4764-8b22-7ef44213235c", + "alias" : "reset credentials", + "description" : "Reset credentials for a user if they forgot their password or something", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "reset-credentials-choose-user", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "reset-credential-email", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "reset-password", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 30, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 40, + "autheticatorFlow" : true, + "flowAlias" : "Reset - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "30ffba64-fe30-411b-9229-392e311b28f9", + "alias" : "saml ecp", + "description" : "SAML ECP Profile Authentication Flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "http-basic-authenticator", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + } ], + "authenticatorConfig" : [ { + "id" : "9b46ecb5-2b16-40f0-beae-4fc4ba905292", + "alias" : "Req", + "config" : { + "REQUIRED_ACTION" : "TERMS_AND_CONDITIONS" + } + }, { + "id" : "4514cd86-3494-44ff-9f8a-60ecf7c71c0b", + "alias" : "create unique user config", + "config" : { + "require.password.update.after.registration" : "false" + } + }, { + "id" : "6a0a4b1c-ac61-4e82-a00a-6a65a9736f71", + "alias" : "review profile config", + "config" : { + "update.profile.on.first.login" : "missing" + } + } ], + "requiredActions" : [ { + "alias" : "CONFIGURE_TOTP", + "name" : "Configure OTP", + "providerId" : "CONFIGURE_TOTP", + "enabled" : true, + "defaultAction" : false, + "priority" : 10, + "config" : { } + }, { + "alias" : "TERMS_AND_CONDITIONS", + "name" : "Terms and Conditions", + "providerId" : "TERMS_AND_CONDITIONS", + "enabled" : true, + "defaultAction" : false, + "priority" : 20, + "config" : { } + }, { + "alias" : "UPDATE_PASSWORD", + "name" : "Update Password", + "providerId" : "UPDATE_PASSWORD", + "enabled" : true, + "defaultAction" : false, + "priority" : 30, + "config" : { } + }, { + "alias" : "UPDATE_PROFILE", + "name" : "Update Profile", + "providerId" : "UPDATE_PROFILE", + "enabled" : true, + "defaultAction" : false, + "priority" : 40, + "config" : { } + }, { + "alias" : "VERIFY_EMAIL", + "name" : "Verify Email", + "providerId" : "VERIFY_EMAIL", + "enabled" : true, + "defaultAction" : false, + "priority" : 50, + "config" : { } + }, { + "alias" : "delete_account", + "name" : "Delete Account", + "providerId" : "delete_account", + "enabled" : false, + "defaultAction" : false, + "priority" : 60, + "config" : { } + }, { + "alias" : "webauthn-register", + "name" : "Webauthn Register", + "providerId" : "webauthn-register", + "enabled" : true, + "defaultAction" : false, + "priority" : 70, + "config" : { } + }, { + "alias" : "webauthn-register-passwordless", + "name" : "Webauthn Register Passwordless", + "providerId" : "webauthn-register-passwordless", + "enabled" : true, + "defaultAction" : false, + "priority" : 80, + "config" : { } + }, { + "alias" : "update_user_locale", + "name" : "Update User Locale", + "providerId" : "update_user_locale", + "enabled" : true, + "defaultAction" : false, + "priority" : 1000, + "config" : { } + } ], + "browserFlow" : "Required-Action-Browser FLOW", + "registrationFlow" : "registration", + "directGrantFlow" : "direct grant", + "resetCredentialsFlow" : "reset credentials", + "clientAuthenticationFlow" : "clients", + "dockerAuthenticationFlow" : "docker auth", + "attributes" : { + "cibaBackchannelTokenDeliveryMode" : "poll", + "cibaExpiresIn" : "120", + "cibaAuthRequestedUserHint" : "login_hint", + "oauth2DeviceCodeLifespan" : "600", + "clientOfflineSessionMaxLifespan" : "0", + "oauth2DevicePollingInterval" : "5", + "clientSessionIdleTimeout" : "0", + "parRequestUriLifespan" : "60", + "clientSessionMaxLifespan" : "0", + "clientOfflineSessionIdleTimeout" : "0", + "cibaInterval" : "5", + "realmReusableOtpCode" : "false" + }, + "keycloakVersion" : "23.0.4", + "userManagedAccessAllowed" : false, + "clientProfiles" : { + "profiles" : [ ] + }, + "clientPolicies" : { + "policies" : [ ] + }, + "users" : [ { + "createdTimestamp" : 1714724986126, + "username" : "dieterbohlen", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Dieter", + "lastName" : "Bohlen", + "email" : "dieterbohlen@test.de", + "attributes" : { + "someKey" : [ "someValue" ] + }, + "credentials" : [ { + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1714984887328, + "secretData" : "{\"value\":\"fkI60a2oucKmbh+4rCJFJmT6KCGhgJpnRprkKwbs19U=\",\"salt\":\"9Qyws0F21aRbjv81y4ko6Q==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-required-action" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "createdTimestamp" : 1714725047521, + "username" : "mannimammut", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Manni", + "lastName" : "Mammut", + "email" : "mannimammut@test.de", + "credentials" : [ { + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1727706889214, + "secretData" : "{\"value\":\"AvC4u0736U6fV2pinQSf1IUJWYPfIZml6V6IuAWcXqo=\",\"salt\":\"QUFh9poULtQHwS31z9n9+Q==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-required-action" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "createdTimestamp" : 1714725026271, + "username" : "peterpommes", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Peter", + "lastName" : "Pommes", + "email" : "peterpommes@test.de", + "credentials" : [ { + "id" : "4802a77d-e2f5-429d-a753-180530820e17", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1727706906795, + "secretData" : "{\"value\":\"Oy8FtfOWnOE3m8nAAApef0Bv1b1uvKcfUbAoc/9bqes=\",\"salt\":\"4cMW+tH6XxwjR6O2zbPfMQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-required-action" ], + "notBefore" : 0, + "groups" : [ ] + } ] +} diff --git a/docker-compose.yaml b/docker-compose.yaml index a139322..376f674 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,5 +1,3 @@ -version: '3' - services: keycloak: image: quay.io/keycloak/keycloak:23.0.4 @@ -18,6 +16,8 @@ services: volumes: - "./keycloak-extension-rest/target/keycloak-extension-rest-1.0-SNAPSHOT.jar:/opt/keycloak/providers/keycloak-extension-rest.jar" - "./keycloak-extension-rest/src/test/resources/conciso-realm.json:/opt/keycloak/data/import/conciso-realm.json" + - "./authenticator-required-action/target/authenticator-required-action-1.0-SNAPSHOT.jar:/opt/keycloak/providers/authenticator-required-action.jar" + - "./authenticator-required-action/src/test/resources/required-action-realm.json:/opt/keycloak/data/import/required-action-realm.json" depends_on: postgres: condition: service_healthy diff --git a/docs/pics/required-action-authenticator-config.png b/docs/pics/required-action-authenticator-config.png new file mode 100644 index 0000000000000000000000000000000000000000..f4025a7b1e67c5eea02f90697b9a8bba98871b4b GIT binary patch literal 77470 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 literal 0 HcmV?d00001 diff --git a/docs/pics/required-action-available-required-actions.png b/docs/pics/required-action-available-required-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..d1750c5b46f9ce47ccaaf2413516d887df772b5b GIT binary patch literal 70321 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�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 literal 0 HcmV?d00001 diff --git a/docs/pics/required-action-flow.png b/docs/pics/required-action-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc6087528e7716985d87178424d8b5a21d6bcb2 GIT binary patch literal 62704 zcmeFZcUY6l);A1jM1z1^K}70S=~a*}O+XZB(mNsqq$czls)CAuQiafw9tgcd#7L3e zdljjnLnwj3ceBrP-m^VhukWw#`{#Y+lHBB;nKiR!W|iNpHE+~a70JOj!9+wvgGYUBPXmSGVz5o#bc$Db85! z$*3a{Se_qIcZo&%_7CA70K1<<^d4KPs1R`i&libEh_4cz1D=S1AEFRzqVs<}6A`fj zpTG=71{0A2pI3qZ>Zv6EehUgoJ@@bDbIiayB3Vtj$B%(eO>-v*#KHLm)Ma_L*o26P zM9NxA&qYr~S==0I&ueA@eGcLEu!o&hA-eA&4m{dJT+Em~?Cl(!#XTf%{Z&F7cs~1@ z?-ui4MOtYI$JPzUC- zcFmqcU0oz^-8v)mfByZepAZl0|4?#p{-0q11LQkI9^fj_H7QYk{`-HC`Ny08bo5^}wVfeOa!`AqqKnjjrsaPs z|NZ5ESNw~l-hW8my?0mW?==7R>Tgxg#vrcdWDSrrJ7c2M-TQq1`0jto-{(8y@ZUK8 zuj%~jTVOt=!1ww7&)Sdze}^$*iHKx~9?Q#Wc@VEok|t_GhFZ4dHg44i-J_OQcuU?C z{z{vBiSs(u*M`Cx-iEh@=~a5_^20T+YhnkrwN|MW?AR65-`=`a@4mcNe`@9PJ?Z_W z_;_W3OX$TN+Q^9$pAD4w_|Kiuo z`HK|J%)fjE6t7JsYMeEOW%omV(fAob{~7+4U$pucr6Mx$75XWVySVYgUv`f8jP&LI zCH;5){eR5xw+b+iBe&8&=u$w}hnfWPV z&RJpfVkNCZV(#lkm8)xw#D^>SsIj&fu24H;?i;^cZ7yU~qN4X*cCT_dPQ|(H8f%gb zgn-gyHfvPIS8J>+M>-$~a2ZnG5{y#oXX-ok9^W`^cw#Y>q7>iQ`RIobfmX03dwgN^J(&Gc$ZEPnNhjRF=(Uvg za#0`cTW>#6bvJFw~02 zooc(sbV8o5II0jSZd;my1)5h9RkXdW`Z)9b<}0gp+)ocx)&j^7^EY+g)AYi{s`MeX zncn6SrRL><+=c2pbw?+pdmYYvBV4G46ZU@e}3wtMUBjIpv%l~CY^m-V)@>}w4q_8tftZ9 z*S^MBmb#oULvYGy!e(3GB@u^7M>yN6rjT@KtMk}WLo}D>7YFHbv*do7`PX<^{sFr{ zm1KcI$Z@ixfylmIkL!BF(RvnGT38(b+lgvZ6>!D2YP%X_|hN0kSHZO zsWS1HO7z|7JY8;x-K(T+L(7 z8P~@;n&>86k}fERcN}e~(TuOxqbo{id?0KSBAv0w!;A}CG=f70bLepAOzym0{8%B} z(aoa41Y>E?V(3>yI8rIoSoB-YI@-5-GI3zO5pOfOk@7v+wl;5{b}o6J9v{je#&1=1 z;r`K}M!xf5rNiM^urnjVj7|hv>B%KBDogN#jpqs6xS2N@Z8oh9U|2qFz9|c zik-M;SZOZ;p|M2>`4RG)$6jxoS zU$i_j+m8MOxx!Y$u+eZ-SZ+Jq1{!ZUTr+U<-iv2mT6B_LE``H+fBMV> zkk&Z%p4Oe791RtlD{8*SzrG#LALDzmGFLNu>~0JF+|X#9r?dBu4~i2@G^Rei1#)~f zuGocSHH2_ya|9EVEy*R)Fgez9_7%+-3VpJ&Fj{6Eg;^>svHPILIiC}Kumj8_zJ z<^I9g?fgq&E$}o|rg2smt!H87mN$p@h7aR~twtXrM6K$*>xFXM^X+De#o_Wx=O~L<%eh8kNQA6^?Vba~ zF6Cj&YQN!rDbt3nRhUg|Wqu$eziH*k6*4!%^rp948OiYJp+y=_G`+CB%t0@|F6pL) z;nB?2_8?*{W2=2tT6f)gV|t)D_I%^gl$x@8J724G2>n2B`2FuNk$i#I)2A~Tf!xiV z88fTrDDPi6G%S1Zv;zV^oR8yO@&aaPtjck26tl@drkbQrM zOu&LBUHVn_R!h5U{EI5&*1oZ&xQu_AaV)nPT#eRLy$gCFKIOgP+HXHz(PX?KYChV~-A|Myf3uxcSts?5zxo zjiS#@cU`)QhEJNfJyP%AAJV)z(tD&+syJ!VUWx#QV5?zyNPmx}B%23*2 zqsw8A%ZqXCw}yKUaMQ%MNFSo(e9J3TxW+@{geob#waU063hj4J1{-|+);g3(0YEi8_)y|7!AMcvq^5fD$z7`vw zX$)Fh%7~~q+CWc3D5u@V?T2dJq5ZJ(xd`bgspCz#eV?zd|8SU~gVxQO*m}hA8c*zO zN*lzkoJ#GDm=C4NkxHzU^&@prCLbOr`<;01A2*URmDTT0jq_H`kmz22Fp8n()G7it zbj=o66aYuiMDi}|jcK;C0X}GuM*sjb%6*)L|FYkq^n(^9o5!Wd% znpJyG6;J?3KULanJ zlr7S;mm?9G)zrTX%I%i;WLencHc^__srNC;I>}akGkuORW+D|Q`#AKi*xj|I$KM-H zY&t51xBH(uB)|WDyS@pq z;@jNMOdMI4>}CQ}>oD$uex)Jac}1o|Y#;Ob(I*ZrecW5>M-3}^`9|+O zIunH6bhO?3rS(B&7~lg6Aw92;0r%~R3Anpiwx=4&h1O8pwbt$wJj~P>x|7pBei}0> z4BvW)sDK4YGEMmNPUMmH=TsE7X&|SHc@*l-t7nro62G^JaZ?C5xyn_4lYQuT ztH5$T(ZAeb_qr{dplZLg!kV%-qvn86Bvds|&Ny_vRT;{8C^lZ>iYOox@Env%jEw4B z9j+~HNSsK^s^_=)Fo|0ysa(|zIkw;m^qrn4NHdl1V_fX&=0K;tn-x^W#zuZF5;hra z%KP*Fiyr2<&ZDo_)T+kNQrN2JO>YZVzZRKcR)0jPxe)-aH$f3>s);Y?L>ydL z{#+SGL9xTAN*=?Cs^Mw)zT%#@MOF?Q_?D^rq-%x6x2w8^4`^EqR7XodkFene!hFB7 zv93JImT3sY@P(WFup#D>p`Ya4(C8j)OQJas4>20)7$S9jvtQ?s=vucdVLQs7treKE zm}l<1(x`(KY^GQ~t!G*-vAfOpK%nL8RE{^Bu_POJ?T!pXz?Dl+nZRB;r(Y||s{_e}zT+jBHcH^KiKGX3}i#Jh3#U!0I zX-N(}*)#6DKE?RY{J)kDr7~~UWV!OlwSrMArwfD8`V*oTk7LPf4q3;v&Q(1ajnpZB zpehVY-?0{lkm&O2w&iJecu$$eIg~vdY&XcwA*w=|CJuYK552{H|BN~<=ayEMOY-+=F0b%+Boqcv8` zG{00g7n!dp`p>}V=^y_28xo_OGB8oYeQv^o-?;qWFJ7S!55lnjlHFHim<>S}DXg%` znWn!KNX-5+^gs_CVK-j=(p|FO4Dt1CpobI`8NWkJ?5LSV6AQd! zeSbGZM*y~HX*8qy4Ts(rkem-Gb?xrs``r-3fgXyAzWW`AO0)qMSFG#fe>cRhe=v*E zlZHI~9fv9a*rjVo@(KEPLlgyiI5)!&{tbuz|5yak;ez468Nhp462L5LO)Z#o6)p$# zeN##4`H;|g2eV&K8T&^WM{@b=NRfDHT}O%$O`Tgi5qw_1S)Lbv7y`^~`1X4XDs(6;0^l_3HYSYxOV6|pNZX>o&ZyG>dm*s6nNoQc&`}dY2`jI zB^XvZxDsPk5W>~=CN(a(<5OehwuXR3h_raj>%$=|5lSxm^UiA312zP0Ep`M3tT$#y zVvs%!uh9!MVGprZG47yKYN^6yTyx+HVplIfpUK3v$r4CtyHm2DRXEv;;R3_qwpbp7 zD3RtrgvMtIl20aUGGBpt=B1yHj3R9*NZ=4DxXltM$g)4mRbF&!&Bk3WQ$td{z~k zkN#vAXtmaG{wzxB!($tSIm>^_p>AhZ^&EQMPGoM?r7E(`% zybibL3!AMysxuTLD$cMl^1foHeie~diZtzu;`&9U%1vjUN|*Gh4|cSajX3|#x&p{- zF6rZ2lR;Th1`BAzVHVx$qWwrwS{ReGlviI;!%)i)!S4I!-BL$L_$gsuLfP*#F{vKP zq<*#A?_`H!4v)iHou2HYCpTLdy*pH;3A+qgy>Hk-iGyc`mF;+ieWCR(qs>@ZuEgHe zwV;KkmIZ;MZDpN9S>kQrs`gii0SMM4>n9EHo{5;{9BYDBbjrMdeIw}Yj?_1I{Y#*m zZbMY}HDj^Wi^;aS#;${1tbA^BR$Yn96^{vebsmnz;|&&eJ(_BgF}8R4>NX$TalSkJ z`awh0kH{xR>Q4gtmKKtPjEFbwtoyT61VQH`B=<&=E<~1QcIPgI2*Ak3z=9h{{nFI| zO|^2sMrpo$*%lE!dK!m5ZaOnX42z!07Isefof2-N(17dG>U=6sY{Yb9sAzx6yF23T z{gdOJ?hodV1D50yNWWO^V`Ncx9U7V55_8?OpF%N zCkGkrLxzAHpgTdI61pMvCa^|Obrx3_-#Yr#*ZX*@W$nx{Sm;F1EUNJIRB$X20FsLd zx|m=}rgaj0^+T%dro|M$^+1CL9|aG`$y)cyV)K?7yB@&Vl)9fcBCUJ)8d&3O!){#& zk?x1#^ww>!bu`}}EFhp2z=-&UUFz5q{Z~&nPEVlOWRIJ@b=i2rMZdp(^h}3Ky9aGt z>sI*bWnjfzb6Dw_uVUYw^E6|1CWx|v4}IJh$s| z70sbHG4W_vS`;tN6u6$tPLol>(AJkM>X>c}#|?gHP=spULe1x{IgFM-Zbj9eSbO0_ z`k&ln88Bo0S!+geZvq>pYP!C-Fqmg4&%}F82oRvgeRIm7NydeC!&LRg*{&psmb!QN z!rFBKV<|Ycpt45j3^W$t5cTHQ25?%1Mx&6ZhkUzjTqqY}0aMlaN%v_MQTi~g*5MM}OCjkF;%RAw+-qz$oQA1U z4~qj!!52&cuZ!1Kum2Q>@+;Rh@oehMcDe$7k$;By~8J!|eVCS^j7CThg%=_X7b$N-h+h4~pc#=XYW0n&ussW#e zjoZuQ)~?hS3daP9O`|NN+A@F>iY`S0B`J~-zWdbO`5r^1K)-N)1o#K}4gSx76+=B5 zEq}BgVFtPe$e}N-$6o1#yg4lu;&#}KU2nR=him7+7xGlA5(0h1eQ}^Pq^5m-U~mh) zvvRVCNq+?=nNf=dpaCb2^yBw?g~E4Dc8-kZTmzq-;ZhRi_To?fI7x)jMQ8aXdwjp7 z%cz(?ycnb$opv*y0XQ4swKXz*3D#JFAE%rivpH!fXEH|{BMHcE{y`a?eydm0(q4Sa za8%ZQx94KgVlp-b*1QGiM>^W%;cJ5eeT%xweOuDssjuw0#^V^ZnW(R9^k#%i0%bjU zd_!iL;JY8VGPkp(3DzNwuNZo=)tL5ub?b3;3HaQTyy;ORQ!&(uApK9K5qpmRdVwa& zL~`HTv>QV_B_EgT{bRF zTOzhY+*j#+x0+~fXA=9s^cwll+#qS{%UdcqUO4clD5#nGW4Hr&KZM;km-dWZU!8TCJp7n~pXUB+t7|MBiTO^**RX}Mx zue4b_AS2ZsFox<#Iu&}a<~pNrEAl~j6<8Jf9!b0W-%P~-JF1=y6&4tW*yCa{Le`*Z z9hb;8*O^NFbdBYdLW`&NUnDl_u2tWSDhYtg$ThMt-O#y`ubHh{-Nn5W`JA92(n&*c z**0GM_UyTADSmoM)2DTN0cJ`1y^sN^aedlOueEa+FcF7@Mt?4cpzbIJobw7nGBDdd zOx+qA8t7=#Ca^(1a<#05;C7Nu@!JhB!x_5zl#{bO zxjw2GX=?uI60-FU2Y zik2*lq|Q!sQnJ7U)?Ui`${z)$Y^2dFOb+7KY5SH{9PLK!{nV`DkFyp}l-_T;oK)lU zef$5*7rlB-JzlPTtTAmk-w^2dc9~2oKh1lTlA6wn^ zAyOjN4AZqHo~C*|6cFFRoM-B05;2wqyPg$zwZ?8*B!*JmZ(#R=dTdUGA*~w$j|)9- zLUm_14$Ac?Yqb#ux2$ee6A|IE>qmS;Z&6hZNvUf-rhs2$x7AZ2W-^67L=B46i@`My z$w8a&he(09uFI9cVNu=IL-*isrdLt$9C%*K(u~Eyjji^fj47YCdpZ)wn;4Z?uhKjY znOs-vB=8rmB`T~%Ac+y!txZdXh0-TgXSAi%vQq%wN>yepk-iwwg^vvo$lbA7K?K^h zdF-k%B_6KTQnK67f~)YuVE$kPiCf-b2GVD+9~X}VE7^SPqR8WTlz)wRb`=gvig`@O zOP-EcJKRqUe=`n6OJ04i^@b(|bhM8?odkVwO;ix6hsJ~%SwQ4AJ!Ik2Ca5P=X!6bGqdqU$Gb58aSLsL`rYJMXYt&1fG0cgm?!DrsVAwi zYg&}xiJ)?L+ry!6Y&?P!WomH#2}+b^cKC9s@y4a3*DI5?m4?|&OoW^h)&vN>Bp>Q0 z|1!Y%sf?o-%K!(5k_s9`y|E3^6;f_|-t;nB&tt88xaMU`V-RWW^wwMA<;sk!AnNg+ z4e!%&(_&_V@UBX`2jK5al8@kO_0b{PVlu^?OdHpgqITB0mHu4s8^r); zaJFd7DPg^`Uz)SGU-#N3rUX~4Ztd0fLz1xD?@Zu$Mn!?=7*~GkE3~FQy*oh~ETkOQ zfAnM>H%7|3YedX5ttHM(e`5#+B9u*O2{EkBel8ly57KQ^5=vs(3NWkJ>3KkGmU0O> z^CMBr`5vdPa2ZJwP^P)PX_{XZ1=obB(Y9`#M0e6Sw1M|jpk**Jl&L&AGy3Mn=XRHYmYpk+|Ak@4Zy?tgpU9^EOKG{E#V|BZQJi0I2mToVQywWnFq|C zl~xO|UM}_5UOsu^y3G`(btdZjUHJ?76{bS=n1I>9J!9E>F(~z&(a&Cm&tO#?@3Bz3 zEN(ZZj=e^U6xUqJ?WGzSPQKJNTs$7UK+YsJ!DGVo5!@3Zs7-x-K&5G500nCVAS=Z=lToeP$Pgy>t z78x8kE0`wO%swj#pOa5edP((lkk4=f>gTgms-n_pijz$_OdHs}=zm^8#OIyJmTXj5 z*f<;(5dyEN`Fg0+Z15`C9|)P(xEsti_oQK0G#Yhh4UU;UPd|PhTeCXt7CLW>** z|2RM@)a&$1Y05kr?eNMtf-hD+?O&4nQzw+B?2QoI1oI`lt%jU5jc^}aw!9i99nWvw z_lZIE#@Dt4t-Um8Lz$v41K}7P$@z%UAy2Yk{*W$$ssnHvg0U zQ(QF^tc>k=?xNW;p(l_6(i@wuR`nw2jbOktX|q(bocHq9fAMl<**-oGKd8a6Z9`MyQkNt>u9mH0Ws zIq|6cEIRQOXHmSRb8idOL(}C|pz7u;^vpgW4L9#R_A5NOzU!fcZ!VJg3E)lrNOo}k zfw36UnK&1RDW32yvT)5cR0#nw=zw*a+PJxSvC(ps_d3f2knSd zhK3ispnYX6brG3bsWzqIqpI8448BQYY24&F^#By&N?VO$Nmu3EQOBvlg(0G%pHgF> z;P;$(CKQKgy1%7ILoAPBGlHdHj#Vw0ULW12xQfg*6+iH)z6hGx?*9_7Tem<)s^lWv zN}459udzQT1d4>iMCnI%;%y|+p$xlDlq<}!w5vn6RLpZkgFw(Q1JNFFvTqQ>HZ ztSb{e1!=Cfzyl#?TtLn~%%uWl)5$q!D&l>aX#*U5bd_4dWo4guwqagKB^`s4T`P^f zmc)kc|JGCqW1gT4-Ct6(vreer8{-nl?MhyG8K0n}a1bR3z7T?TiFVBI2GyIo+8xcm z!d_Rrp3rg)ZkG4;fovd#voXCrSZh&Ng?3YXGbro798FIJS;kA`&~ z#Rvs9pD!s2o;+-544I+QZ8X;0>!*oi)&x;OHH8Z!TfU$T2bp3>2cWu5$I&k{vYaSi zSsSDn>_U}dxU_b#j(q7S->`32bH0I(1?ZWFpi9O){M=Q*l;vyZF9=M2@s`2;sr}4A zMIWjpp}PYiI^L1Dv09nA*u5BJ>=4kjnzHG}xkN|N(LAOF(s$kAft<@T?G+L=@4Uvy zDm~~HKKw;LxL6>5t}|aygwr|A_tjC>Rf=9K$L~Pj=UkKzD|`-}PF+G;V0X7S_tyAl zRWJM)c4P~6&Y(W70qoJ+xN>S{)jOg_9~(l>g|waE0$?BwoGeO!5=_D6tWB)wCs+l$ zURPpt29#>j{sD@JnanGF*-+AwdzC*^3e96$L%U{e#NANg4J4)!JBe(nJUVAU#Fmy-(=%g>~(?bsnnM5}63)-0B zVXrn@jilC17KdmR6ru2)DQ?gToPXzKh1|T0R)WHYNRooi8(N6Cq6oa2>*H$s7=Vck zL70yC;5glBGI5E5RmV|$X@75fpKa3X-r}4YRKvCHl_)$NRw+oY-Qwo}i6Sntr93N^ zU;xlF|L|32Bh7*}MoP<0=CR{jKKA#>st0uo=ROx__11d~P}zdxgn+~H?S1-CAt+}s zhYT{`ow}WjttRXFWRn@gD=Px2FoJK%~uR?F$#N4QBmZuS43Vi^2DdV_%Oon z7-MXizW+hs31&PGIj=Qzyf>~r5D{nW7Jqcy=S8&|XI95|X*5SC5;}_zwfPvhdm_kh zL^(E0x3{z0Q6O#oiBEOJXy@>E@?+-t`M->0cQ#6$;P;=FAdVC^^Y!esK9 zsw^~y?djoFp*26iEu%QP_FVkBc8VU`CDO|`X7I>msvp{#7s?$tbNl!W&?_m5q&}|S zJ46^l@g`4;OxioK@}a6m)D;WWrfd;Eoo&eolP!rPM}B+W6r(jIi$+sj(fR(qEp$Z$ z?HjRN9*NU(dN9uj*CuKzp^E6yZpKSyi$1Gbc2DIbUlK|8-B_v2z8W0u@riDb26FYe zhs1YD6aW&|_3BHmN0`n$UdbxKxU@)5Yq@KykcLp47lL#gKAD;H?~y*~Gnam}!x5#b zqVFUAKK%(XyScK6e5k{0O&YjF-YPrS=u5gnXu1_wkL|QbC$d%~SkRC_62m}WPd-bh z&hhb+zpBelz~s{Gn+A&En?nq2+FbWg(x3`>f7r4G!#bjb6rPoqq8b6d(*hPhk^w?R zcQ8?lhelSRKCDG0Nz_a49K@GrO0!}D>PwM>ONXI&9B?Ml!L)CnTkE!V)c|64w0^EW z&l9T_e6SxL2nB!7JB+*v)(R$TvSmzpNm4X%|gmNCMWbY$XnBSJd_BC<}2V$0(#NY)OMfGSBW!LYHbjcPJEp+*{UW6VdP? zE9D_U%MUZU?@RylLLefk2JIfHqCJ82r;;`8q$FGiAo&xLaa8-g8-kO}s*Mwy$0v*i zH&I8ga&zV7s_wjee*bNNvCmc$FMC1$pmwCXBkOefVlOP^^^fe?yN4v1QRqj4kO__} zsZN)ed^Q8f=-G?X1j$Y;0i$8FQ)K$%TLUgSwYXZY8@Zoj0^?_0Tw}6(V1$EV@*$TX zR)&`~hta$rhUd4v-Z_8;g89gG*R&Zt#9zmdi@oSceZVf4yr&(UP)0|I@j%l7I>G~U={@X}FE zb8{#DansfpL_#1h9-sudQ{`yD)c3}+!6eJ){dp0(%cP)Ymu5wkxYr@2S=7khOfX(k z#gOL-F$OjxRmV`n?bG`H&ku;5Wx2(^CwyTRB5e<>Vtu0A#S`$GKm^Q!LHS;(gA5Ht z5hoGikr)Y2P7yqUf}L|S$3V7$p2rC-)cy7KfP`~XaZmIUyny9IoyNkXGbl1Ql)k0D2t zwDHL;8jwrOD^v-c_~<;A#I_ng(QEYtnf0u$;TasTK>0;$a(5q86_!jz9g0Qe5i$s= z*Qmc;{@C0uAHE)B!i5z@WnEJ|`SH}G|6n$O*JP;TFSPN$G9dyENP6GI_iAESIydX{ zqF>}lv*@jeSRN?BJM*Vol~^^Z9~j5vW!=!I;)vI}OCQ5C;L>IkPI3IOJL6D$1!gr) zXF}P%!>4|y(F}B#ihX-Ds%=ku;iK;aRylwq3|zL7y%f1!B%S}@<$7k z-vsCq^;eA|CBHZKKsm>dadCBwmGISgY3Y9UBoloPKxw(pg^8^5*H#$H!cJK=VX7hy zefrlyt<>_`I>sdlC7WeDHsCV6h;`jO7tuncEU`MMXx9tByUbga1HVFX9S_NU_+*## zWuToD4CNnBnXr6b28d!JAgdW&Ss%w0aeYK)!BOa?tT|5UxG}|U(~rXfugm=~?OH`j z<=Q(@qkv6-edvgXX%lIw$eJ)6586Wh$nOY+N=50R{K!kf;9+{8_ZV3V>3YVP`CO#4 zP$#PW$?=g9({^znjomrIg$F(7|0s%}xD) zLp>h6M_8fA>f+Ws-7$9Q@OaZB!po1N-83bmcca~72QntQ#+CH);;>$KnN(5z&oZC& z;@2l*y?bmL39{d$kA1mJyuDkZ%kS8y*eKzN-YA`0ii8M(ZpMgZ-*YyV`i#;*Y1_&R zslcC&L})&H5=YH-G|V>~(GTgF)wu3k#Taube-#3mdWDEhlgVtmn)51%ZMMu^MBsq! z!(|aj0mr6<%aXeLXno4CH0Q`CZbJZ}!^CLkcDw)$P*0GFB*C{taQ&OGBEI{^Cfyj> z>N*?Ohuz*o`c?`TI3DG2>*G|~H6)i`Jh9(VpfUcTH zwnGL!lzYuh8JrdMWl9kqMK&v~?AA(;qX{+5 z3C8(_>EX6p;U~wv9{QYert?neEg?tOc<0h)du5+V7pQ)J89|VL5_NEh%js4hJPdO; zZ`s_9#~Tqer8Cfi0_D zP25>maeE3DldnD5Ert&^D^|umP1j&=`!R4o{>H`dL6jcGg(FOWU|3;Sjd@(C*Pm_saqm@0 zNI9QRvwKZNCi_tSHC=q-p#I`_yuLma!7~2m1$RGynoH*nRsNgG%grphsiGTEWuzfd z3Q3P(qWak9VnAV;tcyA4-ztT%A4wxfzJf1f@5HDID_9j+wKbSY{0uUsUjafSTGN-H ztlXtQOSibVK3tLrwm*ZuON?a#G(qYyX8Bya(JG1GRK`)hInw8Y1wGYD)_&>|5H}$U zgsV7?klCFBW<>oZ3HVC>ZeZJ!rK~t{^W2jA@dIV`V-EIceA>zTyNQpz-`gwv4O>48 zISD7p44r#OZGreAa(k{>9`uI=BM{|fNj&&NI|~pPw)R`!o3d`Mf(!G8YMVJ`5~k@) zu4l%rm~ctx#ed1uFWkN%)mqT)F_@73&(rGJ^Cejeu-O|Q=>SS2<>$3fy75)ELrBMR zZ|c{R750Y3GCg5jxNQG&8y0L0?;Y&p1A=}CNB%s&NTK-)2iM>Q3e5jNUio{izaiw0&_IaT?#8)_{}BE8=}|RM zAUdk_!SA|A07AU}U&e4gL{qg3{L`}iPj>=#f#@C8Q>kZUf9uxYhZ7KeR^We`@P7jn zq8UXTjPR9#zg^E)9_60J$v#=WsZaags^kCc$1xB)*M~jh&lmm^toid(E)5WQ>E%51 z`ZuASpNs)vIOa}F_ftH>zuN~YeKG+GtaR$%{!Jg=y8)qc*3%%n-wG~NG@v_2c-|1#l!nLzTtD*@QX|5q@f1uIJN z@4En2KuXz8G2=loNk?BVdt2|`8qcDk?Q1qMt`F`S_tEP_?1LfP^Tk4TLT(%x^q$7k=JWE2$0C$#KNwr6<~%kAQS@P(Pb z&bMF3d*Su#XgboyE7v2hc!);7gZj67HIksb4W!DB-gMTGHV!T~GsB z(wDTd{bx)3Bpl=v`O)%O7ME!*2qo=s$|Szaf-5w`1n%rqUXEwW_yIoR^IIR~cP$A| zvMWlZ{D*9Q|53*2)|)p4p}D^?W{A(feFGR&&r5EPT>hO!6$4mQnz@}dziA@i`7Ie( z)yLI~!sq^DMg8>jC=(!|WmC%g8w#l(fz$|IR*AsQzuQ@VZ$g6uFdJjWkiSc9U}pvT z80w)|W;fbrGhDcKat2Bm*`A$x45Cb>1sYV7#D#$qJEQ(h5@5(7pX*`}c7!bZCUf%< z@IQOSe2IjXntt6ImpSCn9ejwd-5TSH{0xN8A%Rfr1QDnM5YAen5PE&oxm(g|G08od zaMR@jYxzkUK_PZ|st8ruW@;!u_fA`n&du}jS77+mXkK#wT5)BIvMvbXTq zA=yLF=y*UGd)&>j#cF1B_53;ZvGxNG?P~>>@>DgwR5K=Vvd)&tJSK( z$i@|QgU;&h*N62Yo-u=z_&)vv+tY}|D3P)C2EOjccErlRNS>h540s2o@Y|glKeRla zNfOzSR1>gb*UWmSovYDw7MWbB2l+!9zm%~DfMoLqD*Nk`YdhW2-9p@kCU(;fZnJ3L zvRV^_`Dt8)|5)@W;5+3d&Ul(!pFXJ@Ti_f2IJ{Ja(S?p!Qu@}l#v(`Q-D`~DKfa1# z3pSk5BMhjHiqkOT4_8_u%MI;(-&@z3X%_9wmC5fpCXUX9C)|hD^B5!@e0yDY-EHS| zVI(-ra4pl;U{o`%!X-)tQ9Be{_{Ps}q5OXEKejsHCMqyz1Y$t4${8s@au{E;Pg!T4%1 z;ZCa!0jnu!x91dy`6K#9!{T|mTe5iiix9hMv7=6^7U*WPGX@t=re24lS z85WU0u}^{TIcDBTA4Va+10lP$jdLv#5sXRHs10xLDPiN6obKU@`^oJ~~IU z6S-tq;r@K5Vr_5z05Vh#C+9LPjIQ6*SIu%Q;DnUaV?UhOleJye<&DEF_TD1QU;2kt zxGGLUOG961jA}4G@~iwYCI=?TSD<9tUmLcjq%ifIk8$e~TU=Ft_+Z?y+6jUHGA8Iy z!z@bCML;~~D6qN<obG40Yk+4uIF5<6}eDI)NWVL0FKR)}hk zdhJVr@3R>+Y(q}4!Otd{5*?x}3yTY6@s70%wWDLH_vB6Nz0~*j`pnQHas4`D3kBl^ zQ|t4qc+Hz*LM?;El7+O;ow&v5j3pPWJQwu{Q#w8<3_=h5b-mY?}RBcX4 z_!#AF*giHtk#};qM^X#@YFE4c>B8PpEt%b6P3KUmmsss-AoIawgMkSm>H~&}U{P#8 zQ8MWOp5VL?j{#HUp9Xb1B<4#8O_{z3de}j(ea6rb2ls&|yLm9X5H zyoDi@9ZssXObHG)B-FG~G5gv4AUT5e?7Q)}mG%-06l2#?mPDoJ8dD~UbIny+Fy{4! zBae@?%YlnZ40mjsN6q8PigqZ!IW9YG+|#svJ1RF;tB`Zu9ShtUV(SN8!!O3Q|HANB zk0$wqq0V$DTJ_vn7zL7G%?lM+SQfgHY(r`I-27_HCVh|Atj_W##NezHtEXP7w1Ew5 zgYJma>>!)!XT^cm4PnU*&Ea)(-beNXom#<*Jtu1e!Fwk!=Xu!|v-N8o5okUUeezvA|?a5=QpfQEF<=;msgtBYZY0%Hzz#{kxgh`8%y29 z_oXUuHG7K)(sB#6Q9pM>YCB8=oNc7z5WCvPi(6~Ec5`I)6}DiF{Mv+QfyI0ckF1PG zKG|hc-{+EaH|#>k;)AkTjiQD--xHtS-(5du&M_Gp6Ulv1uo6?rD%3u{lW~21%xUt) z=0^9)^Dvv3N>V->Gf4`Ry;?*Eyo0SI0z)?FyL8tgA?7l0W!FhTx#U3pt6Z6m45oQ* zU7RoVDtRTK`A2JJpxQ;yFDkM>0#~z7tnRtBD15tW8M0nq>+Rburt&4!ty{ac#ua9# znuJ44PSh7mIysVY8P9OyJ`Vb)Yxd~@^PE6PwvTl0*xD$6mWm0+Ts1NM46G}&ui+)^4^=`< z&+bu~1OgNdMuGf;WA^==G0a)sigtc118ok&#Ltpv>=|2GKI1nH3M-rqt!!X6`K6MNwG8T$An9`d(3FJbmD_&smXiqlq9klH$LG0o?F6?+^ zXheZ|Wu0idR6@5{OF3R(Py^{gX&l3AnN5nkoDox2Gs(A-g4M-AU*u|wghSL=ez zhtH#>Hq}+uA{-p9eba0B(zA|jgqciosl!#a4=QXUmn^Sdl|!fyWXowWA7k4 z6p4AIvexO?Uf`Jo*7>uwE9)QfpNJ&)YHQUD>=l^0z&bRx+Q&CRxT${1d1E5ZyZhL) zroc2MDn8COn5v;iWdR6au|x>lmy|%-Yw#EY0&pRN{mkcpy{#6eaXv;XLs-dsB=uKakAxS)=hhSRO5InQISD?}7vgT#TQ>N3?#!`+bp_1oF6&i&vA^swxK8k{sKO zvhez(gGH4jiZKx$HUrPcOMMk2QuV35MJ|F3uh1tSwBM|q$*C#6-u;U_;nddi0=%Ng z&zsJe=`K*;e9yTF?9%LFQtx22b>e!K-OSnLGiSF}RC078L@KS4JuO2z@jzOaIgrY= zN`Vn{{cH^FC_TG9;?FcZYNg$6ytBDe&pwYMAE`cw<1uCRZT=*1|4CDd1!L4znr6KL^7b zzE0h!{L)O?*e@+z)RDZVj+v^nL@hnu!HsRObq}Te@Bk=J^4hJ&W({#m)=; z!-`;jpCi)@3c0qX=a{g5mN#{lWJdwy4pr)(yKuS4JY1}Ktn6@3;25~-r^bKl^&hw2 z_Gi&}7+yawGK=TU+4tTvb6rKp33Znzx;C;LaMGsD6bE9$Y@*$T^jzmqbtPWoLa3_~ zm+h0_d;K@DbyhL0+f*Mzhxedbjmgzj@rWNW%&j>!pPAGQlepTQLp4nOpbSBD;VMbB zT{RaVY+tZjbC?J*Vyv{lOGTghuUeeUbV}#$A0BGx4$bD0AvWF@91VSqaoeufwCnLE zTRrtfu@F4e$qrV`SL8h^9>(AwSuiPDQb;aSpI63Z56x}S?rFStEF8L5C6?+oeiWrU zx+VKw+dd<3`>uh>(Kjpi4dBd>-uw?o(sD8Z{}j6Np8tovw~nfE?cPQOVS}QC5=sjy zAT1~zZYhyQKxsh<>27erRs;lOOSe)20wUcYDWD+T-Q6AEe9-OBy*Kaq>wIH;-#PC; zjx}71=ecv<_q^scuUYd&m4rd|?ZtszTd(%+wD%3yGURgqxPenI#!uc>tn3iz7W z;SGWs7yImuo42Jknr+L-=z26J=N_K!7!Y)}O($#V-<+)3Sef*hZ=u@gCApY{B6 z>epF%;|jKiJkshXKF(^qp8pg#`@lbTU@7$$&(qGb2YQ2jr7=o4?jYGv?CO5@OkxHo z-}JAnkR!@B0_1(%%w#=7d6N&uwS}s$jmA2DxfZwd$h@^c&11he&MJ!9ysS>fX^E~V z<*r5qLEw}8lNUl z>Y7U|3efag=$JDJ5@L87sW6P9SCW1!9XGwn`%ct(YJdlAp{|PmAL+`7Z>vE4O1@$^ z7t8v?;?eA~7z^SXTbR^nJ$s;Yjq5Cq2;*RpzGMtsG12 z@W}<)u)mh9jGx=IySrJFXtJ#*tj71a`QC1)(`sML%-O@_+tPU&;Z1oHx1{^BJjXCD z2cbDOIeeM(jx*Z*c5#hS z4_@@0|2lN}Qvu%oRDFoLrMe4=^LoSbV+qw8?;iy_K?moxg=t!K4sIe^>xt-Sz+V`pX@)V^>$OY4M=OX$=ua5oOL!y?$K);fU zm4+QmW)*Pd>u$@$Uh3^e3$HVM#OkSnwv8mYj~jwTuI9BouD|bj67MYfy)y9&=ffE{ zMSRmqje2A5YCbJ68!Wx)xMqMz9YMa~H%+&F8%Uf*<(Nk8>NytV(YR&Q_>$?*_vSSX zO35o4X`O{kY|OIPU8@Q&#eft0V`%(ujJ9i&r-eL9VEKi-n=Dz3+Re>ynN zU|p{_OGZXHMJxED|72QUcI8s(t>C2++6iu|Ag24pdOqzq?wy~XeEuL?bNzG+6=pD* z5+j*i2l(CgX!RoLWlmwC2XI@@}F(|Rq) z=3k~rco_5gHLLr#22SD$6fc#?jGkM7G-QenO~})ucs`$U^4zJ96GUTQ8l*y&YmJmV z&YjxvF+D9Pj`cDwiGc_s`F!`p)b_{q^{?oaGj^^e;kBo->)rHG57Ri5c9TI{=hg!+ z3jZr6C;u%ffKP9VjwzeWY%1{3=|8|xXc*^+>)tgE|KU{q2R7lG@&c^R?4F|PCNY*z z?O6u@#(H2^{s{mUH^WP&M=IyK%H%Oysg8Lur1eV?$G#W2x+suK@hdd-OEc&Z%~14D z>}3BwDUSj-uRa4x#o@4+`OjeYU$~tx8U#^D@cp`fdFZc@7&Jk`&^-UqsVwP;yvH9^ zG6y$IdjA|vb;&`w1g-2dTXmDLj69Y}H0AksjK1mYZnf`}&P)j4>W{jpM|3YuShpkc8AW0&VBslw@gkb;Mfd3apAYnCYz+$v!T;DSB zA2g8v**)~}!n+&uI0b)nWrcK6W_QJ1@cy|c{t;FMA)COUy8pvR#2|48lozARdt!Kr60y+inV> zv;8zTj{=0fsC5mTh}V;vH42tK;mk+b4Olcxw+$74qx|l(dPEKI7N!|shs8N5(rbMf%~GK(fR&?E?m*QTp%(0 z=A*h-*%+QqYf}$*;{Jh_5vHAZeC792B*8l4no`Q6oz*nw?G;-P(kMES`TQ(7ck{-e zo10J%@bxA&8S~#Kl6qZ}9=@v(Y1?DS(lw_a%4zs#L@B8L*ft4lc0Kf@n9xMzM{>=F ze-{c=&4xEtXDlN!@JbQGFpHBmS~5Gi<|q2i+66cuXb)GP2lAr`U|F8`Y|pOzs>U9 zYxTXzakbM(qa<$eo=K&OmdkhzDD&BMKw_f`y5y{qwiBXtQH|)YFwZU&E!qx#xfbze zvGs6&(Jj}0Sx4ojWM!f4{F5X7TtR{E?#%+N4Ul#)>eR4{VmPVR;0nII35fNWK7eF> ztJ!9pD0}6yPlul7=a=z*T~pMrt^$?klKuWGrQ8oQxQpdvI5r=of%q# zxZFce>mqjok~&Y*GnPA75s2rjdY!&z!~@IbS?b_Bs%KAj*wYjU5g=Irval1S9+!0B znLWO`JG7Y7sX1H2Wj4?U(p`@saGs6i3{zzV1g&CxUyqkhOGR>jdyY#n6KoF~p`aGH z{dLypt02yqSBWRohpBZ#Dk0Rl^^`(T>=tOx8UqYBOQI~%5y#2Ym`yaXXP?Ddx$f9csrlqAIN6Q~=TKJjy;49yv^8MV00Iyj6KI2Eo8mI` z7&Le@4^`>&-!t0&`R$(TXRP=fjcbeqiy|q9rDrqvI@o-h7B?NhHdgwK^Zd<<$i2rr zw~MLrzUWo4uj1$Dh#oW~VT`h%tqXAmMXim8XcZDoV;NX0GQ0pSxcrL3&wew+rf_I! zETm9H?4a>GZ5XSxvhim;VcOBo4qje#JM8scXny12bkA3;omz1CkMn&-m`OzO9gkBn zJS+d?7e^c>iRZ#F5c9x7u(|T*J=|MdimP0*iu+oRJ5vZf!qZ>LpLL}=qa++z`=m7+0R@-l!TZ$uouV&QxL2j5?`j$LnTPReLUj(|xXQMcWe*{qIkk z&+3_Bs-;Ca-38VB%hVdYB=XbvDb(tY@~;L&G2%O$`3NpQ{X~S1c1lSO z|BS#r98osmDQX&p%lC$5Pq`D0mn|;4j?U@ne~jo4i&}{sG_%tywJf!Y&UzGT_jNP+ z3zw`#k%2R|U-b+Pm4*Ds%^vzp%N;+yg;0_=UPPUv`S}_)nbpJ%hSbUr9tTAZE`ih` zqs$k7f<0ehb9LI52O@Gjf}B*=&9}Batj5@0+KL=}l8+NhfUV3C(`gg5DHG&)>*)zJ zbc`Kpe4o;4C;8$$M&xVvk9+~msJ|Ro4F9lz&;@3~uBVuw~dXm*6HkrJ;QXF3bt*C0|QbNy?8&Z!{YWIbc z`Ai0eU=rV_PRnkQOn5dqa@(3|<2(*}^<2uDQs zpcM+SW}b9{yhUZ+#J$4k^GARw^O{XtvW{BWMw)R&CTdNkw0Q5cTroSF5` zs~9P`m1T&2C{!&kR8_m0myxtM`8t)Z)PO~gQ+DD0?y3J-AJlSqXogp2-prByx@!Js z`LLmJcw%V_6RR4$iL7O}#9=)8S*#MKPNMM`^TKDT5#<}rtmwb|G3Uppk(Ivuygg#S zj6H0O?~4*edP;&(p7wtGxu5U&W#@~N);~YMDI>GxVzqbG9 zcs19dLzL_P;l0?no!H7b|9&d`kHI6@C1R8mCbT~v_sa)iUknIGV5F)Z( zG9Wv)M^7$ObF2S%dcThx=>u(ZGg2qCW85H4*-GO;}*+30@zmWx+Fh; z|LX@;C0Gnf;>u;mFHuqW_OzeIagW7^7FP@_Q#{zGId<!ME4AZI9nJN?-`o{@Yn( zHvcc2SyYA6Mt8doI#4dnGAVD^*@1fOKp#c3Bdou*ta1>(>2JD`;)kqX)jQe~Vfv;C z3sX2p%gz8Bmc{c6&v$P8F8tB8qdonyoR)O0AUa0RgL14xTS^xfIyf00qiInq=Vp2y z?SM5=VO6ivDV~sD_ruQ>DSZv>WcxU^Hu#;MAk;mJ~t3(F9k(J_<9M?-$ zW{e!VCc<`crmF&K$0o(eU7Q`)b2{m|2jWLl|HHGDV@>pNNl?RbVM{BFS0ZWH`fQx0 zPskp-lbX@dO~}YiQJJln$8J)oOyS<&JSW4AzMfN!52BY$n6GyA|FtJSPagwJRPGlZ z{+T~U3n|JZdy53R#EyL;XEO3cW{J*tx6E+qU+e~om>~ZkF`_lpD1EUlg8AmI-cHT) zS-YMI%%d547xew_R8oZ)*8g^l3)`XZ`f_suHd3`<8sF{`A$>pkiE>7jbiPVsD z0qMRk&FUtX|HqoddSUk1PM9(=K?8tHel7ct-teQ9< ze)_|2b5*7Fk|%jfvOl8T>=Aly)qeXw&_;Ic(h zwk28!5MnDh1QEpdwNWVJXd~p_CoF^$iq_W@n}S>!P=YwwCg%AqpR9s%Hy@~CexDcN zvQvG4R`IZrqXt3+;F(xSfK4c+9oEtMOJ#lKHM))I39`m3)&mZcHm7l^oaQnOYbopq zFQoH^+rm)AI$+xNyTq(b3mtaH;hv%7=k^ucd{0R+OMNtMY*&yKlS|znxL2@t5Lvc2 z&T6=~wLCqY6!VqJ5=OH-yGzGMdgG+?Vn$$#Y0-SJGALT_p$ccW**RwEgtqVWz$Lr| z2B+U9uM=r<^CNVC7w@P7)~AT!%++HMM`(CiS<7WTd~*a`7?toRDLs1Qq}Lxws9Jv$ zH5woxK^7efMG)#*w`Mp}wdrKNe5qA-Fm9Aw}(PRm8)Y-kHs4nye}a z7~S%si>8m-fw_ubbloiCX(rnR$>0WOQ}U&aUb9KtNPu*B^ewYlT?gz(eHHpG`k=Z} zYxbwpjPdqb%&eIL>4!i!oc!{7_V#uG;wr=nVc-hwE$uDp?d>X0)0LJhUL^`GB|#e; zAm^J7GQM=QtY4ED^bReJ8IrRnptGkw0bTVkdD}Jays%Czz02nzGa_W9(rHY&58$-K z>>UPPGmo=3CG7ev#J>)5ixP2rAq$^WYzS(W)R}Zcsi)P^o4v-bJ*o*f7t)!s8m~`7 zO)#0eOqn9MS8G>C{rFg@96`i(vai~QwbY&z>dWCaQ`!%qrrmK^=#_{TbwPc?xpZ|5 z%8-5G2!zr!p@W?)g;Q@iEywDtXOfc=!5d{p(f|@xp_o_+=NHb_c*H5LcCeVNhyRJv zbev9D(>h$&Dvxiv&(;vMs_^0`gp)m^)O`ESq3OhakhR#@G(8x%?c%(h`MN;fd) zsi&9GxzI<=or2En+|dS&L|LmZH&m*7bOu33Sk1zXZ*l62@z5oTtd~SbdjYi9q4L+m zTZKLQ4@6IJ6Qg<8u3*{v8D9#b?;%gSZri?Q}I6kn; zIO|Kx8IHzR5tJM+Ky!SIpV1D~r$giU0`$3CaKC{2#WQKn@4wRI=j=~#+3$o&Jf-(X zfPE+D2X_ZHTL9!!m-Hay@EyfzO20zv576KA%0zNfG_R=kHh_h)I4t?v(Z1vyfBKv= zWUKL`h!}~yjVHjF$DqI}D&&2WsFv6tJUm%dr}>;!bQ`Grr8uBIriK8NPVJs=We_7j zg@?jE7_e+$-acH^eb~IBFqcZq&mvUXAHAt})7;F@giCxMxvirP2w?e`gPVTMWRYrN zuf=GFnI`+ll)kHJrQ8EToBERm3@-%qM-^8h+GIrtLalApO zD5ww)Vg&Mtt9Vf52>XUUpre}jcgBzv8GVFuO;tv{)PZ=dK zcyxAQ?cG-;Oy3ho=4PSvDTmRfHVx!vb*~Iqxny}sT-7I3lzdSmAoy)wau5wRc~%_l zD}Eqyk<nim%~7f9`5>_uy9Vcf&HTtrPSvyZBU;=Giff{ zaE9Z|^z<9Q?|z=*<>uUqVTKmVmPeR0bUMxk{^ULa42N5_LJDJ+FD*gMJ^syY&xu|~ zh!*rmCgpFjQKCJCv*L!RY1aK_7C{5?C*Jwb>>(f#Gp2wj*z!WzHif>0-S!OE8%-nL zhYx+Jtpc~2sXAY@yW#PSz2fI!TH&h671|rd+a?~ob1esjY}en^srAm*N)4@CEco_r z>*ErfWh|I-PA$!$Jmil9M2SC7U-q`5IYE}?MSG$@;@l#`_?3Yy)8gftYyeKi0*Rqe zpuJ}74L$tL#P^vsqzvxN%h5MMDsZy9RzGTeF=%$T2(QF2L>G)FKKeM?NWP++w*875 z3C9`?iJ5|&)Iq)9_uIqk)7A%s9Mi69*lUv7fS7M@g(mmDK1XFe8VPFDc|22OlU0qW z*e7b|hG)}@SOg#z#-pN(;qN1Cj)AE&p~PglIdA4x#A(I2LQ(6vod1|>g-=X7zsM5G zOis)~jp{egi0eJ8bR07CWdn*bi&l+~PEXW%dr0?EV4^3{nyHp`@ZuAup(bGPrO8)I zuG$rmC)Ttd-g~UggiGS{WnJHEqe^PRo|Q3Xcn``btnXa+`0Z@HR-u?i)|Z=V;f9G} zEmtFq|C~*JOy$@wM+b*mE;<3VpBMS^Vo=f2)kA%@{a4XVzfrdM=+e187XOY}-N9s% z;7aylcENwqYY?|LE$cQT&kUgj;pj}FilMhvhxfz|>h6yV5chk*_k=ijM71Vxq-;-9 z!D7)-^i~?AWg}1RQaOF5wnAQiY>{{LC5J+vB)QNsf37H-Dq`AEHRtJxANRtEM`x%$ z_R+r$XSrItuewFUD_ab?{eb0p14%2!z%})6Bm&^+9p=sINXz;Ym&Bn>4x&NGN|BY+2d)ikydpk zeStX1$E9q8IwxF5?hx|Bn7V{yKNRJIc40g)FPG^}+K;k96g6a@dKpgi# zDh-7^0luGeDM2*`xStebdcKa}4fkpSZibE8nzJ{%sFNaJ zEVbk?IMR=#jNwv;r@&vRejTP zgE1&*G=Xd2)P(8%%-GSjCXnJ{77B?vCc%yAN|gPG7lWmLP{`I21(o0E$%Dg#MX1v? zxL9_0(DGKuV(v8K`&U*1HS>n-K1P*ixulT2%-6r+)O-soA!dJ0fBKmpc`bpI-!s>d zlPgtT=U17ARz`I@l%2W#cWCS>vi^X&8;eOGLeAkb&Zxy;rl}F#X~Z-k~52rGR3UbP7ia`JZL>#F`n)A9ICFr zF^V~w=n~ACbxL`ESAnIW+tYJaO^e?WHu{Y=Ii0%?ncDi}UjMk1IbLdZAeCa3v8G2! zqGvYCjG>nfx#L*MZ9<&6iQ`Rr!9+MYo1dDUS;2U)v*Y`6%B(j!Xhqo9YMFBg)_k8X zB1Yf;foZ|`3R4C)Clt0>XHX6ig2Ta5d+X^*+^MyPd+`vWs$jnwJ zCF5CDy|Bl@g79Bok)Ar0AP6anf#kkp@|BizKCHamr-P^SUq22@2#K7t!2NE=TnJt% zzh!m&nnwQt3iBiesc7=BR#^f6AlOe$$LmVV)VH`+fM+A~s<9@p32T?xd$}e1X2@{b zs~bn&R-s!$aMi#&)--TSj>?C?_X7J{?#n{Nc{4ScnNOU@{(Sk=g6Ss7m1uFVKtgsO zZubV5?sGO``_=3YaazB+WK-fO34QBkwA~F|-<0nlh$0JhT2)~0jsCEcLG{!tyQOO_ zcX_6IHC%_$S0I?<i{~fDe zck%zuwNXAapl%5eM+r|~=CR9`x>+0rp~KD0=L@n_YY)VyT|?6T!w*x?TO_k*>Sm5d zy;H!*s8nPg54EQuh++zD>fdbr&&~Ia1|lGswJgWli0l;DSE+vQU60+BvEJ}45qZ(E zMxZ$b3`iR9$DO~n{?9ieA5hoeTP5?kW9&GXywua!xOxBWEV54jZ=6|=)VZvmOEK0H z9bvQK`CDH=P6y7n<&7LoeJ{SWfLI4C963e6&%;+zj_$w^*`z~5J+mb>ak(NK8-(Fp z(J2|1%!>T3nGDV{$GGw1!&2EVU?uvTi8uWvQvCBc5{~79#a8molIhs9OjRV-#G?|q zwTA=9x7wsqw$t8Xp8ny}>3&mIiXjBk`S$`>6-NH335o_9ZbieNwXBk8+P_&Vc6Kt1 zqcfppgX9M5?#CesT!YS8TD#7mqYw`Q#Q9I6pfa9WA^0uVD6PQRPe4jpkGS&v`vuri zGRPZVdt{cCU_ue_tZV=o6A5U=;(@wm;LQ$9#4u~1x7qL>Lg^40gm#u>qM^07mLwz% zz?K~^IMhW8^%?#=6QP{8b6uvJ-N)Q~V(Ab}R#O|qas+W$i_NDU66O<5_Dp>y15t|V z0p(tm<@l>T7JwKeojQLt9=Vt{QTk~w2L=Kg^123KQ;L>P1Sg>epCo~{@-e+w%PSu` zNdNF)rs(isx5(s4!hAnv-zPHGvXK<)U5c_h01JxsJd8-=U0?gi=o$t^mhueeZ}4rH zbUJ7yos8HL#jpn9j%~tr2_GF9nAM`C(NgmKAy2|>!L3}!`tp|&3N-%;B-bxnlwn+MBb&oC*< zR??z><+}aS5U1nX)Y@9BY!XzgOLkWAb~*jGwZs`+{v~f9+P250$-3sjWTM;ttd?(Q z`JvIbb*}!%-is#8uBPNpcPn#MD&dCXE8Hs<$|Rw(k2mwK5>JNCZ|9cdX31uYudbPN z%x+)X_8<0?kGq=ROxIQ7)i%fTC<*JWbY`C91gEHFug`f&07OkGvU(h=kW-|MVhPM+CgitaP=!+D!AZDuBxcmzoIfJ6vd8>HWcTp(itf@ ztfyX1H@3<$mu&oT0@ZQepf{{CjVln6KfCoJZiqg$2fAay$gF8Td$nv}mu(vXR#LZq z1ap~bj#hwz4uCCpIU3n+FQ_(B`&mLe$7`ea!U0#eqPByGiVOhNcCMv>mj}uC1`@#> zstzE9Mw6IxyLA5StEuK{ESmdxS5?>d#!+MfA|O!;6w$~^6Sl&6Nyf!;*n0?+9GR8? z3H@w<`K3RWT)fHOvwVxYv}+F}ro-P9Af5**m?U(mDJtbFWHHA+a$DCKnlsR+ZF z!Y?dpL%NE*nz%2V=!ZCCT8z-K5_hJnB0$)bh&y_ou>PNSKb1nP0`wDeQrofG@Q< zF1}rS=!=$m)bNy6BdOnmvedL()ncZg&~CDd-sRESB!qS~Pf$0X(V~GnyhZi$tw@CH z-Y8WP0Q{E_W@xqEQOL159vw!<4)=_BELW*B|JIO4YwRtLl#Q#zcYHTJ#7^TPZ1HJO zgP$cN7leWdtw6M+XH&P~oJabAQYN5BuPiGwQ(tHa(~pVR=ymcZ^v@{XQ60$bAYIq! zD-NGeFIs#pxIZbBN}-?EWbPN--LyC@w!Ws%#%-XG>>mHQIcfk6@DE8ywbk~wqYPiqR)_d zy!X~Pt6P{^7_;7v@@Zm{=}V4x6)4I5tPr?&4S-BOq}X9eTK)3TfvJtY{P~P1q;c<5Gs#ivfoMl7yfW%w((Qn5^3x&gm7~yJlUHudvb>%8 zB2pj{30Up)FS>@17<|F9+4G(caHMe`X$2nRqg}bk$$%564T2XoJR^f%PaeapN+Usv zoZCI7gC!KV>QxRF_uo$KwYu$CEpt|{rq-&fIa0_@9DM3C91jX!%udT-b#)zYpU&-d z)5r-w+o48hQZlZmsvxuW61$t#O~Ml{R+|Il~oK#{8GvSmoO-o!#&0EDZ)L8Ex9s1#wvg=M#Q-qwG#we1qFE z2W(VSezN?_RoPH3SJqN`K%j2*p#!XE9Q>Cprqs?PsY5)4R1IppkAw^Ew3ob@Gc->`9t)?((q#{WrZ|D>iF=;7HgFk&0q}x0Q zak`Wkmr;CzY`YUV;eWcorZzA|g-Y`kYXR`d$KC=>Q?EbIw(w$w`%H?G?19%V||%e!;6GF7 z2qBg;8zmh7hy5GcXG$0Wy2Pds3c648p|^DfDr8?7{B{o28TwEq5c_Ra6bo`emw7VjC_)62$^IA}9fp_CPHPDkp@$>nG$?dkQRjKzcUNF5UAT|t7 zdkpoTk+55F*VFhgDb#P1Wzeq6$2(1ZW}4tGrPolT6fJEcGb?7FhoW!}&le$=AbORw z_IJk;h5%ItcbcCj*D@=DTgS>YtZd~jSHdAJ;i}%5{iUq{t}<@EBYl9 z_LSjrqsg7b=&kk!=nJ)yNmAc73}hQ0`SsO|b3`_@imzplNSG{xap&s1(QBNQ5T+N- zVDj;E*~#-cbGK!CC%J*>phb;dl{esMviM#U#TXFwQwZxnb^^)NtuAlKhveHpfiKoJ%0JbW{XL|fV zwVK_~tKS;;f}Oq`BhD`jHdAdPG=*gxxpxNuWe4K5C3UAkMz+ojebB(Kj)&@#<-W$8jf}U_B^gVTRR@ zff6ZgUwpqGLT{n1x701FiFnu)=lpkWc4>P=TGI4@LzJ3y|7lK9p>D4Ew+U>`kdWw& zH+$qwN8D}U5=uhlP)6=a2;xAxUooN!To2lov(n2l42-Cwal8>m6!5 z^nJbjwHm!Dse;xeeh9~D>Y7}JTV;`E9%aViQn|-;-zrO8NRN|0_)#Hhxs)L$1x9mr zLvIY1+B{k}dQF4C^*BsWGcBP_%ljH`SYmTn5^I!Yy@kS}lGKlJa`g`{TGT8`8g8&H zduQT*%^V*MUHTG?IALXc!1u-q$KhmKYQOn5pW_b;%7tjj%w7vq?QpNspI6XjZCTuK zz+plfr%_02r#_^tYk4&xan?TmDevl>6>@1*%9(Fq%DLBLx7ZIhPzf*l^$AoW36Obr zF17ve3S$W{Fo;PX5@sV@0>!ICgG&rnR>a7coMpn37}j3~sRaH875?};xQJ5%%DH*s z^Q9ld`tysU4+b|7_AZ(H{&!;1KYk;O2O%7%r(^iXfjQXO;Rwv>`|jXx(7}%lB^-+d zmO?<-68rBj{Lx5NX$Xb1i`{cO2K|8La1vTYNzL=eUl02$MskEsrCnvqZ|98{`q5Yv z3P0bhZ-4p#s|K$sLE|;@H#_tnKCM)?KA+9#tW}MaIr{T(S?y+hiiGX(wCaC!^T%77 zNdPR{c{{0oY;QS}p|`JbBlVCg^uO8_%L=`PP#nv#y$!zyy}g4alXbK&{`tr7-iqP> zP0UtUL@lUR<70aSj9T-2h@T#x0q`2oWUlFQ!<)zUXb14`J`#b+zcEAq>R9X@;B`k> z4{=8P^*?_bFc)B=FZe`T9X}ZHFp$!`=6~a={%iuO6j{uoO$Eo!pn(DmFJW^G9GOumOiku%mf@8i^J5FMbUAIU;}i04V^f zUjOCsAAwW|HKRpZSx=(TY{;ea>xdEvMKgBg@54!5)#B~e5Ucw&1gVkaHO*lAlCGfIPvV)PeSd>$aF>1@kfAy#AX4*{Y>oIteWl{HHc*8aLn{zM znhl*wG!elE!yqN)JB(@B3T0X=z-5)9i*dFr1eANX#FXe48{WJF);CS4#_@a9qel!l zLo5=AcY!e3lbb-*K+mJ4ZhwqgAjKpaKcp%{R zbBQqic*jsHEv6Bm_UUM+g*#SXdGym*6I_2i(AHGp9P4}}!1u82RIQDZHWDo{{y`jR z)<;3ehmHbn-qV1dN(I=yjjk9r*h8GHOgu=~Eo-@__<$;(<`u;+6ANkJNdctGHSX4Y z^M(2cJUjX4B~`pIrwe;EdCSj#e|PL4ruT_CKxkA_b|LtsqzYWY7QpYK5&pgP_IOCh z29az!D61gAb^=g@h0=05RHqT9?Oo=ad*DYTtz5#Qu$JQmO#tu8)lrDjbTT}v;+=i} zngx=Eixl-aK^R=Uum2ST(RBRoAeEe(+A~a4 zN#YItaRN5mBe^NFf%TW%3*>d4F9Js{M&~!v_^>W;|5{~TS6&yJLFvV>y=9vviwU4J z!y{Vg30fN0(!c}a`4EXWvz3FS1b{3-mOW3kKk!^NcUnS91Do8&0>mx-#<15G5dU2* zn@*3Y)_5f5aBp%tvzD>}H4I$ptD>*C>kDVoBc7in3*P;cYwOq8KS~pJ&gQxINuDaI z_USDf(H*nk5+A{Vg~DT7zSL%c*ef+sLm3bUOIX7LioMnf(@5y4Vu&1uT=RKQ&R(&Y?WxjHt4MF${+@FiJCC6UK~|Y8Cy00((Tjr4_R-Shlj1|%k`8_&Bl+q6&>+K3=@Lf@j<7h9 zlouJ1#&XzmC@6VZZJKP;qWZKB8AvKDJ zFkR8?Laqx1&ox?qJ%=!um=+|!rw1ta$`|Hs=e&N~1|J!sJfjf16+m_GKpfC*J5i=- zlz0W3ngJZKjB?PXiH4wcB%y<=?ybDKRkAEg;OWk1Lk5OzZzc`BQ#FxF{CcNWnY9!_ z9rMj9r!PoO1Yt!ljd^dcwgr?H5d`(Rk}oe+`c4|`vZ@Hlh9Hk*1> zy6yH3u8iCYh>r!&6!$B3urc)UkS8BAW`Du1>@Jc&k|$6E z9PpL5a!6)I-Y)IryCL&D&YR~9NKv7u_M#S@=_X11swYRvHbX_7=Q3*(k@D*<@FE$A zu1>BTfJtX#RUknPAfeGH%X)_C-N8dw%{rDA8N%sn-d}5Xzg-DY|8v$yy_$WLduCqR z>*A*XA$yPx+1_K$>$?s?iMu?p6gWeor@bLG%kDC7q;;1r()@Q^V{u`g75rMBqv&vU zu&^_#yLHIiErIU|^R1F2F7^Q8D~L5@VuatPMyDp2qOXth7Yz3kI@q!)x!lVv>_h`4*x8%-R|CI- zV2cPTr-2+VtngMKum

A3f4z3qrgs6z5U>*!)_MH#H499MW0`DhFF_ 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∾w6dO((y6Ir<;HCZiI5}&CA#^-RCoeHsAGYf7TbxVxU1=m@P}8zE2bB0Kl%p; z1tpX?Ar`q}Gb|YGW4vZPPVg!!dzemuuFX0)kIY7!d5%BSn0eFBmC|8{VH%oW=ag{ zv@WbFW+jibZ5+{f24&urz#-*n* zRSkP?J$qhIDzYDuY0#?RMF7qz0$ql|WDe%=&$v*>lA;rCK*BTae3{XwFUM*WynWXT zWr`7Q81Y1SMYNp|lDO5AhVgm7fOl8>Y$oayYuxHA>&2{=Fs6{6X|$)Ca^09^zmxL0 zl%)0bNhvl)naTO~6g*S4tv>PzWp9-|E+ti#(qVChXJ(gR(cOjF2!rB>)|67x<}cmb zrr898O226Ibxuu*0a#QHrR~u7Cot z+Jx}>q@mo?+wKYHdcbi)$4%cejP7n7e}`zVRT&vRwi3Oiv#7 zDr%=x)EqI@4+5#3m36i--#({)@!GNm@g4Pj@eA_@m^b8*?27$~f|9Jw@;m%?N>#}; z61O*eIaob=%Pvm2+(z??)K)Bp0{2=qifGsZ+1>mF_y%R>h8v#U~)d zbnXc2+(q&i@|81BIjmhZUV7XC5`Qsse61HI@%63VX+k`x6AEaV`1y+o;AS_DdfD*L~1<%LtB`^bs;IqQ;w|w-h$MmT>{_J{t+aaW~~E zeO_jb#8s~r*_}~qs{*JLhRMXip4s|*pI$W2wS7hK$)_Nh+>NFQEyZNy;31H40+g3K z1zUFcaD@NZoe6!vXS(``?KKc2JL#3=R1;b5TN*oa2iIS0s>oboE~*PZHhI@o*Zp>p zS%qW26n75OphZ1Kaa9&?mWUQUefZ?0WKX?JT)Dl=l)LSrKbxEf!z{Lv9leVEEo$;@ zk{DckCWR-^#~@3us||G0o>WIp}OAb1t-aj-90B!<6VX z*~+9Y4eojpxZQjVWP)nv`B!9+zU93B8K73^Dr{E_sM}!&N<3BSl)X_w-MT6`8 z>9%_Eca&>aF!dlJKu1HRetxcPH^K4s6N{%|c(nY;LKS`>d|!|s?ZR%kga6A}zLS>b z>}8N_!Ro>7!#NHGO@AL8J4iX;3DVxyNZ0BCV6kR(^lM1@SI8niFi<2^dtWyz1@FyI zAa~yaDb=L0UMl_H{|>qeJa=?!Uqpk@A4xz04dp2uNafqznYTgioaOmy$V zLluBH+^;|=bbfUvc|G!^)XnVsNBr|O&@aL~ER6QOn6QV;}@_yFy& z8c0>b2NX4~0h$z}Ln_8wopY4N8}h*~yV;4f+zz0_gA-Mj-Q+=#`5&?Ywi@vgsx2@F z;?J|gTRoNS(v#nKZU2Vl=)jZ|upNDJlf4KK1MES?>mhIs?`8t=;~@~9ANB(qE*$Wu z-N}HNx1%_v7MoE8Lf+L-3~~rCoCcUc;B3exWjSe%&%sNj?=2BQ=b&8rqWrfXs25i} z96{yqAw`*`$8&ClK8DPP114apQ$TlT-3{V=cmO$icTn<17s3%%X(Ziezo^OXtjvM9 z`*gebXxLm@Fx50asI|l2eEmPeLrRX00v%Z@+^_kecSN@yQmgX-mAu!b(WAhQi-^%~ zfavnP%*r!rw|UQI$!Y<=DU}_)Mo4;+ncX53TEwN{+4mH+i99;&I1N<f8dY*sH+TaS->}54fSTlM7>Hyu18uM70NpW(@^0y? z{bY3yZG%o1e3={fI%9S}IOn6h4*y%!VVcBr1ps zSZ|tzEWU3D@@Np2Gz0~H=0K9CqX(#PzK&8fs~dr2BYgl>ZVLz1*ajL{sWUPFp7Ma` zQ8girpn7|c3a0BUX1`3*h%$xMA8udEvlN2aozv{s4C31Dj3z%$qaYl)|qSbS2f$DjUrCppbYRu;xH`^U_QKKELBprhw0#ha-=-SERm3(A8Ble|L_eQvx$ zkcFyg_KFpO!WNWdCfqE56MIDyoldEZ2ZN8z>2`|zJ_LMj8DOC-VLm|{zxW|^T41fo zAu_`_iu^nKQOfzBUv;?>dm#BWZqQR&?fyhtrPB!9$xSKGr(YFFe)+6_oGj5H$kUM% zuYEwK-t~Pp{_72bxuB~wB=AJ@Buq{K->SX%$?77}5juAQ%nNP{S)$(qK6hk+`;3$- zRORD8w>M;f54t)&t4QS9zMz}Dzymf0XHWgBso$RyuLZ_0H)-dWUikWsq6fft=XoxC z7t8uF?0dHZF_KWuC#B5)X%N)JTg9L+PEe<05z8TzGtmGal;ONaG&QP$8~C@v|JMdr z%H~96U2axkA0jJv&GInOPNAdK(GagSN5wXVi|7|JiRlk@>;E#~CQ~FOF`0>d!TW+N z{s6{uBtf134a~+J$B%MMN{|dmcnuR9yZDQ3iRCStVJSvMy`KfS0wViusI=2>5#Mh1 z9~E?|N-pj=_RDL(P8}^;aP?IA1ERB`BRtUYf4Y_Ce|jqoRV9p0kBG$uyKZYReXT!m z6WPjwuaN{7-J9f9h&JiEs+_pNBfTp`r?#b{ocLh7jwNx`>lYN{p?Np*?)`T;fxqB@ z86IGuNfMCckeycloak-extensions + authenticator-required-action keycloak-extension-rest user-management @@ -53,6 +54,7 @@ 5.5.0 5.11.3 2.24.1 + 1.47.0 @@ -100,7 +102,13 @@ ${version.keycloak} provided - + + + com.microsoft.playwright + playwright + ${version.playwright} + test +