From 8fb5cf0a51b64eca37f271fdc9f57811d897a416 Mon Sep 17 00:00:00 2001 From: jscyo Date: Thu, 7 Jul 2022 18:56:21 +0530 Subject: [PATCH 01/14] adds useridmapping --- .../UserIdMappingExistsInfo.java | 37 ++++++++++++++++++ .../useridmapping/UserIdMappingInfo.java | 34 ++++++++++++++++ .../useridmapping/UserIdMappingStorage.java | 39 +++++++++++++++++++ .../exception/UnknownMappingException.java | 25 ++++++++++++ .../UnknownSuperTokensUserIdException.java | 24 ++++++++++++ 5 files changed, 159 insertions(+) create mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java create mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java create mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java create mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java create mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java new file mode 100644 index 00000000..35397bf2 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.useridmapping; + +public class UserIdMappingExistsInfo { + public final boolean doesMappingExist; + + public final boolean doesSuperTokensUserIdExist; + + public final boolean doesExternalUserIdExist; + + public UserIdMappingExistsInfo() { + this.doesMappingExist = false; + this.doesSuperTokensUserIdExist = false; + this.doesExternalUserIdExist = false; + } + + public UserIdMappingExistsInfo(boolean doesSuperTokensUserIdExist, boolean doesExternalUserIdExist) { + this.doesMappingExist = true; + this.doesSuperTokensUserIdExist = doesSuperTokensUserIdExist; + this.doesExternalUserIdExist = doesExternalUserIdExist; + } +} diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java new file mode 100644 index 00000000..378240a0 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.useridmapping; + +import javax.annotation.Nullable; + +public class UserIdMappingInfo { + + public final String superTokensUserId; + + public final String externalUserId; + + public final @Nullable String externalUserIdInfo; + + public UserIdMappingInfo(String superTokensUserId, String externalUserId, @Nullable String externalUserIdInfo) { + this.superTokensUserId = superTokensUserId; + this.externalUserId = externalUserId; + this.externalUserIdInfo = externalUserIdInfo; + } +} \ No newline at end of file diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java new file mode 100644 index 00000000..1dba8634 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.useridmapping; + +import io.supertokens.pluginInterface.Storage; +import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.useridmapping.exception.UnknownMappingException; +import io.supertokens.pluginInterface.useridmapping.exception.UnknownSuperTokensUserIdException; + +public interface UserIdMappingStorage extends Storage { + + UserIdMappingExistsInfo createUserIdMapping(String superTokensUserId, String externalUserId) + throws StorageQueryException, UnknownSuperTokensUserIdException; + + boolean deleteUserIdMapping(String usersId, Boolean isSuperTokensUserId) throws StorageQueryException; + + UserIdMappingInfo[] getUserIdMapping(String userId, String userIdType) + throws StorageQueryException, UnknownMappingException; + + void updateExternalUserIdInfo(String userId, String userIdType, String externalUserIdInfo) + throws StorageQueryException, UnknownMappingException; + + boolean isSuperTokensUserId(String userId) throws StorageQueryException; + +} diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java new file mode 100644 index 00000000..a44e66fa --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.useridmapping.exception; + +import java.io.Serial; + +public class UnknownMappingException extends Exception { + + @Serial + private static final long serialVersionUID = 5277217387446836813L; +} diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java new file mode 100644 index 00000000..d04836fc --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.useridmapping.exception; + +import java.io.Serial; + +public class UnknownSuperTokensUserIdException extends Exception { + @Serial + private static final long serialVersionUID = -2468061107846190216L; +} From ddede93de47a5d1fd7b7c4beadf4d0608cf9aeb2 Mon Sep 17 00:00:00 2001 From: jscyo Date: Thu, 7 Jul 2022 19:38:54 +0530 Subject: [PATCH 02/14] updates CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57269a60..f578cc9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +- UserId Mapping interface + ## [2.15.0] - 2022-06-07 - Changes name of `getAllSessionHandlesForUser` to `getAllNonExpiredSessionHandlesForUser`. From 8aa1ca95d502f43e3511d1b184dab26231473d49 Mon Sep 17 00:00:00 2001 From: jscyo Date: Fri, 8 Jul 2022 11:34:15 +0530 Subject: [PATCH 03/14] implements feedback --- .../authRecipe/AuthRecipeStorage.java | 2 + ...rIdMappingInfo.java => UserIdMapping.java} | 4 +- .../UserIdMappingExistsInfo.java | 37 ------------------- .../useridmapping/UserIdMappingStorage.java | 18 ++++----- .../UnknownSuperTokensUserIdException.java | 2 +- ...ption.java => UserIdMappingException.java} | 5 +-- 6 files changed, 16 insertions(+), 52 deletions(-) rename src/main/java/io/supertokens/pluginInterface/useridmapping/{UserIdMappingInfo.java => UserIdMapping.java} (88%) delete mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java rename src/main/java/io/supertokens/pluginInterface/useridmapping/exception/{UnknownMappingException.java => UserIdMappingException.java} (86%) diff --git a/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java b/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java index 81b1845d..caa30105 100644 --- a/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java @@ -31,4 +31,6 @@ public interface AuthRecipeStorage extends Storage { AuthRecipeUserInfo[] getUsers(@Nonnull Integer limit, @Nonnull String timeJoinedOrder, @Nullable RECIPE_ID[] includeRecipeIds, @Nullable String userId, @Nullable Long timeJoined) throws StorageQueryException; + + boolean isSuperTokensUserId(String userId) throws StorageQueryException; } diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java similarity index 88% rename from src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java rename to src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java index 378240a0..e45a8db7 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingInfo.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java @@ -18,7 +18,7 @@ import javax.annotation.Nullable; -public class UserIdMappingInfo { +public class UserIdMapping { public final String superTokensUserId; @@ -26,7 +26,7 @@ public class UserIdMappingInfo { public final @Nullable String externalUserIdInfo; - public UserIdMappingInfo(String superTokensUserId, String externalUserId, @Nullable String externalUserIdInfo) { + public UserIdMapping(String superTokensUserId, String externalUserId, @Nullable String externalUserIdInfo) { this.superTokensUserId = superTokensUserId; this.externalUserId = externalUserId; this.externalUserIdInfo = externalUserIdInfo; diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java deleted file mode 100644 index 35397bf2..00000000 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingExistsInfo.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. - * - * This software is licensed under the Apache License, Version 2.0 (the - * "License") as published by the Apache Software Foundation. - * - * You may not use this file except in compliance with the License. You may - * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -package io.supertokens.pluginInterface.useridmapping; - -public class UserIdMappingExistsInfo { - public final boolean doesMappingExist; - - public final boolean doesSuperTokensUserIdExist; - - public final boolean doesExternalUserIdExist; - - public UserIdMappingExistsInfo() { - this.doesMappingExist = false; - this.doesSuperTokensUserIdExist = false; - this.doesExternalUserIdExist = false; - } - - public UserIdMappingExistsInfo(boolean doesSuperTokensUserIdExist, boolean doesExternalUserIdExist) { - this.doesMappingExist = true; - this.doesSuperTokensUserIdExist = doesSuperTokensUserIdExist; - this.doesExternalUserIdExist = doesExternalUserIdExist; - } -} diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java index 1dba8634..1808fc9e 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java @@ -18,22 +18,22 @@ import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.StorageQueryException; -import io.supertokens.pluginInterface.useridmapping.exception.UnknownMappingException; import io.supertokens.pluginInterface.useridmapping.exception.UnknownSuperTokensUserIdException; +import javax.annotation.Nullable; + public interface UserIdMappingStorage extends Storage { - UserIdMappingExistsInfo createUserIdMapping(String superTokensUserId, String externalUserId) - throws StorageQueryException, UnknownSuperTokensUserIdException; + void createUserIdMapping(String superTokensUserId, String externalUserId) + throws StorageQueryException, UnknownSuperTokensUserIdException, IllegalArgumentException; - boolean deleteUserIdMapping(String usersId, Boolean isSuperTokensUserId) throws StorageQueryException; + boolean deleteUserIdMapping(String userId, boolean isSuperTokensUserId) throws StorageQueryException; - UserIdMappingInfo[] getUserIdMapping(String userId, String userIdType) - throws StorageQueryException, UnknownMappingException; + UserIdMapping getUserIdMapping(String userId, boolean isSuperTokensUserId) throws StorageQueryException; - void updateExternalUserIdInfo(String userId, String userIdType, String externalUserIdInfo) - throws StorageQueryException, UnknownMappingException; + UserIdMapping[] getUserIdMapping(String userId) throws StorageQueryException; - boolean isSuperTokensUserId(String userId) throws StorageQueryException; + boolean updateOrDeleteExternalUserIdInfo(String userId, boolean isSuperTokensUserId, + @Nullable String externalUserIdInfo) throws StorageQueryException; } diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java index d04836fc..042017e2 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownSuperTokensUserIdException.java @@ -18,7 +18,7 @@ import java.io.Serial; -public class UnknownSuperTokensUserIdException extends Exception { +public class UnknownSuperTokensUserIdException extends UserIdMappingException { @Serial private static final long serialVersionUID = -2468061107846190216L; } diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingException.java similarity index 86% rename from src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java rename to src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingException.java index a44e66fa..48d3e5f4 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UnknownMappingException.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingException.java @@ -18,8 +18,7 @@ import java.io.Serial; -public class UnknownMappingException extends Exception { - +public class UserIdMappingException extends Exception { @Serial - private static final long serialVersionUID = 5277217387446836813L; + private static final long serialVersionUID = -7930311777814572808L; } From a0a65d160d9bd20a2d5d49a6f86f303c5e27a848 Mon Sep 17 00:00:00 2001 From: jscyo Date: Fri, 8 Jul 2022 12:38:22 +0530 Subject: [PATCH 04/14] adds feedback --- .../authRecipe/AuthRecipeStorage.java | 2 +- .../useridmapping/UserIdMappingStorage.java | 3 ++- .../UserIdMappingExistsException.java | 24 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java diff --git a/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java b/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java index caa30105..48fbc962 100644 --- a/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/authRecipe/AuthRecipeStorage.java @@ -32,5 +32,5 @@ AuthRecipeUserInfo[] getUsers(@Nonnull Integer limit, @Nonnull String timeJoined @Nullable RECIPE_ID[] includeRecipeIds, @Nullable String userId, @Nullable Long timeJoined) throws StorageQueryException; - boolean isSuperTokensUserId(String userId) throws StorageQueryException; + boolean doesUserIdExist(String userId) throws StorageQueryException; } diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java index 1808fc9e..cccca301 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java @@ -19,13 +19,14 @@ import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.StorageQueryException; import io.supertokens.pluginInterface.useridmapping.exception.UnknownSuperTokensUserIdException; +import io.supertokens.pluginInterface.useridmapping.exception.UserIdMappingExistsException; import javax.annotation.Nullable; public interface UserIdMappingStorage extends Storage { void createUserIdMapping(String superTokensUserId, String externalUserId) - throws StorageQueryException, UnknownSuperTokensUserIdException, IllegalArgumentException; + throws StorageQueryException, UnknownSuperTokensUserIdException, UserIdMappingExistsException; boolean deleteUserIdMapping(String userId, boolean isSuperTokensUserId) throws StorageQueryException; diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java new file mode 100644 index 00000000..16c2b1b4 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.useridmapping.exception; + +import java.io.Serial; + +public class UserIdMappingExistsException extends UserIdMappingException { + @Serial + private static final long serialVersionUID = -492689371744874366L; +} From 17b42dea5402961e8e1637868011d27208883b95 Mon Sep 17 00:00:00 2001 From: jscyo Date: Fri, 8 Jul 2022 12:53:53 +0530 Subject: [PATCH 05/14] adds feedback --- .../useridmapping/UserIdMappingStorage.java | 4 ++-- ...=> UserIdMappingAlreadyExistsException.java} | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) rename src/main/java/io/supertokens/pluginInterface/useridmapping/exception/{UserIdMappingExistsException.java => UserIdMappingAlreadyExistsException.java} (57%) diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java index cccca301..3849037b 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java @@ -19,14 +19,14 @@ import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.StorageQueryException; import io.supertokens.pluginInterface.useridmapping.exception.UnknownSuperTokensUserIdException; -import io.supertokens.pluginInterface.useridmapping.exception.UserIdMappingExistsException; +import io.supertokens.pluginInterface.useridmapping.exception.UserIdMappingAlreadyExistsException; import javax.annotation.Nullable; public interface UserIdMappingStorage extends Storage { void createUserIdMapping(String superTokensUserId, String externalUserId) - throws StorageQueryException, UnknownSuperTokensUserIdException, UserIdMappingExistsException; + throws StorageQueryException, UnknownSuperTokensUserIdException, UserIdMappingAlreadyExistsException; boolean deleteUserIdMapping(String userId, boolean isSuperTokensUserId) throws StorageQueryException; diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingAlreadyExistsException.java similarity index 57% rename from src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java rename to src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingAlreadyExistsException.java index 16c2b1b4..567a8c4d 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingExistsException.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/exception/UserIdMappingAlreadyExistsException.java @@ -18,7 +18,22 @@ import java.io.Serial; -public class UserIdMappingExistsException extends UserIdMappingException { +public class UserIdMappingAlreadyExistsException extends UserIdMappingException { @Serial private static final long serialVersionUID = -492689371744874366L; + + public final boolean doesSuperTokensUserIdExist; + + public final boolean doesExternalUserIdExist; + + public UserIdMappingAlreadyExistsException(boolean doesSuperTokensUserIdExist, boolean doesExternalUserIdExist) { + + if (!doesExternalUserIdExist && !doesSuperTokensUserIdExist) { + throw new IllegalArgumentException("At least one of superTokensUserId or externalUserId should exist"); + } else { + + this.doesSuperTokensUserIdExist = doesSuperTokensUserIdExist; + this.doesExternalUserIdExist = doesExternalUserIdExist; + } + } } From 0d65346890e19915f2575cfbadca621dc5a38460 Mon Sep 17 00:00:00 2001 From: jscyo Date: Fri, 8 Jul 2022 15:18:25 +0530 Subject: [PATCH 06/14] fixes missing param in interface --- .../pluginInterface/useridmapping/UserIdMappingStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java index 3849037b..9a0e45b8 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java @@ -25,7 +25,7 @@ public interface UserIdMappingStorage extends Storage { - void createUserIdMapping(String superTokensUserId, String externalUserId) + void createUserIdMapping(String superTokensUserId, String externalUserId, @Nullable String externalUserIdInfo) throws StorageQueryException, UnknownSuperTokensUserIdException, UserIdMappingAlreadyExistsException; boolean deleteUserIdMapping(String userId, boolean isSuperTokensUserId) throws StorageQueryException; From 58be03c86cc8720f00628fd3e2b3aadb4c2956e2 Mon Sep 17 00:00:00 2001 From: jscyo Date: Mon, 11 Jul 2022 13:34:54 +0530 Subject: [PATCH 07/14] adds recipe id --- src/main/java/io/supertokens/pluginInterface/RECIPE_ID.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/supertokens/pluginInterface/RECIPE_ID.java b/src/main/java/io/supertokens/pluginInterface/RECIPE_ID.java index 684fe3b2..4a78392f 100644 --- a/src/main/java/io/supertokens/pluginInterface/RECIPE_ID.java +++ b/src/main/java/io/supertokens/pluginInterface/RECIPE_ID.java @@ -21,7 +21,7 @@ public enum RECIPE_ID { EMAIL_PASSWORD("emailpassword"), THIRD_PARTY("thirdparty"), SESSION("session"), EMAIL_VERIFICATION("emailverification"), JWT("jwt"), PASSWORDLESS("passwordless"), USER_METADATA("usermetadata"), - USER_ROLES("userroles"); + USER_ROLES("userroles"), USER_ID_MAPPING("useridmapping"); private final String name; From c67e9a10cadfcb64f79d264e943d4af5be0dbc86 Mon Sep 17 00:00:00 2001 From: jscyo Date: Wed, 13 Jul 2022 17:00:12 +0530 Subject: [PATCH 08/14] adds equals function to userId mapping --- .../pluginInterface/useridmapping/UserIdMapping.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java index e45a8db7..667040c2 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMapping.java @@ -31,4 +31,15 @@ public UserIdMapping(String superTokensUserId, String externalUserId, @Nullable this.externalUserId = externalUserId; this.externalUserIdInfo = externalUserIdInfo; } + + @Override + public boolean equals(Object other) { + if (other instanceof UserIdMapping) { + UserIdMapping otherUserIdMapping = (UserIdMapping) other; + return otherUserIdMapping.superTokensUserId.equals(this.superTokensUserId) + && otherUserIdMapping.externalUserId.equals(this.externalUserId) + && otherUserIdMapping.externalUserIdInfo.equals(this.externalUserIdInfo); + } + return false; + } } \ No newline at end of file From 251971e72698da08e576e722603d270103e99343 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Tue, 26 Jul 2022 18:57:21 +0530 Subject: [PATCH 09/14] adding dev-v2.16.0 tag to this commit to ensure building --- ...2.15.0.jar => plugin-interface-2.16.0.jar} | Bin 47444 -> 51199 bytes 1 file changed, 0 insertions(+), 0 deletions(-) rename jar/{plugin-interface-2.15.0.jar => plugin-interface-2.16.0.jar} (65%) diff --git a/jar/plugin-interface-2.15.0.jar b/jar/plugin-interface-2.16.0.jar similarity index 65% rename from jar/plugin-interface-2.15.0.jar rename to jar/plugin-interface-2.16.0.jar index 917154371133ad05e15f833720b0379bececadb7..c9f3af8227d14d8e5ab199d784a93d2588ea4387 100644 GIT binary patch delta 8174 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 XGz8Sz$!R?io(R{2;L~LRf$F~it0ydG delta 5113 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 Date: Wed, 10 Aug 2022 18:20:20 +0530 Subject: [PATCH 10/14] feat: adds addtional function for userIdmapping (#41) * fixes function signiture * implements feedback * fixes comment * implements feedback * plugin fixes * implements feedback * implements feedback * updates CHANGELOG.md and version --- CHANGELOG.md | 7 ++++++ build.gradle | 2 +- .../supertokens/pluginInterface/Storage.java | 7 ++++++ .../EmailVerificationStorage.java | 3 ++- .../pluginInterface/jwt/JWTRecipeStorage.java | 4 ++-- .../nonAuthRecipe/NonAuthRecipeStorage.java | 24 +++++++++++++++++++ .../session/SessionStorage.java | 3 ++- .../useridmapping/UserIdMappingStorage.java | 7 ++++++ .../usermetadata/UserMetadataStorage.java | 3 ++- .../userroles/UserRolesStorage.java | 3 ++- 10 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/supertokens/pluginInterface/nonAuthRecipe/NonAuthRecipeStorage.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 9602ac67..3b01728b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [2.17.0] - 2022-08-10 + +- Adds `getUserIdMappingForSuperTokensIds` to the UserIdMapping Interface +- Adds `isUserIdBeingUsedInNonAuthRecipe` and `addInfoToNonAuthRecipesBasedOnUserId` to the Storage Interface +- Adds `NonAuthRecipeStorage` Interface +- All non-auth recipes now extend the `NonAuthRecipeStorage` Interface + ## [2.16.0] - 2022-07-25 - UserId Mapping interface diff --git a/build.gradle b/build.gradle index 56130f3e..2ccc2150 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-library' } -version = "2.16.0" +version = "2.17.0" repositories { mavenCentral() diff --git a/src/main/java/io/supertokens/pluginInterface/Storage.java b/src/main/java/io/supertokens/pluginInterface/Storage.java index 029da4e5..754f9590 100644 --- a/src/main/java/io/supertokens/pluginInterface/Storage.java +++ b/src/main/java/io/supertokens/pluginInterface/Storage.java @@ -49,4 +49,11 @@ public interface Storage { boolean canBeUsed(String configFilePath); + // this function will be used in the createUserIdMapping and deleteUserIdMapping functions to check if the userId is + // being used in NonAuth recipes. + boolean isUserIdBeingUsedInNonAuthRecipe(String className, String userId) throws StorageQueryException; + + // to be used for testing purposes only. This function will add dummy data to non-auth tables. + void addInfoToNonAuthRecipesBasedOnUserId(String className, String userId) throws StorageQueryException; + } diff --git a/src/main/java/io/supertokens/pluginInterface/emailverification/EmailVerificationStorage.java b/src/main/java/io/supertokens/pluginInterface/emailverification/EmailVerificationStorage.java index ed13d7e3..c9df0b26 100644 --- a/src/main/java/io/supertokens/pluginInterface/emailverification/EmailVerificationStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/emailverification/EmailVerificationStorage.java @@ -19,8 +19,9 @@ import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.emailverification.exception.DuplicateEmailVerificationTokenException; import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.nonAuthRecipe.NonAuthRecipeStorage; -public interface EmailVerificationStorage extends Storage { +public interface EmailVerificationStorage extends NonAuthRecipeStorage { void addEmailVerificationToken(EmailVerificationTokenInfo emailVerificationInfo) throws StorageQueryException, DuplicateEmailVerificationTokenException; diff --git a/src/main/java/io/supertokens/pluginInterface/jwt/JWTRecipeStorage.java b/src/main/java/io/supertokens/pluginInterface/jwt/JWTRecipeStorage.java index c4a7c73a..5296d722 100644 --- a/src/main/java/io/supertokens/pluginInterface/jwt/JWTRecipeStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/jwt/JWTRecipeStorage.java @@ -16,7 +16,7 @@ package io.supertokens.pluginInterface.jwt; -import io.supertokens.pluginInterface.Storage; +import io.supertokens.pluginInterface.nonAuthRecipe.NonAuthRecipeStorage; -public interface JWTRecipeStorage extends Storage { +public interface JWTRecipeStorage extends NonAuthRecipeStorage { } diff --git a/src/main/java/io/supertokens/pluginInterface/nonAuthRecipe/NonAuthRecipeStorage.java b/src/main/java/io/supertokens/pluginInterface/nonAuthRecipe/NonAuthRecipeStorage.java new file mode 100644 index 00000000..b31fce60 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/nonAuthRecipe/NonAuthRecipeStorage.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.pluginInterface.nonAuthRecipe; + +import io.supertokens.pluginInterface.Storage; + +// All Non-Auth Recipes will extend this interface. +// We will use this interface in testing to check If the createUserIdMapping and deleteUserIdMapping functions have checks for all nonAuthRecipes +public interface NonAuthRecipeStorage extends Storage { +} diff --git a/src/main/java/io/supertokens/pluginInterface/session/SessionStorage.java b/src/main/java/io/supertokens/pluginInterface/session/SessionStorage.java index 58bdfeae..638f2462 100644 --- a/src/main/java/io/supertokens/pluginInterface/session/SessionStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/session/SessionStorage.java @@ -19,10 +19,11 @@ import com.google.gson.JsonObject; import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.nonAuthRecipe.NonAuthRecipeStorage; import javax.annotation.Nullable; -public interface SessionStorage extends Storage { +public interface SessionStorage extends NonAuthRecipeStorage { void createNewSession(String sessionHandle, String userId, String refreshTokenHash2, JsonObject userDataInDatabase, long expiry, JsonObject userDataInJWT, long createdAtTime) throws StorageQueryException; diff --git a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java index 9a0e45b8..2f68c51c 100644 --- a/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/useridmapping/UserIdMappingStorage.java @@ -22,6 +22,8 @@ import io.supertokens.pluginInterface.useridmapping.exception.UserIdMappingAlreadyExistsException; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.HashMap; public interface UserIdMappingStorage extends Storage { @@ -37,4 +39,9 @@ void createUserIdMapping(String superTokensUserId, String externalUserId, @Nulla boolean updateOrDeleteExternalUserIdInfo(String userId, boolean isSuperTokensUserId, @Nullable String externalUserIdInfo) throws StorageQueryException; + // This function will be used to retrieve the userId mapping for a list of userIds. The key of the HashMap will be + // superTokensUserId and the value will be the externalUserId. If a mapping does not exist for an input userId, + // it will not be in a part of the returned HashMap + HashMap getUserIdMappingForSuperTokensIds(ArrayList userIds) throws StorageQueryException; + } diff --git a/src/main/java/io/supertokens/pluginInterface/usermetadata/UserMetadataStorage.java b/src/main/java/io/supertokens/pluginInterface/usermetadata/UserMetadataStorage.java index 46715ca6..560f77cf 100644 --- a/src/main/java/io/supertokens/pluginInterface/usermetadata/UserMetadataStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/usermetadata/UserMetadataStorage.java @@ -19,8 +19,9 @@ import com.google.gson.JsonObject; import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.nonAuthRecipe.NonAuthRecipeStorage; -public interface UserMetadataStorage extends Storage { +public interface UserMetadataStorage extends NonAuthRecipeStorage { JsonObject getUserMetadata(String userId) throws StorageQueryException; int deleteUserMetadata(String userId) throws StorageQueryException; diff --git a/src/main/java/io/supertokens/pluginInterface/userroles/UserRolesStorage.java b/src/main/java/io/supertokens/pluginInterface/userroles/UserRolesStorage.java index 216b7a2a..ddf91633 100644 --- a/src/main/java/io/supertokens/pluginInterface/userroles/UserRolesStorage.java +++ b/src/main/java/io/supertokens/pluginInterface/userroles/UserRolesStorage.java @@ -19,10 +19,11 @@ import com.google.gson.JsonObject; import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.nonAuthRecipe.NonAuthRecipeStorage; import io.supertokens.pluginInterface.userroles.exception.DuplicateUserRoleMappingException; import io.supertokens.pluginInterface.userroles.exception.UnknownRoleException; -public interface UserRolesStorage extends Storage { +public interface UserRolesStorage extends NonAuthRecipeStorage { // associate a userId with a role that exists void addRoleToUser(String userId, String role) From b85e7c74eaa364019fa57cbc57b631886a349df8 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Wed, 10 Aug 2022 19:17:05 +0530 Subject: [PATCH 11/14] adding dev-v2.17.0 tag to this commit to ensure building --- jar/plugin-interface-2.16.0.jar | Bin 51199 -> 0 bytes jar/plugin-interface-2.17.0.jar | Bin 0 -> 51939 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 jar/plugin-interface-2.16.0.jar create mode 100644 jar/plugin-interface-2.17.0.jar diff --git a/jar/plugin-interface-2.16.0.jar b/jar/plugin-interface-2.16.0.jar deleted file mode 100644 index c9f3af8227d14d8e5ab199d784a93d2588ea4387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51199 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 literal 0 HcmV?d00001 From 94bf4f4b812929cf75d46067888e0436337e8a92 Mon Sep 17 00:00:00 2001 From: Rishabh Poddar Date: Thu, 18 Aug 2022 12:07:26 +0530 Subject: [PATCH 12/14] feat: Implements log level interface change (#42) * initial changes to the interface * moves log config * updates version --- CHANGELOG.md | 4 ++++ build.gradle | 2 +- .../pluginInterface/LOG_LEVEL.java | 22 +++++++++++++++++++ .../supertokens/pluginInterface/Storage.java | 4 +++- 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b01728b..1879a9e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [2.18.0] - 2022-08-18 + +- Adds `LOG_LEVEL` enum, and changes `initFileLogging` interface function to accept a log level. + ## [2.17.0] - 2022-08-10 - Adds `getUserIdMappingForSuperTokensIds` to the UserIdMapping Interface diff --git a/build.gradle b/build.gradle index 2ccc2150..81dccd1f 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-library' } -version = "2.17.0" +version = "2.18.0" repositories { mavenCentral() diff --git a/src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java b/src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java new file mode 100644 index 00000000..c53c1578 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + */ + +package io.supertokens.pluginInterface; + +public enum LOG_LEVEL { + NONE, DEBUG, INFO, WARN, ERROR +} diff --git a/src/main/java/io/supertokens/pluginInterface/Storage.java b/src/main/java/io/supertokens/pluginInterface/Storage.java index 754f9590..2eb896a4 100644 --- a/src/main/java/io/supertokens/pluginInterface/Storage.java +++ b/src/main/java/io/supertokens/pluginInterface/Storage.java @@ -19,12 +19,14 @@ import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import java.util.Set; + public interface Storage { // if silent is true, do not log anything out on the console void constructor(String processId, boolean silent); - void loadConfig(String configFilePath); + void loadConfig(String configFilePath, Set logLevels); void initFileLogging(String infoLogPath, String errorLogPath); From 692209f8211c42523fd92d124fb5e87fb5db5a48 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Thu, 18 Aug 2022 12:13:07 +0530 Subject: [PATCH 13/14] adding dev-v2.18.0 tag to this commit to ensure building --- jar/plugin-interface-2.17.0.jar | Bin 51939 -> 0 bytes jar/plugin-interface-2.18.0.jar | Bin 0 -> 52789 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 jar/plugin-interface-2.17.0.jar create mode 100644 jar/plugin-interface-2.18.0.jar diff --git a/jar/plugin-interface-2.17.0.jar b/jar/plugin-interface-2.17.0.jar deleted file mode 100644 index 01a17668352d078579b35d1a404d8c2ba3c98a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51939 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 diff --git a/jar/plugin-interface-2.18.0.jar b/jar/plugin-interface-2.18.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..f69f74b777e6ead2fe8c438dd982cb63ca844deb GIT binary patch literal 52789 zcmb?@byVG1vNi7R?(P=c9fG^NyG!uk1PJZ~cZcAT-~@Mf5AGiLZn}GVI_dAtWahoQ z)?x9-@7CqAckQZEr|KxY1_grw0)m19$~8n$1p>T4zW)HcpaDx(Oht%ZN=}>+6iDHR z2W$O6PH+JaU;`G~Umuhel9Lh_Q&wS+6~B}n9+G)Y&oBZ1nx1BKc&tu|X_|F?XLASS zCu4y3|M{t)fZr|c|Mq!*eFX9MN1R<9Or2cptxfHm|K;O^e}CM;#?{=?PRh>3)XB`y z*z{k%o%-Lu-PPID$;sZv^zVO%54uWqJTMSYKj3Q#{3nJ~0Vb8cn^bnOcQQ0LWiYle zbau{+mzBq5MhfX?t0pE_;0M{cglS%9-Sj6>T$BvPK;iuS#U>=`%dFml-s1BsgeU)J zs%c05q!@S*$Ld*Mw#$yK^P^AwkB~s~p%p+BSVvMLwrSapErEj2ZK4y$ix@Z zxy;<+Lt~ciyYBEsQDIE}Ac69Yn{sCw#bGZ^9lhh=OugAR5yg|GNi8?nAuK|^EZzt2 zSgGEr4K2N@=P;{ozx?*4Y$H--!uNv;BUVDk6Ew4<5-sj$2?)q4l|W6-)7Gp)i)S+$ z-~?=MALlFa9 zCoR09;%60g?+xHEjmmMiiKx8d5le>Jf!ab7Sr83L-@ z7#W?v?8vG3Ty}VNpk|e1y*7RhiZ!*pIlMn|!b% z1b}o0ShD{eNUC<$cJ}Ue-<|#^Tq=FrgW<-Idt>I!_W7PNM`r_&3=L>U?HdO5SvxGrJ+-x$ba$c11WuS2WA)H}Rm0BzA5aR2b{S zZkR&oM?dEDnwmz6_!kF`{1R0blRa|8H?3gYM8mG-=R&DWDpG?5k5id$cmi!G5%^wx zL2vYN`DLmkj^w7PkSC9pGsZO}U%yzcvFE(8QO3OdF#0s~DUrQuI;x9? z#tGiP`YpD~PG%xoaM}}9>-%9(V#N;ulYOZB%vIB-NzU`aB4)>R{@`rR8%C>I4?o3{ zxxi@~d;kic0qgaDiNrs&_h%epzT<$^J9fpWs#PIwWF8tE?uwgEQ?jg)y&_*F4?icv z%BtQLC=ufUNgEyvS$)Od~1e*)mvVWCcz^t)aJ#nO*@(Yae0-Nhd?1 zCl8^Um0wAvd?dkje!s~Ma0xVqkC>cc&pV5ig2z3D423?K^;OSNHs+Ux_^Nv7NE+R| zR!Qc>8QQTK(y&3e< zycuFwNFeYk(*unct#(-6?qs}?fDGH_HiKmL8w$Qj^$dAiL1hyj#A`9QiQIS|l|^cO z%#ShRckBvroyS&{?i)!1KIG)SAKaX3R@!C)=-dToE3xufUJ;ft^ms508Z^E(vYGVE z^RI)tc2*AVY^hSz;O(Q_I~64?Ha4}V)^A8C0q;w5t4j9UnBiJN>)oV2c>Ih-g03Pz z^Q6AV$d~dk;?J=(%4i~1O8Is9Bb!e%zhaGk8m)w-d!v&1aj>Bb8-A+arFtzKMg)v( zyT^gA*QAP`*kXS-Q9gd^Y4rfETwFtv5FwcX5N``z+{Y!67!sS5j)$*&!UI^5ej<}h z6M}JQJRtEwvM*uj0Sop6I;|*tmo9RjyCDB(N|FA1N?EzP{Eb1vaQOJ#fG}DC$i}#T z&4jeNin67-9Uxe~HuaRUGqe9A5mS=2M^QxMdymcSFQTm_n4?;v3LE&fC*P4cYQmxv zzl4D(r3p7gottTRoykJyfpB?RV7)M$8Cg~bYvmz6l6mzuf-o`jU8>h;yZtENZO8q? z))pnuD;1?Mp^5B+Fym;$8gqeq*|D3}-EOz{JjmV44Tr50@DK$$mgKR5N+Qzz)cbJS zb_UUXA_U?>S&yX7`%$fxpAIE>mmBfzZa#<=UKcMow00c2pI+{@KKp(~Iz>HTqMLd7 zXe~;NUlI;+$&FDx5aT9nC(-6iYt;fe`k78qcd~}=4W(@rZjhY|6VgIPblY&;RgDUa zxx%=@bj{lt)Oh?kOO|I78!yrjo#yA$<@!P6ki#9#z*!qBc4bTE;>JLPRK4O>em^FH zkDl`%mk2PGA)}A$kH*ox(^T?6lQVS6UdF_&;j~`noD#EFc$yc#ihdjyH{tol=f!E8 zW(Br2zQI#TbdS9tOPo_V;bweQS8T933CJM%SQz9z_4=@KI7cTR@oF#?m?Ru~?|{ry zD90lw!7TH#?{>Ly6QPUnY_>CW@2#gdnhNF^56igl3%ztRCBLs3f+ z?UIopF_cJ@#EMYPtn{_ogI7h1P`idj32jpT7TNRR9N{bNRhxHkSD-S!+bZA6FHn4{&SJ8s zw};;*;$uFPYMsb5+7l)7l>D$@a<4Q_05saL= z71_8D*rGmUA5%26hsipq~R>fc+RA8-N|Ai7n_K8-Op#!t4O_Q*>rxh6B|B zXt*uF3q^kU`zm|d+M2pJSsMTUT(Lk&R=!IR$p@BR5*+y{m-4zWWgeFDoV2e8j7*Qn zLvK(CW09U(8(v^2kokNa@k|1{C^5dLr)TIWJ$Zq{-u!0k@)%zbwILX;))PxCWq_H@ zWPf-oHOz$*-RflcX+FNR;A5EhGWzJY6wh&}p86YUno~JCEh{vZ?a_j`hq#TSV%ClK z%jeA(8I{q+#S3}`YN=bkz}8gThUhiXB;CD)nRIUjV}c&1l-y`A;AUpz;QC}a(cpHX zRW|t%AV?0*0~q5D#&>+PBv`&A=jZf0jXKQSClgy)$K}n&aCE;IC^35OXEciW$S`FPGpNGW|V zHc|y;W)bs8vI6k>GpIBC8hC$hYyQ49PT+CBB?nNU_tz4&?|S|hYkzKOzRR-7-x4)G zIZ$S_puHV?VlWgG3nX}ag>_Ie>3A@-Fbn?#$TdPr1HbKb}$glVGr3?Msn{aCR%a;}H8& zBU{OyzeqBqzO2UI-KFB0etPz{_gFk9m)DXbVo$zsjPR?Z@KlU+9wv8pn+uHZ68ZQ2RMRp;rOy{ zT;Mj6LTqpv4VmCFqRb`lD#_8iO_FKl{f-J97L)M)Hvo$19gFA?fkPhMiGm-r&TK_WFyRyR6s{^sp=8Dm+gjUsr1_=R)X zhR1XPeeIXiDw{XGmR^M#vA~1#;P>W%WpNi(_!9SnTPHj@4H+$KSv?~7byOA}Xv4k6 zA?L=b`RyW&;XPb9iRgAT{do*`Zc5h!=Tu*D?dIq=-Y4T1Ex0kxep4}UokQ1MmhX5* zthY5RRj$JahtGC@qq&s=+nmda$+*BII!N79DY@N&?;MzjC zHe$Im28Jz+qQj68b`hqRKBPMC5Y9u485)Z;-C7W3_mup!4ixUqUh|&z-o}YAaIL$E zS&KDnDy^4Db_5A7(jdhO__bj@-pM8blGc_=RPZd=iL#4tSV;L1u=`u`nZq=_W(Lr@ZvZd* zg%ZJcz5Br)z}10t?l;x90w3pXEY=<7^aL7zJv<)y<~77 z@_P}A(k_J=V&L8t%)sDjzRD;Sviv5usg^?EcNQWKBP}m8wuBxrqSdS9V_?oC!rrcP z1p((o!RrnP5zGfrz-qe zrXZXv(=F<%i8pqczZzEK?$I-HxzApTEb?1$$}}BL^=u|K?KWlknWly_*M=hn zNbENKvPuo{!5I||AydclKT76b3G$2K@L$k_&+OFUdu9|5*qccF8r}Y4?N4(2lN!Gh zqe6K^4nT|#--+>piufk^9p8X$R38<^J_SVb{=~HFJQ~OGqMNEW_}V}q;<^a7wy2;n zh@ySwC;N{3!pn!7ClDb1@;5Q0)nnu{nh}EoxM*pGQW(yPm=LP(#3Yw)Lk^ZiaZ5BJ zukLa^Ly+Z}ZNN4{#{zi+?%7+7*$hbvi_~o+BO$>-mW=%okpwmhp;RQ$w8Yz8xQT=f zNX3oMg$ZC8Hc^lEhYF2^>joUCp@Pyo?>>tpLMlNWbv#LrXR@*K<^a$2Q7V-3iKes^ z-x!2^UJWCdmoIA9i-J=vdM}*4Phmiz>{eLxve(86Q`49n5bZh<_gtCjs_UnGSN8e6 zALS#DU7|B$64Z1b6+zq!(`!@$=0JqqHx|GJ3T8B2q#x$t%fFp{ZOq8M2}Mou$CG($ zE>B~Anhiy6Ew4>$Z)}?4>YL(>2?9I2MFM_E-JM&X)H;#q{v#d4s;K*K0RTz^$`f?| z9>5>6_eAAmyD28Lc7he@xf=NSK@Pa$>_-s-BB<$HCRI@vx&o9(R?jcCXH0H8oM9a} z0v!-+ro#Ha~=kB zu`jXO2dui4%SEC(Z?Ipw_`awfz{`y>HNd6SsHML0lwpIYkh@Dq(IizlAUu7KRsMP; zUR^6nY%se$$TfOfO_EXgur))ROsUt_E~eAabnvn|H^#xi0R{$LR%R6QA-le zRa*4o`l>2@n3SP0Rg*7uNB00NWs0`7H~T{_z8vM%j_XZXxmb6n;w=#;wl61~Hv|u~ z^vC(c+N!=q?_D(uF+RACK2FCqO?)@(wsM7D>~EV$YdaQ&tmqJBHPhIdHgO9aocNBZ zQ>Cr>@QLI)`8@p{*5hqP_L{~o664p6VsWPU#96t}Xab2TOvSDd$kshN*JnPv*(;{x zc&ziN*vK*hUx|gHm(=a+4|Z?1ko&su=L8Ud!|OfcINe3Qg^JE@h79%}`^a%e0^NQSmYY5_U?XxAkkpdTsocw6)dzDPeyjNC$f6%qsuy8VXKI6Rsc_xBg)Luv6o}N9Q|8-b^ z_0#Au|I^+5F%MAC8I?aoV8gJ-h7%h*kC5(}PP58Ebc02-Xyh`wg~=qQCxh$Y?UzF` z`%pa-R#GK6gQU*Mnmd{%6tp@okH{K$gXqpW*mY8nz{L6NY7d05^V9k8=}7DK^aV7Iu;LCA!?1#mrAR#9Ii5IU>)PLuUR3gr1u^C6ALBLgVXO-52~k_ zAK)R{hbH@rX4Tlf1RW#=(_8Te77=DN)V_zTjR}PTY`q>Nw;N_t(N(wLX3I1Ynu^7q zN2$rFi1Wpy6*i_xD&Am}%pFW5NlwW1oOl|yCa=BC$y#`L@*D1FkhkDDNt;vcUjmh$ z5{B>QexNe0-mvafhKAq#vQ6a1!rFk&4K3^I9OSG;c5xoJ)80%j;0SKxI-_> zGSkH^LP>c}VJEA8F$sCubIZn=ZDI6LhD0og!hbpQSuTH)Le8QEHIBiLansj>>)g1WJ#Z{|slD2eVdA z4fG`bTXrqM^H19YVvOTdc|hWV1`s#F|CF0Q(CLqSMfta_!E<42we3PugF;)jhEO)9 zi;s#lPEEO>d6qs8vxZK(4lF{q(fiSi zA@|YLZ_kI9m_V{Bb&{Rc28$_OY$6*epSGfh+C|K(yy)H#cV8u4namq8mDbBaSenq8 z*baX-n@{LqjR+xu`i8m@m63ysFKxdBE9UUot1DcbB<341Ap*Inx2#3$Csfjq+-UCt z(k%5tOPT4>0t8rnex-gzd_)6F-99EPuM zPEV(M;5xeZC{#97xviGB8#bM@TnKX^;d905s`Fm+3T)?G@kMA(6Bi+TV&iU&J#@OT zX5p=TUK#wPVTBKInYxAvS7-Y*e8pnCfV!mIir4pjD?Wi_Fr_#vZ=9%k*|(P=qK=_2 za{6cfh+x4KS`7Cau~3yqj?%dCt?7|5#Epa(tI+py17^41sP@D6lp5m)t^|X(7>?P* z?56}3+nFaLtZua?bA@<_ebTmNf zKh-RVOf=Gi!qODTOOuk<^4g@L|JMTOEHvO@tVMc??rEMpWkoLa z7xXV`Tey?v9@BRbSEGH9MxtvH!8~z(7uvuxKvIy zi}%jeMA8uCihnxeZWtfmrroxVcTHsz`{=qL4oll4F{~yv)_E5$3;UJwD3qeTkh1O> z_kR{rj{lUbf7TfOCaL-eImt`_No551f!=>__K$NulF6b&C&?F)}r5TA`Kh|Xk^6qjyY9NgEro0Kxb zF4+(b%9$jUkn_RTGW|GZeuB`->U$OiU7%Z#xI((k(b&ea3svN2J8o=S>B?CD!DLo* z?|tnXEA#-$ycE~970PjB!x~!`o8X2IP$-(-J{_&iK3-WUFt)4-L0S@)o*6O_cytiJ z@#6h=8Kj(1*O+wku;{3x+%MPu7&()yQrkl!i5PZI2lLHn>L7LYbaQpX8wgFX?OLZHAkcw3Dbi{@p$GJi_NkREF_%U#v9@}P~P@~=B)a%I*u$D ztXtMQC$X!SZj4ta?y1DiOX?lX-7z+7p_+6|HoQAyO|)EzxA|zO3_P7=X)va~3G_t$ z4vofm)E*Xi6+wB3nOKL8k*<#Ed7u&*NU57nl|d5RaRep47ES{s_Wd+WBPP<6|v<|?8We0%J;Wfj~Xgptnn&v$1RVX`@zsl;@Ij}{IV?F4QDGtbTw9<~$A&CbVu^m+4! z^-Wb4;8Yr6yd=lp2)%%Nuo!8P<3X-WVJVfn1CjHhPg8hjTx07!RBz^rBl_#097h@{ z(&+Y9)AV908S}oIioH8&$nwb`W7f<=Di)Mp0YxjaHUWHwyDIpR;i_)t{_uUpPZHV6 zT~>1oJ=TZ)+%nBiXV1IMb5BGGEp~%JeV;Y>U+pWVMa z8Ke2d5K=bvIvDuSVkh8ux&9pdM`>7qS(6F};1LOs2j+i|3822LW@zJT`p>h!#Mm`C zobT-z-Gs<35$~iGt#jO=CVYTo;tRvWC2euw!jrqX$2(1v;OZ#&lQ0Wq86SXriVMxv zNZ8+Ojifr8jop45&G>eCJ7*7s&n7)Uq%AlqLO>f772bp_M0Uk_$DJ`Sj-nQwsCGk2 zyu^!zRuf?aOpa*3j=V^Nu=_;@2Uq_!AEKEei`s*Vwxu{pLT73lei&73(Hk_>3l0WK zl{c@Y*Ki8@@%LI!aw6fov@G(gFAn0{6_o9Y?4Z$YFsgS9ac5paj@CviGEknFn8goN z&c(!H(~2(Lpl5cSwQdar2YjNd=G&K*wLVZz<*;EIVHIrk=7d3XQK>UBIN!8h@*cHs z_TmEysVg@9u+;YlB68_Ceqo@;0MjkB^-8%TMRSF4Bl%-0%*c=B?@w8emXS$GM_>6prOF02X2b)s?^ z179QKh6Ib0Os z+LL0CoAG>*O?$^MHazzw2AA1{N_UAgr2YhMkyWcyamgsjXS%wp8qL}emOq7+tI%b( zrpTIq))unfgkm9{RJE7lz?Ap4Cb&=k^2&~dv=6S#v9ex4?l@isCAE2i8?It@N{(Az z#LEZbloMZxvA$Ae)0v+D%BK%99G4=>b8=5h>xFnf74|jP(esOIJ@)FTrM<8Fj9%KI zMusFT;&aZ!Xi}ckt!DO~0$AOrL^`vo)#Jla#u(KuSS|fHj>2J-=*G*1)lNGp)wpNz!3A|cv-0w(rR8JpSM8S9=xk8(HZ&z=d$J$Rb zH*V)XwSh6cbA#do*$hc^TclrctI%C>nXC|RwM&WkdT`UAHZ#@ht)@9-Pt(ihe8R;F3pk zLLsnt56U2DXyqn4A_ZHGLb=JU@UG~Fq5|ABP5COj<9*d+CsfIhm^cUUDYhs-lnb*~ zDVUp&;@bKv7!IVq+b#_`T%$+Gp$Cg0npu2W0mu%|AA{T-Wd$8Znc&^^1nGP)^5dxL zM%UsU@Hs5dWh$i7cH+a42Ok8xLhr(`nz%y~}sBD@AK0gO`9a`xV zhQfv>B&8*K!yBOU(A_ZWkkDee@J7v9@@AbHp5i1NDoi6EeIh+=!eRo9P}40cT+;|u zY2TL1mZ?Y~Q7lLd&7x=-GDO$fvf;5FN~(uuB_)q1+Ax*mK@80@(6gRzg}ouFboU~R z&M4FE&0Z|6kwTC8$FWc+92c#gn6Srf8=jVxY2Av#=Cm+mWPKPY)*@TQ4`HuK*bYKH zBej&R>m~6Ii)eECPAJ(tJ%paiRr5NpFyWN-Ejb!pTJvpR4Y2wx7LWQS+K82x&Qe)7 zbVBi|35*1n!d&61MYWVP+dh6eDUe|;J!H_H6I-$(&?~DJ%Pgr>ThX1>BB?<#}G7a;;16rsyCm*}Pe%kT|JrPPh) zj{wQ*c@?5};P2Q=)rSSYiuh<9s^K%gQ-q@uu4g5$pGH@PC;1$ix;04=EeY%4V#wAy z;v=#ETsyt+7(6|s-Em(tLCBnhlivK5@aA;O%!%+)fQa+R@2Num?rW8R$0ffWai6@L zAy6`NH0MlOu6gOwXCU2lDRj+4sZ}5Ye6}Z?4I~P1!+m+MT;v-R&o}HI><&CQ&+x*% za{=-dcRW{Bdpu`K|)Ik`a#S`b$fgQ|p@`x6BMV8DN>7;?N1CId7NoIM$ z7j2B^M*#mt-+_1d+)O3m)27E2c*6&yCn@!Y;XR~oHiq%-kTd-H@h#m?@S)nb_CKaI zv{Mk~kO^(SfOVbUr>;-m$MQl)jwtl5!A}^_c0$rna{5uiv1VE*gCjy?_V8{#yJtD>SL+HA zMPP@TE}xHgDq(gGk4&hp1>yQ5r&|??`W}VL+CIGPv9`@2SCd9WM_f7haQoo-J}2IL za#$M3zsJ97+zEbUJtMLQzy8YA118V5xroV&X!r7NpGECQ{KK!VQ5+fpE|ija%**ek!N~AxtIp&*8IY`a|J3P@+EN5+BK))BYR?x+%O<=V4*^GyAhpU1@(6#HE@LW zbt(rq^!cYx-L7$MDwfnO>T`11&9fRcw2%>Scoo$}`DCG28b`EnMI+yKMT0)pJCReD zJ_rtdEtT~0pa#*pHY5?OPZ6~=j45P%T_dBMOE(|{!~QiX$BLiW21SKMaV5TOv5|rXiRl?8+O8Th%k_>6I*-5zmp5;U>7ZQP>ZMege z$A0zbsDE#X$Dam9$|9^MrwCarGA2`FEQz^3Bi3;$i%A>F=+%jXBBiMGjvk1$WKXON zX)s$(pKdqe?l9^Jsa`m zxekTP+1Fqap+sdmFGK(pTbqMKO)8r_Wyr|3ir9+p{Zp+AfZ3nk{R;<=u7H{rpqtJR zu+=gAn|~j0@NIws$nd>jA@=Xd@Pn=IB#`~X@DDy7thgi%C{biiA6T`2gnFBm%@}?9 zNaUknQ4+!6D=5>S(juF5BziUHeFpkOHG;VCCCRnNL=9^^G2noTS~@ zHq=;^IX9h%r~+&8j_4b*xUaTh9+H|WO4pxEE{fC~Tvm6BP*Ha+M5@ViDgyg!@II+I zfwvEFh@iKwAHuoKoyrV3+C(msN1VRK01s8B3IF=3E>Cq-oJ2ne4PLid34>cNc4J{P z6|B%e#7fz>h&0Enn%+V}LH*=|%Z5Ae8y{#3 z`g!i-K4MP3UW?LRdI zV4|=FqW~aj1}vU`?@tOp&LygtI=cWm&;O`LD6|3&1duZ7@INt;1?3B)xd?WuQi+k^ zkdcwW#)K)2XO0*$q&S;o-B*Qygug{x&qK0C1t(UV7(O{#Jz5?8O;njfi0S4DGNACA z;M$u#FnBS!x75Gr6ozzWQdJC72l_a00uEHqki_Q&dmM6M^k!f+(>4_kA{Z~Yl^=w0 zHCNxMTpX@>)6nL*^dS{nW!7m!?3Fjg!>wpodTI)g*JebJ6-f&)D8-J6mf&>IaPJDK z!sXrRFZIJclZ~iL1apY#7GCJQ3Uq%_!{aD4$dYRuV0-X!<~7CG*~ZzRV3vzjJi=># zOTTo3k+XyWxsM{ghB)5ME=KsR-lOVRVazw6(Wdb!EHsGc_;csK=uZ8GBVGXG7!f<9ssq=9b1kmuwY>06jTqd^^Tk{O7fn>r>@L76G+Y~q)er@Y3#e)W0r z@Btkc>J|q1LZ<|tA8S~=dgf*Ks1tQOB_S^(Qi3kBD@lV*z&eeXA=c?&bOlOypF8E^ ztRchzTjtLT1Lsq6Oq2$LdZ3*H;&mWlT=IqnZ8y!U3uA3LfDfvE!7de0yhP(t!3TqCkB?-qOVZxwz`japSf)@*yx3~7@hxAn9L3+^3N#cF) z*kQI4B5FX5J@TM<@xC;V+e_}J1X4}7+!ygfNJWMtdQGJpj*BcR9NH;Wni;WkqWjt{ zgC#9yMMbNbUf8kzIfutp?Q6A`rN?yk9vt#6Kkew^>~e$|nPx&alc9VnkrdA)w==yf zic2n=${T$iOGdHR5Et#{D0oGK_?oC%$aCf4?^_1tKlGtmCWhfmQs8Bso+9o0GqsHL z%2~`IDbhfWw}!iM5K_6KhKraG zlBnIPH`xiK0TaZlP8%7x0Ur%*EM4<2N9FIwE=)E%zx!qTyDBWZ(VU`IWnERi%bVv5 znC#$?cU;4mF|;Iz64`I)PxCRQ`7WXfLDDqPErHGTElrm|qUc{B#|hK-^$hTEjaj5aKv|gQFjq){ z9cikUH?V2z@duc4cnc+-&M!y0eZibE_v65%J0@L{mJz;ODOZ7@3&3ay*CNejjbz}L zX{?XG?7`5p54+T-Hh?YbC8YSvsgy2ce5p>BGeQM_##%*|rR&=93NPbA<3fE>rNw)_ zZ0XF{%f-_=h9r+&I6N`Zf*WaLlvwwG77SCmu*9VyLcdjN&U#4rBQ}4{ZhoPU$TAedUbwS~~oc)U2GKc|dVV195=6b10Zt9KiRIG02NrOm~5} z;^u88KsABb;{MH)j5&k1whw^WJAi`qFVu2mU+reN zpEmEUEc-q_f2H*&86+_RQ7OuE?bcmFYNdKhqepIv&La zMutWfo2yZw>Iw|L)z&MfMo%qScd!ln?f!wrn1NcMX;sU$pfAi999yofa=I+Cshp_a z`sz))n)z_{TUsm>A~_D4z7{)}6i;VgLY5F_5+lh@s>)cKp<@sB@KR6XrNuh7xr;?D zTjM1=@C2UdLlQfxl+UskH#|bOUHDGb=FK^}ODNUZA4>JyD(o6PBA7te&KG;9@Kb>1 zvXq#jv_X`}`<>s``V(K<>}Yim6H`y^6p`hVQ=zb+I7K!U8DQX~LvT!yi;w6V5KP~z z8yYp&N#zY-MVqU4XTmS}nc6n>B)k|>`^92#r$pzX^va+))0s&uC@G1>U7U#IJ#Y!fqb-o$GMyo-zh{05i1CM%NzZ~;dIlp9 zzrPG~R2zj3CXK`wF}SZ0xY+wz_B7lDLU8V^Mf|`L%+>Q1yr*k;o|xkHMVVofxh|TL z*PNNQPBtPEEq1-HD4!82?VMoKjCCT=f<2xON0)U*Bx?c9Yaq?so@|2}gEVJEa(~Bs z^2z9+@7tv zpQONkbg7#iKxA70k$>T=Rar$|Nk~FWUqw?v>>pgVwVyOV<3prJv*OU}8QJh&cqc8i z&-4JDK?<8jZc;3UvKd-n5Sm$_E8V)bqp^t*WtR0#vG38Pcs~-__Cn{xd5r7!YWL#! zv8W2D)Pst+OW~uAEgD|hhtm#@%vd)INYJ4LNAIa6j)%g+M(wJDFl8_t93E^Oe zSgg6>#}lWkr$hF|<}8G;j%&4p)}5lVzq3ZcK%?8_?tZct?1m08*&L__t*ak9;}qy! zZHSsE=620_{ICO8I)&dPSe&Ko06GL$leVMrOwld;%;GF@+=HC>_0idp%tJ@9I^q?7 z=y-RSA!*epJM_VQJgr@;y(QF_!kv`X&T8{Fwt41Lvfl{JrmMtvbcAo3h`?@T73(C6@eR6}D3 z#TWUO@=hWwsL?3|ebnI^FLI02Z~fAR29v6oD#&#agS%N69HiY}g^D4|=i(3L@pg}*9Sfp!uzfv zu5<gmrXi*bDw}ijEBqF_QZ&m_VSArMR2U$8Q)H|)ksLzZPeIl-XcYmcW zn#4+2?DfEJ_&XGSt( zkf1OKpcTp=iC>T;jZ9KV5e-`M)P|t5x<>tm!2#$b5YRGNT+9iEKPTvsOr)qV8Oe9q zcUkWF=nc3jrRy&ZlWlPvNF7=ik<2hkOA8z~i+Pi=s)PiVvXEy7-< zeq(G3owhl`mB8CMNZ}mgLYZRtgk3|HtZKga_;K2(0BG;%E6WdzJ;L54c!q3uYxa#$ ziOTWw{_j;=%pUER47F(76mE1ugXrnl}Zu^Zq=(N(85vv>R?j`TZO71RJo&;XkD{r0c_7Vbaiaeu?-XIvCVzF(Zer|(xX zX|)grUqc0Z3rxdqOP*K=)snU9i)DA(o|^hD^o&If<=vtec(??zewDP1P0#Ld#$_g# zdEDvsmM2Jd_zVim07fh=>3fizD$+3uW?ak_2a9%2Ne0(>c>HwOow|PGfTV=6@KESc>*+M3C;&=F`jVHW7>Ypx%bhfrg^GN2FAfz z?n_|YWONPNiOM;+#Y7uVv)elx6*Yhc>iS${R2n{fCjo54g^UtIBIydu`?x$Z**lrx zW?EZl%67kJ_jm>FD3q;T{ydnan3>-5T?x&F79t%=Xy{> zUhn`q)uxq@>GF;6RXZ<|frp9<0i$8xGmR97G z2N6Qc=%0hmC9*I!G7RnW5CAd;O)-EXruk^b^`Yg>vfjXm6qV1JV}YMKbGY!M-um|*e`S}2Ho+XVdilv&Tuh7?sO#By@d1v`5NlkqzTC8(IM~Q@}Qr z6lw<=?1?yKP+g~=Uz==kM*1{_cP^$F&nIj|`J@7MwF$Hga0E0(q>nXqsIXO-zhNXKMq^xyC$GzA$Jpw1&_90%tww=y z^Pt%0PDzo}*Yg`nGVG_{zM}+t2pDH)%uxsk&HXHBxkkZ^U1U#H>x)N`OmiR>Jsb=- zP?V}-NLSH5Wp*&-BUq!H7PaESl!4f?)*|RAFE)4#yWNm+C9GH3IYrhA~C3|vm*Ph^5XGl9-Ho+su|1$)J z;;wVJCIWg#xJz#&ZTTHGWZSWMSkbVODV>=S=&QcLWZ<%5^MI(~`kSBJ$g9mFh!Ox6 zG61aqP2~BbasPjCqTeD9-d-aT2sAXC!UQn5mp@S&Qhqj71eg>c@)*?Cs5c}#fH3&? zaAgbUt^?_W;1cO25h;!fvEB^hj%mEHCuFPwN}H!64fXaH1{X^JdovisAUp7emH4=e zOpY<}#6tc?SR8FqrIa&vbR-f#)CE^@Gtto4i+`UH;@Dm{+oky9g#^g`O1q(dfq)9! zm1ue@0cUMy7WylUgvd}6{7a!d4Z#eU@`k(E^kVV;Wh& zR3?cRg9J0}b!9lGgcHtXu*RACAoNx1%j0pO;QequdoJp$s)gqjHwSuqGB>2NG@t-L z@EP8Nsl%i3M!oE1uB<^Z!=pM85aBgVqA{jM#Vux5>wwdc;Dfa>sf_w*fL4f!fW{O6 zj4}WissGfA{_ZjV%&aREf4j`dXM~2SHvIp!b{+6kzu&*e-ZOjeY|7pvM7GGt-dk1* zH!FK&kE|=ZkeSFPA}iT5WbcsT|GD**+`ivZzyH(A>+1D#&-bOagFh`aDa)+DBMLR_q=v!Hl4$eW|lj&BnzS&drFo!q<|9q)Eq>AkNkYBgah zQX5bN;z~Hwr&gLcnc0qoT{OgI2eX2yeXjYtJ-ghlkCMP$0`JI9z~5W;xf_Scp4@Ln z`w?kZR-Y40y6Igi=HmCgA1l{Hsx2+Y3hQgurP%xNgv{om#6O_CP2!9`c)95#Dr+`A zaNivkt}r%4ja!vdsRdnv)$lpnBekcf%ZcejqszswbSk7#1H%OHQ2lCeHz`z-pj>`$ zr2Tjx6cZSCZ=#_xx>-$Te)aj1g>e=%(cs$ID*!b?uCrch_><(IBC{cUzqH zURYZnR$JfPb`A27Zjg1meALtUHT}5-WQ#3pKbvR8;v1oR1bN2!%Gc45`XlSHHhCZG z(GOA&(8Mklhr?2c-;9%zxztJpE}Lm0lNPcPIc*Uim8mdl1LOD(;Y{~*r?-u#_H?K2 z>B`i#oq9!ag@a=#@Yvp#tJsz8h}X>Ol99BOQ@58Q_7bvjbzR{L9q}J~O;^14VPX^F zPT(jQ2oisw5ybiI)oSabwYwg*um@jS0dH$1zpL=?3Hp6GzjRBG=Dxvc8|%X7 z>{j~Gxm4K;tsVr(jm$}xTGHjaq;b1;dlSN6{J2kV`&@^A?>PP0)FF__s!F?gV$O z(`f~{t$ZxRJ1EvruDS@qD>8)!s=3_lcdp9Lvl2iJA{Iia5e3pIuy;%@IH>uom}b0J zfADF`yV)DtXHN2tKf^nTH+c9M>;vW)#gEL2gf3exzwwT)&j@9uv!5tu;PTm*n`tX? zN%Ols?byjju)Xwd1F3KXRnOE$IGsM4KZPpxDsRO~Z5#e4f)`;A2nAES4;{k5gs7Db z`b%J`)i&5%^x1faYpCOjHlvkulovbHik2lf+_-8kzs$YpGYj^(^Qb%CAoR_o8m(ob zI<}_Mn01CimRH&62y^b*VdQ{#uNrvan)D+|aJuw6;BCO!`Hq8xke<#}MWgr3U+%US zD#2$23p8A;W*q>loewAWu5VBp&Ll7dvO!upc2*nvlLhJpWqQz&d(Xv2ao*N7+*8`0 z$Y$ONK9r9ftR&X!9vWfl$G1g}J8bIEy3sNtb72evS8Rq`_v*9T0R&2EZwYVWA+j}S z@m?Hbw&xHt`=Co>jLw=B(P7jk$Q)wN0%S4Fw`VC^;~$lwxPJkZN1uZX z8+}ud;s*D+#Jd@jC(7jsKDguw^9b^}7b&&Xg!Y|TXq+PPGXp!uC2KSmrtoQy-t#Xf zD5pBaX{_;oFh}XVfXpQuy1D!6B2x18^gwr#VJcDGemJi>H$UVZ=O(2&8)fX0bfs~< zYb|(ArS!a@@XYq3EJJ}eaPxztLoo)J&MZQ!!>v4hGFOe_m*3GvFxK)DNHVqG$AdBJ zGe_vKc;mz(xqn5U1F5Y0YAB9`3J#8C7i~HnsFB^ABQ!E&F^MpyHZ@?|m}@^i!B)K` zMYHJg5^YdQlN7<;BcrzJ7sbzb+20Z&Ne7H6waB_JA5F|-f3Yqb;vrBs()I1FkD5=) zk3GudNtV3-7z2h7K8)y6P$#n(~9a}rq|IUJl+s#Lh3`{5jz}SicllC_Uwo|nJEptd#WCtYa zt5m+xZSGna*3YmU#KaX{4Kd>O?C3MFqrT;;76RyFMk4q3FJJWZCZ`<`#m0-)s$@vi z#?7{S`}HZ>8}~UQ z(>l`xuvF`>8Q_u&$}9O_7$6|wR+>kJKOk#_>#~(1bZ}eo-4KVjLG$^{ejt9a-XgQN z;Cwa3PUqnG!g@Rsxout~BCnjsE-Jqn8+Lx;8qT1x{cv65>|TQdSx;vy?&j0OO|PBc zqj4{MiUYsU>(f=N3yvNljl6jxnH^l3={K`{wWF`YEP=1clr5|%nW2=wbj@*D)Eb0- zJO0rioWY&owz-9)vAu!gZTFw93{eEsc0U0lMhSl=pUEF6sX>S;L5QAS6xFWT0l|i3 z0Z}XWlrD^5TGPcNn$vGO&ic6elWoc>fTHE+4 z*Pa@-1`M}iKEVsd8E*1^Im%Gq`rY7HuCKSpUSg%QbgXUNEwJ<;(B59jP`QGxvhx01 zxG_~Y-m0Zda+{|B{7xWGD~E5K5Vj>&cr=^DHL1r7uZVF?`ifhfThuR`lyW9LBtLO-cf+7k}f;X9@1)2l$0c+;A5y zyy1#uDu@rIKM{@IAMq@xAB%JWbrD%;OzMd}`mTCH#e8? zp32khvD#sBt!XE6wY*cN!!{H)wPYFV!%Ev&E7UQO;CmHC?ZJ9i_C-ta z`|QO_=bo`leYD~YR23KZNKw3D9iWYB&F?Fgtl=OnAx=_T&L$gpLsyaoL}bLU!iiKZ z`O!6$`zC6;Wb-sCDOdkHoqIKPV=uHAoE*|)GPLx#b+z|8)5IgdV;{WKx_ZlEE8h`# z`p~?liSqI)MvV-rXc$Wgw0(H^)aTs`Y5o_J3C(3%&xYTV>gDv0QN6T5q2Gix)-=X0 z}6ls08V&7yYn>U8?2JWk%psS+!_$EH{`nT^LR$lhx0>%g?Wkj|o1!=$GqI)Z@q9^A z;i+elW_r-2u0vsKROxq3v&kgh_~HkTOT4WM1=2lO)6CpOH<7h?6{|uVL5QDkZOBNi z(;ZMvwSv!GM8Z^gEOsBRp%-}?S$qP@T^6t1Da9Hv$IgJ}Nc?^Q{THpFIkC&fjw7!i zYv{d{CgzzY=2c<_L@iu|7cH|C4?vi3Ms-H?3r%50iXRrRJ~Ly8txp0@?1nozZtFC? zN;`|n>QA39u6zM*XJC`iv1Lpn965ZrB^+LpSI#?K-ekRF)Wd_i00|K^mC>*oBPnS! znXHWW>#(PRWecGbPnx`*)19=}Ba`=-QyjznmfM`hV!f}`)(71Hah|vAgA1Cgy^g3z zeEJL(o{~>PVlDfNIGtFLHK<942Ep`3-E!Z(p{bJQJNXK@4SJxl06{vO3 zd&XH=%&>7vsrsYR7kb@$TtBG;7r7eDWl=r%(&^*M1Jt2%#7=k2MAQKS^us63lUHJ} zKlRTWFqrGlUnLnSExMq~4T`EkO^+HQbC~U9=S~gdrlNyI zf;Ayy30{f%d!O*BIaB5bO0UA0=|mTweaA5TwaoKZMhp{h_ zGbq}dlMryYTZGTGpy=PXKn(28*J{tn&l<6=I24Sf$H5TxUYmK#TS!pju*q3H@#Zeq zs~29iwdX%%=t`WILVyHrBZfq~JmjV`+98z+Bo0_83-XVob)toJw4hWc=%8`$HeKyC z5-nCw4E2#GVDqcTU{m5#jx5QBY3>58=_}}$82Z*Io045KO7+|t^CSvjiio94;P2|U z5TARKMkhflkt*Nd#=ng6zzGyeW@lz%e2?(4T5SQDMXTrS3vxn2^dSFiDx$1l!i2zN zzt^RLr1n7K{g!JbP1>|DwY%gUu5gwY`7fVO$+aFl%=4eoc4sR_2na_&T+Rq0dbt#W zoU^59JpcartB@q4w7YvS8_C*4I+yr{q#s&+8S!Q*-K+zGxwoK#xu4fbigN&Cg#nC} z${#87$@qUCtN*y!`{s7r(b04P8^$7n;RB5L9_)SdC<-_!ENmK<=e#H+yuwSXuVIuuZVS15GB?m4fVXX+}-)I4=0MiLJo&36m7|nNyViX3ZI zE#vKdnTqS-YZBC!m^JsL@A#}#fGaG626k%{0&jn*17ALhaWNo@TD|)OJ zvM4Ps5+d~nFg;f0PmSVx*!Lh|PAOoSdMI?`KJx~5?7PjU60R3MtEMDIgsI_|>?GMA z-5i&*Zk(Y$50jMBFz=e6eE#xb;Ig&OjRYh|)M(dK3Nk0z6f0VKZFBp=d&ouprnZ%j z@~`|#K`;N&0R3?Ig?>vUFVXx68TBu~s4M<0(G$&t&Y4%E0t`7jt`MuAs5{;j-zHQP zy+Ka)G%BgQ3+gvDjC)5Wv6uA)@Mdr9;lK-fhl}&(gj1+n(!+Or?AhU)*Gql67Or@X z5*@amfGW3&#gX&6NMwoNn;^A389q+fNKDu8-fbs?(fE-#W|!dy(QXxzcGtL9OX>B! z`6Zkfr0<)FXMLVCkO@R7s>gi7s$%e{*OpUzK2O@(uYj z3z8KDU6DCw2vHgxB6s~VRWf&&jX$~)*&T6(!fjP;b+$ZbN7C(h?KRqy;hhq`WUrf)neXs*Zj@6+xXPENlVXRPVLnlWIE-GP(S z8E)=>pmZ{%G(R|F%R1Rv8+`T3HgPer{sIh%X1A`7^yDjq}swa2}H8OE_5MJ4=WHGGv={)n;llk@}0qM@{QP0r`d)1b6 zwmtgSad4}Pukr6X=Nm*<5Ylm(voQ8(vM>>HwmgCXG;lh!@HwCa6V zKpwC-ucB$cS4L@nC@`3C`NP#H_P^ zoI}pTeSMcN#cy{`#F{>T``k=MM%;uM6F} zN~Jc9cmfe@8gFjlb%yrMEo7rG@xN<)isfxBSmdbx5TxLgv^bmnkcldK_Z(jyIlWy3 zvlq6)ZO^(goZBzy!>1_MSc;fuF(#EGL_k-t6u?7m9G|Y&xp|IMeMb7!E>glC*b0-a zDt>F+fQ0hSc?;vxHAEkTBZjzj-)pU^kz6ry>y6lmuc(=QF`9*a)Fl*rOD!vrWb>sH zOEun_6B5!OWqeK;~Tgnuhn1@xm}mU{J~tB#X0%#^57x8sx7-ze?BHo9s74U>(jncwO2moS7)(CLM5aN|<;hYK z->DOxjvXZFm}Fu2;fn;a^7}_){2}PVtq$8J;_294Q1gO8~SFny@f^uummXom>0!FAAFnDJuQ1P!L^ldn|_K1*7Ca_Np=>(u!O-t}{WxQ5e@DbWfulp5=Y zH(qz~a7}bAA42jqdY=myjK1)QcDO<-AfyigTreT~j8_?Lwr%;C^iD$GbqVaiLLCzmd94(CZxg)FGbBiM&SH@_ z@cy+%?t<$kVOOt4!|%-57lK5cXN)9MR_T@uZca8oNb8^QlxxtCo~sO>p319BDi-q( zUYkKuYoO8SHSu3Kd_H{V&pJh`lv&|+Y(P@iR#`~xI=C}2%wX=;-t|83B5sC_7cMy8r$%I{nEL+Wt>}qt zugF{X3NE-uNu(q^(4%L>XkT8NxjQU{A3sjBG_LFshpPBV2-InKFxm(U3KjpPp#QkO zDSk)o<~5Bp7X!6gP(aQ8C;a$HyCCuhjJ4B3I$}t8hnKc)Hlsc%)@iV|O%ix_3rjX6)jBf=TtAbyxIKP-z9cDA-AU!#?dkF&bh0AB;4%>1O0Pmu{R-4b?|-G}Eg5ycR} zWVjQpHp4CDgd-^{u6Vd&7+<_S)o#1SL~OFaqwkLLIjyF6h`byZIk#Q3L=o@;twZX( zl>cyuh$Gv3ru8R}xu%Hyrvue`lR4jyq{t!>GYr}5ST~sPJ{%5ySoI*J7KiEMoB_6s zb9%@F+e)?zcutmy zn^rE#!i|)j+*e2ReYw?x9C0ry(G_44V=AtttP*SPe!%T6xVHi2 z|9*~6lX&dkAqIrsj{>)TXRr~cXq~?IgE*iPU&TFyXR~Hs;-wQsVKj!NX>KX1!t8CK zVN!Tt{GJA}g8S7q{(@H1wma{}t|gI2#cd;$vbme*N68dMm$ON=TOBH>m+^7A$g|2& z3~|kuICbsbbDC@RdMSjU)G*6^CxX*J^Me$5V-#vKgGC@aIvJvf<4wKZ2+yH#Db4vO z_HNjAg(x@5eV>h9ei^7Tz>1HwNXKER)_aYe6EZW>v+t#b^mIpK@gSBOyRDH`k?uk5D zQ7||NoX;|7P(kHHZ9KT$Ww%WoY((dX5ATp{Fm*1Gg-mJ!&Y%-V`TcUw(p!B3_zAmo zB2;Yx<+ljqqQl`B9F~T!8<6fcu{(**?8I2jmc<;*E};$#JC=QVyRx$s6Jr^ZuEe+8 zqe6tkYtc|{kNgm|bsX;6E={d$<;9xJft601sg|tILQ>p^=L1s%Rht$ZosWA>3$G%{?N1~dhQ4k+L!dkYO#6z(BwQ( zS_C30Tao*m3(Co_$PZ%?F*+*{CkWV9UJB`@2vAPti(x;X_E&4;dWzAR&$f{GY&%5k zC^^xt#L*JlLJ`!SA)27I>FEs;9?nL2M%}_yG|lShRNeL&eQQHYd0+pr^GXm;0uaGAtJRiz2wT+E+A2RyzN(-$c$w+BBFiX$3JD;*36N6u( ztAxuo{}t&Qy(u)FzJiK84eE*Y%B^nZE&0CNWAx>!xlZpoM~A1F2l2WviMv{wYU?}i@7z=ro?fwR-!~KEPGz?& zqgTY}On|_iF_ji3L16M>0*%YpGP=|3>dssvFI8Chib{(aBd5X#-XJ3|mRCRL5~~EW z-kx^7_4JcA&iaV(Bke^pY9IqNw$Gvy34l1#<3O z4j$~pJIubN<*(mYtied$q1uV=s_op%Tk;`cHYQ`pTIBIy*6fT{*V&C?cA|MiS9 z$M(;8v|X)-p5}6+O&7|zMJ4hKl~9SbdnI@+J89nB2Uy?bfe{WV~ zYzcdlvj!xy*$*G`{=sulI)*R2y-KneMq$mibo_wuw(2;gB)hmqas;6W4z>(TFSdMq z>4iA&(hI~=H}8kb@pi_(@h6-7k7 zK*h{Wo+m3I#AB6|Gnq>&=*q)b=B3iFh%>1C9pc+ksP9NEBV_mB&4wQI56?2@Q23SN zKJ!&IhGUo7pc2=P_CBN)54riKT&A=fM}K*M?4F!rs=Ri}fsOM(RIV#x-cqi@g_xaw zSKo1&8Dep%TWmrKBN$E5&QsZ0_A{FiPm}7XNd==~VaV1d6T_`Yb*^2btZ-;-4Mn#F zXQc^0ak=cAQ%FJUqcY||=_jl{O}Qy3a4K%*dUhs#eLLG-q0o9 zV1f7+p+!lgd4nk!jSu~*It^U!*I}Ny1@gUUFnQ4;IBsZgHFco8)jo7HCD!O8j2Xk+ zE@O}|3&AHpgWfxJM?DG890#+Hpe~9(+0ad90~@6gV521YKPac9iHn8Nv3e?hOPZ84 zh$I_VD$8iY(CwQ&pz|4sxXV$0D}z;t8@(G^qfqW_-7#J&(n~&7FFp-|#N~6*A%bgr z;u5&b%;u9*zHDrbxSoT3VVQB?k~GXWII(UZ=DD&bc)H3B7Meh4{QRJ1mo-uK4S#!h0MU(Djf;<5=u=OSL93f#$l>-d;!E>&iEGFNmd zipY7d=Vpz(4J(E8-52ydvsRp(8#@lzi-AEO0%sZzo*%V_ggu5qSHvGANfH?l&esC( zyUV6!HUuPLZa6ZY8$r zS=X5JV_lWUE6TfEK?iDMJu5`Bk9P4IJap4mYZ%uDJ+$>ZMjTMAJ#@3{Rxd8*PVzO! z<*1GZNT|cIbyJxVBY=A|2kGGn4j;+VBZvkLCNW@D=SM&IqJFIjJq5e?Y8<~umfjIm znt;O!HLhe}5?n_*(~kK+t@NoE`9k#}6~Iu}gnp3eMwB~Ok5@6-P${hGUW8pwg$u{Q zu{Wv8<@AtS{<-S2bNiRcKc5q6-|UJqc#tc}DJcJLyJ~FSHoMyEXn!B&9P+xD4-$N; zZ!hUnpYnWkW&S&@n~CDFS-~zo#5t~&GbEQrO1mAlS=ruU_G0hgF7DA zR(pB-=hx%G`(gEuI%%tOOCszTekShWjOVg`&-!F0l6}3}UOP2LcHP1ApkJ%A%+DJC z5QUIOal*#HIb6(irl~IMQuJ-^crsnSkhmpfm0Lok)f~a_?+EV-C~9(K)~-4;8#K)_ zCMAtp(8k-b56Zq;p4YvCll*KUa}0m8dtL~K#V00@Ubm-3XzIZ|luM&?HZ(wn;PzQD zBtm8cA)y|3)J1_uCJw_&`bFGzd0;S{@oQfdWH`0g*)jLwgHhXOVlr4UviM_Pl{as^ zB`qbqD|qYf;o}nP9Ev9bs4iD?OFI4D8p&94+xGgur0UuAK(%B%(6e9+6wvb^U%9XW z3m?~x+5d2yUCb^r6mbt2|NkzuRIRi+~K+L5 z7m_c$m-egaR=&#uyJ$ZK1TrCDwfsX2DP@*NiDMHp=xy{=c?3gGJu zUh0Azk38%U-w&Hg!^G6y4A5=QHO(5}IX^FR-KZAZ$@WP>UF8u*H4mH|^~0v~DfuSv zrk<|$0dHjv=fcA5EEQ)kwpU)k&<`-*G>dC)w%T368qUPMY zmipB0Tw+dKgxG+@lMq2<7$K9pN%D*?rsBh&`WUKi@OOtz3lK&rhO0=aTC9vVQKvo< zPvkcl9MnR666@0?cab3(C?1|GTJFHUUPOoaS-Ds)ylprY{^e8p;n&Vdrc7Y{+pH^^ zX_kx{oJ302Lwy*-Fw^4tna!8@a>qoak!J0JueLamqk(ifLS)i<)f4Z$nu(Yu<_pox zbyjHOi|UJKYfdJ7a~4+jHU6kUY z;Zqv-0t&pdptZ=cmiHJJcmV-F8f29T)#buaUL%JX9c5g==+FYAa|Wk?-;K_X>hqIR zz$p{Qb;Udc(4#BfSP~Bc-3qnBvJ0M6#El4T+i4|e?!kT*DQ{^->XEyYG?e20Fd^K2vSF?JHOF!1r;G~jC z1f_6VFLxr$2aDO|qC|(Ofk%r)Ys)UWX<`w4Q7)E$XT0L-GofHq2n^CSE<6=4N2ZnS ztIA_48DMmV;@4~ky5}9}iUy`ul0$SToaLJHH$fYt9@o;kIdHIZ(9|Rww>{-w$%I{o zgf#Mf3oEf#HG#Wd@5MZUpQ97cjkF-y+2P_%oy9kE} z-3CX)Z@BXK^6E(N2dq8h1%u=j*Z^sCXYzVL8-G|9^_~A6@}J4$=>b z#O@o<@HJ@e`KX@D?x~*6+c%rP3_h%h!t&#OC`aF0gE>&R8*CHJ@njXLua+M@%jmivbw_@HgM6nNW?D_Zu+hVv@SwP#5s$3{fo^>b za2#!wmrc8(#DUf~=7pGW3%kL9$TdCeP*r>yhJz>5DXuj|ieK&Pk(E(iuKAWmME+ z9D7`?egyHYIXrh1eq+YU?}MzOo~i4cf~nr-xUiny`O=;O;1b(M91jS`0;;9Z1u~T1 zxt{KjNl~RfMNx`7A(N_eQwC46Hy(jhQTNU^V~O0e;#73jSf4{+J#tpdSq>Dfb)MwY z#348W)+3Cz_%-;7I7!fER#rOlysl6dmxZZF(4xN~Eo``9<7dlm9L#wbV%_ns_U=2J zGC6L#!o6Yl?2vGKQ9(qlJq%j%3}hX$b#g{I_qrmJTkbOAFUu32x7#D{sDNXN;}5*Y zuWm7Pxb|^I;HztmBE+>O1o`FCYsZ{TMR2PzupV{tDhb{NEFSaa7D$Mr86?EfPa3~6 zrOE}`;{CW&JVTPgQx@-scLwOK;+|#Vo;+Ygvw=XNGbAbeFS1HMT#=tV_J7-nbgJvB z_5nF%wY&AD>M<}GnWRj%#kQuk$w?S^IaNmtv)F`rN8b0cD)2bC!fw0fc(ovSd5g4f zJdVC%(Wn-`5W<$UJd~8=)HPOpaPa2Mt#eA=3MibY!iWkvLaa$HSq{Eo#gqI#6> z(b>=;%g3g6N4mI<0*La|$DDnKKbp8qir%myJn{uo-8I6m{t_jrA8GVG@^Oc$^lB4S z7Z}xT35%$%{_JV_lzO6=j1Sd0mjW#C_Jw1PJZl|gsq)k!@Gc5*$G5m~)q*Rk-^Q{P zleiG&M1hv5LDi&rVw^M+JZ9C}*d?SjHS^D7LiRs;tqj$Q0q)-!T2Z#Fs5-XmqM347 zqly0UrJ-hGVPfto#8MaD#Iz(Wik4@2QBh-gtfu8NyEUabzD*V|m_!OFSQx^#dK((v zADZFgoG#Va$aLd{#6TVkVh~v_F#GX_e2}eqRx~5Mnw|0CwsQ%%2 zC3;UxJUPmk3|iI(VJM;7A=Kr;k2-ONd^TUB++2V%eWn&hU;R#g@-^fM&mHjw%waa5 z5z4lUYg~}V4-j92hkp!({KtLm;e{>4HCGt~_$mJ&3Ze@t6r$(lyg1_Q^}BkS zrMow-;bLLKk=I?NbWxO{kh;x1J~mX9va#9<$;8W_XJQ<|LN!kre!uR0;oS%^8U>z8 z^NBomEQV#P%!ja`wpr8P-?*nUr=_ zu41$=hM}8e7~zm`^nUWw+34_JXaYxnjIq%{k-zL^twX1gWSipGDkNWIIiAa*vcc|W z0a6Yi5&Bqq4;zzyG--!@ez428ZoFl^-{8G5!LT*bd-NGATK1lP>6GkU8t6k|0tr-OkOHPro zbJNNB7Dl(fxPM|*+6iGs#*O=Y1JTRMJL9ELUHmO#{oY%zG1#}n$58PTX5ue_i-WKS z*u$6<^s@Cr@6@q&nhbC{OmezV>9pu^vKsMd#TBOt?%YUefUclkwhkYh0t|Nt5Dj*Q zBiI>+`}8%GTK)AAQOtWuz48A3q9}f)p_OV>I)fN(=cSlrA~E4$_)4=2xg0LO9=`dM zdhas&T~U!d!{nQk$YC;XNi;qRuD#ebeevw&(WuBd^Yp27n(m%R`QG?~;3uzWIMMq= zlfoQ~5!&fxdE^2lfZh1L+1tkN4g9z1BAx^nAh$I})eXlGF%dH1wAqO~ZF41ShgrEO zDQ`TSd*FP%Hca-Byfj~xsP4|e8!#KEFsN^C<0y_}dNE$Ce|QN=4c+cu5SQRa5taRV zRGnM(YnIe3 zmq5GbIHKw7qIEU0a~Y*_AN7l-y`mL=!rt{SRRUWn;Z8hqg^E}C-z!_bCYt)f95)}M z-LQ1|7EXs?A6YEloknFsTDA4qV)cGU>%i0)>&;?ezZZ=MjK(vBC4m^KZTRKc5&Xi} zsa^q50axGtN58JPK{m&n*M#t3)H=Atr9oF0e3jEPaIb~?*q3pHJ;HMD}j+w?Q<(# zFWkAR-BWMbt(_yvi7UFVgSF2ohEI* zd>$Q4wB#Xi+qd?r{DB5{$1IQ@pnyW@L=*%*||KMd#a1$XNv3?$VoKdoXMUod@X_ zq&Lm;XW~Wg(~b64*>cX95v-%%qSWJ*^|PX+UdnM~IYI<(08A@Wa$RbFF((B7X5fCY z?Sl1C@K*vR#V+tbsrx_D{%JBmZ@_9)zr~}%-NwDOw|8!Ap@sE!YXbr7D;gSqRKpAu z)qoDof|YKU2cGf7kf1`7Wdaguv3j)N$17DUeA)Chc56T`1SLOG4CD)}RT*@F%G%E1 zz1^BLSaG$bIn~UPK^P&y=Pk!)DWB=cT7IG`l6!_|!NOAR)SNa%Fd)c)m9stQtz2&` z`NqzJ;3ft>(%w-l$-8}QEh>9KKh}9yr=ipZ=eEq@dL#ns)F z!yf*Cg?sPlF9a!h!>#L7J*%AiPgTSe*pX6SGe@Q zA4(_SNf}5){L|J$#P4a$0Wc#Rff;dz=&@rms^7?+>@Z?fbnUQ}F@-MT<9|>w&u17O z9tg)Tf2%+=!Cu=RFaCf|{KFO;Ylp@lt;fa8@IxB%D|9Wuy@hg10*b7HJW(g$RobSf;T>p)i0vVfUk{`O{pe|9L)1DeXWL6FISl=!VAk+Y*U3|#2h_{AeXCD=_*az$b{w#pQZGmbEa)P5=#<{oEp-~2 ze_iVXD_j(L!O5BIQbJC#x9#V`xzu>#mZi~nYxD~RTjugqm&Pd6>|(dlgAN=kpO2W+ zn86YvkUW*WlmLHo(tY>n)>B%gMX3%qupWX=-lwapguxAzx(fa-9W7>_%;NW5oA=s> z`?v@dFWP<{=NHy&y&t;~u`Cf(OC5~8uey85*CVRIMNu_+ESoXUc1*5#X26kgwbEIj z`Cf&F%*G_jm(+UdlB*0+V*yfS!D>zqEmxHuhqX2dr>`N>^FBs&yZTU-ys@6*kv2io zLo-xE1uY*}`ne5YLfr#4H)mMVpeEF*jZBQH zf>R$mrfwFfTipEGu!?ZUZGXy|G@NV_0ABB-v#?0mzcG!ijV;P!Q* zPK0K`^_Cz4VkNU87dqApH^f_ChzK@z^GsgxnS>X&xgD`@M^Dg>>u%@5LrFi^ov}XH zxc0CVRp(%jf2>YBccx2(GF{fqTD~BnH7tarN2zUvghg;vz@(@|1f63CTz7er)u)0d zzHz}>m}84k!h_Gmpol}s=xfW#$P{Y}}_9X4M7_ z@YXhtgkC%eL#4GfU66V0cBr(&jQ{zql$m?3iz4TW$^Go!SLqGm4MDyk!=hF*er(Lb z`$*-$7Q1yp6(eXnT(XC zRc))@ylhT-4tRSk(hIH**O82yE9y`|0~TOY~R0@46J$h22usKMT9=dxsP1EaVC zE*=JS0z5$>JA&8Cu5)2!$F}dby&y>mE?(MxqOgj#l#@AKvP$bZ_097K;7w*eB8$> zgQk8&0ph*u^rKy2GD(WU^I@(r71Xv1(g)8Ma?|#TBIc-Jmy|0yU}~P7Zwz_}Y-gI9 z=|iwnl8W6ZYa+&8c6d(n1O;rT$!$9+nH+&*)#{msE^i7`XYh89ityeYMNW*-7%aF4 zJ7Onw3(GTI9%;$=of6#$-FOSWi+%75o}7cE!8$snZkxqAt>vnc|m(DK<%Z@-#C|CWg%MomExIK8Ey zk)wk)6&RIlr5q#b>?g%(7y>lpibeJ1vK&Q&g*ebnd6u7G?OO?LBdljKwKT&RqROJj zzEkAd8h^2|{N<&H*ZDN~4*Y0>e(Hq}V88aZOSr=p&9Vf6&)IW`Mz3DY9EijXix^i} zCd_qv5Vng*CbQPoS+u2q0#7J^WuL{>kX3wsJtMHTSUOo z*{}#ZV`%GM-km5@4`l`_tW_iJ)Kmsm?p?GVj=`dQGuw+)?fkP2_nmtpF2l#zxeAx} z-nOYnfUnl=-C!Jjb%BgF2k=oLxH~1L#89rfbfcOrYjsOhhq2-24v&v|Npo|=!3x=) z%d(}2?@KDD1xFjtau{27itGVgy$X-VuNU3IW2~$z>QN`*fZP^Y>VQ0 zS4aWu_n1)($-gcm2`q0V0)y8eyHp+QT;W^-Pe>`>x==+ zb<@{;AJOv1O>X^SSH^kvUD+?T>?&<-xkjV4=W&eueKlTcGdtMg(HSDz242xy@ zqGx)>IE^ySij*Qrh?s&Bwhyh2V0;;BnP!Da1??tcZ4?4|T>z(TF$Hc+)MWa?>Pvy6 z{S_efpNQVXISK@AjjTb(!XVX$7)V`vQNb@Gu`S#~rCH=6v zSD32HtT$k{q5@vLb*3z`OCxr_*hS#N@mh?oP^qI4CVz+zM(fosb;5_MRw3tCTqMg$ zZx%}PmT{zoUYNUudo*ZU)S@i-`Bf}l&wvT|mXeTX*kL%E(cq-3t`%$Cg+?~HoE#so zk`+Gn#p$O7b6!R0OmQogZ>__Z+zf7(7=aOphSSMut1p6(9@Nt?lo-$%hbQ@i`%T|7 zvraryNeJ+Zh`Qe#QF5V!(!_+q(pg`DXh6K3-+G&A^HrMz>J>;8^Ybvcu*m1mAtIj3 zFu;an4Enwj0uD?6G|Y1=Vvt`Iq}0S%WUosDK>??~R^kP-N(}q~A@G9>`OAMA7{mzt z_Wf%LV%KG*rBu~e6{MjlK)wLnAAD`Viuq520J{Lc14(Co^#zRMzdr~0Lc+H%{Fp`d zS6?PS_2ssozYLv%_E*Fp;(luoP7nZX`c1wZXCO-3(GGCK{Yk)kcxput0RpW+cZeKQ z1wO$b$hrE=WFgOqDiDBE8{S{Z!1WyrB7-OZe`c_gn;d9>O>xtYkPMdOz#v23vyU4X z^ziQhzF!p`3kWGM2^24ax+8+-W5f87Ejhr)9`K`Z%mnZW2Jr%B?=J-X$3F$q#lL}m z=hJUZ3cx~&Mnl5kjvE-%0EA!t4fOHQ{stHVbgWyD?d`V)8C)5lI`Nr-e^@%8d$lTI z(IXlVs}R_!obJ`+zeG45RVV1h1R5G5%&~CP|A=<(s~t!J%-U~+vvj@vlirD=l9KWR z6bpfQ35j<(ZeY;(*$B$rP*b%qvjyfNP|N+~-U6EO?z(%K5K}b<{O}!v0H0uxJ=&QV z2XMYs&HSZivvZ)r>HtGy1BfJX3PvCOtT3wXHbCJvM+>8~$OXYT9uP<|k#7w$+ek6b z1o+*E{A?4W1zdL_NxhqYQX#89rv2T3Kt>5VNip?Er;!x^3rZU}o~uBu{7WpD+bF5t7m1w8Cot1@-SU z@!yUa&|L|U<=^KA^Tjg>_6xCuOxNrolO3|AK&tl~H!$eVAJhIW)bA{i)KkXRT>w-L zFn*9=yW<812>|<{-&mku>Mn%RaaXY%ll^Mj?gG25-%y6^EG&#|zO9NsO#lmtF!x1( zX$)XOpYEwwe@Yr+s%4G;S$=;h4<-Ief+8RgF3?k=-{pa55dqmB%5w_zn;XWjCK|+{ zKlS4+^z=A(pdZ-)vGk5HfKM=pgz~RJ{@GKgIs^5xzrL?KeG~UL z>pZ+$3Jem!M>H_|^-uBAM)mi+{5ZN|){Z6y#y}l23#Z#ozu_kGbK^KQ&@+(It`NtY z;|2yP(*FN&^BV?+kSAmV0q_u@OCZh@#|;dcq5CZZz@ngGVC`)3-|P2nISeVtR*nJa zZP8=ez$X|~&G1L$|MhAQdNPmjxxR}5)W#RsPo1o)5VRp6=gDtOfr^xbtdi6%S;>D_ z6zEd!$HIU?&)I%Y`*dM za(22WrQm*PxuAN63OISmT2cdu5Z6|9Aq}xg_{}#^~P}%Q=cA+Ul zS6n`k`}D zO6bzNCk!Y7+xy>0`Kv;_&_F+S=V_Iy2F@$L0s6j@{k*w`E<<}F037hVc6Pe|DAErJ zAO5Wfy8z#Wv!kD-k}5Pdbal@Y>>S}g!Tv|`f2;Kg4f*3Bp5EF?ivAYz zbk#{{($FO=Po#TM^SQv#dr-%aXMh2bEk=)X53Kgs}cuK3m<>jjM5 z9|HZtLO|ElI>rHmZvGD_U)_6-{i}bor-LpZb;7|0aHaM~9r}Zu->(9`vho`ipsOUE zun-EIr2l6YzK-+nt|Or90iEzb54d^$&paFt#(!1^f>t5uk~b&(^eg>6Kffw~1I+<+ zZI=@cY=AtSf7ByCOaI?`2VI8b1eOnY^#3E+Q)=+*%_x9!Y_Lu%`#w;%>yJQxv7v&l zByl2|@{PYoIW6UHwp0+vV?j^vf;F^$%fcz|4Cv_sUDe=3xQsuf{HIr5r*~|~+P{_K zhkU=#Qb1?=KaoQ1kLdo8n)KU!;lG~~q4U3=z!d^6p1+xQKZx<`r3^Y>_6f?2{@60DfOke%b~=XLyDnLK+x!!RYT0zOPs(LkH>A-z;6w*^9q% z0pX*___IO*cw-2_9xj^#V8 z=aS~XmG2iqLFc7C5i0DD=$`QZyDYWPIs%=_^Mr#jt3Q$K-#Pdpu_rVzbcV_kU@x1$ z1O9j02A$aO1gFUEPjG%X^+KmPgcc0~aXed2uWmOSehYbg{2C@?zLFYe|;D_+alYC^*azQ6mI>8%q`+K|}Q!GIvLTB$eL7cwx_lRfS-9a*@ zd}|ORId$*PApd(og3h0Ei~XQM_a*7Sv#CJ$E_8;F6E;S@{+5mZ%ohR;4xRtv z1l$Akx8UFV;9s+0Kyv_{3!$Zfsp1|J<{R`=Sf%Q4|F+=JL6^r+U{KTl2K3#8{UrFmm5GM#dI6kF z_ROpwyM6!a?f^pgcw(GBWc$aT8R(Z+I?w?(C!!4hCBhHAceXcrsCbPN4oH*!PR4&Y z_|rQkNIbx|2APEXDQ5=%g}y;Y2OJ}SK_P!d|9H~;bOi_p4{EGw}9l}x}|NB4Q C&0KH* literal 0 HcmV?d00001 From 9446d28bb0c3b2e892030fbe522542a4f8861bcd Mon Sep 17 00:00:00 2001 From: Joel Coutinho Date: Tue, 4 Oct 2022 09:26:54 +0000 Subject: [PATCH 14/14] adds log level changes --- .../pluginInterface/LOG_LEVEL.java | 22 +++++++++++++++++++ .../supertokens/pluginInterface/Storage.java | 4 +++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java diff --git a/src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java b/src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java new file mode 100644 index 00000000..75932201 --- /dev/null +++ b/src/main/java/io/supertokens/pluginInterface/LOG_LEVEL.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + */ + +package io.supertokens.pluginInterface; + +public enum LOG_LEVEL { + NONE, DEBUG, INFO, WARN, ERROR +} \ No newline at end of file diff --git a/src/main/java/io/supertokens/pluginInterface/Storage.java b/src/main/java/io/supertokens/pluginInterface/Storage.java index 029da4e5..e774fc03 100644 --- a/src/main/java/io/supertokens/pluginInterface/Storage.java +++ b/src/main/java/io/supertokens/pluginInterface/Storage.java @@ -19,12 +19,14 @@ import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import java.util.Set; + public interface Storage { // if silent is true, do not log anything out on the console void constructor(String processId, boolean silent); - void loadConfig(String configFilePath); + void loadConfig(String configFilePath, Set logLevels); void initFileLogging(String infoLogPath, String errorLogPath);