From a9b83ce196004774aa44265c6d788f6f6ff5e137 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Thu, 15 Oct 2026 19:41:10 +0530 Subject: [PATCH 01/10] SK-3222 fix internal release --- .github/workflows/internal-release.yml | 2 +- flowvault/pom.xml | 31 ++++++++++-------------- skyvault/pom.xml | 33 ++++++++++---------------- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 808cc7e4..5b13107b 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -46,7 +46,7 @@ jobs: uses: ./.github/workflows/shared-build-and-deploy.yml with: ref: ${{ github.ref_name }} - server-id: central + server-id: skyflow-jfrog profile: jfrog tag: 'internal' module: ${{ needs.resolve-module.outputs.module }} diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 6ea99c9a..3389f94d 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -76,25 +76,18 @@ - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.6.0 - + shade-for-japicmp package @@ -180,7 +173,7 @@ jfrog - central + skyflow-jfrog prekarilabs.jfrog.io-releases https://prekarilabs.jfrog.io/artifactory/skyflow-java diff --git a/skyvault/pom.xml b/skyvault/pom.xml index ce14cc82..47c04de5 100644 --- a/skyvault/pom.xml +++ b/skyvault/pom.xml @@ -57,26 +57,19 @@ - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.6.0 - + shade-for-japicmp package @@ -170,7 +163,7 @@ jfrog - central + skyflow-jfrog prekarilabs.jfrog.io-releases https://prekarilabs.jfrog.io/artifactory/skyflow-java From 3c8d25a75f154f2362735de526a70d68aa45081b Mon Sep 17 00:00:00 2001 From: Yaswanth Sai Pula <86997953+yaswanth-pula-skyflow@users.noreply.github.com> Date: Thu, 29 Oct 2026 18:12:18 +0530 Subject: [PATCH 02/10] SK-3253:Add gated retry on 401 status code for flowvault SDK (#454) * SK-3253:Add gated retry on 401 status code for both skyvault & flowvault SDKs. * SK-3253:Fix failed token regeneration when concurent 401 failures. * SK-3253:Update unit tests to cover both skyvault & flowvault. * SK-3252:Update null check. * [AUTOMATED] Private Release 1.2.0-dev-23391b03 * SK-3253:Update warning log & test. * [AUTOMATED] Private Release 1.2.0-dev-20ef0615 --------- Co-authored-by: yaswanth-pula-skyflow --- .../java/com/skyflow/BaseVaultClient.java | 130 ++++- .../main/java/com/skyflow/logs/InfoLogs.java | 4 + .../java/com/skyflow/logs/WarningLogs.java | 4 +- .../skyflow/serviceaccount/util/Token.java | 23 + .../com/skyflow/BaseVaultClientTests.java | 492 ++++++++++++++++++ .../serviceaccount/util/TokenTests.java | 42 ++ flowvault/pom.xml | 2 +- .../main/java/com/skyflow/VaultClient.java | 10 +- .../com/skyflow/AuthInterceptorTests.java | 101 ++++ .../java/com/skyflow/utils/FakeChain.java | 4 + .../main/java/com/skyflow/VaultClient.java | 2 +- .../com/skyflow/AuthInterceptorTests.java | 183 +++++++ .../java/com/skyflow/utils/FakeChain.java | 140 +++++ .../java/com/skyflow/utils/UtilsTests.java | 17 + 14 files changed, 1136 insertions(+), 18 deletions(-) create mode 100644 skyvault/src/test/java/com/skyflow/AuthInterceptorTests.java create mode 100644 skyvault/src/test/java/com/skyflow/utils/FakeChain.java diff --git a/common/src/main/java/com/skyflow/BaseVaultClient.java b/common/src/main/java/com/skyflow/BaseVaultClient.java index 3d5b0d32..82084c4a 100644 --- a/common/src/main/java/com/skyflow/BaseVaultClient.java +++ b/common/src/main/java/com/skyflow/BaseVaultClient.java @@ -9,6 +9,7 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.logs.ErrorLogs; import com.skyflow.logs.InfoLogs; +import com.skyflow.logs.WarningLogs; import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.BaseConstants; import com.skyflow.utils.BaseUtils; @@ -17,9 +18,12 @@ import io.github.cdimascio.dotenv.Dotenv; import io.github.cdimascio.dotenv.DotenvException; import okhttp3.ConnectionPool; +import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; +import okhttp3.Response; +import java.net.HttpURLConnection; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -33,6 +37,17 @@ class BaseVaultClient { protected BaseCredentials finalCredentials; protected String token; protected String apiKey; + // The token whose regeneration after a 401 last failed. Guarded by this. Further 401s on that + // same token return without generating again, so an auth outage costs one generation per + // token instead of one per rejected request. Cleared whenever a token is stored. + private String refreshFailedFor; + + /** + * A 401 is treated as token expiry only if the token the SDK sent has an {@code exp} at or + * before now plus this window. By the time the 401 arrives the gateway has already judged the + * token expired, so the window only has to absorb clock skew between this host and the gateway. + */ + protected static final long BEARER_TOKEN_EXPIRY_WINDOW_SECONDS = 60; protected BaseVaultClient(V vaultConfig, BaseCredentials credentials) { this.vaultConfig = vaultConfig; @@ -43,18 +58,116 @@ protected V getVaultConfig() { return vaultConfig; } + /** + * The bearer token to send. Synchronized on the same monitor as {@link #setBearerToken(BaseCredentials)} + * and {@link #refreshBearerTokenAfterUnauthorized(String)}, so a request attempt on an OkHttp or + * batch thread sees the token those methods wrote, and waits for a regeneration in progress + * instead of sending the token it is replacing. + */ + protected synchronized String getToken() { + return token; + } + protected OkHttpClient buildSharedHttpClient(Supplier tokenSupplier) { return new OkHttpClient.Builder() .connectionPool(new ConnectionPool(10, 1, TimeUnit.MINUTES)) - .addInterceptor(chain -> { - Request requestWithAuth = chain.request().newBuilder() - .header("Authorization", "Bearer " + tokenSupplier.get()) - .build(); - return chain.proceed(requestWithAuth); - }) + .addInterceptor(authInterceptor(tokenSupplier)) .build(); } + /** + * The auth interceptor shared by every OkHttp client in the SDK. It attaches the current bearer + * token to each attempt, reading it fresh from {@code tokenSupplier} so a token refreshed between + * attempts is picked up. When the vault answers {@code 401} and + * {@link #refreshBearerTokenAfterUnauthorized(String)} can supply a replacement, the rejected + * response is closed and the same request is sent once more with the new token. Any other + * status, and a {@code 401} the refresh declines, is returned as is. + */ + protected Interceptor authInterceptor(Supplier tokenSupplier) { + return chain -> { + String sent = tokenSupplier.get(); + Response response = chain.proceed(withBearer(chain.request(), sent)); + if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) { + return response; + } + String fresh = refreshBearerTokenAfterUnauthorized(sent); + if (fresh == null) { + return response; + } + response.close(); + return chain.proceed(withBearer(chain.request(), fresh)); + }; + } + + private static Request withBearer(Request request, String bearer) { + return request.newBuilder().header("Authorization", "Bearer " + bearer).build(); + } + + /** + * Called when the vault rejected {@code rejected} with {@code 401}. Returns the token to resend + * the request with, or {@code null} when the request must fail as it stands: + *
    + *
  • the effective credentials are a static token or an API key, which the SDK cannot replace;
  • + *
  • the rejected token is not at or past expiry (within {@link #BEARER_TOKEN_EXPIRY_WINDOW_SECONDS}), + * so the {@code 401} was not caused by expiry and a new token would not help;
  • + *
  • generating a replacement failed, or produced the very token that was rejected;
  • + *
  • a replacement for this same token was already attempted and failed, so the outcome is + * shared with every request still holding it. A later method call recovers through + * {@link #setBearerToken(BaseCredentials)}, which clears that record when it stores a token.
  • + *
+ * Synchronized with {@link #setBearerToken(BaseCredentials)} and {@link #getToken()} so concurrent + * {@code 401}s on one token share a single regeneration: a caller that finds the cached token + * already different from the one it sent reuses it without generating again. + */ + protected synchronized String refreshBearerTokenAfterUnauthorized(String rejected) { + BaseCredentials credentials = this.finalCredentials; + if (credentials == null || credentials.getApiKey() != null || credentials.getToken() != null) { + return null; + } + if (!Token.isExpiringWithin(rejected, BEARER_TOKEN_EXPIRY_WINDOW_SECONDS)) { + LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_REJECTED_NOT_DUE.getLog()); + return null; + } + String cached = this.token; + if (cached != null && !cached.equals(rejected)) { + LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_REJECTED_REUSING_REGENERATED.getLog()); + return cached; + } + // rejected is non-null here: a null token fails the expiry gate above. + if (rejected.equals(refreshFailedFor)) { + LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_REJECTED_REGENERATION_ALREADY_FAILED.getLog()); + return null; + } + LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_REJECTED_REGENERATING.getLog()); + try { + String fresh = generateBearerToken(credentials); + if (fresh == null || fresh.equals(rejected)) { + LogUtil.printWarningLog(WarningLogs.BEARER_TOKEN_REGENERATION_RETURNED_REJECTED_TOKEN.getLog()); + refreshFailedFor = rejected; + return null; + } + storeToken(fresh); + return fresh; + } catch (SkyflowException e) { + LogUtil.printWarningLog(WarningLogs.BEARER_TOKEN_REGENERATION_AFTER_401_FAILED.getLog() + + " httpCode=" + e.getHttpCode() + + (e.getRequestId() != null ? " requestId=" + e.getRequestId() : "")); + refreshFailedFor = rejected; + return null; + } + } + + /** Stores a token the SDK obtained and forgets any failed regeneration, so refresh can run again. */ + private void storeToken(String fresh) { + this.token = fresh; + this.refreshFailedFor = null; + } + + /** Single point that turns credentials into a bearer token; tests substitute it. */ + protected String generateBearerToken(BaseCredentials credentials) throws SkyflowException { + return BaseUtils.generateBearerToken(credentials); + } + protected synchronized void prioritiseCredentials(BaseCredentials vaultSpecificCredentials) throws SkyflowException { try { BaseCredentials original = this.finalCredentials; @@ -78,6 +191,7 @@ protected synchronized void prioritiseCredentials(BaseCredentials vaultSpecificC if (original != null && !original.equals(this.finalCredentials)) { token = null; apiKey = null; + refreshFailedFor = null; } } catch (DotenvException e) { throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyCredentials.getMessage()); @@ -95,10 +209,10 @@ protected synchronized void setBearerToken(BaseCredentials vaultSpecificCredenti LogUtil.printInfoLog(InfoLogs.USE_API_KEY.getLog()); token = this.finalCredentials.getApiKey(); } else if (token == null || token.trim().isEmpty()) { - token = BaseUtils.generateBearerToken(this.finalCredentials); + storeToken(generateBearerToken(this.finalCredentials)); } else if (Token.isExpired(token)) { LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_EXPIRED.getLog()); - token = BaseUtils.generateBearerToken(this.finalCredentials); + storeToken(generateBearerToken(this.finalCredentials)); } else { LogUtil.printInfoLog(InfoLogs.REUSE_BEARER_TOKEN.getLog()); } diff --git a/common/src/main/java/com/skyflow/logs/InfoLogs.java b/common/src/main/java/com/skyflow/logs/InfoLogs.java index b4045229..55732d1e 100644 --- a/common/src/main/java/com/skyflow/logs/InfoLogs.java +++ b/common/src/main/java/com/skyflow/logs/InfoLogs.java @@ -20,6 +20,10 @@ public enum InfoLogs { GET_SIGNED_DATA_TOKENS_TRIGGERED("getSignedDataTokens method triggered."), GET_SIGNED_DATA_TOKEN_SUCCESS("Signed data tokens generated."), REUSE_BEARER_TOKEN("Reusing bearer token."), + BEARER_TOKEN_REJECTED_REGENERATING("Bearer token rejected with 401 and is past expiry; regenerating once and resending the request."), + BEARER_TOKEN_REJECTED_REUSING_REGENERATED("Bearer token rejected with 401; reusing the token another request already regenerated."), + BEARER_TOKEN_REJECTED_NOT_DUE("Bearer token rejected with 401 but is not near expiry; not retrying."), + BEARER_TOKEN_REJECTED_REGENERATION_ALREADY_FAILED("Bearer token rejected with 401; regeneration for this token already failed, not retrying."), USE_CLIENT_PROVIDED_BEARER_TOKEN("Using bearer token provided by client."), USE_API_KEY("Using api key."), REUSE_API_KEY("Reusing api key."), diff --git a/common/src/main/java/com/skyflow/logs/WarningLogs.java b/common/src/main/java/com/skyflow/logs/WarningLogs.java index 1eb1bcd8..9d001694 100644 --- a/common/src/main/java/com/skyflow/logs/WarningLogs.java +++ b/common/src/main/java/com/skyflow/logs/WarningLogs.java @@ -8,7 +8,9 @@ public enum WarningLogs { EMPTY_DELETE_TOKENS_RESPONSE("DeleteTokens response did not include any token results."), INCOMPLETE_DELETE_TOKENS_RESPONSE("DeleteTokens response did not account for all requested tokens."), EMPTY_TOKENIZE_RESPONSE("Tokenize response did not include any record results."), - INCOMPLETE_TOKENIZE_RESPONSE("Tokenize response did not account for all requested records.") + INCOMPLETE_TOKENIZE_RESPONSE("Tokenize response did not account for all requested records."), + BEARER_TOKEN_REGENERATION_AFTER_401_FAILED("Bearer token regeneration after 401 failed; returning the 401 response."), + BEARER_TOKEN_REGENERATION_RETURNED_REJECTED_TOKEN("Bearer token regeneration after 401 returned the rejected token; not resending.") ; private final String log; diff --git a/common/src/main/java/com/skyflow/serviceaccount/util/Token.java b/common/src/main/java/com/skyflow/serviceaccount/util/Token.java index 0359d944..e272df8b 100644 --- a/common/src/main/java/com/skyflow/serviceaccount/util/Token.java +++ b/common/src/main/java/com/skyflow/serviceaccount/util/Token.java @@ -40,6 +40,29 @@ public static boolean isExpired(String token) { return currentTime > expiryTime; } + /** + * Returns true when the token's {@code exp} claim is at or before now plus {@code windowSeconds}, + * that is, the token has expired or will within the window. Unlike {@link #isExpired(String)}, + * a token that is empty, cannot be decoded, or carries no {@code exp} is reported as + * not expiring: callers use this to decide whether a {@code 401} was caused by expiry, + * and a malformed token is not an expiry. + */ + public static boolean isExpiringWithin(String token, long windowSeconds) { + if (token == null || token.trim().isEmpty()) { + return false; + } + try { + JsonElement exp = decoded(token).get("exp"); + if (exp == null) { + return false; + } + long currentTime = new Date().getTime() / 1000; + return exp.getAsLong() <= currentTime + windowSeconds; + } catch (SkyflowException | RuntimeException e) { + return false; + } + } + static JsonObject decoded(String encodedToken) throws JsonSyntaxException, SkyflowException { String[] split = encodedToken.split("\\."); if (split.length < 3) { diff --git a/common/src/test/java/com/skyflow/BaseVaultClientTests.java b/common/src/test/java/com/skyflow/BaseVaultClientTests.java index 7a4c0da9..a4f9616f 100644 --- a/common/src/test/java/com/skyflow/BaseVaultClientTests.java +++ b/common/src/test/java/com/skyflow/BaseVaultClientTests.java @@ -4,8 +4,11 @@ import com.skyflow.config.BaseVaultConfig; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.enums.LogLevel; import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.WarningLogs; import com.skyflow.utils.BaseConstants; +import com.skyflow.utils.logger.LogUtil; import okhttp3.Call; import okhttp3.Connection; import okhttp3.Interceptor; @@ -26,8 +29,20 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Base64; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import java.util.logging.Logger; public class BaseVaultClientTests { @@ -301,4 +316,481 @@ public void testSetBearerToken_expiredToken_regeneratesToken() throws SkyflowExc Assert.assertEquals("x.eyJleHAiOjk5OTk5OTk5OTl9.y", client.token); Assert.assertNotEquals("", client.token); } + + // ── refresh-and-resend on 401 ──────────────────────────────────────────── + + private static String jwtExpiringIn(long seconds) { + Base64.Encoder enc = Base64.getUrlEncoder().withoutPadding(); + String header = enc.encodeToString("{\"alg\":\"none\"}".getBytes(StandardCharsets.UTF_8)); + String payload = enc.encodeToString(("{\"exp\":" + (System.currentTimeMillis() / 1000 + seconds) + "}") + .getBytes(StandardCharsets.UTF_8)); + return header + "." + payload + ".sig"; + } + + /** A client whose token generation is scripted, so no service-account file is needed. */ + private static final class ScriptedClient extends BaseVaultClient { + final AtomicInteger generations = new AtomicInteger(); + final java.util.List script = new ArrayList<>(); + SkyflowException failure; + + ScriptedClient(BaseCredentials credentials) { + super(new BaseVaultConfig(), credentials); + this.finalCredentials = credentials; + } + + @Override + protected String generateBearerToken(BaseCredentials credentials) throws SkyflowException { + int n = generations.getAndIncrement(); + if (failure != null) { + throw failure; + } + return script.get(Math.min(n, script.size() - 1)); + } + } + + private static BaseCredentials mintableCredentials() { + BaseCredentials credentials = new BaseCredentials(); + credentials.setCredentialsString("{\"clientID\":\"c\"}"); + return credentials; + } + + @Test + public void testRefreshAfter401_expiredSdkTokenIsRegeneratedOnceAndCached() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.script.add("fresh-token"); + + Assert.assertEquals("fresh-token", client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("fresh-token", client.token); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testRefreshAfter401_tokenInsideWindowCountsAsExpired() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(30); + client.token = rejected; + client.script.add("fresh-token"); + + Assert.assertEquals("fresh-token", client.refreshBearerTokenAfterUnauthorized(rejected)); + } + + @Test + public void testRefreshAfter401_tokenWithLifeLeftIsNotRetried() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(600); + client.token = rejected; + client.script.add("fresh-token"); + + Assert.assertNull("a 401 on a live token is not expiry", client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("must not spend a mint on a non-expiry 401", 0, client.generations.get()); + Assert.assertEquals(rejected, client.token); + } + + @Test + public void testRefreshAfter401_staticTokenIsNeverRegenerated() { + BaseCredentials credentials = new BaseCredentials(); + String rejected = jwtExpiringIn(-2); + credentials.setToken(rejected); + ScriptedClient client = new ScriptedClient(credentials); + client.token = rejected; + client.script.add("fresh-token"); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals(0, client.generations.get()); + } + + @Test + public void testRefreshAfter401_apiKeyIsNeverRegenerated() { + BaseCredentials credentials = new BaseCredentials(); + credentials.setApiKey("sky-test-key"); + ScriptedClient client = new ScriptedClient(credentials); + client.token = "sky-test-key"; + client.script.add("fresh-token"); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized("sky-test-key")); + Assert.assertEquals(0, client.generations.get()); + } + + @Test + public void testRefreshAfter401_noCredentialsResolvedYet() { + ScriptedClient client = new ScriptedClient(null); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(jwtExpiringIn(-2))); + } + + @Test + public void testRefreshAfter401_generationFailureReturnsNullAndKeepsToken() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.failure = new SkyflowException("auth service down"); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals(rejected, client.token); + } + + @Test + public void testRefreshAfter401_generationFailureLogsOnlyHttpCodeAndRequestId() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + Map> headers = new HashMap<>(); + headers.put(BaseConstants.REQUEST_ID_HEADER_KEY, java.util.Collections.singletonList("req-123")); + String secretMessage = "invalid credentials file /secrets/sa.json"; + String body = "{\"error\":{\"grpc_code\":16,\"http_code\":401,\"http_status\":\"Unauthorized\"," + + "\"message\":\"" + secretMessage + "\"}}"; + client.failure = new SkyflowException(401, new RuntimeException("token endpoint failed"), headers, body); + + LogUtil.setupLogger(LogLevel.WARN); + // setupLogger resets every handler, so attach the capture after it. + Logger logger = Logger.getLogger(LogUtil.class.getName()); + java.util.List records = new ArrayList<>(); + Handler capture = new Handler() { + @Override public void publish(LogRecord record) { records.add(record); } + @Override public void flush() {} + @Override public void close() {} + }; + capture.setLevel(Level.ALL); + logger.addHandler(capture); + try { + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + } finally { + logger.removeHandler(capture); + LogUtil.setupLogger(LogLevel.ERROR); + } + + String warning = records.stream() + .filter(r -> Level.WARNING.equals(r.getLevel())) + .map(LogRecord::getMessage) + .filter(m -> m.contains(WarningLogs.BEARER_TOKEN_REGENERATION_AFTER_401_FAILED.getLog())) + .findFirst() + .orElseThrow(() -> new AssertionError("regeneration-failure warning was not logged")); + Assert.assertTrue(warning, warning.contains("httpCode=401")); + Assert.assertTrue(warning, warning.contains("requestId=req-123")); + Assert.assertFalse("exception message must not be logged: " + warning, warning.contains(secretMessage)); + Assert.assertFalse("response body must not be logged: " + warning, warning.contains("grpc_code")); + Assert.assertFalse("cause must not be logged: " + warning, warning.contains("token endpoint failed")); + } + + @Test + public void testRefreshAfter401_sameTokenBackMeansStop() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.script.add(rejected); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testRefreshAfter401_failedGenerationIsNotRepeatedForTheSameToken() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.failure = new SkyflowException("auth service down"); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("later 401s on the same token must not generate again", 1, client.generations.get()); + Assert.assertEquals(rejected, client.token); + } + + @Test + public void testRefreshAfter401_sameTokenBackIsNotRepeatedForTheSameToken() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.script.add(rejected); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testRefreshAfter401_recoversAfterStartOfMethodCheckStoresNewToken() throws Exception { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.failure = new SkyflowException("auth service down"); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + + // Auth comes back; the next method call's start-of-method check mints and stores a token. + client.failure = null; + String stored = jwtExpiringIn(-3); + client.script.add(stored); + client.setBearerToken(null); + Assert.assertEquals(stored, client.token); + + // That token expires too and is rejected: refresh must generate again, not stay stuck. + client.script.add("fresh-after-recovery"); + Assert.assertEquals("fresh-after-recovery", client.refreshBearerTokenAfterUnauthorized(stored)); + Assert.assertEquals(3, client.generations.get()); + } + + @Test + public void testRefreshAfter401_concurrentGenerationFailuresShareOneAttempt() throws Exception { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.failure = new SkyflowException("auth service down"); + int threads = 8; + ExecutorService pool = Executors.newFixedThreadPool(threads); + CountDownLatch start = new CountDownLatch(1); + java.util.List> results = new ArrayList<>(); + try { + for (int i = 0; i < threads; i++) { + results.add(pool.submit(() -> { + start.await(); + return client.refreshBearerTokenAfterUnauthorized(rejected); + })); + } + start.countDown(); + for (Future result : results) { + Assert.assertNull(result.get(10, TimeUnit.SECONDS)); + } + } finally { + pool.shutdownNow(); + } + Assert.assertEquals("eight 401s during an auth outage must cost one failed mint, not eight", 1, client.generations.get()); + Assert.assertEquals(rejected, client.token); + } + + @Test + public void testRefreshAfter401_reusesTokenAnotherRequestAlreadyRegenerated() { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = "already-fresh"; + client.script.add("never-used"); + + Assert.assertEquals("already-fresh", client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals(0, client.generations.get()); + } + + @Test + public void testRefreshAfter401_concurrentRejectionsShareOneGeneration() throws Exception { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.script.add("fresh-token"); + int threads = 8; + ExecutorService pool = Executors.newFixedThreadPool(threads); + CountDownLatch start = new CountDownLatch(1); + java.util.List> results = new ArrayList<>(); + try { + for (int i = 0; i < threads; i++) { + results.add(pool.submit(() -> { + start.await(); + return client.refreshBearerTokenAfterUnauthorized(rejected); + })); + } + start.countDown(); + for (Future result : results) { + Assert.assertEquals("fresh-token", result.get(10, TimeUnit.SECONDS)); + } + } finally { + pool.shutdownNow(); + } + Assert.assertEquals("eight 401s on one token must cost one mint", 1, client.generations.get()); + } + + /** Fake chain that replays scripted status codes and records what was proceeded. */ + private static final class ScriptedChain implements Interceptor.Chain { + private final Request request = new Request.Builder().url("https://example.com/v1/x").build(); + private final int[] codes; + final java.util.List proceeded = new ArrayList<>(); + + ScriptedChain(int... codes) { + this.codes = codes; + } + + @Override + public Request request() { + return request; + } + + @Override + public Response proceed(Request request) { + proceeded.add(request); + int code = codes[Math.min(proceeded.size() - 1, codes.length - 1)]; + return new Response.Builder().request(request).protocol(Protocol.HTTP_1_1) + .code(code).message("status " + code) + .body(okhttp3.ResponseBody.create(null, new byte[0])) + .build(); + } + + @Override + public Connection connection() { + return null; + } + + @Override + public Call call() { + throw new UnsupportedOperationException(); + } + + @Override + public int connectTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withConnectTimeout(int timeout, TimeUnit unit) { + return this; + } + + @Override + public int readTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withReadTimeout(int timeout, TimeUnit unit) { + return this; + } + + @Override + public int writeTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withWriteTimeout(int timeout, TimeUnit unit) { + return this; + } + } + + @Test + public void testAuthInterceptor_401OnExpiredTokenIsResentOnceWithFreshToken() throws IOException { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + client.token = jwtExpiringIn(-2); + client.script.add("fresh-token"); + ScriptedChain chain = new ScriptedChain(401, 200); + + Response response = client.authInterceptor(() -> client.token).intercept(chain); + + Assert.assertEquals(200, response.code()); + Assert.assertEquals(2, chain.proceeded.size()); + Assert.assertEquals("Bearer fresh-token", chain.proceeded.get(1).header("Authorization")); + Assert.assertEquals(chain.request().url(), chain.proceeded.get(1).url()); + } + + @Test + public void testAuthInterceptor_second401IsReturnedNotRetried() throws IOException { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + client.token = jwtExpiringIn(-2); + client.script.add("fresh-token"); + ScriptedChain chain = new ScriptedChain(401, 401); + + Assert.assertEquals(401, client.authInterceptor(() -> client.token).intercept(chain).code()); + Assert.assertEquals(2, chain.proceeded.size()); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testAuthInterceptor_401OnStaticTokenIsNotRetried() throws IOException { + BaseCredentials credentials = new BaseCredentials(); + credentials.setToken(jwtExpiringIn(-2)); + ScriptedClient client = new ScriptedClient(credentials); + client.token = credentials.getToken(); + ScriptedChain chain = new ScriptedChain(401, 200); + + Assert.assertEquals(401, client.authInterceptor(() -> client.token).intercept(chain).code()); + Assert.assertEquals(1, chain.proceeded.size()); + } + + @Test + public void testAuthInterceptor_401OnLiveTokenIsNotRetried() throws IOException { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + client.token = jwtExpiringIn(600); + client.script.add("fresh-token"); + ScriptedChain chain = new ScriptedChain(401, 200); + + Assert.assertEquals(401, client.authInterceptor(() -> client.token).intercept(chain).code()); + Assert.assertEquals(1, chain.proceeded.size()); + Assert.assertEquals(0, client.generations.get()); + } + + @Test + public void testAuthInterceptor_403IsNotRetried() throws IOException { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + client.token = jwtExpiringIn(-2); + client.script.add("fresh-token"); + ScriptedChain chain = new ScriptedChain(403, 200); + + Assert.assertEquals(403, client.authInterceptor(() -> client.token).intercept(chain).code()); + Assert.assertEquals(1, chain.proceeded.size()); + Assert.assertEquals(0, client.generations.get()); + } + + // ── gaps found by line coverage of the fix ─────────────────────────────── + + @Test + public void testAuthInterceptor_readsTokenThroughGetTokenOnEveryAttempt() throws IOException { + // The SDKs hand the interceptor this::getToken, not a captured value: the resend must see the + // token the refresh just stored, and the synchronized getter is what makes that visible. + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.script.add("fresh-token"); + ScriptedChain chain = new ScriptedChain(401, 200); + + Response response = client.authInterceptor(client::getToken).intercept(chain); + + Assert.assertEquals(200, response.code()); + Assert.assertEquals("Bearer " + rejected, chain.proceeded.get(0).header("Authorization")); + Assert.assertEquals("Bearer fresh-token", chain.proceeded.get(1).header("Authorization")); + Assert.assertEquals("fresh-token", client.getToken()); + } + + @Test + public void testRefreshAfter401_nullFromGenerationIsAFailureAndIsRemembered() { + // BearerToken.getBearerToken() returns null when the credentials match neither FILE nor STRING. + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.script.add(null); + + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("a null token must never be cached", rejected, client.token); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("the failed attempt is remembered for this token", 1, client.generations.get()); + } + + @Test + public void testRefreshAfter401_cacheClearedWhileRequestInFlightRegenerates() { + // prioritiseCredentials nulls the cache on a credential change. A 401 for the token that was + // already in flight must regenerate rather than treat the empty cache as "someone else refreshed". + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = null; + client.script.add("fresh-token"); + + Assert.assertEquals("fresh-token", client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("fresh-token", client.token); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testRefreshAfter401_credentialChangeForgetsFailedRegeneration() throws SkyflowException { + ScriptedClient client = new ScriptedClient(mintableCredentials()); + String rejected = jwtExpiringIn(-2); + client.token = rejected; + client.failure = new SkyflowException("auth service down"); + Assert.assertNull(client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals(1, client.generations.get()); + + // New credentials: the failure recorded under the old ones must not block the first 401 on them. + client.prioritiseCredentials(mintableCredentials()); + client.failure = null; + client.token = rejected; // the expired token is still what the in-flight request sent + client.script.add("fresh-token"); + + Assert.assertEquals("fresh-token", client.refreshBearerTokenAfterUnauthorized(rejected)); + Assert.assertEquals("fresh-token", client.token); + Assert.assertEquals(2, client.generations.get()); + } } diff --git a/common/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java b/common/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java index 00fc26b4..646f8f5c 100644 --- a/common/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java +++ b/common/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java @@ -21,6 +21,48 @@ public static void setup() { LogUtil.setupLogger(LogLevel.DEBUG); } + private static String unsignedJwt(String payloadJson) { + Base64.Encoder enc = Base64.getUrlEncoder().withoutPadding(); + String header = enc.encodeToString("{\"alg\":\"none\"}".getBytes(StandardCharsets.UTF_8)); + String payload = enc.encodeToString(payloadJson.getBytes(StandardCharsets.UTF_8)); + return header + "." + payload + ".sig"; + } + + private static String jwtExpiringIn(long seconds) { + return unsignedJwt("{\"exp\":" + (System.currentTimeMillis() / 1000 + seconds) + "}"); + } + + @Test + public void testIsExpiringWithin_expiredTokenIsDue() { + Assert.assertTrue(Token.isExpiringWithin(jwtExpiringIn(-5), 60)); + } + + @Test + public void testIsExpiringWithin_tokenInsideWindowIsDue() { + Assert.assertTrue(Token.isExpiringWithin(jwtExpiringIn(30), 60)); + } + + @Test + public void testIsExpiringWithin_tokenBeyondWindowIsNotDue() { + Assert.assertFalse(Token.isExpiringWithin(jwtExpiringIn(600), 60)); + } + + @Test + public void testIsExpiringWithin_zeroWindowMatchesExpiryOnly() { + Assert.assertTrue(Token.isExpiringWithin(jwtExpiringIn(-1), 0)); + Assert.assertFalse(Token.isExpiringWithin(jwtExpiringIn(5), 0)); + } + + @Test + public void testIsExpiringWithin_nullEmptyMalformedAndNoExpAreNotDue() { + Assert.assertFalse(Token.isExpiringWithin(null, 60)); + Assert.assertFalse(Token.isExpiringWithin("", 60)); + Assert.assertFalse(Token.isExpiringWithin("not-a-jwt", 60)); + Assert.assertFalse(Token.isExpiringWithin("a.b", 60)); + Assert.assertFalse(Token.isExpiringWithin(unsignedJwt("{\"sub\":\"x\"}"), 60)); + Assert.assertFalse(Token.isExpiringWithin(unsignedJwt("{\"exp\":\"soon\"}"), 60)); + } + @Test public void testNoTokenForIsExpiredToken() { try { diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 3389f94d..f2b3eb5c 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -12,7 +12,7 @@ skyflow-flowvault-java - 1.2.0 + 1.2.0-dev.20ef0615 jar ${project.groupId}:${project.artifactId} Skyflow FlowVault SDK for the Java programming language diff --git a/flowvault/src/main/java/com/skyflow/VaultClient.java b/flowvault/src/main/java/com/skyflow/VaultClient.java index 93a677e0..78be997d 100644 --- a/flowvault/src/main/java/com/skyflow/VaultClient.java +++ b/flowvault/src/main/java/com/skyflow/VaultClient.java @@ -13,7 +13,6 @@ import okhttp3.ConnectionPool; import okhttp3.OkHttpClient; -import okhttp3.Request; public class VaultClient extends BaseVaultClient { private final ApiClientBuilder apiClientBuilder; @@ -166,12 +165,9 @@ protected void updateExecutorInHTTP() throws SkyflowException { // OUTER: retries. Must wrap the auth interceptor so each attempt re-reads the // (possibly refreshed) bearer token rather than replaying a stale one. .addInterceptor(new SkyflowRetryInterceptor(maxRetries, initialRetryDelayMillis, maxRetryDelayMillis)) - .addInterceptor(chain -> { // INNER: auth - Request requestWithAuth = chain.request().newBuilder() - .header("Authorization", "Bearer " + this.token) - .build(); - return chain.proceed(requestWithAuth); - }); + // INNER: auth, shared with skyvault. Attaches the token and, on a 401 for an + // expired SDK-generated token, regenerates once and resends once. + .addInterceptor(authInterceptor(this::getToken)); if (connectTimeout != null) { httpBuilder.connectTimeout(connectTimeout, TimeUnit.SECONDS); } diff --git a/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java b/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java index 631a1120..a53227f1 100644 --- a/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java +++ b/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java @@ -15,7 +15,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.Base64; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * The auth interceptor installed by {@link VaultClient#updateExecutorInHTTP()}. @@ -104,4 +106,103 @@ public void testAuthInterceptor_returnsTheChainResponseUntouched() throws Skyflo Assert.assertEquals(503, authInterceptorOf(client).intercept(chain).code()); Assert.assertEquals("auth must not retry - that is the outer interceptor's job", 1, chain.calls()); } + + // ── refresh-and-resend on 401, wired through the flowvault client ──────── + + private static String jwtExpiringIn(long seconds) { + Base64.Encoder enc = Base64.getUrlEncoder().withoutPadding(); + String header = enc.encodeToString("{\"alg\":\"none\"}".getBytes(StandardCharsets.UTF_8)); + String payload = enc.encodeToString(("{\"exp\":" + (System.currentTimeMillis() / 1000 + seconds) + "}") + .getBytes(StandardCharsets.UTF_8)); + return header + "." + payload + ".sig"; + } + + /** Flowvault client with mintable credentials and a scripted token source. */ + private static final class MintingClient extends VaultClient { + final AtomicInteger generations = new AtomicInteger(); + final String fresh; + + MintingClient(String fresh) throws SkyflowException { + super(configWithCredentialsString(), null); + this.fresh = fresh; + this.finalCredentials = getVaultConfig().getCredentials(); + } + + @Override + protected String generateBearerToken(com.skyflow.config.BaseCredentials credentials) { + generations.incrementAndGet(); + return fresh; + } + } + + private static VaultConfig configWithCredentialsString() { + Credentials credentials = new Credentials(); + credentials.setCredentialsString("{\"clientID\":\"c\"}"); + VaultConfig config = config(); + config.setCredentials(credentials); + return config; + } + + @Test + public void testAuthInterceptor_regeneratesOnceAndResendsOn401ForExpiredToken() throws SkyflowException, IOException { + MintingClient client = new MintingClient("fresh-token"); + client.token = jwtExpiringIn(-1); + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(200, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(2, chain.calls()); + Assert.assertEquals("Bearer fresh-token", chain.lastProceeded().header("Authorization")); + Assert.assertEquals("the cache must hold the new token for the batches that follow", "fresh-token", client.token); + Assert.assertEquals(1, client.generations.get()); + Assert.assertTrue("the rejected response must be closed before the resend", chain.bodies().get(0).isClosed()); + } + + @Test + public void testAuthInterceptor_401ForTokenWithLifeLeftIsReturnedWithoutRegenerating() throws SkyflowException, IOException { + MintingClient client = new MintingClient("fresh-token"); + String live = jwtExpiringIn(900); + client.token = live; + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(1, chain.calls()); + Assert.assertEquals(0, client.generations.get()); + Assert.assertEquals(live, client.token); + } + + @Test + public void testAuthInterceptor_401WithStaticTokenIsReturnedAsToday() throws SkyflowException, IOException { + Credentials credentials = new Credentials(); + credentials.setToken(jwtExpiringIn(-1)); + VaultConfig config = config(); + config.setCredentials(credentials); + VaultClient client = new VaultClient(config, null); + client.setBearerToken(); + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(1, chain.calls()); + } + + @Test + public void testAuthInterceptor_resendThatAlsoGets401IsNotRetriedAgain() throws SkyflowException, IOException { + MintingClient client = new MintingClient("fresh-token"); + client.token = jwtExpiringIn(-1); + FakeChain chain = new FakeChain(401, 401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(2, chain.calls()); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testAuthInterceptor_sitsInsideTheTransportRetryInterceptor() throws SkyflowException { + VaultClient client = new VaultClient(config(), null); + client.updateExecutorInHTTP(); + List interceptors = client.sharedHttpClient.interceptors(); + + Assert.assertEquals(2, interceptors.size()); + Assert.assertTrue("transport retries must wrap auth so each attempt re-reads the token", + interceptors.get(0) instanceof SkyflowRetryInterceptor); + } } diff --git a/flowvault/src/test/java/com/skyflow/utils/FakeChain.java b/flowvault/src/test/java/com/skyflow/utils/FakeChain.java index 97012f13..b803fe1c 100644 --- a/flowvault/src/test/java/com/skyflow/utils/FakeChain.java +++ b/flowvault/src/test/java/com/skyflow/utils/FakeChain.java @@ -132,5 +132,9 @@ public BufferedSource source() { public void close() { closed = true; } + + public boolean isClosed() { + return closed; + } } } diff --git a/skyvault/src/main/java/com/skyflow/VaultClient.java b/skyvault/src/main/java/com/skyflow/VaultClient.java index 509b70c7..3c97a312 100644 --- a/skyvault/src/main/java/com/skyflow/VaultClient.java +++ b/skyvault/src/main/java/com/skyflow/VaultClient.java @@ -832,7 +832,7 @@ private void updateVaultURL() { private void updateExecutorInHTTP() { if (sharedHttpClient == null) { - sharedHttpClient = buildSharedHttpClient(() -> this.token); + sharedHttpClient = buildSharedHttpClient(this::getToken); apiClientBuilder.httpClient(sharedHttpClient); } } diff --git a/skyvault/src/test/java/com/skyflow/AuthInterceptorTests.java b/skyvault/src/test/java/com/skyflow/AuthInterceptorTests.java new file mode 100644 index 00000000..562a847d --- /dev/null +++ b/skyvault/src/test/java/com/skyflow/AuthInterceptorTests.java @@ -0,0 +1,183 @@ +package com.skyflow; + +import com.skyflow.config.BaseCredentials; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.FakeChain; +import okhttp3.Interceptor; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Base64; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * The auth interceptor installed by skyvault's {@code VaultClient.updateExecutorInHTTP()}. + * + *

Skyvault's shared OkHttp client carries this one interceptor; the generated {@code ClientOptions} + * adds no transport retry when a client is supplied. The refresh-and-resend logic lives in + * {@code BaseVaultClient} and is unit tested there; these tests prove the skyvault client wires it + * in with {@code this::getToken}, so a token refreshed after a {@code 401} reaches the resend. + * Mirrors flowvault's {@code AuthInterceptorTests}. + */ +public class AuthInterceptorTests { + + private static VaultConfig config() { + VaultConfig config = new VaultConfig(); + config.setVaultId("vault1"); + config.setClusterId("cluster1"); + config.setEnv(Env.DEV); + return config; + } + + private static VaultConfig configWithCredentialsString() { + Credentials credentials = new Credentials(); + credentials.setCredentialsString("{\"clientID\":\"c\"}"); + VaultConfig config = config(); + config.setCredentials(credentials); + return config; + } + + private static String jwtExpiringIn(long seconds) { + Base64.Encoder enc = Base64.getUrlEncoder().withoutPadding(); + String header = enc.encodeToString("{\"alg\":\"none\"}".getBytes(StandardCharsets.UTF_8)); + String payload = enc.encodeToString(("{\"exp\":" + (System.currentTimeMillis() / 1000 + seconds) + "}") + .getBytes(StandardCharsets.UTF_8)); + return header + "." + payload + ".sig"; + } + + /** Skyvault client with mintable credentials and a scripted token source. */ + private static final class MintingClient extends VaultClient { + final AtomicInteger generations = new AtomicInteger(); + final String fresh; + + MintingClient(String fresh) { + super(configWithCredentialsString(), null); + this.fresh = fresh; + this.finalCredentials = getVaultConfig().getCredentials(); + } + + @Override + protected String generateBearerToken(BaseCredentials credentials) { + generations.incrementAndGet(); + return fresh; + } + } + + /** updateExecutorInHTTP is private in skyvault; install the client the way setBearerToken does. */ + private static Interceptor authInterceptorOf(VaultClient client) throws Exception { + Method install = VaultClient.class.getDeclaredMethod("updateExecutorInHTTP"); + install.setAccessible(true); + install.invoke(client); + List interceptors = client.sharedHttpClient.interceptors(); + Assert.assertEquals("skyvault's shared client carries the auth interceptor alone", 1, interceptors.size()); + return interceptors.get(0); + } + + @Test + public void testAuthInterceptor_regeneratesOnceAndResendsOn401ForExpiredToken() throws Exception { + MintingClient client = new MintingClient("fresh-token"); + client.token = jwtExpiringIn(-1); + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(200, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(2, chain.calls()); + Assert.assertEquals("Bearer fresh-token", chain.lastProceeded().header("Authorization")); + Assert.assertEquals("the cache must hold the new token for the calls that follow", "fresh-token", client.token); + Assert.assertEquals(1, client.generations.get()); + Assert.assertTrue("the rejected response must be closed before the resend", chain.bodies().get(0).isClosed()); + } + + @Test + public void testAuthInterceptor_401ForTokenWithLifeLeftIsReturnedWithoutRegenerating() throws Exception { + MintingClient client = new MintingClient("fresh-token"); + String live = jwtExpiringIn(900); + client.token = live; + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(1, chain.calls()); + Assert.assertEquals(0, client.generations.get()); + Assert.assertEquals(live, client.token); + } + + @Test + public void testAuthInterceptor_401WithStaticTokenIsReturnedAsToday() throws Exception { + Credentials credentials = new Credentials(); + credentials.setToken(jwtExpiringIn(-1)); + VaultConfig config = config(); + config.setCredentials(credentials); + VaultClient client = new VaultClient(config, null); + client.setBearerToken(); + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(1, chain.calls()); + } + + @Test + public void testAuthInterceptor_401WithApiKeyIsReturnedAsToday() throws Exception { + // Loaded from dummy-non-secrets/ (Gitleaks-excluded) rather than a string literal, + // since an API-key-shaped literal would itself trip the scanner. + String apiKey = new String(Files.readAllBytes( + Paths.get("./src/test/resources/dummy-non-secrets/dummy-api-key.txt")), StandardCharsets.UTF_8).trim(); + Credentials credentials = new Credentials(); + credentials.setApiKey(apiKey); + VaultConfig config = config(); + config.setCredentials(credentials); + VaultClient client = new VaultClient(config, null); + client.setBearerToken(); + FakeChain chain = new FakeChain(401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(1, chain.calls()); + Assert.assertEquals("Bearer " + apiKey, chain.lastProceeded().header("Authorization")); + } + + @Test + public void testAuthInterceptor_resendThatAlsoGets401IsNotRetriedAgain() throws Exception { + MintingClient client = new MintingClient("fresh-token"); + client.token = jwtExpiringIn(-1); + FakeChain chain = new FakeChain(401, 401, 200); + + Assert.assertEquals(401, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals(2, chain.calls()); + Assert.assertEquals(1, client.generations.get()); + } + + @Test + public void testAuthInterceptor_readsTheRefreshedTokenOnTheResend() throws Exception { + // setBearerToken() is what production code calls; it must install the same interceptor and + // the resend must carry the token that refresh stored, read back through getToken(). + MintingClient client = new MintingClient("fresh-token"); + client.setBearerToken(); + Assert.assertEquals("fresh-token", client.token); + client.token = jwtExpiringIn(-1); + FakeChain chain = new FakeChain(401, 200); + + Interceptor interceptor = client.sharedHttpClient.interceptors().get(0); + Assert.assertEquals(200, interceptor.intercept(chain).code()); + Assert.assertEquals("Bearer fresh-token", chain.lastProceeded().header("Authorization")); + } + + @Test + public void testAuthInterceptor_isTheOnlyInterceptorOnTheSharedClient() throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setToken(jwtExpiringIn(3600)); + VaultConfig config = config(); + config.setCredentials(credentials); + VaultClient client = new VaultClient(config, null); + client.setBearerToken(); + + Assert.assertEquals("no transport retry wraps auth in skyvault; a 401 reaches auth directly", + 1, client.sharedHttpClient.interceptors().size()); + } +} diff --git a/skyvault/src/test/java/com/skyflow/utils/FakeChain.java b/skyvault/src/test/java/com/skyflow/utils/FakeChain.java new file mode 100644 index 00000000..8945788a --- /dev/null +++ b/skyvault/src/test/java/com/skyflow/utils/FakeChain.java @@ -0,0 +1,140 @@ +package com.skyflow.utils; + +import okhttp3.Call; +import okhttp3.Connection; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.Protocol; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * Minimal Interceptor.Chain that replays a scripted list of status codes, so the retry loop can + * be driven without a network or a mock-server dependency. Records how many times it was called + * and which responses were closed. + */ +public final class FakeChain implements Interceptor.Chain { + + private final Request request = + new Request.Builder().url("https://cluster1.vault.skyflowapis.dev/v1/vaults/vault1/table1").build(); + private final int[] statusCodes; + private final List bodies = new ArrayList<>(); + private int calls; + private Request lastProceeded; + + public FakeChain(int... statusCodes) { + this.statusCodes = statusCodes; + } + + public int calls() { + return calls; + } + + /** Responses the interceptor superseded and should have closed. */ + public List bodies() { + return bodies; + } + + /** The request as it reached the next interceptor, i.e. after any rewriting. */ + public Request lastProceeded() { + return lastProceeded; + } + + @Override + public Request request() { + return request; + } + + @Override + public Response proceed(Request request) throws IOException { + this.lastProceeded = request; + // Past the end of the script, keep returning the last code. + int code = statusCodes[Math.min(calls, statusCodes.length - 1)]; + calls++; + TrackingBody body = new TrackingBody(); + bodies.add(body); + return new Response.Builder() + .request(request) + .protocol(Protocol.HTTP_1_1) + .code(code) + .message("status " + code) + .body(body) + .build(); + } + + @Override + public Connection connection() { + return null; + } + + @Override + public Call call() { + throw new UnsupportedOperationException(); + } + + @Override + public int connectTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withConnectTimeout(int timeout, TimeUnit unit) { + return this; + } + + @Override + public int readTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withReadTimeout(int timeout, TimeUnit unit) { + return this; + } + + @Override + public int writeTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withWriteTimeout(int timeout, TimeUnit unit) { + return this; + } + + public static final class TrackingBody extends ResponseBody { + boolean closed; + + @Override + public MediaType contentType() { + return null; + } + + @Override + public long contentLength() { + return 0; + } + + @Override + public BufferedSource source() { + return new Buffer(); + } + + @Override + public void close() { + closed = true; + } + + public boolean isClosed() { + return closed; + } + } +} diff --git a/skyvault/src/test/java/com/skyflow/utils/UtilsTests.java b/skyvault/src/test/java/com/skyflow/utils/UtilsTests.java index d1e1c725..00b1ca9e 100644 --- a/skyvault/src/test/java/com/skyflow/utils/UtilsTests.java +++ b/skyvault/src/test/java/com/skyflow/utils/UtilsTests.java @@ -76,6 +76,11 @@ public void testGetMetrics() { @Test public void testGetMetricsWithException() { + // The JDK reads os.name once, when its socket layer initializes; leaving it cleared breaks + // every later test in this JVM that opens a server socket. Restore the properties on exit. + String osName = System.getProperty("os.name"); + String osVersion = System.getProperty("os.version"); + String javaVersion = System.getProperty("java.version"); try { // Clearing System Properties explicitly to throw exception System.clearProperty("os.name"); @@ -89,6 +94,18 @@ public void testGetMetricsWithException() { Assert.assertTrue(metrics.get(Constants.SDK_METRIC_CLIENT_OS_DETAILS).getAsString().isEmpty()); } catch (Exception e) { Assert.fail(INVALID_EXCEPTION_THROWN); + } finally { + restore("os.name", osName); + restore("os.version", osVersion); + restore("java.version", javaVersion); + } + } + + private static void restore(String key, String value) { + if (value == null) { + System.clearProperty(key); + } else { + System.setProperty(key, value); } } } From c50c67771c56c091e9d4ea650d6a92822cfaa226 Mon Sep 17 00:00:00 2001 From: Yaswanth Sai Pula <86997953+yaswanth-pula-skyflow@users.noreply.github.com> Date: Thu, 29 Oct 2026 18:39:38 +0530 Subject: [PATCH 03/10] SK-3261 Bump flowvault version to 1.3.0 (#455) --- flowvault/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flowvault/pom.xml b/flowvault/pom.xml index f2b3eb5c..96eb045b 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -12,7 +12,7 @@ skyflow-flowvault-java - 1.2.0-dev.20ef0615 + 1.3.0 jar ${project.groupId}:${project.artifactId} Skyflow FlowVault SDK for the Java programming language From 171c79088df8aa5c2a2c360f433575d9aae440c9 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 30 Oct 2026 12:43:06 +0530 Subject: [PATCH 04/10] SK-3175 update enum name for data source type --- .../com/skyflow/detect/DataSourceType.java | 10 ---- .../skyflow/detect/DeidentifyFileRequest.java | 10 ++-- .../detect/DeidentifyFileResponse.java | 6 +-- .../skyflow/detect/DeidentifySourceType.java | 11 ++++ .../com/skyflow/detect/GetRunResponse.java | 6 +-- .../skyflow/detect/ReidentifyFileRequest.java | 10 ++-- .../detect/ReidentifyFileResponse.java | 6 +-- .../skyflow/detect/ReidentifySourceType.java | 10 ++++ .../detect/internal/DetectRequestMapper.java | 4 +- .../detect/internal/DetectResponseMapper.java | 4 +- .../detect/internal/FileOutputWriter.java | 6 +-- .../detect/internal/ReidentifyFileMapper.java | 4 +- .../internal/DeidentifyFileFlowTests.java | 16 +++--- .../internal/DeidentifyFileMapperTests.java | 14 +++--- .../DeidentifyFileValidationsTests.java | 7 +-- .../internal/DetectResponseMapperTests.java | 4 +- .../internal/FileOutputWriterTests.java | 50 +++++++++---------- .../internal/ReidentifyFileMapperTests.java | 32 +++++++++--- .../ReidentifyFileValidationsTests.java | 9 ++-- .../detect/polling/RunPollerTests.java | 4 +- .../controller/BaseDetectControllerTests.java | 4 +- docs/api_reference.md | 11 ++-- flowvault/README.md | 6 +-- .../java/com/example/detect/GetRunSample.java | 4 +- .../example/detect/ReidentifyFileSample.java | 6 +-- .../controller/DetectControllerTests.java | 27 +++++----- skyvault/README.md | 6 +-- .../java/com/example/detect/GetRunSample.java | 4 +- .../example/detect/ReidentifyFileSample.java | 6 +-- .../controller/DetectControllerTests.java | 27 +++++----- 30 files changed, 178 insertions(+), 146 deletions(-) delete mode 100644 common/src/main/java/com/skyflow/detect/DataSourceType.java create mode 100644 common/src/main/java/com/skyflow/detect/DeidentifySourceType.java create mode 100644 common/src/main/java/com/skyflow/detect/ReidentifySourceType.java diff --git a/common/src/main/java/com/skyflow/detect/DataSourceType.java b/common/src/main/java/com/skyflow/detect/DataSourceType.java deleted file mode 100644 index d152fbb4..00000000 --- a/common/src/main/java/com/skyflow/detect/DataSourceType.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.detect; - -/** - * How file content is supplied to, or returned by, Detect file operations. - */ -public enum DataSourceType { - BASE64, - SKYFLOW_ID, - PRESIGNED_URL; -} diff --git a/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java b/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java index e1d9e6fd..b9e12e06 100644 --- a/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java +++ b/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java @@ -16,7 +16,7 @@ * the vault's defaults. */ public final class DeidentifyFileRequest { - private final DataSourceType dataSource; + private final DeidentifySourceType dataSource; private final String value; private final File file; private final FileDataFormat dataFormat; @@ -46,7 +46,7 @@ public static DeidentifyFileRequestBuilder builder() { /** * @return How {@code value} supplies the file. Required unless {@code file} or {@code filePath} was used. */ - public DataSourceType getDataSource() { + public DeidentifySourceType getDataSource() { return dataSource; } @@ -114,7 +114,7 @@ public String toString() { } public static final class DeidentifyFileRequestBuilder { - private DataSourceType dataSource; + private DeidentifySourceType dataSource; private String value; private File file; private FileDataFormat dataFormat; @@ -130,7 +130,7 @@ private DeidentifyFileRequestBuilder() { * @param dataSource How {@code value} supplies the file. * @return this builder */ - public DeidentifyFileRequestBuilder dataSource(DataSourceType dataSource) { + public DeidentifyFileRequestBuilder dataSource(DeidentifySourceType dataSource) { this.dataSource = dataSource; return this; } @@ -151,7 +151,7 @@ public DeidentifyFileRequestBuilder value(String value) { public DeidentifyFileRequestBuilder file(File file) { this.file = file; if (file != null) { - this.dataSource = DataSourceType.BASE64; + this.dataSource = DeidentifySourceType.BASE64; } return this; } diff --git a/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java b/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java index 482b3b63..35a3a0d5 100644 --- a/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java +++ b/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java @@ -11,12 +11,12 @@ public final class DeidentifyFileResponse { private final String runId; private final DetectRunStatus status; - private final DataSourceType outputType; + private final DeidentifySourceType outputType; private final List output; private final Metrics metrics; private final String message; - public DeidentifyFileResponse(String runId, DetectRunStatus status, DataSourceType outputType, + public DeidentifyFileResponse(String runId, DetectRunStatus status, DeidentifySourceType outputType, List output, Metrics metrics, String message) { this.runId = runId; this.status = status; @@ -44,7 +44,7 @@ public DetectRunStatus getStatus() { /** * @return How output files are delivered. Null unless polled to SUCCESS. */ - public DataSourceType getOutputType() { + public DeidentifySourceType getOutputType() { return outputType; } diff --git a/common/src/main/java/com/skyflow/detect/DeidentifySourceType.java b/common/src/main/java/com/skyflow/detect/DeidentifySourceType.java new file mode 100644 index 00000000..453a9caa --- /dev/null +++ b/common/src/main/java/com/skyflow/detect/DeidentifySourceType.java @@ -0,0 +1,11 @@ +package com.skyflow.detect; + +/** + * How the input file is supplied to {@code deidentifyFile}: base64 content, the skyflow id of a file + * record in the vault, or an S3 presigned URL. + */ +public enum DeidentifySourceType { + BASE64, + SKYFLOW_ID, + PRESIGNED_URL; +} diff --git a/common/src/main/java/com/skyflow/detect/GetRunResponse.java b/common/src/main/java/com/skyflow/detect/GetRunResponse.java index e8ffbc27..5a3dcd46 100644 --- a/common/src/main/java/com/skyflow/detect/GetRunResponse.java +++ b/common/src/main/java/com/skyflow/detect/GetRunResponse.java @@ -8,12 +8,12 @@ public final class GetRunResponse { private final String runId; private final DetectRunStatus status; - private final DataSourceType outputType; + private final DeidentifySourceType outputType; private final List output; private final Metrics metrics; private final String message; - public GetRunResponse(String runId, DetectRunStatus status, DataSourceType outputType, List output, Metrics metrics, String message) { + public GetRunResponse(String runId, DetectRunStatus status, DeidentifySourceType outputType, List output, Metrics metrics, String message) { this.runId = runId; this.status = status; this.outputType = outputType; @@ -39,7 +39,7 @@ public DetectRunStatus getStatus() { /** * @return How output files are delivered. Null while the run is pending. */ - public DataSourceType getOutputType() { + public DeidentifySourceType getOutputType() { return outputType; } diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java b/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java index 9aa7135e..a0de8d17 100644 --- a/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java +++ b/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java @@ -3,12 +3,12 @@ import java.util.List; /** - * Request for {@code reidentifyFile}. Supply the file through exactly one {@link DataSourceType}: + * Request for {@code reidentifyFile}. Supply the file through exactly one {@link ReidentifySourceType}: * the base64-encoded content, the skyflow id of a vault record that holds the file, or an S3 * presigned URL. The vault id is filled in by the controller. */ public final class ReidentifyFileRequest { - private final DataSourceType dataSource; + private final ReidentifySourceType dataSource; private final String value; private final FileDataFormat dataFormat; private final List redactionLevel; @@ -30,7 +30,7 @@ public static ReidentifyFileRequestBuilder builder() { /** * @return How {@code value} supplies the file. Required. */ - public DataSourceType getDataSource() { + public ReidentifySourceType getDataSource() { return dataSource; } @@ -67,7 +67,7 @@ public String toString() { } public static final class ReidentifyFileRequestBuilder { - private DataSourceType dataSource; + private ReidentifySourceType dataSource; private String value; private FileDataFormat dataFormat; private List redactionLevel; @@ -79,7 +79,7 @@ private ReidentifyFileRequestBuilder() { * @param dataSource How {@code value} supplies the file. Required. * @return this builder */ - public ReidentifyFileRequestBuilder dataSource(DataSourceType dataSource) { + public ReidentifyFileRequestBuilder dataSource(ReidentifySourceType dataSource) { this.dataSource = dataSource; return this; } diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java b/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java index 17d32f3e..a3c445d9 100644 --- a/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java +++ b/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java @@ -8,11 +8,11 @@ */ public final class ReidentifyFileResponse { private final DetectRunStatus status; - private final DataSourceType outputType; + private final ReidentifySourceType outputType; private final List output; private final Metrics metrics; - public ReidentifyFileResponse(DetectRunStatus status, DataSourceType outputType, List output, Metrics metrics) { + public ReidentifyFileResponse(DetectRunStatus status, ReidentifySourceType outputType, List output, Metrics metrics) { this.status = status; this.outputType = outputType; this.output = output; @@ -29,7 +29,7 @@ public DetectRunStatus getStatus() { /** * @return How output files are delivered, or null when not reported. */ - public DataSourceType getOutputType() { + public ReidentifySourceType getOutputType() { return outputType; } diff --git a/common/src/main/java/com/skyflow/detect/ReidentifySourceType.java b/common/src/main/java/com/skyflow/detect/ReidentifySourceType.java new file mode 100644 index 00000000..2aa46812 --- /dev/null +++ b/common/src/main/java/com/skyflow/detect/ReidentifySourceType.java @@ -0,0 +1,10 @@ +package com.skyflow.detect; + +/** + * How the input file is supplied to {@code reidentifyFile}: base64 content or an S3 presigned URL. + * Re-identification does not accept a skyflow id as the source, so there is no {@code SKYFLOW_ID} here. + */ +public enum ReidentifySourceType { + BASE64, + PRESIGNED_URL; +} diff --git a/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java b/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java index c11a9bab..ec193539 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java @@ -11,7 +11,7 @@ import com.skyflow.detect.Bleep; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CustomType; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyStringRequest; import com.skyflow.detect.FileDataFormat; @@ -106,7 +106,7 @@ public static DeidentifyFileRequestV2 toDeidentifyFileRequest(DeidentifyFileRequ } } // A local file is always sent as BASE64, whatever dataSource the builder was left with. - DataSourceType dataSource = file != null ? DataSourceType.BASE64 : request.getDataSource(); + DeidentifySourceType dataSource = file != null ? DeidentifySourceType.BASE64 : request.getDataSource(); DeidentifyFileRequestV2._FinalStage builder = DeidentifyFileRequestV2.builder() .dataSource(DeidentifyFileRequestV2DataSource.valueOf(dataSource.name())) .value(value); diff --git a/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java b/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java index 9994ab70..afc1302d 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java @@ -1,7 +1,7 @@ package com.skyflow.detect.internal; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.DeidentifyStringResponse; import com.skyflow.detect.DetectRunStatus; @@ -95,7 +95,7 @@ public static GetRunResponse toGetRunResponse(String runId, DetectRunsResponseV2 runId, response.getStatus().map(s -> enumOrDefault(DetectRunStatus.class, s.toString(), DetectRunStatus.UNKNOWN)) .orElse(DetectRunStatus.UNKNOWN), - response.getOutputType().map(t -> enumOrDefault(DataSourceType.class, t.toString(), null)).orElse(null), + response.getOutputType().map(t -> enumOrDefault(DeidentifySourceType.class, t.toString(), null)).orElse(null), Collections.unmodifiableList(outputs), response.getMetrics().map(DetectResponseMapper::toMetrics).orElse(null), response.getMessage().orElse(null)); diff --git a/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java b/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java index f82f0957..2477e7ed 100644 --- a/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java +++ b/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.FileOutput; import com.skyflow.errors.BaseErrorMessage; import com.skyflow.errors.SkyflowException; @@ -40,13 +40,13 @@ private FileOutputWriter() { * @return the files written, in output order; empty when the output type is not BASE64 * @throws SkyflowException if the directory cannot be created or a file cannot be decoded or written */ - public static List write(List outputs, DataSourceType outputType, String inputFileName, + public static List write(List outputs, DeidentifySourceType outputType, String inputFileName, String outputDirectory) throws SkyflowException { List written = new ArrayList<>(); if (outputs == null || outputs.isEmpty()) { return written; } - if (outputType != DataSourceType.BASE64) { + if (outputType != DeidentifySourceType.BASE64) { LogUtil.printInfoLog(BaseUtils.parameterizedString(InfoLogs.OUTPUT_NOT_WRITTEN_FOR_OUTPUT_TYPE.getLog(), String.valueOf(outputType))); return written; diff --git a/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java b/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java index 188f0013..346066b7 100644 --- a/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileOutput; import com.skyflow.detect.ReidentifyFileRequest; @@ -50,7 +50,7 @@ public static ReidentifyFileResponse toResponse(ReidentifyFileResponseV2 respons return new ReidentifyFileResponse( response.getStatus().map(s -> enumOrDefault(DetectRunStatus.class, s.toString(), DetectRunStatus.UNKNOWN)) .orElse(DetectRunStatus.UNKNOWN), - response.getOutputType().map(t -> enumOrDefault(DataSourceType.class, t.toString(), null)).orElse(null), + response.getOutputType().map(t -> enumOrDefault(ReidentifySourceType.class, t.toString(), null)).orElse(null), Collections.unmodifiableList(outputs), response.getMetrics().map(DetectResponseMapper::toMetrics).orElse(null)); } diff --git a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java index a55d5078..756476b8 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.DetectRunStatus; @@ -30,10 +30,10 @@ public class DeidentifyFileFlowTests { private static final RunPoller.Sleeper NO_SLEEP = millis -> { }; private static GetRunResponse success() { - return success(DataSourceType.BASE64); + return success(DeidentifySourceType.BASE64); } - private static GetRunResponse success(DataSourceType outputType) { + private static GetRunResponse success(DeidentifySourceType outputType) { return new GetRunResponse("run-1", DetectRunStatus.SUCCESS, outputType, Arrays.asList( new FileOutput(Base64.getEncoder().encodeToString("redacted".getBytes()), @@ -47,7 +47,7 @@ private static GetRunResponse success(DataSourceType outputType) { public void withoutPollOptionsReturnsRunIdAndNeverFetches() throws Exception { AtomicInteger fetches = new AtomicInteger(); DeidentifyFileResponse response = DeidentifyFileFlow.complete( - DeidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).value("x").build(), "run-1", + DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.BASE64).value("x").build(), "run-1", id -> { fetches.incrementAndGet(); return success(); }, NO_SLEEP); Assert.assertEquals("run-1", response.getRunId()); Assert.assertNull(response.getStatus()); @@ -59,7 +59,7 @@ public void withoutPollOptionsReturnsRunIdAndNeverFetches() throws Exception { public void missingRunIdSkipsPollingEvenWhenRequested() throws Exception { AtomicInteger fetches = new AtomicInteger(); DeidentifyFileResponse response = DeidentifyFileFlow.complete( - DeidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).value("x") + DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.BASE64).value("x") .pollOptions(PollOptions.builder().build()).build(), null, id -> { fetches.incrementAndGet(); return success(); }, NO_SLEEP); Assert.assertNull(response.getRunId()); @@ -70,7 +70,7 @@ public void missingRunIdSkipsPollingEvenWhenRequested() throws Exception { @Test public void polledRawRequestMergesRunButWritesNothing() throws Exception { DeidentifyFileResponse response = DeidentifyFileFlow.complete( - DeidentifyFileRequest.builder().dataSource(DataSourceType.SKYFLOW_ID).value("rec") + DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec") .pollOptions(PollOptions.builder().build()).outputDirectory(folder.getRoot().getPath()).build(), "run-1", id -> success(), NO_SLEEP); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); @@ -108,10 +108,10 @@ public void polledFileRequestWritesNothingForPresignedUrlOutputs() throws Except DeidentifyFileResponse response = DeidentifyFileFlow.complete( DeidentifyFileRequest.builder().file(input).pollOptions(PollOptions.builder().build()) .outputDirectory(outDir.getPath()).build(), - "run-1", id -> success(DataSourceType.PRESIGNED_URL), NO_SLEEP); + "run-1", id -> success(DeidentifySourceType.PRESIGNED_URL), NO_SLEEP); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.PRESIGNED_URL, response.getOutputType()); + Assert.assertEquals(DeidentifySourceType.PRESIGNED_URL, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); Assert.assertEquals(0, outDir.list().length); } diff --git a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java index d6fa068e..079adca0 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.Detect; @@ -37,7 +37,7 @@ private static String wire(DeidentifyFileRequestV2 request) throws Exception { @Test public void mapsRawValueRequest() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.SKYFLOW_ID).value("rec-1").configurationId("cfg-1").build(), "vault-1"); + .dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec-1").configurationId("cfg-1").build(), "vault-1"); Assert.assertEquals("SKYFLOW_ID", api.getDataSource().toString()); Assert.assertEquals("rec-1", api.getValue()); Assert.assertEquals("cfg-1", api.getConfigurationId().get()); @@ -53,14 +53,14 @@ public void mapsRawValueRequest() throws Exception { @Test public void dataFormatIsSentLowerCase() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.PRESIGNED_URL).value("https://s3/in").dataFormat(FileDataFormat.PDF).build(), "v"); + .dataSource(DeidentifySourceType.PRESIGNED_URL).value("https://s3/in").dataFormat(FileDataFormat.PDF).build(), "v"); Assert.assertTrue(wire(api).contains("\"dataFormat\":\"pdf\"")); } @Test public void noConfigurationSendsVaultIdOnlyConfiguration() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("aGVsbG8=").build(), "vault-1"); + .dataSource(DeidentifySourceType.BASE64).value("aGVsbG8=").build(), "vault-1"); Assert.assertFalse(api.getConfigurationId().isPresent()); Assert.assertEquals("vault-1", api.getConfiguration().get().getVaultId()); Assert.assertFalse(api.getConfiguration().get().getDetect().isPresent()); @@ -71,7 +71,7 @@ public void noConfigurationSendsVaultIdOnlyConfiguration() throws Exception { @Test public void storedConfigurationIdSendsNoConfiguration() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("aGVsbG8=").configurationId("cfg-1").build(), "vault-1"); + .dataSource(DeidentifySourceType.BASE64).value("aGVsbG8=").configurationId("cfg-1").build(), "vault-1"); Assert.assertEquals("cfg-1", api.getConfigurationId().get()); Assert.assertFalse(api.getConfiguration().isPresent()); } @@ -79,7 +79,7 @@ public void storedConfigurationIdSendsNoConfiguration() throws Exception { @Test public void inlineConfigurationGetsVaultId() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v") + .dataSource(DeidentifySourceType.BASE64).value("Zm9v") .configuration(DetectConfiguration.builder().detect(Detect.builder().entities(Collections.singletonList( Entity.builder().entityType(EntityType.NAME).build())).build()).build()) .build(), "vault-9"); @@ -157,7 +157,7 @@ public void polledResponseMergesRunIdWithRun() throws Exception { DeidentifyFileResponse response = DetectResponseMapper.toDeidentifyFileResponse("run-7", run); Assert.assertEquals("run-7", response.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, response.getOutputType()); + Assert.assertEquals(DeidentifySourceType.BASE64, response.getOutputType()); Assert.assertEquals("UERG", response.getOutput().get(0).getProcessedFile()); Assert.assertEquals(FileDataFormat.PDF, response.getOutput().get(0).getProcessedFileExtension()); Assert.assertEquals(Integer.valueOf(2), response.getMetrics().getPages()); diff --git a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java index 9f9a3f62..b0723bbe 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java @@ -1,6 +1,7 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; + +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.PollOptions; import com.skyflow.errors.BaseErrorMessage; @@ -30,7 +31,7 @@ private static void assertRejected(DeidentifyFileRequest request, BaseErrorMessa } private static DeidentifyFileRequest.DeidentifyFileRequestBuilder raw() { - return DeidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).value("Zm9v"); + return DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.BASE64).value("Zm9v"); } @Test @@ -41,7 +42,7 @@ public void rejectsNullRequest() { @Test public void rawValueRequiresDataSourceAndValue() throws SkyflowException { assertRejected(DeidentifyFileRequest.builder().value("x").build(), BaseErrorMessage.InvalidDataSourceInDeidentifyFile); - assertRejected(DeidentifyFileRequest.builder().dataSource(DataSourceType.SKYFLOW_ID).build(), BaseErrorMessage.InvalidValueInDeidentifyFile); + assertRejected(DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.SKYFLOW_ID).build(), BaseErrorMessage.InvalidValueInDeidentifyFile); assertRejected(raw().value(" ").build(), BaseErrorMessage.InvalidValueInDeidentifyFile); DetectValidations.validateDeidentifyFileRequest(raw().build()); DetectValidations.validateDeidentifyFileRequest(raw().configurationId("cfg").build()); diff --git a/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java index f0ebcada..173bf0b3 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java @@ -1,7 +1,7 @@ package com.skyflow.detect.internal; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyStringResponse; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileDataFormat; @@ -102,7 +102,7 @@ public void mapsCompletedRun() throws Exception { GetRunResponse run = DetectResponseMapper.toGetRunResponse("run-1", api); Assert.assertEquals("run-1", run.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, run.getStatus()); - Assert.assertEquals(DataSourceType.PRESIGNED_URL, run.getOutputType()); + Assert.assertEquals(DeidentifySourceType.PRESIGNED_URL, run.getOutputType()); Assert.assertEquals("https://x/y.pdf", run.getOutput().get(0).getProcessedFile()); Assert.assertEquals(FileDataFormat.PDF, run.getOutput().get(0).getProcessedFileExtension()); Assert.assertEquals(Integer.valueOf(2), run.getMetrics().getPages()); diff --git a/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java b/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java index 70297c59..7bd00f7d 100644 --- a/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.FileDataFormat; import com.skyflow.detect.FileOutput; import com.skyflow.errors.SkyflowException; @@ -30,7 +30,7 @@ public void writesEachOutputWithV1StyleNames() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("%PDF"), "REDACTED_FILE", FileDataFormat.PDF), new FileOutput(b64("[]"), "ENTITIES", null)), - DataSourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); Assert.assertEquals(2, written.size()); Assert.assertEquals("processed-invoice.pdf", written.get(0).getName()); @@ -45,7 +45,7 @@ public void entityOutputsCarryTheirTypeInTheName() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "ENTITIES", FileDataFormat.JSON), new FileOutput(b64("b"), "OBJECT_ENTITIES", FileDataFormat.JSON)), - DataSourceType.BASE64, "scan.png", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "scan.png", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-scan.json", written.get(0).getName()); Assert.assertEquals("processed-object-entities-scan.json", written.get(1).getName()); } @@ -55,7 +55,7 @@ public void jsonInputDoesNotCollideWithItsEntitiesOutput() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("{}"), "REDACTED_TEXT", FileDataFormat.JSON), new FileOutput(b64("[]"), "ENTITIES", FileDataFormat.JSON)), - DataSourceType.BASE64, "data.json", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "data.json", folder.getRoot().getPath()); Assert.assertEquals("processed-data.json", written.get(0).getName()); Assert.assertEquals("processed-entities-data.json", written.get(1).getName()); } @@ -65,7 +65,7 @@ public void nameCollisionsGetTheFileTypeInserted() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "REDACTED_FILE", FileDataFormat.TXT), new FileOutput(b64("b"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-notes.txt", written.get(0).getName()); Assert.assertEquals("processed-notes.redacted_text.txt", written.get(1).getName()); } @@ -75,7 +75,7 @@ public void createsMissingOutputDirectory() throws Exception { File nested = new File(folder.getRoot(), "a/b/c"); List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", nested.getPath()); + DeidentifySourceType.BASE64, "notes.txt", nested.getPath()); Assert.assertTrue(nested.isDirectory()); Assert.assertEquals(new File(nested, "processed-notes.txt"), written.get(0)); } @@ -84,24 +84,24 @@ public void createsMissingOutputDirectory() throws Exception { public void presignedUrlOutputsAreNotWritten() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput("https://s3/out", "REDACTED_FILE", FileDataFormat.PDF)), - DataSourceType.PRESIGNED_URL, "invoice.pdf", folder.getRoot().getPath()); + DeidentifySourceType.PRESIGNED_URL, "invoice.pdf", folder.getRoot().getPath()); Assert.assertTrue(written.isEmpty()); Assert.assertEquals(0, folder.getRoot().list().length); } @Test public void emptyOrNullOutputsWriteNothing() throws Exception { - Assert.assertTrue(FileOutputWriter.write(null, DataSourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); - Assert.assertTrue(FileOutputWriter.write(Collections.emptyList(), DataSourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); + Assert.assertTrue(FileOutputWriter.write(null, DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); + Assert.assertTrue(FileOutputWriter.write(Collections.emptyList(), DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); Assert.assertTrue(FileOutputWriter.write(Collections.singletonList(new FileOutput(null, "ENTITIES", null)), - DataSourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); + DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); } @Test public void invalidBase64IsReportedAsWriteFailure() { try { FileOutputWriter.write(Collections.singletonList(new FileOutput("not base64!", "REDACTED_FILE", FileDataFormat.TXT)), - DataSourceType.BASE64, "x.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("processed-x.txt")); @@ -115,7 +115,7 @@ public void nullOrEmptyTypeFallsBackToPlainName() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), null, FileDataFormat.PDF), new FileOutput(b64("b"), "", FileDataFormat.TXT)), - DataSourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); Assert.assertEquals("processed-invoice.pdf", written.get(0).getName()); Assert.assertEquals("processed-invoice.txt", written.get(1).getName()); } @@ -124,7 +124,7 @@ public void nullOrEmptyTypeFallsBackToPlainName() throws Exception { public void nonEntityOutputWithoutExtensionGetsBin() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TRANSCRIPTION", null)), - DataSourceType.BASE64, "call.mp3", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "call.mp3", folder.getRoot().getPath()); Assert.assertEquals("processed-call.bin", written.get(0).getName()); } @@ -132,7 +132,7 @@ public void nonEntityOutputWithoutExtensionGetsBin() throws Exception { public void entityOutputHonoursAnExplicitExtension() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "ENTITIES", FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-notes.txt", written.get(0).getName()); } @@ -140,7 +140,7 @@ public void entityOutputHonoursAnExplicitExtension() throws Exception { public void entityTypeMatchIsCaseInsensitive() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "entities", null)), - DataSourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-notes.json", written.get(0).getName()); } @@ -149,7 +149,7 @@ public void duplicateEntityOutputsGetTheTypeInsertedOnCollision() throws Excepti List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "ENTITIES", FileDataFormat.JSON), new FileOutput(b64("b"), "ENTITIES", FileDataFormat.JSON)), - DataSourceType.BASE64, "scan.png", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "scan.png", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-scan.json", written.get(0).getName()); Assert.assertEquals("processed-entities-scan.entities.json", written.get(1).getName()); } @@ -160,7 +160,7 @@ public void collisionWithoutATypeUsesARunningNumber() throws Exception { new FileOutput(b64("a"), null, FileDataFormat.TXT), new FileOutput(b64("b"), null, FileDataFormat.TXT), new FileOutput(b64("c"), null, FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-notes.txt", written.get(0).getName()); Assert.assertEquals("processed-notes.1.txt", written.get(1).getName()); Assert.assertEquals("processed-notes.2.txt", written.get(2).getName()); @@ -170,12 +170,12 @@ public void collisionWithoutATypeUsesARunningNumber() throws Exception { public void inputNamesWithoutAnExtensionOrWithLeadingDotAreKept() throws Exception { List plain = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "ENTITIES", null)), - DataSourceType.BASE64, "README", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "README", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-README.json", plain.get(0).getName()); List dotted = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, ".notes", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, ".notes", folder.getRoot().getPath()); Assert.assertEquals("processed-.notes.txt", dotted.get(0).getName()); } @@ -184,7 +184,7 @@ public void missingInputNameFallsBackToOutput() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "REDACTED_FILE", FileDataFormat.PDF), new FileOutput(b64("b"), "ENTITIES", null)), - DataSourceType.BASE64, null, folder.getRoot().getPath()); + DeidentifySourceType.BASE64, null, folder.getRoot().getPath()); Assert.assertEquals("processed-output.pdf", written.get(0).getName()); Assert.assertEquals("processed-entities-output.json", written.get(1).getName()); } @@ -205,7 +205,7 @@ public void nullElementsInTheOutputListAreSkipped() throws Exception { List written = FileOutputWriter.write(Arrays.asList( null, new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals(1, written.size()); Assert.assertEquals("processed-notes.txt", written.get(0).getName()); } @@ -216,7 +216,7 @@ public void blankOutputDirectoryWritesToTheWorkingDirectory() throws Exception { try { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, "writer-cwd-test.txt", " "); + DeidentifySourceType.BASE64, "writer-cwd-test.txt", " "); Assert.assertEquals(expected, written.get(0)); Assert.assertNull(written.get(0).getParentFile()); Assert.assertTrue(expected.isFile()); @@ -231,7 +231,7 @@ public void outputDirectoryThatIsAFileIsReportedAsWriteFailure() throws Exceptio try { FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", notADirectory.getPath()); + DeidentifySourceType.BASE64, "notes.txt", notADirectory.getPath()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains(notADirectory.getPath())); @@ -244,7 +244,7 @@ public void existingFilesAreOverwritten() throws Exception { Files.write(target.toPath(), "old".getBytes()); FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("new"), "REDACTED_TEXT", FileDataFormat.TXT)), - DataSourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("new", new String(Files.readAllBytes(target.toPath()))); } @@ -254,7 +254,7 @@ public void aLaterFailureLeavesEarlierFilesOnDisk() throws Exception { FileOutputWriter.write(Arrays.asList( new FileOutput(b64("ok"), "REDACTED_FILE", FileDataFormat.PDF), new FileOutput("not base64!", "ENTITIES", null)), - DataSourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); + DeidentifySourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("processed-entities-invoice.json")); diff --git a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java index ec711c12..7de03e28 100644 --- a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java @@ -1,6 +1,7 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.EntityType; import com.skyflow.detect.FileDataFormat; @@ -34,7 +35,7 @@ private static ReidentifyFileResponse fromJson(String json) throws Exception { @Test public void mapsRequiredFieldsAndInjectsVaultId() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("W05BTUVfMV0=").build(), "vault-1"); + .dataSource(ReidentifySourceType.BASE64).value("W05BTUVfMV0=").build(), "vault-1"); Assert.assertEquals("BASE64", api.getDataSource().toString()); Assert.assertEquals("W05BTUVfMV0=", api.getValue()); @@ -52,7 +53,7 @@ public void mapsRequiredFieldsAndInjectsVaultId() throws Exception { @Test public void mapsEveryDataSource() throws Exception { - for (DataSourceType source : DataSourceType.values()) { + for (ReidentifySourceType source : ReidentifySourceType.values()) { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() .dataSource(source).value("x").build(), "v"); Assert.assertEquals(source.name(), api.getDataSource().toString()); @@ -60,12 +61,27 @@ public void mapsEveryDataSource() throws Exception { } } + @Test + public void reidentifySourcesExcludeSkyflowIdWhileDeidentifySourcesKeepIt() { + Assert.assertEquals(Arrays.asList("BASE64", "PRESIGNED_URL"), + Arrays.asList(ReidentifySourceType.BASE64.name(), ReidentifySourceType.PRESIGNED_URL.name())); + Assert.assertEquals(2, ReidentifySourceType.values().length); + Assert.assertEquals(3, DeidentifySourceType.values().length); + Assert.assertNotNull(DeidentifySourceType.valueOf("SKYFLOW_ID")); + try { + ReidentifySourceType.valueOf("SKYFLOW_ID"); + Assert.fail("SKYFLOW_ID must not be a reidentify source"); + } catch (IllegalArgumentException expected) { + // the server rejects SKYFLOW_ID for re-identification, so the SDK does not offer it + } + } + @Test public void dataFormatIsSentAsLowerCaseWireValue() throws Exception { for (FileDataFormat format : new FileDataFormat[]{FileDataFormat.TXT, FileDataFormat.CSV, FileDataFormat.JSON, FileDataFormat.JSONL, FileDataFormat.XML, FileDataFormat.DOCX, FileDataFormat.XLSX, FileDataFormat.PPTX}) { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.SKYFLOW_ID).value("rec").dataFormat(format).build(), "v"); + .dataSource(ReidentifySourceType.BASE64).value("eA==").dataFormat(format).build(), "v"); Assert.assertEquals(format.name().toLowerCase(), api.getDataFormat().get().toString()); Assert.assertTrue(wire(api).contains("\"dataFormat\":\"" + format.name().toLowerCase() + "\"")); } @@ -74,7 +90,7 @@ public void dataFormatIsSentAsLowerCaseWireValue() throws Exception { @Test public void mapsFlowvaultAndSkyvaultStyleRedactionLevels() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.PRESIGNED_URL).value("https://s3/presigned") + .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://s3/presigned") .redactionLevel(Arrays.asList( RedactionLevel.builder().tokenGroupName("names").redactionPattern("mask-middle").build(), RedactionLevel.builder().entityName(EntityType.EMAIL_ADDRESS).redactionType(RedactionType.MASKED).build())) @@ -93,7 +109,7 @@ public void mapsFlowvaultAndSkyvaultStyleRedactionLevels() throws Exception { @Test public void emptyRedactionLevelListIsSentAsEmptyArray() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("x").redactionLevel(Collections.emptyList()).build(), "v"); + .dataSource(ReidentifySourceType.BASE64).value("x").redactionLevel(Collections.emptyList()).build(), "v"); Assert.assertTrue(api.getRedactionLevel().get().isEmpty()); Assert.assertTrue(wire(api).contains("\"redactionLevel\":[]")); } @@ -108,7 +124,7 @@ public void mapsFullResponse() throws Exception { + "\"metrics\":{\"size\":12.5,\"wordCount\":120,\"characterCount\":800,\"pages\":2,\"slides\":0,\"duration\":1.25}}"); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.PRESIGNED_URL, response.getOutputType()); + Assert.assertEquals(ReidentifySourceType.PRESIGNED_URL, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); FileOutput first = response.getOutput().get(0); Assert.assertEquals("https://s3/out-1", first.getProcessedFile()); @@ -129,7 +145,7 @@ public void mapsEveryKnownStatusAndOutputType() throws Exception { for (DetectRunStatus status : DetectRunStatus.values()) { Assert.assertEquals(status, fromJson("{\"status\":\"" + status.name() + "\"}").getStatus()); } - for (DataSourceType type : DataSourceType.values()) { + for (ReidentifySourceType type : ReidentifySourceType.values()) { Assert.assertEquals(type, fromJson("{\"outputType\":\"" + type.name() + "\"}").getOutputType()); } } diff --git a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java index 8b36827b..b0444bb4 100644 --- a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java @@ -1,6 +1,7 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DataSourceType; + +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.EntityType; import com.skyflow.detect.RedactionLevel; import com.skyflow.enums.RedactionType; @@ -17,7 +18,7 @@ public class ReidentifyFileValidationsTests { private static ReidentifyFileRequest.ReidentifyFileRequestBuilder valid() { - return ReidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).value("Zm9v"); + return ReidentifyFileRequest.builder().dataSource(ReidentifySourceType.BASE64).value("Zm9v"); } private static void assertRejected(ReidentifyFileRequest request, BaseErrorMessage expected) { @@ -42,7 +43,7 @@ public void rejectsMissingDataSource() { @Test public void rejectsNullOrBlankValue() { - assertRejected(ReidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).build(), BaseErrorMessage.InvalidValueInReidentifyFile); + assertRejected(ReidentifyFileRequest.builder().dataSource(ReidentifySourceType.BASE64).build(), BaseErrorMessage.InvalidValueInReidentifyFile); assertRejected(valid().value("").build(), BaseErrorMessage.InvalidValueInReidentifyFile); assertRejected(valid().value(" \t").build(), BaseErrorMessage.InvalidValueInReidentifyFile); } @@ -57,7 +58,7 @@ public void checksFieldsInOrderDataSourceBeforeValue() { public void acceptsMinimalAndFullValidRequests() throws SkyflowException { ReidentifyFileValidations.validateReidentifyFileRequest(valid().build()); ReidentifyFileValidations.validateReidentifyFileRequest(valid() - .dataSource(DataSourceType.PRESIGNED_URL).value("https://example.com/f") + .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://example.com/f") .redactionLevel(Arrays.asList( RedactionLevel.builder().tokenGroupName("g").redactionPattern("p").build(), RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.REDACTED).build(), diff --git a/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java b/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java index 1030eec6..63eeae62 100644 --- a/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java +++ b/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.polling; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.GetRunResponse; import com.skyflow.detect.PollOptions; @@ -17,7 +17,7 @@ public class RunPollerTests { private static GetRunResponse run(DetectRunStatus status) { - return new GetRunResponse("run-1", status, status == DetectRunStatus.SUCCESS ? DataSourceType.BASE64 : null, + return new GetRunResponse("run-1", status, status == DetectRunStatus.SUCCESS ? DeidentifySourceType.BASE64 : null, Collections.emptyList(), null, status == DetectRunStatus.FAILED ? "boom" : null); } diff --git a/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java b/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java index 4b267bb3..7724448c 100644 --- a/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java +++ b/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java @@ -8,7 +8,7 @@ import com.skyflow.detect.Entity; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.EntityType; import com.skyflow.detect.FileDataFormat; @@ -162,7 +162,7 @@ public void getRunQueriesRunByIdScopedToVault() throws Exception { Assert.assertEquals("run-42", response.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, response.getOutputType()); + Assert.assertEquals(DeidentifySourceType.BASE64, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); Assert.assertEquals("QUJD", response.getOutput().get(0).getProcessedFile()); Assert.assertEquals("REDACTED_FILE", response.getOutput().get(0).getProcessedFileType()); diff --git a/docs/api_reference.md b/docs/api_reference.md index 426a1f3d..089eccf9 100644 --- a/docs/api_reference.md +++ b/docs/api_reference.md @@ -242,7 +242,7 @@ Parameters listed with their defaults as defined in the builders. | Builder method | Default | Description | |----------------|---------|-------------| -| `dataSource(DataSourceType)` | `null` | How `value` supplies the file. See [`DataSourceType`](#datasourcetype). | +| `dataSource(DeidentifySourceType)` | `null` | How `value` supplies the file: `BASE64`, `SKYFLOW_ID` or `PRESIGNED_URL`. See [Detect enums](#detect-enums). | | `value(String)` | `null` | Base64 content, a skyflow id, or a presigned URL, per `dataSource`. | | `file(File)` | `null` | Local file; read and base64-encoded when sent, `dataSource` set to `BASE64`. | | `filePath(String)` | `null` | Same as `file(File)`, from a path. | @@ -267,7 +267,7 @@ Parameters listed with their defaults as defined in the builders. | Builder method | Default | Description | |----------------|---------|-------------| -| `dataSource(DataSourceType)` | _(required)_ | `BASE64`, `SKYFLOW_ID` or `PRESIGNED_URL`. | +| `dataSource(ReidentifySourceType)` | _(required)_ | `BASE64` or `PRESIGNED_URL`. Re-identification does not accept a skyflow id as the source. | | `value(String)` | _(required)_ | Base64 content, a skyflow id, or a presigned URL, per `dataSource`. | | `dataFormat(FileDataFormat)` | `null` | File format. Limited to the formats that support `VAULT_TOKEN`: `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` or `PPTX`. | | `redactionLevel(List)` | `null` | Redaction rules. See [`RedactionLevel`](#redactionlevel). | @@ -421,7 +421,7 @@ Each element returned by `getDetokenizedFields()` and `getErrors()`. |--------|-------------|-------------| | `getRunId()` | `String` | Run id, always present. | | `getStatus()` | `DetectRunStatus` | Run status when polled, `null` when submit only. See [`DetectRunStatus`](#detectrunstatus). | -| `getOutputType()` | `DataSourceType` | `BASE64` or `PRESIGNED_URL`, `null` until the run completes. | +| `getOutputType()` | `DeidentifySourceType` | `BASE64` or `PRESIGNED_URL`, `null` until the run completes. | | `getOutput()` | `List` | Every output of the run, empty until complete, never `null`. See [`FileOutput`](#fileoutput). | | `getMetrics()` | `Metrics` | Size, counts, pages, slides, duration. `null` until complete. | | `getMessage()` | `String` | Failure detail when the status is `FAILED`. | @@ -433,7 +433,7 @@ Each element returned by `getDetokenizedFields()` and `getErrors()`. | Getter | Return type | Description | |--------|-------------|-------------| | `getStatus()` | `DetectRunStatus` | Status of the re-identification. | -| `getOutputType()` | `DataSourceType` | `BASE64` or `PRESIGNED_URL`. | +| `getOutputType()` | `ReidentifySourceType` | `BASE64` or `PRESIGNED_URL`. | | `getOutput()` | `List` | Re-identified file outputs, never `null`. | | `getMetrics()` | `Metrics` | Size and counts. | @@ -694,7 +694,8 @@ All in `com.skyflow.detect`. |------|--------| | `EntityType` | the 70 entity types (`NAME`, `EMAIL_ADDRESS`, `SSN`, `CREDIT_CARD`, `DOB`, ...), plus `ALL` and `NONE` | | `DeidentificationType` | `ENTITY_UNIQUE_COUNTER` _(default)_, `ENTITY_ONLY`, `VAULT_TOKEN`, `MASK`, `UNKNOWN` | -| `DataSourceType` | `BASE64`, `SKYFLOW_ID`, `PRESIGNED_URL` | +| `DeidentifySourceType` | `BASE64`, `SKYFLOW_ID`, `PRESIGNED_URL`. Input source for `deidentifyFile`, and the `getOutputType()` of `DeidentifyFileResponse` and `GetRunResponse`, where the API returns `BASE64` or `PRESIGNED_URL`. | +| `ReidentifySourceType` | `BASE64`, `PRESIGNED_URL`. Input source for `reidentifyFile` (the API does not accept a skyflow id there) and the `getOutputType()` of `ReidentifyFileResponse`. | | `FileDataFormat` | `BMP`, `CSV`, `DCM`, `DOC`, `DOCX`, `GIF`, `JPEG`, `JPG`, `JSON`, `JSONL`, `MP3`, `PDF`, `PNG`, `PPT`, `PPTX`, `TIF`, `TIFF`, `TXT`, `WAV`, `XLS`, `XLSX`, `XML`, `ZIP` | | `DetectRunStatus` | `QUEUED`, `IN_PROGRESS`, `SUCCESS`, `FAILED`, `UNKNOWN`. `SUCCESS`, `FAILED` and `UNKNOWN` end polling. | | `ReturnEntitiesType` | `EXCLUDE_SENSITIVE_DATA` _(default)_, `ALL`, `NONE` | diff --git a/flowvault/README.md b/flowvault/README.md index 48f37775..f9a438fb 100644 --- a/flowvault/README.md +++ b/flowvault/README.md @@ -1762,7 +1762,7 @@ File de-identification is asynchronous on the API: the submit call returns a run - **Submit only** (default): one call, returns `getRunId()`. `getStatus()` is `null` and nothing is written to disk. Retrieve the result later with [`getRun`](#get-run). - **Submit and poll**: set `pollOptions`. The SDK polls the run with exponential backoff (1, 2, 4, 8, 16, then 32 seconds between lookups) until it is `SUCCESS`, `FAILED` or `UNKNOWN`, or until `waitTime` (default 60 s, max 300) or `maxAttempts` (default 23, max 23) is used up. If the budget runs out the response carries the run id with `IN_PROGRESS` or `QUEUED` so you can resume with `getRun`. -The file is supplied in one of three ways: `dataSource` plus `value` (`BASE64` content, a `SKYFLOW_ID`, or a `PRESIGNED_URL`), or `file(File)` / `filePath(String)`, which read and encode a local file and infer `dataFormat` from its extension. Supply exactly one of `value`, `file` or `filePath`. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). +The file is supplied in one of three ways: a `DeidentifySourceType` `dataSource` plus `value` (`BASE64` content, a `SKYFLOW_ID`, or a `PRESIGNED_URL`), or `file(File)` / `filePath(String)`, which read and encode a local file and infer `dataFormat` from its extension. Supply exactly one of `value`, `file` or `filePath`. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). `dataFormat` accepts every `FileDataFormat`: `BMP`, `CSV`, `DCM`, `DOC`, `DOCX`, `GIF`, `JPEG`, `JPG`, `JSON`, `JSONL`, `MP3`, `PDF`, `PNG`, `PPT`, `PPTX`, `TIF`, `TIFF`, `TXT`, `WAV`, `XLS`, `XLSX`, `XML` and `ZIP`. The `VAULT_TOKEN` de-identification type is supported only for `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. @@ -1891,14 +1891,14 @@ A `RedactionLevel` names one source and one replacement. On flowvault vaults the ## Reidentify file -`reidentifyFile` is synchronous: the re-identified file comes back in the response, not through a run id. `ReidentifyFileRequest` takes a `dataSource` (`BASE64`, `SKYFLOW_ID` or `PRESIGNED_URL`), the matching `value`, an optional `dataFormat` and the same optional `RedactionLevel` rules as `reidentifyString`. `dataFormat` is limited to the formats that support `VAULT_TOKEN`: `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. +`reidentifyFile` is synchronous: the re-identified file comes back in the response, not through a run id. `ReidentifyFileRequest` takes a `dataSource` (`ReidentifySourceType.BASE64` or `PRESIGNED_URL`; re-identification does not accept a skyflow id as the source), the matching `value`, an optional `dataFormat` and the same optional `RedactionLevel` rules as `reidentifyString`. `dataFormat` is limited to the formats that support `VAULT_TOKEN`: `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. ```java byte[] content = Files.readAllBytes(Paths.get("tokenized.txt")); ReidentifyFileResponse response = skyflowClient.detect().reidentifyFile( ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64) + .dataSource(ReidentifySourceType.BASE64) .value(Base64.getEncoder().encodeToString(content)) .dataFormat(FileDataFormat.TXT) .redactionLevel(Collections.singletonList( diff --git a/flowvault/samples/src/main/java/com/example/detect/GetRunSample.java b/flowvault/samples/src/main/java/com/example/detect/GetRunSample.java index 9d704f25..1d521d71 100644 --- a/flowvault/samples/src/main/java/com/example/detect/GetRunSample.java +++ b/flowvault/samples/src/main/java/com/example/detect/GetRunSample.java @@ -3,7 +3,7 @@ import com.skyflow.Skyflow; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileOutput; import com.skyflow.detect.GetRunRequest; @@ -46,7 +46,7 @@ public static void main(String[] args) throws Exception { System.out.println("Run " + run.getRunId() + " status: " + run.getStatus()); if (run.getStatus() == DetectRunStatus.SUCCESS) { for (FileOutput output : run.getOutput()) { - if (run.getOutputType() != DataSourceType.BASE64) { + if (run.getOutputType() != DeidentifySourceType.BASE64) { // PRESIGNED_URL outputs carry a URL, not base64: download them instead of decoding. System.out.println(output.getProcessedFileType() + " available at " + output.getProcessedFile()); continue; diff --git a/flowvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java b/flowvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java index 3e0cd0d8..020fbf52 100644 --- a/flowvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java +++ b/flowvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java @@ -3,7 +3,7 @@ import com.skyflow.Skyflow; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileDataFormat; import com.skyflow.detect.FileOutput; @@ -45,7 +45,7 @@ public static void main(String[] args) throws Exception { try { ReidentifyFileResponse response = skyflowClient.detect().reidentifyFile( ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64) + .dataSource(ReidentifySourceType.BASE64) .value(base64) .dataFormat(FileDataFormat.TXT) // Optional: render one token group with a named redaction pattern instead of its plain value. @@ -61,7 +61,7 @@ public static void main(String[] args) throws Exception { int index = 0; for (FileOutput output : response.getOutput()) { index++; - if (response.getOutputType() != DataSourceType.BASE64) { + if (response.getOutputType() != ReidentifySourceType.BASE64) { // PRESIGNED_URL outputs carry a URL, not base64: download them instead of decoding. System.out.println(output.getProcessedFileType() + " available at " + output.getProcessedFile()); continue; diff --git a/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java index 0af983c8..23db46ac 100644 --- a/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java +++ b/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java @@ -5,7 +5,8 @@ import com.skyflow.config.VaultConfig; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.ReidentifySourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentificationType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; @@ -156,7 +157,7 @@ public void reidentifyFileValidatesBeforeResolvingCredentials() throws SkyflowEx ReidentifyFileRequest[] bad = { null, ReidentifyFileRequest.builder().value("Zm9v").build(), - ReidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).value(" ").build(), + ReidentifyFileRequest.builder().dataSource(ReidentifySourceType.BASE64).value(" ").build(), }; BaseErrorMessage[] expected = { BaseErrorMessage.ReidentifyFileRequestNull, @@ -179,7 +180,7 @@ public void reidentifyFileMissingCredentialsSurfaceWithoutNetworkCall() throws S DetectController controller = new DetectController(vaultConfig("vault-a"), emptyCredentials()); try { controller.reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v").build()); + .dataSource(ReidentifySourceType.BASE64).value("Zm9v").build()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); @@ -199,7 +200,7 @@ public void reidentifyFileSendsScopedRequestAndMapsResponse() throws Exception { + "\"metrics\":{\"size\":0.5,\"wordCount\":3,\"characterCount\":12}}")); ReidentifyFileResponse response = controllerFor(server).reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64) + .dataSource(ReidentifySourceType.BASE64) .value("W05BTUVfMV0=") .dataFormat(FileDataFormat.TXT) .redactionLevel(Arrays.asList( @@ -207,7 +208,7 @@ public void reidentifyFileSendsScopedRequestAndMapsResponse() throws Exception { .build()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, response.getOutputType()); + Assert.assertEquals(ReidentifySourceType.BASE64, response.getOutputType()); Assert.assertEquals(1, response.getOutput().size()); Assert.assertEquals("SGVsbG8=", response.getOutput().get(0).getProcessedFile()); Assert.assertEquals("REIDENTIFIED_FILE", response.getOutput().get(0).getProcessedFileType()); @@ -238,7 +239,7 @@ public void reidentifyFileToleratesSparseAndUnknownResponseValues() throws Excep try { server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"status\":\"SOMETHING_NEW\"}")); ReidentifyFileResponse response = controllerFor(server).reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.SKYFLOW_ID).value("rec-1").build()); + .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://example.com/tokenized.txt").build()); Assert.assertEquals(DetectRunStatus.UNKNOWN, response.getStatus()); Assert.assertNull(response.getOutputType()); Assert.assertTrue(response.getOutput().isEmpty()); @@ -261,7 +262,7 @@ public void reidentifyFileMapsApiErrors() throws Exception { + "\"http_status\":\"Bad Request\",\"details\":[]}}")); try { controllerFor(server).reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.PRESIGNED_URL).value("https://example.com/f").build()); + .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://example.com/f").build()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertEquals(400, e.getHttpCode()); @@ -403,7 +404,7 @@ public void getRunRoundTripQueriesByIdScopedToVault() throws Exception { GetRunResponse done = controller.getRun(GetRunRequest.builder().runId(" run-42 ").build()); Assert.assertEquals("run-42", done.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, done.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, done.getOutputType()); + Assert.assertEquals(DeidentifySourceType.BASE64, done.getOutputType()); Assert.assertEquals("UERG", done.getOutput().get(0).getProcessedFile()); Assert.assertEquals("REDACTED_FILE", done.getOutput().get(0).getProcessedFileType()); Assert.assertEquals(FileDataFormat.PDF, done.getOutput().get(0).getProcessedFileExtension()); @@ -506,7 +507,7 @@ public void deidentifyFileSubmitOnlyReturnsRunIdWithoutPolling() throws Exceptio server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"runId\":\"run-42\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.SKYFLOW_ID).value("rec-1").dataFormat(FileDataFormat.PDF) + .dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec-1").dataFormat(FileDataFormat.PDF) .configurationId("cfg-1").build()); Assert.assertEquals("run-42", response.getRunId()); @@ -551,7 +552,7 @@ public void deidentifyFilePollsToSuccessAndWritesOutputsForLocalFile() throws Ex Assert.assertEquals("run-7", response.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, response.getOutputType()); + Assert.assertEquals(DeidentifySourceType.BASE64, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); Assert.assertEquals(Integer.valueOf(3), response.getMetrics().getWordCount()); Assert.assertEquals("Pay [NAME_1]", new String(Files.readAllBytes(new File(outDir, "processed-invoice.txt").toPath()), "UTF-8")); @@ -579,7 +580,7 @@ public void deidentifyFileReturnsRunIdWithStatusWhenBudgetRunsOut() throws Excep server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"status\":\"IN_PROGRESS\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v") + .dataSource(DeidentifySourceType.BASE64).value("Zm9v") .pollOptions(PollOptions.builder().maxAttempts(1).build()).build()); Assert.assertEquals("run-8", response.getRunId()); @@ -600,7 +601,7 @@ public void deidentifyFileSurfacesFailedRunMessage() throws Exception { server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"status\":\"FAILED\",\"message\":\"unsupported file\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v").pollOptions(PollOptions.builder().build()).build()); + .dataSource(DeidentifySourceType.BASE64).value("Zm9v").pollOptions(PollOptions.builder().build()).build()); Assert.assertEquals(DetectRunStatus.FAILED, response.getStatus()); Assert.assertEquals("unsupported file", response.getMessage()); @@ -619,7 +620,7 @@ public void deidentifyFileSubmitErrorMapsToSkyflowException() throws Exception { .setBody("{\"error\":{\"grpc_code\":3,\"http_code\":400,\"message\":\"configuration not found\",\"http_status\":\"Bad Request\",\"details\":[]}}")); try { controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v").configurationId("missing").build()); + .dataSource(DeidentifySourceType.BASE64).value("Zm9v").configurationId("missing").build()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertEquals(400, e.getHttpCode()); diff --git a/skyvault/README.md b/skyvault/README.md index 99260df5..921094d0 100644 --- a/skyvault/README.md +++ b/skyvault/README.md @@ -1795,7 +1795,7 @@ File de-identification is asynchronous on the API: the submit call returns a run - **Submit only** (default): one call, returns `getRunId()`. `getStatus()` is `null` and nothing is written to disk. Retrieve the result later with [`getRun`](#get-run). - **Submit and poll**: set `pollOptions`. The SDK polls the run with exponential backoff (1, 2, 4, 8, 16, then 32 seconds between lookups) until it is `SUCCESS`, `FAILED` or `UNKNOWN`, or until `waitTime` (default 60 s, max 300) or `maxAttempts` (default 23, max 23) is used up. If the budget runs out the response carries the run id with `IN_PROGRESS` or `QUEUED` so you can resume with `getRun`. -The file is supplied in one of three ways: `dataSource` plus `value` (`BASE64` content, a `SKYFLOW_ID`, or a `PRESIGNED_URL`), or `file(File)` / `filePath(String)`, which read and encode a local file and infer `dataFormat` from its extension. Supply exactly one of `value`, `file` or `filePath`. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). +The file is supplied in one of three ways: a `DeidentifySourceType` `dataSource` plus `value` (`BASE64` content, a `SKYFLOW_ID`, or a `PRESIGNED_URL`), or `file(File)` / `filePath(String)`, which read and encode a local file and infer `dataFormat` from its extension. Supply exactly one of `value`, `file` or `filePath`. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). `dataFormat` accepts every `FileDataFormat`: `BMP`, `CSV`, `DCM`, `DOC`, `DOCX`, `GIF`, `JPEG`, `JPG`, `JSON`, `JSONL`, `MP3`, `PDF`, `PNG`, `PPT`, `PPTX`, `TIF`, `TIFF`, `TXT`, `WAV`, `XLS`, `XLSX`, `XML` and `ZIP`. The `VAULT_TOKEN` de-identification type is supported only for `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. @@ -1928,14 +1928,14 @@ A `RedactionLevel` names one source and one replacement. On skyvault vaults the ## Reidentify file -`reidentifyFile` is synchronous: the re-identified file comes back in the response, not through a run id. `ReidentifyFileRequest` takes a `dataSource` (`BASE64`, `SKYFLOW_ID` or `PRESIGNED_URL`), the matching `value`, an optional `dataFormat` and the same optional `RedactionLevel` rules as `reidentifyString`. `dataFormat` is limited to the formats that support `VAULT_TOKEN`: `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. +`reidentifyFile` is synchronous: the re-identified file comes back in the response, not through a run id. `ReidentifyFileRequest` takes a `dataSource` (`ReidentifySourceType.BASE64` or `PRESIGNED_URL`; re-identification does not accept a skyflow id as the source), the matching `value`, an optional `dataFormat` and the same optional `RedactionLevel` rules as `reidentifyString`. `dataFormat` is limited to the formats that support `VAULT_TOKEN`: `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. ```java byte[] content = Files.readAllBytes(Paths.get("tokenized.txt")); ReidentifyFileResponse response = skyflowClient.detect().reidentifyFile( ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64) + .dataSource(ReidentifySourceType.BASE64) .value(Base64.getEncoder().encodeToString(content)) .dataFormat(FileDataFormat.TXT) .redactionLevel(Collections.singletonList( diff --git a/skyvault/samples/src/main/java/com/example/detect/GetRunSample.java b/skyvault/samples/src/main/java/com/example/detect/GetRunSample.java index 9d704f25..1d521d71 100644 --- a/skyvault/samples/src/main/java/com/example/detect/GetRunSample.java +++ b/skyvault/samples/src/main/java/com/example/detect/GetRunSample.java @@ -3,7 +3,7 @@ import com.skyflow.Skyflow; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileOutput; import com.skyflow.detect.GetRunRequest; @@ -46,7 +46,7 @@ public static void main(String[] args) throws Exception { System.out.println("Run " + run.getRunId() + " status: " + run.getStatus()); if (run.getStatus() == DetectRunStatus.SUCCESS) { for (FileOutput output : run.getOutput()) { - if (run.getOutputType() != DataSourceType.BASE64) { + if (run.getOutputType() != DeidentifySourceType.BASE64) { // PRESIGNED_URL outputs carry a URL, not base64: download them instead of decoding. System.out.println(output.getProcessedFileType() + " available at " + output.getProcessedFile()); continue; diff --git a/skyvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java b/skyvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java index 41c9d765..787d6ef1 100644 --- a/skyvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java +++ b/skyvault/samples/src/main/java/com/example/detect/ReidentifyFileSample.java @@ -3,7 +3,7 @@ import com.skyflow.Skyflow; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.EntityType; import com.skyflow.detect.FileDataFormat; @@ -47,7 +47,7 @@ public static void main(String[] args) throws Exception { try { ReidentifyFileResponse response = skyflowClient.detect().reidentifyFile( ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64) + .dataSource(ReidentifySourceType.BASE64) .value(base64) .dataFormat(FileDataFormat.TXT) // Optional: render one entity type with a redaction type instead of its plain value. @@ -63,7 +63,7 @@ public static void main(String[] args) throws Exception { int index = 0; for (FileOutput output : response.getOutput()) { index++; - if (response.getOutputType() != DataSourceType.BASE64) { + if (response.getOutputType() != ReidentifySourceType.BASE64) { // PRESIGNED_URL outputs carry a URL, not base64: download them instead of decoding. System.out.println(output.getProcessedFileType() + " available at " + output.getProcessedFile()); continue; diff --git a/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java index b31002ef..aaa97250 100644 --- a/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java +++ b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java @@ -5,7 +5,8 @@ import com.skyflow.config.VaultConfig; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DataSourceType; +import com.skyflow.detect.ReidentifySourceType; +import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentificationType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; @@ -276,7 +277,7 @@ public void getRunRoundTripQueriesByIdScopedToVault() throws Exception { GetRunResponse done = controller.getRun(GetRunRequest.builder().runId(" run-42 ").build()); Assert.assertEquals("run-42", done.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, done.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, done.getOutputType()); + Assert.assertEquals(DeidentifySourceType.BASE64, done.getOutputType()); Assert.assertEquals("UERG", done.getOutput().get(0).getProcessedFile()); Assert.assertEquals("REDACTED_FILE", done.getOutput().get(0).getProcessedFileType()); Assert.assertEquals(FileDataFormat.PDF, done.getOutput().get(0).getProcessedFileExtension()); @@ -365,7 +366,7 @@ public void reidentifyFileValidatesBeforeResolvingCredentials() throws SkyflowEx ReidentifyFileRequest[] bad = { null, ReidentifyFileRequest.builder().value("Zm9v").build(), - ReidentifyFileRequest.builder().dataSource(DataSourceType.BASE64).value(" ").build(), + ReidentifyFileRequest.builder().dataSource(ReidentifySourceType.BASE64).value(" ").build(), }; BaseErrorMessage[] expected = { BaseErrorMessage.ReidentifyFileRequestNull, @@ -388,7 +389,7 @@ public void reidentifyFileMissingCredentialsSurfaceWithoutNetworkCall() throws S DetectController controller = new DetectController(vaultConfig("vault-a"), emptyCredentials()); try { controller.reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v").build()); + .dataSource(ReidentifySourceType.BASE64).value("Zm9v").build()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); @@ -408,7 +409,7 @@ public void reidentifyFileSendsScopedRequestAndMapsResponse() throws Exception { + "\"metrics\":{\"size\":0.5,\"wordCount\":3,\"characterCount\":12}}")); ReidentifyFileResponse response = controllerFor(server).reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64) + .dataSource(ReidentifySourceType.BASE64) .value("W05BTUVfMV0=") .dataFormat(FileDataFormat.TXT) .redactionLevel(Arrays.asList( @@ -416,7 +417,7 @@ public void reidentifyFileSendsScopedRequestAndMapsResponse() throws Exception { .build()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, response.getOutputType()); + Assert.assertEquals(ReidentifySourceType.BASE64, response.getOutputType()); Assert.assertEquals(1, response.getOutput().size()); Assert.assertEquals("SGVsbG8=", response.getOutput().get(0).getProcessedFile()); Assert.assertEquals("REIDENTIFIED_FILE", response.getOutput().get(0).getProcessedFileType()); @@ -447,7 +448,7 @@ public void reidentifyFileToleratesSparseAndUnknownResponseValues() throws Excep try { server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"status\":\"SOMETHING_NEW\"}")); ReidentifyFileResponse response = controllerFor(server).reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.SKYFLOW_ID).value("rec-1").build()); + .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://example.com/tokenized.txt").build()); Assert.assertEquals(DetectRunStatus.UNKNOWN, response.getStatus()); Assert.assertNull(response.getOutputType()); Assert.assertTrue(response.getOutput().isEmpty()); @@ -470,7 +471,7 @@ public void reidentifyFileMapsApiErrors() throws Exception { + "\"http_status\":\"Bad Request\",\"details\":[]}}")); try { controllerFor(server).reidentifyFile(ReidentifyFileRequest.builder() - .dataSource(DataSourceType.PRESIGNED_URL).value("https://example.com/f").build()); + .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://example.com/f").build()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertEquals(400, e.getHttpCode()); @@ -505,7 +506,7 @@ public void deidentifyFileSubmitOnlyReturnsRunIdWithoutPolling() throws Exceptio server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"runId\":\"run-42\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.SKYFLOW_ID).value("rec-1").dataFormat(FileDataFormat.PDF) + .dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec-1").dataFormat(FileDataFormat.PDF) .configurationId("cfg-1").build()); Assert.assertEquals("run-42", response.getRunId()); @@ -550,7 +551,7 @@ public void deidentifyFilePollsToSuccessAndWritesOutputsForLocalFile() throws Ex Assert.assertEquals("run-7", response.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DataSourceType.BASE64, response.getOutputType()); + Assert.assertEquals(DeidentifySourceType.BASE64, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); Assert.assertEquals(Integer.valueOf(3), response.getMetrics().getWordCount()); Assert.assertEquals("Pay [NAME_1]", new String(Files.readAllBytes(new File(outDir, "processed-invoice.txt").toPath()), "UTF-8")); @@ -578,7 +579,7 @@ public void deidentifyFileReturnsRunIdWithStatusWhenBudgetRunsOut() throws Excep server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"status\":\"IN_PROGRESS\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v") + .dataSource(DeidentifySourceType.BASE64).value("Zm9v") .pollOptions(PollOptions.builder().maxAttempts(1).build()).build()); Assert.assertEquals("run-8", response.getRunId()); @@ -599,7 +600,7 @@ public void deidentifyFileSurfacesFailedRunMessage() throws Exception { server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"status\":\"FAILED\",\"message\":\"unsupported file\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v").pollOptions(PollOptions.builder().build()).build()); + .dataSource(DeidentifySourceType.BASE64).value("Zm9v").pollOptions(PollOptions.builder().build()).build()); Assert.assertEquals(DetectRunStatus.FAILED, response.getStatus()); Assert.assertEquals("unsupported file", response.getMessage()); @@ -618,7 +619,7 @@ public void deidentifyFileSubmitErrorMapsToSkyflowException() throws Exception { .setBody("{\"error\":{\"grpc_code\":3,\"http_code\":400,\"message\":\"configuration not found\",\"http_status\":\"Bad Request\",\"details\":[]}}")); try { controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DataSourceType.BASE64).value("Zm9v").configurationId("missing").build()); + .dataSource(DeidentifySourceType.BASE64).value("Zm9v").configurationId("missing").build()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertEquals(400, e.getHttpCode()); From 5481413687128d052dac3b691164f6f7dc9b1259 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 30 Oct 2026 07:13:51 +0000 Subject: [PATCH 05/10] [AUTOMATED] Private Release 1.2.0-dev-171c7908 --- flowvault/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 75b0d4d7..463e1827 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -12,7 +12,7 @@ skyflow-flowvault-java - 1.2.0-dev.7bfc279c + 1.2.0-dev.171c7908 jar ${project.groupId}:${project.artifactId} Skyflow FlowVault SDK for the Java programming language From 585337e06cef93649b7ae94881ada578d9690aac Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 30 Oct 2026 07:57:15 +0000 Subject: [PATCH 06/10] [AUTOMATED] Private Release 1.3.0-dev-74ba33fa --- flowvault/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 690d85b1..406de105 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -12,7 +12,7 @@ skyflow-flowvault-java - 1.3.0 + 1.3.0-dev.74ba33fa jar ${project.groupId}:${project.artifactId} Skyflow FlowVault SDK for the Java programming language From 4cc5c0fd591a98fba73d0f8875f4a76a71cfe184 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Mon, 2 Nov 2026 17:39:22 +0530 Subject: [PATCH 07/10] SK-3175 update enum name for data source type --- .../skyflow/detect/DeidentifyFileRequest.java | 48 ++++++++++------- .../detect/DeidentifyFileResponse.java | 8 +-- .../skyflow/detect/DeidentifyFileSource.java | 15 ++++++ .../skyflow/detect/DeidentifySourceType.java | 11 ---- .../com/skyflow/detect/GetRunResponse.java | 8 +-- .../skyflow/detect/ReidentifyFileRequest.java | 18 +++---- .../detect/ReidentifyFileResponse.java | 8 +-- .../skyflow/detect/ReidentifyFileSource.java | 14 +++++ .../skyflow/detect/ReidentifySourceType.java | 10 ---- .../detect/internal/DeidentifyFileFlow.java | 6 ++- .../detect/internal/DetectRequestMapper.java | 21 ++++++-- .../detect/internal/DetectResponseMapper.java | 12 +++-- .../detect/internal/DetectValidations.java | 25 ++++++--- .../detect/internal/FileOutputWriter.java | 6 +-- .../detect/internal/ReidentifyFileMapper.java | 12 +++-- .../com/skyflow/errors/BaseErrorMessage.java | 11 ++-- .../main/java/com/skyflow/logs/ErrorLogs.java | 11 ++-- .../controller/BaseDetectController.java | 37 +++++++++++-- .../skyflow/detect/TestDeidentifySource.java | 16 ++++++ .../skyflow/detect/TestReidentifySource.java | 15 ++++++ .../internal/DeidentifyFileFlowTests.java | 16 +++--- .../internal/DeidentifyFileMapperTests.java | 16 +++--- .../DeidentifyFileValidationsTests.java | 25 +++++++-- .../internal/DetectResponseMapperTests.java | 12 ++--- .../internal/FileOutputWriterTests.java | 50 +++++++++--------- .../internal/ReidentifyFileMapperTests.java | 34 +++++------- .../ReidentifyFileValidationsTests.java | 8 +-- .../detect/polling/RunPollerTests.java | 4 +- .../controller/BaseDetectControllerTests.java | 17 +++++- docs/api_reference.md | 6 +-- flowvault/README.md | 4 +- .../skyflow-flowvault-java.baseline.jar | Bin 964784 -> 969037 bytes .../skyflow/detect/DeidentifySourceType.java | 11 ++++ .../skyflow/detect/ReidentifySourceType.java | 11 ++++ .../vault/controller/DetectController.java | 14 +++++ .../detect/DetectSourceTypesTests.java | 39 ++++++++++++++ .../controller/DetectControllerTests.java | 8 +-- skyvault/README.md | 4 +- skyvault/api-report/skyflow-java.baseline.jar | Bin 1630691 -> 1245291 bytes .../skyflow/detect/DeidentifySourceType.java | 11 ++++ .../skyflow/detect/ReidentifySourceType.java | 11 ++++ .../vault/controller/DetectController.java | 14 +++++ .../detect/DetectSourceTypesTests.java | 39 ++++++++++++++ .../controller/DetectControllerTests.java | 2 +- 44 files changed, 479 insertions(+), 189 deletions(-) create mode 100644 common/src/main/java/com/skyflow/detect/DeidentifyFileSource.java delete mode 100644 common/src/main/java/com/skyflow/detect/DeidentifySourceType.java create mode 100644 common/src/main/java/com/skyflow/detect/ReidentifyFileSource.java delete mode 100644 common/src/main/java/com/skyflow/detect/ReidentifySourceType.java create mode 100644 common/src/test/java/com/skyflow/detect/TestDeidentifySource.java create mode 100644 common/src/test/java/com/skyflow/detect/TestReidentifySource.java create mode 100644 flowvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java create mode 100644 flowvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java create mode 100644 flowvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java create mode 100644 skyvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java create mode 100644 skyvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java create mode 100644 skyvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java diff --git a/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java b/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java index b9e12e06..94393e4a 100644 --- a/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java +++ b/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java @@ -3,10 +3,10 @@ import java.io.File; /** - * Request for {@code deidentifyFile}. Supply the file through exactly one of {@code value} (with a - * {@code dataSource}), {@code file} or {@code filePath}. The two file forms are builder sugar that set - * {@code dataSource = BASE64}, encode the content into {@code value} when the request is sent, and infer - * {@code dataFormat} from the extension unless it is set explicitly. + * Request for {@code deidentifyFile}. Supply the file through exactly one of {@code filePath}, {@code file} + * or {@code value} (with a {@code dataSource}); more than one, or none, is rejected before any call. A local + * file given as {@code file} or {@code filePath} is read when the request is sent, sent as {@code BASE64}, and + * its {@code dataFormat} is inferred from the extension unless set explicitly. * *

Without {@code pollOptions} the call submits the run and returns its id. With {@code pollOptions} the * SDK polls the run and, on success for a file-based request, writes the outputs to disk. @@ -16,9 +16,10 @@ * the vault's defaults. */ public final class DeidentifyFileRequest { - private final DeidentifySourceType dataSource; + private final DeidentifyFileSource dataSource; private final String value; private final File file; + private final String filePath; private final FileDataFormat dataFormat; private final String configurationId; private final DetectConfiguration configuration; @@ -29,6 +30,7 @@ private DeidentifyFileRequest(DeidentifyFileRequestBuilder builder) { this.dataSource = builder.dataSource; this.value = builder.value; this.file = builder.file; + this.filePath = builder.filePath; this.dataFormat = builder.dataFormat; this.configurationId = builder.configurationId; this.configuration = builder.configuration; @@ -44,26 +46,33 @@ public static DeidentifyFileRequestBuilder builder() { } /** - * @return How {@code value} supplies the file. Required unless {@code file} or {@code filePath} was used. + * @return How {@code value} supplies the file: this SDK's {@code DeidentifySourceType}. Required with {@code value}. */ - public DeidentifySourceType getDataSource() { + public DeidentifyFileSource getDataSource() { return dataSource; } /** - * @return Base64 content, skyflow id or presigned URL, according to {@code dataSource}. + * @return The file as {@code dataSource} describes it: base64 content, a presigned URL or, on skyvault, a skyflow id. */ public String getValue() { return value; } /** - * @return Local file to de-identify, when {@code file} or {@code filePath} was used. + * @return Local file to de-identify, when {@code file} was used. */ public File getFile() { return file; } + /** + * @return Path of the local file to de-identify, when {@code filePath} was used. + */ + public String getFilePath() { + return filePath; + } + /** * @return Format of the file. Optional; inferred from the file extension or by the server when omitted. */ @@ -105,6 +114,7 @@ public String toString() { "dataSource=" + dataSource + ", value=" + (value == null ? null : "<" + value.length() + " chars>") + ", file=" + file + + ", filePath=" + filePath + ", dataFormat=" + dataFormat + ", configurationId=" + configurationId + ", configuration=" + configuration + @@ -114,9 +124,10 @@ public String toString() { } public static final class DeidentifyFileRequestBuilder { - private DeidentifySourceType dataSource; + private DeidentifyFileSource dataSource; private String value; private File file; + private String filePath; private FileDataFormat dataFormat; private String configurationId; private DetectConfiguration configuration; @@ -127,16 +138,17 @@ private DeidentifyFileRequestBuilder() { } /** - * @param dataSource How {@code value} supplies the file. + * @param dataSource How {@code value} supplies the file: this SDK's {@code DeidentifySourceType} + * (skyvault: BASE64, SKYFLOW_ID, PRESIGNED_URL; flowvault: BASE64, PRESIGNED_URL). * @return this builder */ - public DeidentifyFileRequestBuilder dataSource(DeidentifySourceType dataSource) { + public DeidentifyFileRequestBuilder dataSource(DeidentifyFileSource dataSource) { this.dataSource = dataSource; return this; } /** - * @param value Base64 content, skyflow id or presigned URL, according to {@code dataSource}. + * @param value The file as {@code dataSource} describes it: base64 content, a presigned URL or, on skyvault, a skyflow id. * @return this builder */ public DeidentifyFileRequestBuilder value(String value) { @@ -145,23 +157,21 @@ public DeidentifyFileRequestBuilder value(String value) { } /** - * @param file Local file to de-identify. Sets {@code dataSource} to BASE64; the content is encoded when sent. + * @param file Local file to de-identify. Sent as BASE64; the content is encoded when sent. * @return this builder */ public DeidentifyFileRequestBuilder file(File file) { this.file = file; - if (file != null) { - this.dataSource = DeidentifySourceType.BASE64; - } return this; } /** - * @param filePath Path of a local file to de-identify. Same as {@link #file(File)}. + * @param filePath Path of a local file to de-identify. Sent as BASE64; the content is encoded when sent. * @return this builder */ public DeidentifyFileRequestBuilder filePath(String filePath) { - return file(filePath == null ? null : new File(filePath)); + this.filePath = filePath; + return this; } /** diff --git a/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java b/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java index 35a3a0d5..730177cc 100644 --- a/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java +++ b/common/src/main/java/com/skyflow/detect/DeidentifyFileResponse.java @@ -11,12 +11,12 @@ public final class DeidentifyFileResponse { private final String runId; private final DetectRunStatus status; - private final DeidentifySourceType outputType; + private final DeidentifyFileSource outputType; private final List output; private final Metrics metrics; private final String message; - public DeidentifyFileResponse(String runId, DetectRunStatus status, DeidentifySourceType outputType, + public DeidentifyFileResponse(String runId, DetectRunStatus status, DeidentifyFileSource outputType, List output, Metrics metrics, String message) { this.runId = runId; this.status = status; @@ -42,9 +42,9 @@ public DetectRunStatus getStatus() { } /** - * @return How output files are delivered. Null unless polled to SUCCESS. + * @return How output files are delivered. Null unless polled to SUCCESS. A constant of this SDK's {@code DeidentifySourceType}: {@code BASE64} or {@code PRESIGNED_URL}. */ - public DeidentifySourceType getOutputType() { + public DeidentifyFileSource getOutputType() { return outputType; } diff --git a/common/src/main/java/com/skyflow/detect/DeidentifyFileSource.java b/common/src/main/java/com/skyflow/detect/DeidentifyFileSource.java new file mode 100644 index 00000000..f60439ac --- /dev/null +++ b/common/src/main/java/com/skyflow/detect/DeidentifyFileSource.java @@ -0,0 +1,15 @@ +package com.skyflow.detect; + +/** + * How the file of {@code deidentifyFile} is supplied, and how a run reports its outputs. Each SDK ships its own + * {@code com.skyflow.detect.DeidentifySourceType} enum implementing this interface with the sources its vault + * type accepts: skyvault {@code BASE64}, {@code SKYFLOW_ID}, {@code PRESIGNED_URL}; flowvault {@code BASE64}, + * {@code PRESIGNED_URL}. {@code getOutputType()} on {@code DeidentifyFileResponse} and {@code GetRunResponse} + * returns a constant of that same enum. The constant name is the wire value. + */ +public interface DeidentifyFileSource { + /** + * @return the wire value, which is the constant name + */ + String name(); +} diff --git a/common/src/main/java/com/skyflow/detect/DeidentifySourceType.java b/common/src/main/java/com/skyflow/detect/DeidentifySourceType.java deleted file mode 100644 index 453a9caa..00000000 --- a/common/src/main/java/com/skyflow/detect/DeidentifySourceType.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.skyflow.detect; - -/** - * How the input file is supplied to {@code deidentifyFile}: base64 content, the skyflow id of a file - * record in the vault, or an S3 presigned URL. - */ -public enum DeidentifySourceType { - BASE64, - SKYFLOW_ID, - PRESIGNED_URL; -} diff --git a/common/src/main/java/com/skyflow/detect/GetRunResponse.java b/common/src/main/java/com/skyflow/detect/GetRunResponse.java index 5a3dcd46..c892355e 100644 --- a/common/src/main/java/com/skyflow/detect/GetRunResponse.java +++ b/common/src/main/java/com/skyflow/detect/GetRunResponse.java @@ -8,12 +8,12 @@ public final class GetRunResponse { private final String runId; private final DetectRunStatus status; - private final DeidentifySourceType outputType; + private final DeidentifyFileSource outputType; private final List output; private final Metrics metrics; private final String message; - public GetRunResponse(String runId, DetectRunStatus status, DeidentifySourceType outputType, List output, Metrics metrics, String message) { + public GetRunResponse(String runId, DetectRunStatus status, DeidentifyFileSource outputType, List output, Metrics metrics, String message) { this.runId = runId; this.status = status; this.outputType = outputType; @@ -37,9 +37,9 @@ public DetectRunStatus getStatus() { } /** - * @return How output files are delivered. Null while the run is pending. + * @return How output files are delivered. Null while the run is pending. A constant of this SDK's {@code DeidentifySourceType}: {@code BASE64} or {@code PRESIGNED_URL}. */ - public DeidentifySourceType getOutputType() { + public DeidentifyFileSource getOutputType() { return outputType; } diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java b/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java index a0de8d17..ec83adba 100644 --- a/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java +++ b/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java @@ -3,12 +3,12 @@ import java.util.List; /** - * Request for {@code reidentifyFile}. Supply the file through exactly one {@link ReidentifySourceType}: - * the base64-encoded content, the skyflow id of a vault record that holds the file, or an S3 - * presigned URL. The vault id is filled in by the controller. + * Request for {@code reidentifyFile}. Supply the file through this SDK's {@code ReidentifySourceType} + * ({@code BASE64} or {@code PRESIGNED_URL}; re-identification does not accept a skyflow id) and the matching + * {@code value}. */ public final class ReidentifyFileRequest { - private final ReidentifySourceType dataSource; + private final ReidentifyFileSource dataSource; private final String value; private final FileDataFormat dataFormat; private final List redactionLevel; @@ -30,12 +30,12 @@ public static ReidentifyFileRequestBuilder builder() { /** * @return How {@code value} supplies the file. Required. */ - public ReidentifySourceType getDataSource() { + public ReidentifyFileSource getDataSource() { return dataSource; } /** - * @return Base64 content, skyflow id or presigned URL of the file, according to {@code dataSource}. Required. + * @return Base64 content or presigned URL of the file, according to {@code dataSource}. Required. */ public String getValue() { return value; @@ -67,7 +67,7 @@ public String toString() { } public static final class ReidentifyFileRequestBuilder { - private ReidentifySourceType dataSource; + private ReidentifyFileSource dataSource; private String value; private FileDataFormat dataFormat; private List redactionLevel; @@ -79,13 +79,13 @@ private ReidentifyFileRequestBuilder() { * @param dataSource How {@code value} supplies the file. Required. * @return this builder */ - public ReidentifyFileRequestBuilder dataSource(ReidentifySourceType dataSource) { + public ReidentifyFileRequestBuilder dataSource(ReidentifyFileSource dataSource) { this.dataSource = dataSource; return this; } /** - * @param value Base64 content, skyflow id or presigned URL of the file, according to {@code dataSource}. Required. + * @param value Base64 content or presigned URL of the file, according to {@code dataSource}. Required. * @return this builder */ public ReidentifyFileRequestBuilder value(String value) { diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java b/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java index a3c445d9..50938fbb 100644 --- a/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java +++ b/common/src/main/java/com/skyflow/detect/ReidentifyFileResponse.java @@ -8,11 +8,11 @@ */ public final class ReidentifyFileResponse { private final DetectRunStatus status; - private final ReidentifySourceType outputType; + private final ReidentifyFileSource outputType; private final List output; private final Metrics metrics; - public ReidentifyFileResponse(DetectRunStatus status, ReidentifySourceType outputType, List output, Metrics metrics) { + public ReidentifyFileResponse(DetectRunStatus status, ReidentifyFileSource outputType, List output, Metrics metrics) { this.status = status; this.outputType = outputType; this.output = output; @@ -27,9 +27,9 @@ public DetectRunStatus getStatus() { } /** - * @return How output files are delivered, or null when not reported. + * @return How output files are delivered, or null when not reported. A constant of this SDK's {@code ReidentifySourceType}: {@code BASE64} or {@code PRESIGNED_URL}. */ - public ReidentifySourceType getOutputType() { + public ReidentifyFileSource getOutputType() { return outputType; } diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyFileSource.java b/common/src/main/java/com/skyflow/detect/ReidentifyFileSource.java new file mode 100644 index 00000000..d0f54ab3 --- /dev/null +++ b/common/src/main/java/com/skyflow/detect/ReidentifyFileSource.java @@ -0,0 +1,14 @@ +package com.skyflow.detect; + +/** + * How the file of {@code reidentifyFile} is supplied, and how its response reports the output. Each SDK ships + * its own {@code com.skyflow.detect.ReidentifySourceType} enum implementing this interface, with {@code BASE64} + * and {@code PRESIGNED_URL} in both SDKs. {@code getOutputType()} on {@code ReidentifyFileResponse} returns a + * constant of that same enum. The constant name is the wire value. + */ +public interface ReidentifyFileSource { + /** + * @return the wire value, which is the constant name + */ + String name(); +} diff --git a/common/src/main/java/com/skyflow/detect/ReidentifySourceType.java b/common/src/main/java/com/skyflow/detect/ReidentifySourceType.java deleted file mode 100644 index 2aa46812..00000000 --- a/common/src/main/java/com/skyflow/detect/ReidentifySourceType.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.detect; - -/** - * How the input file is supplied to {@code reidentifyFile}: base64 content or an S3 presigned URL. - * Re-identification does not accept a skyflow id as the source, so there is no {@code SKYFLOW_ID} here. - */ -public enum ReidentifySourceType { - BASE64, - PRESIGNED_URL; -} diff --git a/common/src/main/java/com/skyflow/detect/internal/DeidentifyFileFlow.java b/common/src/main/java/com/skyflow/detect/internal/DeidentifyFileFlow.java index 4d825983..da64c9b2 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DeidentifyFileFlow.java +++ b/common/src/main/java/com/skyflow/detect/internal/DeidentifyFileFlow.java @@ -1,5 +1,6 @@ package com.skyflow.detect.internal; +import java.io.File; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.DetectRunStatus; @@ -32,8 +33,9 @@ static DeidentifyFileResponse complete(DeidentifyFileRequest request, String run } GetRunResponse run = RunPoller.poll(runId, request.getPollOptions(), fetcher, sleeper); DeidentifyFileResponse response = DetectResponseMapper.toDeidentifyFileResponse(runId, run); - if (response.getStatus() == DetectRunStatus.SUCCESS && request.getFile() != null) { - FileOutputWriter.write(response.getOutput(), response.getOutputType(), request.getFile().getName(), + File localFile = DetectRequestMapper.localFile(request); + if (response.getStatus() == DetectRunStatus.SUCCESS && localFile != null) { + FileOutputWriter.write(response.getOutput(), response.getOutputType(), localFile.getName(), request.getOutputDirectory()); } return response; diff --git a/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java b/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java index ec193539..1039c791 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java @@ -11,7 +11,6 @@ import com.skyflow.detect.Bleep; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CustomType; -import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyStringRequest; import com.skyflow.detect.FileDataFormat; @@ -94,11 +93,23 @@ static boolean sendsConfiguration(String configurationId, DetectConfiguration co * Builds the submit request. For file-based requests this reads and base64-encodes the file and infers * the format from its extension when none was given. */ + /** + * The local file a deidentifyFile request points at, from {@code file} or {@code filePath}, or null for a + * {@code value}-based request. + */ + public static File localFile(DeidentifyFileRequest request) { + if (request.getFile() != null) { + return request.getFile(); + } + String path = request.getFilePath(); + return path == null || path.trim().isEmpty() ? null : new File(path); + } + public static DeidentifyFileRequestV2 toDeidentifyFileRequest(DeidentifyFileRequest request, String vaultId) throws SkyflowException { String value = request.getValue(); FileDataFormat format = request.getDataFormat(); - File file = request.getFile(); + File file = localFile(request); if (file != null) { value = encodeFile(file); if (format == null) { @@ -106,9 +117,11 @@ public static DeidentifyFileRequestV2 toDeidentifyFileRequest(DeidentifyFileRequ } } // A local file is always sent as BASE64, whatever dataSource the builder was left with. - DeidentifySourceType dataSource = file != null ? DeidentifySourceType.BASE64 : request.getDataSource(); + DeidentifyFileRequestV2DataSource dataSource = file != null + ? DeidentifyFileRequestV2DataSource.BASE64 + : DeidentifyFileRequestV2DataSource.valueOf(request.getDataSource().name()); DeidentifyFileRequestV2._FinalStage builder = DeidentifyFileRequestV2.builder() - .dataSource(DeidentifyFileRequestV2DataSource.valueOf(dataSource.name())) + .dataSource(dataSource) .value(value); if (format != null) { // The wire value for a file format is the lower-case extension. diff --git a/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java b/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java index afc1302d..44a9dba6 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/DetectResponseMapper.java @@ -1,7 +1,7 @@ package com.skyflow.detect.internal; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.DeidentifyFileSource; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.DeidentifyStringResponse; import com.skyflow.detect.DetectRunStatus; @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Function; import java.util.Map; /** @@ -81,7 +82,12 @@ public static CheckGuardrailsResponse toCheckGuardrailsResponse(DetectGuardrails response.getDeniedTopic().orElse(null)); } - public static GetRunResponse toGetRunResponse(String runId, DetectRunsResponseV2 response) { + /** + * @param sourceResolver maps the wire outputType onto this SDK's {@code DeidentifySourceType}; returns null for an + * unknown value + */ + public static GetRunResponse toGetRunResponse(String runId, DetectRunsResponseV2 response, + Function sourceResolver) { List outputs = new ArrayList<>(); List apiOutputs = response.getOutput().orElse(null); if (apiOutputs != null) { @@ -95,7 +101,7 @@ public static GetRunResponse toGetRunResponse(String runId, DetectRunsResponseV2 runId, response.getStatus().map(s -> enumOrDefault(DetectRunStatus.class, s.toString(), DetectRunStatus.UNKNOWN)) .orElse(DetectRunStatus.UNKNOWN), - response.getOutputType().map(t -> enumOrDefault(DeidentifySourceType.class, t.toString(), null)).orElse(null), + response.getOutputType().map(t -> sourceResolver.apply(t.toString())).orElse(null), Collections.unmodifiableList(outputs), response.getMetrics().map(DetectResponseMapper::toMetrics).orElse(null), response.getMessage().orElse(null)); diff --git a/common/src/main/java/com/skyflow/detect/internal/DetectValidations.java b/common/src/main/java/com/skyflow/detect/internal/DetectValidations.java index e7b19364..db3345fb 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DetectValidations.java +++ b/common/src/main/java/com/skyflow/detect/internal/DetectValidations.java @@ -13,6 +13,8 @@ import com.skyflow.utils.BaseUtils; import com.skyflow.utils.logger.LogUtil; +import java.io.File; + /** * Client-side validation for Detect V2 requests. Internal to the SDK. @@ -38,20 +40,27 @@ public static void validateDeidentifyFileRequest(DeidentifyFileRequest request) if (request == null) { throw invalid(ErrorLogs.DEIDENTIFY_FILE_REQUEST_NULL, BaseErrorMessage.DeidentifyFileRequestNull); } - if (request.getFile() != null) { - if (!isBlank(request.getValue())) { - throw invalid(ErrorLogs.MULTIPLE_FILE_SOURCES_IN_DEIDENTIFY_FILE, BaseErrorMessage.MultipleFileSourcesInDeidentifyFile); - } - if (!request.getFile().isFile()) { - throw invalid(ErrorLogs.FILE_NOT_FOUND_IN_DEIDENTIFY_FILE, BaseErrorMessage.FileNotFoundToDeidentify); - } - } else { + // The file comes from exactly one of filePath, file or value; dataSource belongs to value only. + int sources = (request.getFilePath() != null ? 1 : 0) + (request.getFile() != null ? 1 : 0) + + (request.getValue() != null ? 1 : 0); + if (sources == 0) { + throw invalid(ErrorLogs.MISSING_FILE_SOURCE_IN_DEIDENTIFY_FILE, BaseErrorMessage.MissingFileSourceInDeidentifyFile); + } + if (sources > 1) { + throw invalid(ErrorLogs.MULTIPLE_FILE_SOURCES_IN_DEIDENTIFY_FILE, BaseErrorMessage.MultipleFileSourcesInDeidentifyFile); + } + if (request.getValue() != null) { if (request.getDataSource() == null) { throw invalid(ErrorLogs.INVALID_DATA_SOURCE_IN_DEIDENTIFY_FILE, BaseErrorMessage.InvalidDataSourceInDeidentifyFile); } if (isBlank(request.getValue())) { throw invalid(ErrorLogs.INVALID_VALUE_IN_DEIDENTIFY_FILE, BaseErrorMessage.InvalidValueInDeidentifyFile); } + } else { + File file = DetectRequestMapper.localFile(request); + if (file == null || !file.isFile()) { + throw invalid(ErrorLogs.FILE_NOT_FOUND_IN_DEIDENTIFY_FILE, BaseErrorMessage.FileNotFoundToDeidentify); + } } // configurationId and configuration are both optional on the API and are passed through as given; // with neither set the mapper sends a configuration carrying only the vault id. diff --git a/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java b/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java index 2477e7ed..73261728 100644 --- a/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java +++ b/common/src/main/java/com/skyflow/detect/internal/FileOutputWriter.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.DeidentifyFileSource; import com.skyflow.detect.FileOutput; import com.skyflow.errors.BaseErrorMessage; import com.skyflow.errors.SkyflowException; @@ -40,13 +40,13 @@ private FileOutputWriter() { * @return the files written, in output order; empty when the output type is not BASE64 * @throws SkyflowException if the directory cannot be created or a file cannot be decoded or written */ - public static List write(List outputs, DeidentifySourceType outputType, String inputFileName, + public static List write(List outputs, DeidentifyFileSource outputType, String inputFileName, String outputDirectory) throws SkyflowException { List written = new ArrayList<>(); if (outputs == null || outputs.isEmpty()) { return written; } - if (outputType != DeidentifySourceType.BASE64) { + if (outputType == null || !"BASE64".equals(outputType.name())) { LogUtil.printInfoLog(BaseUtils.parameterizedString(InfoLogs.OUTPUT_NOT_WRITTEN_FOR_OUTPUT_TYPE.getLog(), String.valueOf(outputType))); return written; diff --git a/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java b/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java index 346066b7..73448a3a 100644 --- a/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/ReidentifyFileMapper.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.ReidentifySourceType; +import com.skyflow.detect.ReidentifyFileSource; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileOutput; import com.skyflow.detect.ReidentifyFileRequest; @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Function; /** * Converts the flowvault {@code reidentifyFile} models to and from the generated V2 API types. @@ -37,7 +38,12 @@ public static ReidentifyFileRequestV2 toApiRequest(ReidentifyFileRequest request return builder.build(); } - public static ReidentifyFileResponse toResponse(ReidentifyFileResponseV2 response) { + /** + * @param sourceResolver maps the wire outputType onto this SDK's {@code ReidentifySourceType}; returns null for an + * unknown value + */ + public static ReidentifyFileResponse toResponse(ReidentifyFileResponseV2 response, + Function sourceResolver) { List outputs = new ArrayList<>(); List apiOutputs = response.getOutput().orElse(null); if (apiOutputs != null) { @@ -50,7 +56,7 @@ public static ReidentifyFileResponse toResponse(ReidentifyFileResponseV2 respons return new ReidentifyFileResponse( response.getStatus().map(s -> enumOrDefault(DetectRunStatus.class, s.toString(), DetectRunStatus.UNKNOWN)) .orElse(DetectRunStatus.UNKNOWN), - response.getOutputType().map(t -> enumOrDefault(ReidentifySourceType.class, t.toString(), null)).orElse(null), + response.getOutputType().map(t -> sourceResolver.apply(t.toString())).orElse(null), Collections.unmodifiableList(outputs), response.getMetrics().map(DetectResponseMapper::toMetrics).orElse(null)); } diff --git a/common/src/main/java/com/skyflow/errors/BaseErrorMessage.java b/common/src/main/java/com/skyflow/errors/BaseErrorMessage.java index ff51fb89..b3eb34c7 100644 --- a/common/src/main/java/com/skyflow/errors/BaseErrorMessage.java +++ b/common/src/main/java/com/skyflow/errors/BaseErrorMessage.java @@ -184,17 +184,18 @@ public enum BaseErrorMessage { ReidentifyStringRequestNull("%s0 Validation error. ReidentifyString request cannot be null."), InvalidTextInReidentifyString("%s0 Validation error. Invalid text in reidentify string request. Specify a non-empty text."), DeidentifyFileRequestNull("%s0 Validation error. DeidentifyFile request cannot be null."), - InvalidDataSourceInDeidentifyFile("%s0 Validation error. Invalid dataSource in deidentify file request. Specify BASE64, SKYFLOW_ID or PRESIGNED_URL, or supply a file."), - InvalidValueInDeidentifyFile("%s0 Validation error. Invalid value in deidentify file request. Specify the non-empty base64 content, skyflow id or presigned URL of the file, or supply a file."), - MultipleFileSourcesInDeidentifyFile("%s0 Validation error. Specify either value or file in deidentify file request, not both."), + InvalidDataSourceInDeidentifyFile("%s0 Validation error. Invalid dataSource in deidentify file request. Specify a DeidentifySourceType."), + InvalidValueInDeidentifyFile("%s0 Validation error. Invalid value in deidentify file request. Specify the non-empty content or reference that dataSource describes."), + MultipleFileSourcesInDeidentifyFile("%s0 Validation error. Specify only one of filePath, file or value in deidentify file request."), + MissingFileSourceInDeidentifyFile("%s0 Validation error. Specify one of filePath, file or value in deidentify file request."), InvalidWaitTimeInPollOptions("%s0 Validation error. waitTime in pollOptions must be between 1 and 300 seconds."), InvalidMaxAttemptsInPollOptions("%s0 Validation error. maxAttempts in pollOptions must be between 1 and 23."), OutputDirectoryWithoutPollOptions("%s0 Validation error. outputDirectory in deidentify file request requires pollOptions."), FailedToWriteOutputFile("%s0 Failed to write the processed output to %s1."), GetRunRequestNull("%s0 Validation error. GetRun request cannot be null."), ReidentifyFileRequestNull("%s0 Validation error. ReidentifyFile request cannot be null."), - InvalidDataSourceInReidentifyFile("%s0 Validation error. Invalid dataSource in reidentify file request. Specify BASE64, SKYFLOW_ID or PRESIGNED_URL."), - InvalidValueInReidentifyFile("%s0 Validation error. Invalid value in reidentify file request. Specify the non-empty base64 content, skyflow id or presigned URL of the file."), + InvalidDataSourceInReidentifyFile("%s0 Validation error. Invalid dataSource in reidentify file request. Specify a ReidentifySourceType."), + InvalidValueInReidentifyFile("%s0 Validation error. Invalid value in reidentify file request. Specify the non-empty base64 content or presigned URL of the file."), InvalidRunIdInGetRun("%s0 Validation error. Invalid runId in get run request. Specify a non-empty run id."), CheckGuardrailsRequestNull("%s0 Validation error. CheckGuardrails request cannot be null."), InvalidTextInCheckGuardrails("%s0 Validation error. Invalid text in check guardrails request. Specify a non-empty text."), diff --git a/common/src/main/java/com/skyflow/logs/ErrorLogs.java b/common/src/main/java/com/skyflow/logs/ErrorLogs.java index 154c26e8..5d5ce098 100644 --- a/common/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/common/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -14,9 +14,10 @@ public enum ErrorLogs { INVALID_TEXT_IN_REIDENTIFY_STRING("Invalid %s1 request. The text field is required and must be a non-empty string. Specify a valid text."), REIDENTIFY_STRING_REQUEST_REJECTED("ReIdentify string request resulted in failure."), DEIDENTIFY_FILE_REQUEST_NULL("Invalid %s1 request. DeidentifyFile request can not be null."), - INVALID_DATA_SOURCE_IN_DEIDENTIFY_FILE("Invalid %s1 request. The dataSource field is required unless a file is supplied."), - INVALID_VALUE_IN_DEIDENTIFY_FILE("Invalid %s1 request. The value field is required and must be a non-empty string unless a file is supplied."), - MULTIPLE_FILE_SOURCES_IN_DEIDENTIFY_FILE("Invalid %s1 request. Specify either value or file, not both."), + INVALID_DATA_SOURCE_IN_DEIDENTIFY_FILE("Invalid %s1 request. The dataSource field is required with value. Specify a DeidentifySourceType."), + INVALID_VALUE_IN_DEIDENTIFY_FILE("Invalid %s1 request. The value field must be a non-empty string."), + MULTIPLE_FILE_SOURCES_IN_DEIDENTIFY_FILE("Invalid %s1 request. Specify only one of filePath, file or value."), + MISSING_FILE_SOURCE_IN_DEIDENTIFY_FILE("Invalid %s1 request. Specify one of filePath, file or value."), FILE_NOT_FOUND_IN_DEIDENTIFY_FILE("Invalid %s1 request. The file to deidentify was not found."), FAILED_TO_ENCODE_FILE_IN_DEIDENTIFY_FILE("Invalid %s1 request. Failed to read and encode the file to deidentify."), INVALID_WAIT_TIME_IN_POLL_OPTIONS("Invalid %s1 request. waitTime in pollOptions must be between 1 and 300."), @@ -26,8 +27,8 @@ public enum ErrorLogs { OUTPUT_DIRECTORY_NOT_CREATED("Could not create output directory %s1."), OUTPUT_FILE_NOT_WRITTEN("Could not write processed output to %s1."), REIDENTIFY_FILE_REQUEST_NULL("Invalid %s1 request. ReidentifyFile request can not be null."), - INVALID_DATA_SOURCE_IN_REIDENTIFY_FILE("Invalid %s1 request. The dataSource field is required. Specify BASE64, SKYFLOW_ID or PRESIGNED_URL."), - INVALID_VALUE_IN_REIDENTIFY_FILE("Invalid %s1 request. The value field is required and must be a non-empty string. Specify the base64 content, skyflow id or presigned URL of the file."), + INVALID_DATA_SOURCE_IN_REIDENTIFY_FILE("Invalid %s1 request. The dataSource field is required. Specify a ReidentifySourceType."), + INVALID_VALUE_IN_REIDENTIFY_FILE("Invalid %s1 request. The value field is required and must be a non-empty string. Specify the base64 content or presigned URL of the file."), REIDENTIFY_FILE_REQUEST_REJECTED("ReIdentify file request resulted in failure."), // Client initialization VAULT_CONFIG_EXISTS("Vault config with vault ID %s1 already exists."), diff --git a/common/src/main/java/com/skyflow/vault/controller/BaseDetectController.java b/common/src/main/java/com/skyflow/vault/controller/BaseDetectController.java index dc605441..aacb2c53 100644 --- a/common/src/main/java/com/skyflow/vault/controller/BaseDetectController.java +++ b/common/src/main/java/com/skyflow/vault/controller/BaseDetectController.java @@ -6,6 +6,8 @@ import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; import com.skyflow.detect.DeidentifyFileRequest; +import com.skyflow.detect.ReidentifyFileSource; +import com.skyflow.detect.DeidentifyFileSource; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.DeidentifyStringRequest; import com.skyflow.detect.DeidentifyStringResponse; @@ -89,6 +91,35 @@ protected BaseDetectController(V vaultConfig, BaseCredentials credentials) { */ protected abstract String resolveVaultUrl() throws SkyflowException; + /** + * Maps a run's wire {@code outputType} onto this SDK's {@code DeidentifySourceType}, so that + * {@code getOutputType()} returns the same enum the caller used on the request. + * + * @param wireValue the API value, for example {@code BASE64} + * @return the matching constant, or null for a value this SDK does not know + */ + protected abstract DeidentifyFileSource toDeidentifySource(String wireValue); + + /** + * Maps a re-identify response's wire {@code outputType} onto this SDK's {@code ReidentifySourceType}. + * + * @param wireValue the API value, for example {@code BASE64} + * @return the matching constant, or null for a value this SDK does not know + */ + protected abstract ReidentifyFileSource toReidentifySource(String wireValue); + + /** {@link Enum#valueOf} that returns null instead of throwing for an unknown wire value. */ + protected static > E enumOrNull(Class type, String wireValue) { + if (wireValue == null) { + return null; + } + try { + return Enum.valueOf(type, wireValue); + } catch (IllegalArgumentException unknown) { + return null; + } + } + /** * @return JSON sent in the {@code sky-metadata} header. Override to report SDK name and version. */ @@ -271,7 +302,7 @@ public DeidentifyFileResponse deidentifyFile(DeidentifyFileRequest request) thro * Replaces tokens in a file with their original values or a redacted rendering. Synchronous: * the re-identified file is returned in the response rather than through a run id. * - * @param request the file (base64, skyflow id or presigned URL) plus optional per-group redaction rules + * @param request the file (base64 or presigned URL) plus optional per-group redaction rules * @return status, output files and metrics * @throws SkyflowException on validation failure, credential failure or an API error */ @@ -284,7 +315,7 @@ public ReidentifyFileResponse reidentifyFile(ReidentifyFileRequest request) thro try { ReidentifyFileResponseV2 apiResponse = filesClient().reidentifyFileV2(apiRequest, requestOptions(token)); LogUtil.printInfoLog(InfoLogs.REIDENTIFY_FILE_REQUEST_RESOLVED.getLog()); - ReidentifyFileResponse response = ReidentifyFileMapper.toResponse(apiResponse); + ReidentifyFileResponse response = ReidentifyFileMapper.toResponse(apiResponse, this::toReidentifySource); LogUtil.printInfoLog(InfoLogs.REIDENTIFY_FILE_SUCCESS.getLog()); return response; } catch (ApiClientApiException e) { @@ -312,7 +343,7 @@ public GetRunResponse getRun(GetRunRequest request) throws SkyflowException { try { DetectRunsResponseV2 apiResponse = filesClient().getRunV2(runId, apiRequest, requestOptions(token)); LogUtil.printInfoLog(InfoLogs.GET_RUN_REQUEST_RESOLVED.getLog()); - GetRunResponse response = DetectResponseMapper.toGetRunResponse(runId, apiResponse); + GetRunResponse response = DetectResponseMapper.toGetRunResponse(runId, apiResponse, this::toDeidentifySource); LogUtil.printInfoLog(InfoLogs.GET_RUN_SUCCESS.getLog()); return response; } catch (ApiClientApiException e) { diff --git a/common/src/test/java/com/skyflow/detect/TestDeidentifySource.java b/common/src/test/java/com/skyflow/detect/TestDeidentifySource.java new file mode 100644 index 00000000..471356fc --- /dev/null +++ b/common/src/test/java/com/skyflow/detect/TestDeidentifySource.java @@ -0,0 +1,16 @@ +package com.skyflow.detect; + +/** Test stand-in for the per-SDK {@code DeidentifySourceType} enums, which common cannot see. Carries every API value. */ +public enum TestDeidentifySource implements DeidentifyFileSource { + BASE64, + SKYFLOW_ID, + PRESIGNED_URL; + + public static TestDeidentifySource fromWire(String wireValue) { + try { + return wireValue == null ? null : valueOf(wireValue); + } catch (IllegalArgumentException unknown) { + return null; + } + } +} diff --git a/common/src/test/java/com/skyflow/detect/TestReidentifySource.java b/common/src/test/java/com/skyflow/detect/TestReidentifySource.java new file mode 100644 index 00000000..bba36ebc --- /dev/null +++ b/common/src/test/java/com/skyflow/detect/TestReidentifySource.java @@ -0,0 +1,15 @@ +package com.skyflow.detect; + +/** Test stand-in for the per-SDK {@code ReidentifySourceType} enums, which common cannot see. */ +public enum TestReidentifySource implements ReidentifyFileSource { + BASE64, + PRESIGNED_URL; + + public static TestReidentifySource fromWire(String wireValue) { + try { + return wireValue == null ? null : valueOf(wireValue); + } catch (IllegalArgumentException unknown) { + return null; + } + } +} diff --git a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java index 756476b8..fa3008da 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileFlowTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.TestDeidentifySource; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.DetectRunStatus; @@ -30,10 +30,10 @@ public class DeidentifyFileFlowTests { private static final RunPoller.Sleeper NO_SLEEP = millis -> { }; private static GetRunResponse success() { - return success(DeidentifySourceType.BASE64); + return success(TestDeidentifySource.BASE64); } - private static GetRunResponse success(DeidentifySourceType outputType) { + private static GetRunResponse success(TestDeidentifySource outputType) { return new GetRunResponse("run-1", DetectRunStatus.SUCCESS, outputType, Arrays.asList( new FileOutput(Base64.getEncoder().encodeToString("redacted".getBytes()), @@ -47,7 +47,7 @@ private static GetRunResponse success(DeidentifySourceType outputType) { public void withoutPollOptionsReturnsRunIdAndNeverFetches() throws Exception { AtomicInteger fetches = new AtomicInteger(); DeidentifyFileResponse response = DeidentifyFileFlow.complete( - DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.BASE64).value("x").build(), "run-1", + DeidentifyFileRequest.builder().dataSource(TestDeidentifySource.BASE64).value("x").build(), "run-1", id -> { fetches.incrementAndGet(); return success(); }, NO_SLEEP); Assert.assertEquals("run-1", response.getRunId()); Assert.assertNull(response.getStatus()); @@ -59,7 +59,7 @@ public void withoutPollOptionsReturnsRunIdAndNeverFetches() throws Exception { public void missingRunIdSkipsPollingEvenWhenRequested() throws Exception { AtomicInteger fetches = new AtomicInteger(); DeidentifyFileResponse response = DeidentifyFileFlow.complete( - DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.BASE64).value("x") + DeidentifyFileRequest.builder().dataSource(TestDeidentifySource.BASE64).value("x") .pollOptions(PollOptions.builder().build()).build(), null, id -> { fetches.incrementAndGet(); return success(); }, NO_SLEEP); Assert.assertNull(response.getRunId()); @@ -70,7 +70,7 @@ public void missingRunIdSkipsPollingEvenWhenRequested() throws Exception { @Test public void polledRawRequestMergesRunButWritesNothing() throws Exception { DeidentifyFileResponse response = DeidentifyFileFlow.complete( - DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec") + DeidentifyFileRequest.builder().dataSource(TestDeidentifySource.SKYFLOW_ID).value("rec") .pollOptions(PollOptions.builder().build()).outputDirectory(folder.getRoot().getPath()).build(), "run-1", id -> success(), NO_SLEEP); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); @@ -108,10 +108,10 @@ public void polledFileRequestWritesNothingForPresignedUrlOutputs() throws Except DeidentifyFileResponse response = DeidentifyFileFlow.complete( DeidentifyFileRequest.builder().file(input).pollOptions(PollOptions.builder().build()) .outputDirectory(outDir.getPath()).build(), - "run-1", id -> success(DeidentifySourceType.PRESIGNED_URL), NO_SLEEP); + "run-1", id -> success(TestDeidentifySource.PRESIGNED_URL), NO_SLEEP); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DeidentifySourceType.PRESIGNED_URL, response.getOutputType()); + Assert.assertEquals(TestDeidentifySource.PRESIGNED_URL, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); Assert.assertEquals(0, outDir.list().length); } diff --git a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java index 079adca0..90866595 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileMapperTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.TestDeidentifySource; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.DeidentifyFileResponse; import com.skyflow.detect.Detect; @@ -37,7 +37,7 @@ private static String wire(DeidentifyFileRequestV2 request) throws Exception { @Test public void mapsRawValueRequest() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec-1").configurationId("cfg-1").build(), "vault-1"); + .dataSource(TestDeidentifySource.SKYFLOW_ID).value("rec-1").configurationId("cfg-1").build(), "vault-1"); Assert.assertEquals("SKYFLOW_ID", api.getDataSource().toString()); Assert.assertEquals("rec-1", api.getValue()); Assert.assertEquals("cfg-1", api.getConfigurationId().get()); @@ -53,14 +53,14 @@ public void mapsRawValueRequest() throws Exception { @Test public void dataFormatIsSentLowerCase() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DeidentifySourceType.PRESIGNED_URL).value("https://s3/in").dataFormat(FileDataFormat.PDF).build(), "v"); + .dataSource(TestDeidentifySource.PRESIGNED_URL).value("https://s3/in").dataFormat(FileDataFormat.PDF).build(), "v"); Assert.assertTrue(wire(api).contains("\"dataFormat\":\"pdf\"")); } @Test public void noConfigurationSendsVaultIdOnlyConfiguration() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DeidentifySourceType.BASE64).value("aGVsbG8=").build(), "vault-1"); + .dataSource(TestDeidentifySource.BASE64).value("aGVsbG8=").build(), "vault-1"); Assert.assertFalse(api.getConfigurationId().isPresent()); Assert.assertEquals("vault-1", api.getConfiguration().get().getVaultId()); Assert.assertFalse(api.getConfiguration().get().getDetect().isPresent()); @@ -71,7 +71,7 @@ public void noConfigurationSendsVaultIdOnlyConfiguration() throws Exception { @Test public void storedConfigurationIdSendsNoConfiguration() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DeidentifySourceType.BASE64).value("aGVsbG8=").configurationId("cfg-1").build(), "vault-1"); + .dataSource(TestDeidentifySource.BASE64).value("aGVsbG8=").configurationId("cfg-1").build(), "vault-1"); Assert.assertEquals("cfg-1", api.getConfigurationId().get()); Assert.assertFalse(api.getConfiguration().isPresent()); } @@ -79,7 +79,7 @@ public void storedConfigurationIdSendsNoConfiguration() throws Exception { @Test public void inlineConfigurationGetsVaultId() throws Exception { DeidentifyFileRequestV2 api = DetectRequestMapper.toDeidentifyFileRequest(DeidentifyFileRequest.builder() - .dataSource(DeidentifySourceType.BASE64).value("Zm9v") + .dataSource(TestDeidentifySource.BASE64).value("Zm9v") .configuration(DetectConfiguration.builder().detect(Detect.builder().entities(Collections.singletonList( Entity.builder().entityType(EntityType.NAME).build())).build()).build()) .build(), "vault-9"); @@ -153,11 +153,11 @@ public void polledResponseMergesRunIdWithRun() throws Exception { "{\"status\":\"SUCCESS\",\"outputType\":\"BASE64\",\"output\":[{\"processedFile\":\"UERG\"," + "\"processedFileType\":\"REDACTED_FILE\",\"processedFileExtension\":\"pdf\"}],\"metrics\":{\"pages\":2}}", DetectRunsResponseV2.class); - GetRunResponse run = DetectResponseMapper.toGetRunResponse("run-7", api); + GetRunResponse run = DetectResponseMapper.toGetRunResponse("run-7", api, TestDeidentifySource::fromWire); DeidentifyFileResponse response = DetectResponseMapper.toDeidentifyFileResponse("run-7", run); Assert.assertEquals("run-7", response.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DeidentifySourceType.BASE64, response.getOutputType()); + Assert.assertEquals(TestDeidentifySource.BASE64, response.getOutputType()); Assert.assertEquals("UERG", response.getOutput().get(0).getProcessedFile()); Assert.assertEquals(FileDataFormat.PDF, response.getOutput().get(0).getProcessedFileExtension()); Assert.assertEquals(Integer.valueOf(2), response.getMetrics().getPages()); diff --git a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java index b0723bbe..99567356 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DeidentifyFileValidationsTests.java @@ -1,7 +1,7 @@ package com.skyflow.detect.internal; +import com.skyflow.detect.TestDeidentifySource; -import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentifyFileRequest; import com.skyflow.detect.PollOptions; import com.skyflow.errors.BaseErrorMessage; @@ -31,7 +31,7 @@ private static void assertRejected(DeidentifyFileRequest request, BaseErrorMessa } private static DeidentifyFileRequest.DeidentifyFileRequestBuilder raw() { - return DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.BASE64).value("Zm9v"); + return DeidentifyFileRequest.builder().dataSource(TestDeidentifySource.BASE64).value("Zm9v"); } @Test @@ -42,7 +42,7 @@ public void rejectsNullRequest() { @Test public void rawValueRequiresDataSourceAndValue() throws SkyflowException { assertRejected(DeidentifyFileRequest.builder().value("x").build(), BaseErrorMessage.InvalidDataSourceInDeidentifyFile); - assertRejected(DeidentifyFileRequest.builder().dataSource(DeidentifySourceType.SKYFLOW_ID).build(), BaseErrorMessage.InvalidValueInDeidentifyFile); + assertRejected(raw().value("").build(), BaseErrorMessage.InvalidValueInDeidentifyFile); assertRejected(raw().value(" ").build(), BaseErrorMessage.InvalidValueInDeidentifyFile); DetectValidations.validateDeidentifyFileRequest(raw().build()); DetectValidations.validateDeidentifyFileRequest(raw().configurationId("cfg").build()); @@ -61,6 +61,25 @@ public void fileRequestsNeedAnExistingFileAndNoValue() throws Exception { assertRejected(DeidentifyFileRequest.builder().file(folder.getRoot()).build(), BaseErrorMessage.FileNotFoundToDeidentify); } + @Test + public void exactlyOneOfFilePathFileOrValueIsRequired() throws Exception { + File existing = folder.newFile("one.txt"); + Files.write(existing.toPath(), "hello".getBytes("UTF-8")); + String path = existing.getPath(); + + assertRejected(DeidentifyFileRequest.builder().build(), BaseErrorMessage.MissingFileSourceInDeidentifyFile); + assertRejected(DeidentifyFileRequest.builder().dataSource(TestDeidentifySource.SKYFLOW_ID).build(), BaseErrorMessage.MissingFileSourceInDeidentifyFile); + + assertRejected(DeidentifyFileRequest.builder().file(existing).filePath(path).build(), BaseErrorMessage.MultipleFileSourcesInDeidentifyFile); + assertRejected(DeidentifyFileRequest.builder().filePath(path).value("Zm9v").build(), BaseErrorMessage.MultipleFileSourcesInDeidentifyFile); + assertRejected(DeidentifyFileRequest.builder().file(existing).value("").build(), BaseErrorMessage.MultipleFileSourcesInDeidentifyFile); + assertRejected(DeidentifyFileRequest.builder().file(existing).filePath(path).value("Zm9v").build(), BaseErrorMessage.MultipleFileSourcesInDeidentifyFile); + + // dataSource alongside a local file is tolerated: the file is always sent as BASE64 + DetectValidations.validateDeidentifyFileRequest(DeidentifyFileRequest.builder().filePath(path).dataSource(TestDeidentifySource.PRESIGNED_URL).build()); + assertRejected(DeidentifyFileRequest.builder().filePath(" ").build(), BaseErrorMessage.FileNotFoundToDeidentify); + } + @Test public void pollOptionsBoundsAreEnforced() throws SkyflowException { DetectValidations.validateDeidentifyFileRequest(raw().pollOptions(PollOptions.builder().build()).build()); diff --git a/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java index 173bf0b3..8909509c 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DetectResponseMapperTests.java @@ -1,7 +1,7 @@ package com.skyflow.detect.internal; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.TestDeidentifySource; import com.skyflow.detect.DeidentifyStringResponse; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.FileDataFormat; @@ -61,7 +61,7 @@ public void nullListElementsFromTheApiAreSkipped() throws Exception { DetectRunsResponseV2 run = ObjectMappers.JSON_MAPPER.readValue( "{\"status\":\"SUCCESS\",\"output\":[null,{\"processedFile\":\"x\"}]}", DetectRunsResponseV2.class); - Assert.assertEquals(1, DetectResponseMapper.toGetRunResponse("r", run).getOutput().size()); + Assert.assertEquals(1, DetectResponseMapper.toGetRunResponse("r", run, TestDeidentifySource::fromWire).getOutput().size()); } @Test @@ -99,10 +99,10 @@ public void mapsCompletedRun() throws Exception { "{\"status\":\"SUCCESS\",\"outputType\":\"PRESIGNED_URL\",\"output\":[{\"processedFile\":\"https://x/y.pdf\"," + "\"processedFileType\":\"REDACTED_FILE\",\"processedFileExtension\":\"pdf\"}],\"metrics\":{\"pages\":2}}", DetectRunsResponseV2.class); - GetRunResponse run = DetectResponseMapper.toGetRunResponse("run-1", api); + GetRunResponse run = DetectResponseMapper.toGetRunResponse("run-1", api, TestDeidentifySource::fromWire); Assert.assertEquals("run-1", run.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, run.getStatus()); - Assert.assertEquals(DeidentifySourceType.PRESIGNED_URL, run.getOutputType()); + Assert.assertEquals(TestDeidentifySource.PRESIGNED_URL, run.getOutputType()); Assert.assertEquals("https://x/y.pdf", run.getOutput().get(0).getProcessedFile()); Assert.assertEquals(FileDataFormat.PDF, run.getOutput().get(0).getProcessedFileExtension()); Assert.assertEquals(Integer.valueOf(2), run.getMetrics().getPages()); @@ -111,14 +111,14 @@ public void mapsCompletedRun() throws Exception { @Test public void runWithoutStatusIsUnknownAndUnknownWireValuesAreTolerated() throws Exception { GetRunResponse empty = DetectResponseMapper.toGetRunResponse("r", - ObjectMappers.JSON_MAPPER.readValue("{}", DetectRunsResponseV2.class)); + ObjectMappers.JSON_MAPPER.readValue("{}", DetectRunsResponseV2.class), TestDeidentifySource::fromWire); Assert.assertEquals(DetectRunStatus.UNKNOWN, empty.getStatus()); Assert.assertTrue(empty.getOutput().isEmpty()); Assert.assertNull(empty.getOutputType()); GetRunResponse odd = DetectResponseMapper.toGetRunResponse("r", ObjectMappers.JSON_MAPPER.readValue( "{\"status\":\"NEW_STATE\",\"outputType\":\"FTP\",\"output\":[{\"processedFileExtension\":\"heic\"}]}", - DetectRunsResponseV2.class)); + DetectRunsResponseV2.class), TestDeidentifySource::fromWire); Assert.assertEquals(DetectRunStatus.UNKNOWN, odd.getStatus()); Assert.assertNull(odd.getOutputType()); Assert.assertNull(odd.getOutput().get(0).getProcessedFileExtension()); diff --git a/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java b/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java index 7bd00f7d..a955266c 100644 --- a/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/FileOutputWriterTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.TestDeidentifySource; import com.skyflow.detect.FileDataFormat; import com.skyflow.detect.FileOutput; import com.skyflow.errors.SkyflowException; @@ -30,7 +30,7 @@ public void writesEachOutputWithV1StyleNames() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("%PDF"), "REDACTED_FILE", FileDataFormat.PDF), new FileOutput(b64("[]"), "ENTITIES", null)), - DeidentifySourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "invoice.pdf", folder.getRoot().getPath()); Assert.assertEquals(2, written.size()); Assert.assertEquals("processed-invoice.pdf", written.get(0).getName()); @@ -45,7 +45,7 @@ public void entityOutputsCarryTheirTypeInTheName() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "ENTITIES", FileDataFormat.JSON), new FileOutput(b64("b"), "OBJECT_ENTITIES", FileDataFormat.JSON)), - DeidentifySourceType.BASE64, "scan.png", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "scan.png", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-scan.json", written.get(0).getName()); Assert.assertEquals("processed-object-entities-scan.json", written.get(1).getName()); } @@ -55,7 +55,7 @@ public void jsonInputDoesNotCollideWithItsEntitiesOutput() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("{}"), "REDACTED_TEXT", FileDataFormat.JSON), new FileOutput(b64("[]"), "ENTITIES", FileDataFormat.JSON)), - DeidentifySourceType.BASE64, "data.json", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "data.json", folder.getRoot().getPath()); Assert.assertEquals("processed-data.json", written.get(0).getName()); Assert.assertEquals("processed-entities-data.json", written.get(1).getName()); } @@ -65,7 +65,7 @@ public void nameCollisionsGetTheFileTypeInserted() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "REDACTED_FILE", FileDataFormat.TXT), new FileOutput(b64("b"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-notes.txt", written.get(0).getName()); Assert.assertEquals("processed-notes.redacted_text.txt", written.get(1).getName()); } @@ -75,7 +75,7 @@ public void createsMissingOutputDirectory() throws Exception { File nested = new File(folder.getRoot(), "a/b/c"); List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", nested.getPath()); + TestDeidentifySource.BASE64, "notes.txt", nested.getPath()); Assert.assertTrue(nested.isDirectory()); Assert.assertEquals(new File(nested, "processed-notes.txt"), written.get(0)); } @@ -84,24 +84,24 @@ public void createsMissingOutputDirectory() throws Exception { public void presignedUrlOutputsAreNotWritten() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput("https://s3/out", "REDACTED_FILE", FileDataFormat.PDF)), - DeidentifySourceType.PRESIGNED_URL, "invoice.pdf", folder.getRoot().getPath()); + TestDeidentifySource.PRESIGNED_URL, "invoice.pdf", folder.getRoot().getPath()); Assert.assertTrue(written.isEmpty()); Assert.assertEquals(0, folder.getRoot().list().length); } @Test public void emptyOrNullOutputsWriteNothing() throws Exception { - Assert.assertTrue(FileOutputWriter.write(null, DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); - Assert.assertTrue(FileOutputWriter.write(Collections.emptyList(), DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); + Assert.assertTrue(FileOutputWriter.write(null, TestDeidentifySource.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); + Assert.assertTrue(FileOutputWriter.write(Collections.emptyList(), TestDeidentifySource.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); Assert.assertTrue(FileOutputWriter.write(Collections.singletonList(new FileOutput(null, "ENTITIES", null)), - DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); + TestDeidentifySource.BASE64, "x.txt", folder.getRoot().getPath()).isEmpty()); } @Test public void invalidBase64IsReportedAsWriteFailure() { try { FileOutputWriter.write(Collections.singletonList(new FileOutput("not base64!", "REDACTED_FILE", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "x.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "x.txt", folder.getRoot().getPath()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("processed-x.txt")); @@ -115,7 +115,7 @@ public void nullOrEmptyTypeFallsBackToPlainName() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), null, FileDataFormat.PDF), new FileOutput(b64("b"), "", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "invoice.pdf", folder.getRoot().getPath()); Assert.assertEquals("processed-invoice.pdf", written.get(0).getName()); Assert.assertEquals("processed-invoice.txt", written.get(1).getName()); } @@ -124,7 +124,7 @@ public void nullOrEmptyTypeFallsBackToPlainName() throws Exception { public void nonEntityOutputWithoutExtensionGetsBin() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TRANSCRIPTION", null)), - DeidentifySourceType.BASE64, "call.mp3", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "call.mp3", folder.getRoot().getPath()); Assert.assertEquals("processed-call.bin", written.get(0).getName()); } @@ -132,7 +132,7 @@ public void nonEntityOutputWithoutExtensionGetsBin() throws Exception { public void entityOutputHonoursAnExplicitExtension() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "ENTITIES", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-notes.txt", written.get(0).getName()); } @@ -140,7 +140,7 @@ public void entityOutputHonoursAnExplicitExtension() throws Exception { public void entityTypeMatchIsCaseInsensitive() throws Exception { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "entities", null)), - DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-notes.json", written.get(0).getName()); } @@ -149,7 +149,7 @@ public void duplicateEntityOutputsGetTheTypeInsertedOnCollision() throws Excepti List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "ENTITIES", FileDataFormat.JSON), new FileOutput(b64("b"), "ENTITIES", FileDataFormat.JSON)), - DeidentifySourceType.BASE64, "scan.png", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "scan.png", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-scan.json", written.get(0).getName()); Assert.assertEquals("processed-entities-scan.entities.json", written.get(1).getName()); } @@ -160,7 +160,7 @@ public void collisionWithoutATypeUsesARunningNumber() throws Exception { new FileOutput(b64("a"), null, FileDataFormat.TXT), new FileOutput(b64("b"), null, FileDataFormat.TXT), new FileOutput(b64("c"), null, FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("processed-notes.txt", written.get(0).getName()); Assert.assertEquals("processed-notes.1.txt", written.get(1).getName()); Assert.assertEquals("processed-notes.2.txt", written.get(2).getName()); @@ -170,12 +170,12 @@ public void collisionWithoutATypeUsesARunningNumber() throws Exception { public void inputNamesWithoutAnExtensionOrWithLeadingDotAreKept() throws Exception { List plain = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "ENTITIES", null)), - DeidentifySourceType.BASE64, "README", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "README", folder.getRoot().getPath()); Assert.assertEquals("processed-entities-README.json", plain.get(0).getName()); List dotted = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, ".notes", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, ".notes", folder.getRoot().getPath()); Assert.assertEquals("processed-.notes.txt", dotted.get(0).getName()); } @@ -184,7 +184,7 @@ public void missingInputNameFallsBackToOutput() throws Exception { List written = FileOutputWriter.write(Arrays.asList( new FileOutput(b64("a"), "REDACTED_FILE", FileDataFormat.PDF), new FileOutput(b64("b"), "ENTITIES", null)), - DeidentifySourceType.BASE64, null, folder.getRoot().getPath()); + TestDeidentifySource.BASE64, null, folder.getRoot().getPath()); Assert.assertEquals("processed-output.pdf", written.get(0).getName()); Assert.assertEquals("processed-entities-output.json", written.get(1).getName()); } @@ -205,7 +205,7 @@ public void nullElementsInTheOutputListAreSkipped() throws Exception { List written = FileOutputWriter.write(Arrays.asList( null, new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals(1, written.size()); Assert.assertEquals("processed-notes.txt", written.get(0).getName()); } @@ -216,7 +216,7 @@ public void blankOutputDirectoryWritesToTheWorkingDirectory() throws Exception { try { List written = FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "writer-cwd-test.txt", " "); + TestDeidentifySource.BASE64, "writer-cwd-test.txt", " "); Assert.assertEquals(expected, written.get(0)); Assert.assertNull(written.get(0).getParentFile()); Assert.assertTrue(expected.isFile()); @@ -231,7 +231,7 @@ public void outputDirectoryThatIsAFileIsReportedAsWriteFailure() throws Exceptio try { FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("x"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", notADirectory.getPath()); + TestDeidentifySource.BASE64, "notes.txt", notADirectory.getPath()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains(notADirectory.getPath())); @@ -244,7 +244,7 @@ public void existingFilesAreOverwritten() throws Exception { Files.write(target.toPath(), "old".getBytes()); FileOutputWriter.write( Collections.singletonList(new FileOutput(b64("new"), "REDACTED_TEXT", FileDataFormat.TXT)), - DeidentifySourceType.BASE64, "notes.txt", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "notes.txt", folder.getRoot().getPath()); Assert.assertEquals("new", new String(Files.readAllBytes(target.toPath()))); } @@ -254,7 +254,7 @@ public void aLaterFailureLeavesEarlierFilesOnDisk() throws Exception { FileOutputWriter.write(Arrays.asList( new FileOutput(b64("ok"), "REDACTED_FILE", FileDataFormat.PDF), new FileOutput("not base64!", "ENTITIES", null)), - DeidentifySourceType.BASE64, "invoice.pdf", folder.getRoot().getPath()); + TestDeidentifySource.BASE64, "invoice.pdf", folder.getRoot().getPath()); Assert.fail("expected SkyflowException"); } catch (SkyflowException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("processed-entities-invoice.json")); diff --git a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java index 7de03e28..df55cd8b 100644 --- a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java @@ -1,7 +1,6 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.DeidentifySourceType; -import com.skyflow.detect.ReidentifySourceType; +import com.skyflow.detect.TestReidentifySource; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.EntityType; import com.skyflow.detect.FileDataFormat; @@ -27,7 +26,7 @@ private static String wire(ReidentifyFileRequestV2 request) throws Exception { } private static ReidentifyFileResponse fromJson(String json) throws Exception { - return ReidentifyFileMapper.toResponse(ObjectMappers.JSON_MAPPER.readValue(json, ReidentifyFileResponseV2.class)); + return ReidentifyFileMapper.toResponse(ObjectMappers.JSON_MAPPER.readValue(json, ReidentifyFileResponseV2.class), TestReidentifySource::fromWire); } // ─── request ────────────────────────────────────────────────────────────── @@ -35,7 +34,7 @@ private static ReidentifyFileResponse fromJson(String json) throws Exception { @Test public void mapsRequiredFieldsAndInjectsVaultId() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(ReidentifySourceType.BASE64).value("W05BTUVfMV0=").build(), "vault-1"); + .dataSource(TestReidentifySource.BASE64).value("W05BTUVfMV0=").build(), "vault-1"); Assert.assertEquals("BASE64", api.getDataSource().toString()); Assert.assertEquals("W05BTUVfMV0=", api.getValue()); @@ -53,7 +52,7 @@ public void mapsRequiredFieldsAndInjectsVaultId() throws Exception { @Test public void mapsEveryDataSource() throws Exception { - for (ReidentifySourceType source : ReidentifySourceType.values()) { + for (TestReidentifySource source : TestReidentifySource.values()) { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() .dataSource(source).value("x").build(), "v"); Assert.assertEquals(source.name(), api.getDataSource().toString()); @@ -62,18 +61,9 @@ public void mapsEveryDataSource() throws Exception { } @Test - public void reidentifySourcesExcludeSkyflowIdWhileDeidentifySourcesKeepIt() { - Assert.assertEquals(Arrays.asList("BASE64", "PRESIGNED_URL"), - Arrays.asList(ReidentifySourceType.BASE64.name(), ReidentifySourceType.PRESIGNED_URL.name())); - Assert.assertEquals(2, ReidentifySourceType.values().length); - Assert.assertEquals(3, DeidentifySourceType.values().length); - Assert.assertNotNull(DeidentifySourceType.valueOf("SKYFLOW_ID")); - try { - ReidentifySourceType.valueOf("SKYFLOW_ID"); - Assert.fail("SKYFLOW_ID must not be a reidentify source"); - } catch (IllegalArgumentException expected) { - // the server rejects SKYFLOW_ID for re-identification, so the SDK does not offer it - } + public void outputTypeTheSdkDoesNotOfferMapsToNull() throws Exception { + // the API lists SKYFLOW_ID for re-identification but the SDK enum does not offer it + Assert.assertNull(fromJson("{\"outputType\":\"SKYFLOW_ID\"}").getOutputType()); } @Test @@ -81,7 +71,7 @@ public void dataFormatIsSentAsLowerCaseWireValue() throws Exception { for (FileDataFormat format : new FileDataFormat[]{FileDataFormat.TXT, FileDataFormat.CSV, FileDataFormat.JSON, FileDataFormat.JSONL, FileDataFormat.XML, FileDataFormat.DOCX, FileDataFormat.XLSX, FileDataFormat.PPTX}) { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(ReidentifySourceType.BASE64).value("eA==").dataFormat(format).build(), "v"); + .dataSource(TestReidentifySource.BASE64).value("eA==").dataFormat(format).build(), "v"); Assert.assertEquals(format.name().toLowerCase(), api.getDataFormat().get().toString()); Assert.assertTrue(wire(api).contains("\"dataFormat\":\"" + format.name().toLowerCase() + "\"")); } @@ -90,7 +80,7 @@ public void dataFormatIsSentAsLowerCaseWireValue() throws Exception { @Test public void mapsFlowvaultAndSkyvaultStyleRedactionLevels() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://s3/presigned") + .dataSource(TestReidentifySource.PRESIGNED_URL).value("https://s3/presigned") .redactionLevel(Arrays.asList( RedactionLevel.builder().tokenGroupName("names").redactionPattern("mask-middle").build(), RedactionLevel.builder().entityName(EntityType.EMAIL_ADDRESS).redactionType(RedactionType.MASKED).build())) @@ -109,7 +99,7 @@ public void mapsFlowvaultAndSkyvaultStyleRedactionLevels() throws Exception { @Test public void emptyRedactionLevelListIsSentAsEmptyArray() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(ReidentifySourceType.BASE64).value("x").redactionLevel(Collections.emptyList()).build(), "v"); + .dataSource(TestReidentifySource.BASE64).value("x").redactionLevel(Collections.emptyList()).build(), "v"); Assert.assertTrue(api.getRedactionLevel().get().isEmpty()); Assert.assertTrue(wire(api).contains("\"redactionLevel\":[]")); } @@ -124,7 +114,7 @@ public void mapsFullResponse() throws Exception { + "\"metrics\":{\"size\":12.5,\"wordCount\":120,\"characterCount\":800,\"pages\":2,\"slides\":0,\"duration\":1.25}}"); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(ReidentifySourceType.PRESIGNED_URL, response.getOutputType()); + Assert.assertEquals(TestReidentifySource.PRESIGNED_URL, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); FileOutput first = response.getOutput().get(0); Assert.assertEquals("https://s3/out-1", first.getProcessedFile()); @@ -145,7 +135,7 @@ public void mapsEveryKnownStatusAndOutputType() throws Exception { for (DetectRunStatus status : DetectRunStatus.values()) { Assert.assertEquals(status, fromJson("{\"status\":\"" + status.name() + "\"}").getStatus()); } - for (ReidentifySourceType type : ReidentifySourceType.values()) { + for (TestReidentifySource type : TestReidentifySource.values()) { Assert.assertEquals(type, fromJson("{\"outputType\":\"" + type.name() + "\"}").getOutputType()); } } diff --git a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java index b0444bb4..b5010e35 100644 --- a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java @@ -1,7 +1,7 @@ package com.skyflow.detect.internal; -import com.skyflow.detect.ReidentifySourceType; +import com.skyflow.detect.TestReidentifySource; import com.skyflow.detect.EntityType; import com.skyflow.detect.RedactionLevel; import com.skyflow.enums.RedactionType; @@ -18,7 +18,7 @@ public class ReidentifyFileValidationsTests { private static ReidentifyFileRequest.ReidentifyFileRequestBuilder valid() { - return ReidentifyFileRequest.builder().dataSource(ReidentifySourceType.BASE64).value("Zm9v"); + return ReidentifyFileRequest.builder().dataSource(TestReidentifySource.BASE64).value("Zm9v"); } private static void assertRejected(ReidentifyFileRequest request, BaseErrorMessage expected) { @@ -43,7 +43,7 @@ public void rejectsMissingDataSource() { @Test public void rejectsNullOrBlankValue() { - assertRejected(ReidentifyFileRequest.builder().dataSource(ReidentifySourceType.BASE64).build(), BaseErrorMessage.InvalidValueInReidentifyFile); + assertRejected(ReidentifyFileRequest.builder().dataSource(TestReidentifySource.BASE64).build(), BaseErrorMessage.InvalidValueInReidentifyFile); assertRejected(valid().value("").build(), BaseErrorMessage.InvalidValueInReidentifyFile); assertRejected(valid().value(" \t").build(), BaseErrorMessage.InvalidValueInReidentifyFile); } @@ -58,7 +58,7 @@ public void checksFieldsInOrderDataSourceBeforeValue() { public void acceptsMinimalAndFullValidRequests() throws SkyflowException { ReidentifyFileValidations.validateReidentifyFileRequest(valid().build()); ReidentifyFileValidations.validateReidentifyFileRequest(valid() - .dataSource(ReidentifySourceType.PRESIGNED_URL).value("https://example.com/f") + .dataSource(TestReidentifySource.PRESIGNED_URL).value("https://example.com/f") .redactionLevel(Arrays.asList( RedactionLevel.builder().tokenGroupName("g").redactionPattern("p").build(), RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.REDACTED).build(), diff --git a/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java b/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java index 63eeae62..946affeb 100644 --- a/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java +++ b/common/src/test/java/com/skyflow/detect/polling/RunPollerTests.java @@ -1,6 +1,6 @@ package com.skyflow.detect.polling; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.TestDeidentifySource; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.GetRunResponse; import com.skyflow.detect.PollOptions; @@ -17,7 +17,7 @@ public class RunPollerTests { private static GetRunResponse run(DetectRunStatus status) { - return new GetRunResponse("run-1", status, status == DetectRunStatus.SUCCESS ? DeidentifySourceType.BASE64 : null, + return new GetRunResponse("run-1", status, status == DetectRunStatus.SUCCESS ? TestDeidentifySource.BASE64 : null, Collections.emptyList(), null, status == DetectRunStatus.FAILED ? "boom" : null); } diff --git a/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java b/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java index 7724448c..bdec1757 100644 --- a/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java +++ b/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java @@ -1,5 +1,8 @@ package com.skyflow.vault.controller; +import com.skyflow.detect.TestReidentifySource; +import com.skyflow.detect.ReidentifyFileSource; +import com.skyflow.detect.DeidentifyFileSource; import com.skyflow.config.BaseVaultConfig; import com.skyflow.detect.DeidentifyStringRequest; import com.skyflow.detect.DeidentifyStringResponse; @@ -8,7 +11,7 @@ import com.skyflow.detect.Entity; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.TestDeidentifySource; import com.skyflow.detect.DetectRunStatus; import com.skyflow.detect.EntityType; import com.skyflow.detect.FileDataFormat; @@ -57,6 +60,16 @@ protected String getSdkMetrics() { return "{\"sdk_name_version\":\"test\"}"; } + @Override + protected DeidentifyFileSource toDeidentifySource(String wireValue) { + return TestDeidentifySource.fromWire(wireValue); + } + + @Override + protected ReidentifyFileSource toReidentifySource(String wireValue) { + return TestReidentifySource.fromWire(wireValue); + } + @Override protected String resolveToken() throws SkyflowException { if (tokenFailure != null) { @@ -162,7 +175,7 @@ public void getRunQueriesRunByIdScopedToVault() throws Exception { Assert.assertEquals("run-42", response.getRunId()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); - Assert.assertEquals(DeidentifySourceType.BASE64, response.getOutputType()); + Assert.assertEquals(TestDeidentifySource.BASE64, response.getOutputType()); Assert.assertEquals(2, response.getOutput().size()); Assert.assertEquals("QUJD", response.getOutput().get(0).getProcessedFile()); Assert.assertEquals("REDACTED_FILE", response.getOutput().get(0).getProcessedFileType()); diff --git a/docs/api_reference.md b/docs/api_reference.md index 089eccf9..83c35f0b 100644 --- a/docs/api_reference.md +++ b/docs/api_reference.md @@ -242,7 +242,7 @@ Parameters listed with their defaults as defined in the builders. | Builder method | Default | Description | |----------------|---------|-------------| -| `dataSource(DeidentifySourceType)` | `null` | How `value` supplies the file: `BASE64`, `SKYFLOW_ID` or `PRESIGNED_URL`. See [Detect enums](#detect-enums). | +| `dataSource(DeidentifySourceType)` | `null` | How `value` supplies the file, using this SDK's enum: skyvault `BASE64`, `SKYFLOW_ID` or `PRESIGNED_URL`; flowvault `BASE64` or `PRESIGNED_URL`. Required with `value`; a `file` or `filePath` is always sent as `BASE64`. See [Detect enums](#detect-enums). | | `value(String)` | `null` | Base64 content, a skyflow id, or a presigned URL, per `dataSource`. | | `file(File)` | `null` | Local file; read and base64-encoded when sent, `dataSource` set to `BASE64`. | | `filePath(String)` | `null` | Same as `file(File)`, from a path. | @@ -694,8 +694,8 @@ All in `com.skyflow.detect`. |------|--------| | `EntityType` | the 70 entity types (`NAME`, `EMAIL_ADDRESS`, `SSN`, `CREDIT_CARD`, `DOB`, ...), plus `ALL` and `NONE` | | `DeidentificationType` | `ENTITY_UNIQUE_COUNTER` _(default)_, `ENTITY_ONLY`, `VAULT_TOKEN`, `MASK`, `UNKNOWN` | -| `DeidentifySourceType` | `BASE64`, `SKYFLOW_ID`, `PRESIGNED_URL`. Input source for `deidentifyFile`, and the `getOutputType()` of `DeidentifyFileResponse` and `GetRunResponse`, where the API returns `BASE64` or `PRESIGNED_URL`. | -| `ReidentifySourceType` | `BASE64`, `PRESIGNED_URL`. Input source for `reidentifyFile` (the API does not accept a skyflow id there) and the `getOutputType()` of `ReidentifyFileResponse`. | +| `DeidentifySourceType` | Defined per SDK: skyvault `BASE64`, `SKYFLOW_ID`, `PRESIGNED_URL`; flowvault `BASE64`, `PRESIGNED_URL`. The `dataSource` of `deidentifyFile` and the `getOutputType()` of `DeidentifyFileResponse` and `GetRunResponse`. | +| `ReidentifySourceType` | `BASE64`, `PRESIGNED_URL` in both SDKs. The `dataSource` of `reidentifyFile` and the `getOutputType()` of `ReidentifyFileResponse`. | | `FileDataFormat` | `BMP`, `CSV`, `DCM`, `DOC`, `DOCX`, `GIF`, `JPEG`, `JPG`, `JSON`, `JSONL`, `MP3`, `PDF`, `PNG`, `PPT`, `PPTX`, `TIF`, `TIFF`, `TXT`, `WAV`, `XLS`, `XLSX`, `XML`, `ZIP` | | `DetectRunStatus` | `QUEUED`, `IN_PROGRESS`, `SUCCESS`, `FAILED`, `UNKNOWN`. `SUCCESS`, `FAILED` and `UNKNOWN` end polling. | | `ReturnEntitiesType` | `EXCLUDE_SENSITIVE_DATA` _(default)_, `ALL`, `NONE` | diff --git a/flowvault/README.md b/flowvault/README.md index f9a438fb..532f2f79 100644 --- a/flowvault/README.md +++ b/flowvault/README.md @@ -1762,7 +1762,7 @@ File de-identification is asynchronous on the API: the submit call returns a run - **Submit only** (default): one call, returns `getRunId()`. `getStatus()` is `null` and nothing is written to disk. Retrieve the result later with [`getRun`](#get-run). - **Submit and poll**: set `pollOptions`. The SDK polls the run with exponential backoff (1, 2, 4, 8, 16, then 32 seconds between lookups) until it is `SUCCESS`, `FAILED` or `UNKNOWN`, or until `waitTime` (default 60 s, max 300) or `maxAttempts` (default 23, max 23) is used up. If the budget runs out the response carries the run id with `IN_PROGRESS` or `QUEUED` so you can resume with `getRun`. -The file is supplied in one of three ways: a `DeidentifySourceType` `dataSource` plus `value` (`BASE64` content, a `SKYFLOW_ID`, or a `PRESIGNED_URL`), or `file(File)` / `filePath(String)`, which read and encode a local file and infer `dataFormat` from its extension. Supply exactly one of `value`, `file` or `filePath`. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). +The file is supplied in exactly one of three ways: `filePath(String)`, `file(File)`, or `value` plus a `DeidentifySourceType` `dataSource` (`BASE64` or `PRESIGNED_URL`; flowvault vaults do not accept a skyflow id as the source). `file` and `filePath` read a local file when the request is sent, send it as `BASE64` and infer `dataFormat` from its extension. Passing more than one of `filePath`, `file` and `value`, or none of them, is rejected before any network call. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). `dataFormat` accepts every `FileDataFormat`: `BMP`, `CSV`, `DCM`, `DOC`, `DOCX`, `GIF`, `JPEG`, `JPG`, `JSON`, `JSONL`, `MP3`, `PDF`, `PNG`, `PPT`, `PPTX`, `TIF`, `TIFF`, `TXT`, `WAV`, `XLS`, `XLSX`, `XML` and `ZIP`. The `VAULT_TOKEN` de-identification type is supported only for `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. @@ -1801,7 +1801,7 @@ switch (response.getStatus()) { } ``` -Outputs are written only when polling reached `SUCCESS`, the request was built from a local file, and the run delivered them as base64. A request built from a `SKYFLOW_ID` or `PRESIGNED_URL` has no local name to derive from, and presigned-URL outputs are not fetched, so in those cases read `getOutput()` and write the files yourself. Files are named `processed-.`, with the entities output as `processed-entities-.json` (and `processed-object-entities-.json` for object entities); `outputDirectory` is created if missing and defaults to the working directory. Polling blocks the calling thread. +Outputs are written only when polling reached `SUCCESS`, the request was built from a local file, and the run delivered them as base64. A request built from a `SKYFLOW_ID` or `PRESIGNED_URL` value has no local name to derive from, and presigned-URL outputs are not fetched, so in those cases read `getOutput()` and write the files yourself. Files are named `processed-.`, with the entities output as `processed-entities-.json` (and `processed-object-entities-.json` for object entities); `outputDirectory` is created if missing and defaults to the working directory. Polling blocks the calling thread. ### Polling from a worker thread diff --git a/flowvault/api-report/skyflow-flowvault-java.baseline.jar b/flowvault/api-report/skyflow-flowvault-java.baseline.jar index a131a5eeeaa2142720a6038e93051589bbb3928b..7b870015db9995383fa1388826b2227f8158cb62 100644 GIT binary patch delta 125683 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

  • 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%0DJ@a(_V)xu0)p=DxQ=J7}m+LW}tD`-L& znCduA;(y10=9wH4zc8gzPAS*Rr-u$utLCH=amNbU@{oNHIi&I9bYPWf!Br=&1x6Gv z>l_IpBQY-v7IG{KMy9~9L@O#}lgXQXUFq#)y@J*8_6iJwL}3lW>kWD)5!%005S35k z35yA7*}0Uh)_FbKJF2od?zWX$?k~yu0G~t1g*Gkghfy#AHz48;C>l`qC?!z0)+Tnf)c9^(~Ar5P;8|VBp zp|`P?^MiYo6yt=@Kr6;MbUHFEZTnnO3u$urR_lMP(YX8D9+;Vd-r}b0N1$?u@Q-j+ zwF5GEd_?ZI|IIy0`~!M4Xa_X@6{8=lv+F;z?0*RK4eZ^3{67~PK4#vk|Djnw*hhb+ zaLB}x(ht1k%m85N@6|suH18$=zF}(^Q1q`M;XjPZk9G3DVDy9IfWNr=e`ImP2k9OS z@aNfoTvk6?hirIV`WJz+;RC8<`M0J2QrkWr@%s0PygPuKKUM#*+RQ6HbhPCz!1M3L zE{MMe$15vI{H zAuAe73xj?UkY@~!SUc4y$xZz%(2k_4R;J%YX4G^|wGw?q*j z#i2fCVPBn>jqOni>{#BKGq3x--Tg&D!CmV2bl(~f!MW%*fnCGzkywzf4J=ZeMU#_i zS%+8!qOpO>g!I)bqSui*7!piYT{h89_Y@2vQ(J@#kXB2iPpGk&3w+=RRg&KpCAtmE zWDWeFw||v`a=rC{Kroi5(?^X#>Jln;U9s@_v?c=27e5&{@ZD*Rz4_X z8FMgD4P~c*?7wBY`yXW=ogN{v^WZaNV#o!c{ZFU=_5YTXY1Nizkto{RhZxDU}d>nlECsq5;1JkSE(Hiid0UQ4+`wsgr zXd>Agfc#J0hL7n#;_s)Aov=@T8MA*P@k0YZH6VS4P5fK;&tUVR@KgSN{fDC15Cwp} z{PQ)o68Ue#i643&uAvSd*8WdnO%t%tNVfnwcSjPWM#(ljO(_e@~u75n;_8q==c4T|b=3tJgM$(Y5QdIM4 zCADEqBGEc-#Dt(}qS>U{r49q) z+-&PCzgE~34;=RC(|^`hvJLMVD=w=l`1SD`yx2JWkV$|;$zk(Jdk|4YvB*-$P`^qn zZG51lMxzgI1;vCbwuH~$Pu$l=szDXK0b)xj9*JC+5()sUW$&=8`hxGaahoNRRl^@P zv64=Ihb>DVL~#mYX)b|f>g{b~IwJ1w`7*{8q!9b;8xauhY7@9~rrH2?&alZ18QF$C zzNxzdCd`9!07X9Tj3Y-MLjNf;xlS9V)^Fq>UNL2`fb`H(nRUlQmyyzbM4f?Htzj`P zL2b&8Vqz1dY0-Q=*Nfh)dsD4prPF>9l+c!o(N_4)d&BpM8Q-3BGg|*klQVT8|$w zip}G{1iHQq6{k2L7S;?1p#Q)H^_ZNd=rk@cJmez+mPSFY{zSwmOcrKDUmPDKj1ygV zE_#Nlv|JV8T#oPrzaQ-KAGom~rO4`*DvS*w%P|p#)RK@Xb5I2sa|B^(4MZ0J$ z)NCal23#X%st6JAb223=n@mH3L`v#bo#GZxP&p=EM_k|@>UKJgSfctc_IBFjx-G=U==|T3yedKa9`E@7sou zX?bqwewLs7#8w+biy|gMcZC%S%qJYe2FB|lS(~5hvK!Ft{HCPuTNsMcl3U#6=g|aR zA%Y=bpaK;8{_xakq%Fa_WD#v%AtlWb)>n+y?^UBSXfLkfA?=pM6D5aFt}*4>bEi(^ zmFe|Bp+`Y}&B8LD-JuIs$ScbDE{dg8{_{(K#H_bhPmuLxJ^V>-p?`5JVYXmTHE>Uu ze%_6+CkL7V6p`2ym3gk9L=JtpQnm97lEeo*u*o#RFI(_2BipYan$9|qfxE@J|Kt0x;={eRUu$)!fEKA9^BmnMKy zmn*NPppWFO4SBtQGXEVm%IZ2IIH0UHkrB+zXXHz^OLJ5CS7fddOr;g$LMkQ)3Kz96mB}zfe zda>2HycEgBO2CA9rPjLr^bS1314?KZL-vI5k-1&%^V9~J2w{@~va9`Mg)UnrBeH(N zBc&hM2@h-iKeGM;sIB%1ABGDQE5Y51ySulzySuwv@!;<6?(QxP9^BpC3KWM@`1tkt zf3M7&%w$e>?@jhhGIO7E?X`QEMOvr2=|!TLBsehJ0~9I%=h>fRkI4yswTp{#A+ff@ zOGq1Ag#^`YT<>b?U3eA6v~0kByCS1%=vzbi3;i2q)J66TdMYOy79fqXgeGRN@@UBhkAZKB+vmuU z5!!P>F0*hl(9xeD8w{15*MtL&P7j2=16>J{RnF~kxceu)lBwMAT4Vj>1W512%~TG3 zqQl!E>PY4GGYhRF3uIYn20|k{2w-)W*ODgf01791RNB8tK^b9>Cf?q@n4SgApGbFA@?mR$D6JA{7?abH?zBfdw0Lk_UxVM zv*{WSV@^>*-HrYu!h>u(QUgEJb>F^Q>!*%rcgo0IWyY6;@bGHSh}NVnTv1k|iF%+} zrxU;d`x*)L>OeTER01}IzzfN_ai8>Z$Tzt;(*7trqZxM71AB{MM}TxI>QT-HigKK8 zJ0pvUbi_1fV)?5~X0@9pONXz0uZ#2;@=g#W5z2?QAkEc$$w?z;aj+>3hBD1jwaUcS zwAdGd7&>zARC2!2oJS*6;@w<2yKCTL+n+UWUhOO&27z9iwO3b4$H2IVCvGZgt4Al; z(xi^xQX3RI7(;IWi%hX_?<8+~)xom%^)GUHvh=_Gg~&)FngF+xFN^u1VdwXMJMpsI zJ7vkcT!wf@RL)642~}v9Ozlf@t|yhdmnyc}udRHSWdBG)~?9$P*nYb$4Yx6QB=)k>p^aNL{EJ>{n@* zN|@erffQugW3i8~O#3M_#Unfvc{ZyWdGaf8=*? zIMc4wnJINTHB1U>2LVs)e#E)pjx;kpDot+;3g8x+N?-23C zsZqZW5q^L}`v`={?f(JoqcHgRn|%>8EVi<{!9Y1&Wah-@YntvP;b;b3f)UGhSEzXV?WRf{DOoOte5;Je2-2M%{btO2d_qQ zFB31(tm!dpcg)quD;tRxn87Qkp%^hpPFC>yva%?ut=daSi;sVmQH5@QLtKS>oXPZj8JZ9CeEMi6DWYwS^SDfp}L3|7jaPAJDwk-#kU4wL zuLBfG->`${bOOaxC=f@eifh2+rLnRtNv58(mdqMqlM)Sx0@sP1{+~Plvce%(i3A`dn;&9TBg%4Lq!qkz7o++m1_9yT$`_ zH}!%g@8e~2=(~>s(pb(;_d_McUNdW2_JDZ@u?-oBFru_0?5sSlKqsE!JDLKTpI?Gt zaui(&Rzb(|zfX@qKx0{}kjPj|6}g;n|rV52mC^(k$9Mg zXMEa6c+=6Rgwhp$%Jn7 zw+dU#%(uoes$!Jc@rvEEjyr|Ke*_Je7oRsW)|=mis~jFPxE5b|KLsL$KcA^7_fywTuCvv`dg1GPqtR_VirdFZi~-VO|kCXXrq z@EA^49kJz!chJXqKzqqtU!C4%U-2LuRq#TARD5AV%B*O!4(A=<+ppd3x`;joZt|-# zV^3B$uB2yS`oCv6fLM=3*SMoF=R6YNGgT(D@<~V0caG6dNY!mcDqz{3T?CMYxl%9Wz_e-xPGHq5>s%0;vLO||@<(<}8-qNP-LX41i!@!a(#RVc z&q%7F^-Q?Pl{h-iNjsAu^^=XsQj;h&cAZIYGpXrI##AcPnnG+*?ew|L?DVZ`=u57R zlW&r5PwI-f+kB(IJ8iAU&x)u*^0sm(=B+0duoV8xfFn$&RT^`kC&Jg9v>ezh0vlVD z#nMJueJ4Jyz&E8n+NS!RVl039yam2C6>~(#(!4;!Ueh<;aBWWa;%phBou7`S` zdM}QAD|Jv{MCqa-{fdjm`e_bl3z!}Cq?j2F59x$K+)}ELB^JPE&Q<}VJ1zv62cDon zTOq6O@j8c#YAwr@A{XEr;eih}J|_DVL%&FlX_B!;b0nJ6Lv(N;e9<^8!xc3>U-4T1 z%B4biYssXOm^4T=?3gLBF;{t($-?h}Ws+2J%=sfGAxRB=NIfdX&JdF_l2skde{^Y9 z9jTVJU{)QfXANVCd)pXO{75b?4{V9}rb*MDaX|TfXzH_D+piM5>3vmEc~7FDhW*h; z{y>v5ai^`M!J;zAV;1>{yAbl;^uaW%v-2`ZTliE%8nIqzPw4h~)VUX!xf^keJ<7uN z6l(hc){R`&Bi7_}meGQR^mvB(Lo&WPLnbkmge>AEnyABcTDvOVuq$Tazrdixyxftd z&qvr4eX@JYxh_uvP(~$AXh5mGE2-D6j>;E;x1R zZo}BthH*G;L=MEXreA}0e2IGBADXK*#?K~>Q*6u33|g~f>!TLu4bUg6NnVVx3>i#w z%QWe_c&9^-uK_(>ntbPmdS5kfg#HJpRtr)(UI0FQn)pAGqW>2Ypskw?(D@$%@_|JV zrpdP<5wtaO0HFUbeBz%CA+4_M12etl0r36@oO}=nDE^7{^eY4a8Y?EeRW zd{7BKqDv0P24ZZ9}O4t$)%2WV={~Z6a`(H%csv1E5 z^S@8|cX#;D_K|=r(m&fj3^(o^60L3B67UND&nAe5_+LJ4f1LpZ|IW6pz!gA_@IUXr zGh_A#AgA2{|I0J&AA#b-#QZP%digV9o4-Hc3gh3~pBK=CX&+9Ew74E5#!+3c0s3R7ve*RBKXU=76_g(A#n}mWD)-}6o9$F$P9OfFk+`A}3e+4? zqA(KRWL_wa(H+Fg;;q6(N1YtiP6+l}lAQA=!MVDWLyQ^Ro9*@3mOML%@IW3oI%q^| zwn14$vknFwY7LbRec}WbrJ6(q*OZ%-8&LDxS7lPDnqsmEuRvt7NqXM=WIQv~B-TFD zoBt{SB~o(x-7>;;v=!}}z?f*0$cIuS=?FMDIa7sTq|3+gZR`#3HF}f4oBU!(Ff<22 zt`XxlFjM`&bq#0PPUFWIj*9DCs?waeIGFi@$t+PsW{J5m6AcX14kbD*9FDQofqqCr z95WU458@u2rQh` zQ%-QBDbWd|jCH%%hi`>34zN_C>IF%6%fnBtsSI5{#o`P+gxo|v8H>GaTKTZn9M~<+ z{5|=WU8K^_LQn=2kO}AJU5{{GGo6|fRk->VX=LL}!H>Hdzz9zj?>hfeP1q{_x(Jqv z$BTkLvUe_Z*i^vHz-CWiENmuYo{oHYhn5!ifmdRLn`hpPC5W zY{w}Su|Txq6=??}lt*61L)i4@2orK@hiXxY&gw+;O>!1kGPLtXvzbbD46gH^*x~6> zScqs228>GOr7Wu|FKf~shRQ6a(@!~-qfMFE)(Z1biK95RX9S9eBBp1K6EvvvX;fn6 zyJPevb`rQEi3k%Zu&6S@7SHYFihkFpkumYptmhe~(Ea&YBq(TBjVw`+Dl63(U3H1A zF~jP|u`3GD2dZK!0gIObOtC{cN>iaiYOTPw5E5!KPA2x0JLEzzE#qOd>as=m^I)>F z8>f9Ks=kkW*Q~q0emLT+KeC>q**Im_BgSZ*P#7(<)YOc@+I&PTcVZ-WAMwTzK31|J z#S=x3=`uqrN!6{yf}g80oyJqOD8+D2a(pe{w$d1=uY0$4th(30;;FFM9Fv%8Ujpv7 zjttap9L_UdX*4bJ-K+F(D`aSC}`W}4x@B8YggZL5S$yOi~m(Jdb7 zJnY^l7{Ls6qga^HQ|m@IR%sR9@(wjA^wyM!j`ym?HHr9y-8?{e6(w59Q zPDcvdJ|1ay%HPJ}nwKu46-ISby+ZGA))QXFY|=|&kkK5C3WGy*h4CG4kQVLfYtWp=-pNlih=#&VTpyjE$V8C_Y0c5 zbXM=%I{*e)^Ba@d^^SL`_2tNE3m?%ftv1lRZa~L9s1>&IH~HTUL1~8sBa6!ir5pA3 z`ABJNE@d4#JH)@%sQp+3g&NWbXK)${YTo!@_QVCG>;l-3NIe{~sTwKl|Mcu-7b zwEpYtrW#+VTN2y*G0zN&Uka#y_+OB`2!6>zmXG2|( z`o-dPc8A6g*vhQ6A**%A)BDwTB>Xz+X-;YY(CbXS=elj?m_proVVZgD5X{qCT6K-D z>vA)*A3Pg$mA&ywB&10E)hE`zhZ zp|r_X0y0tlZ5OAV0KtC;v|RvJAgqVZ;_BPfZ(b?+#H5Xj3R{aS!o-!-3u+}>iGc`o zG>HaNi3ob0#B9)(;sb3}b>kTAKI`~@2UUvH$*EY<2qh&YhwoGMZWQAI$28M<$5Q%# z1g@TYA9HUv*~mSP`W^*7e?mCvGW!M(aFB1El)n<3K~uQQB2;KC1zLEcGe{A?%^<*G zxKIZuLy}c4c~mZOEC$oQ+5Xb?@oc1?+$Jz zDxZ88mJT|doN%bz_PaJ*uXe6E0tQ4Wu9Q;t9a+O@lm)xHHg?@;!>q=t-gopZ9Mdz- zTfAYzmRAXms6FE<3F>aSCp7fC#tHSYoi&r+MHlt+sFqLBkbp8JV``SFDI2>kJYks9 z8$pyKhtfz@#U8F)4Vmv__gjXFbadRR(uXrXCHqzz1pLZmXXieGgru6gToBgW)k>{of&wuFoX7GC zy&Eh7Va_X+g94V$rDYKV?i?r2#v}PxJ2UhgP*pzq$vfd5LHg{CT4CYNmP#biJX-#U zm?Q@E6_vHEYdT~cd_052=E)*KH7&W7`E9jJBpZ_?wZJh7RUIXoumU8FEbTZ0L6@IB zwN^c_u%*(p=md$B#bC_4{cO+I=eGw($&4=m80wj$ZHIhDqSiH(ipIn$Y+F>#tf|AgMre49771h&>2`tB0>N0!zJxAx|%4{+h*(+r3?8-B-NXV^B?YJ)Z zvT|WMs18(xW5-aui9lnEl_u`&8lu@Ncxe7jqTjkm#}(C$vl!|1THqPj^VJ%-`BF;jL#cIx+1nk~ojrir zc)NGC(lN94Zi1u%#))b?tdbaywr=~nx&30ptxG3D|6EJ*<@pId?0hluv{eyAz$H@1sa0=65|60_fT>{_^E!;`?>0PV`FjXga`tv@{+c(rE@2w1bZ z0c{2Jq{HI!oZ6=eP;RnZy7_oy_rq5muJ+6Lie|N)cwE#!>ZyI_uUGiK)Ee%VJeKj}>rew`8M&l~&?N zgS)$uy+e)%44m9`<4_adAAP3`Yg6@W1CAVnr{D3BuF7M^8Upci20#ux-4+jy7Amnp z+fGm4c$o3Rg0@|rMpt`gzT8P55z9>CNc3dPrH0eLt}SpvfV!^WJ*IbHB{w7vOPVC;w)JsU*K3N z&8bm0XFNwZtV)Dit3v-Pzp14BQFS%kUW+D2-BEGBtY6QzN=T7^&oYNP@Xr}1r|0I8 z>i0@+rz$98BegQ7qS~Y4VGO;rHNCb5buEPF!|(APJX%$@eC%iSOPXc5+aqAFrgOKJ ztdw=nd~&z!g(@l6lSYZ4DX3Hp#FV@wf4upAZC8h25_vo%G}XLNVZXWs`@Lco0~>j$ zMg6#G!uYrlE}DwXesF;)kS>6=gL5amAcX<;Il7q3igbN^R9(K`6gD97$b%Ji=x>Wp zrGtitgNHkRwq=f9n~6pV!=w>Xp|A*1FAbK{r6kh^7B zB`*v`bg|Q7)f%qd)-UT{aAl+wj`X?iEn;kZNvPOk+B!uQmZs_s(aR(*R}_l+)MgOx zhyX7Z=WmPyyB_ptQ(w=mrxa2mFHgfu*_v=1#bc>WhpAEK!B6_^1NlN^5++7VreeH| z@}}PWnM#=f(F9>kKs7lGZ+G%eA+#V+bT;*4O?8(#*;FRp@F-0zHFS5h=>dC(r^(up zJgRxb*%C{1wv=HY-&u?(dWPmWgoZYv0*TN*4o}!m@~}Kf_S9vDb6ZlfW9(?%pZgf% zjDsc>xwzOc$R;Nll!T7L6Pn27rbXrKUO3*Na(mv#zt zxx*hiBcp#mTl036ur+ve!?u7s^XEgnHeyu^=j~+$#Tm$ucQxGv#T!e`rHtVL>1UQB z0nWeHX+|LCF`^p+5+trCl=7rGCFZS?srXob5poyO0C^_h1#n!Ha7+)JAYIN?UGT!# ziPq`pK$!AX$-AlxDUwI7(Svhc4aef*xr5+GptqEr`9a1;qV&C{vJS3i?Y9L;ik6%N zY?m>TzN0K$Pc0&Er^z^@vw;KEv%h1D1aSo@91PLjlywkVHr@k-zX7!o5viJVUyP%> zzZ*8Y09oWI(b_GC5+kZ2 z&Y3B5Z)-AE9&wzzWl2f1+z1BnO!=YqIQz+rAc+f-*DtKHEc?k@NT_H8|BZfyXgmDG zc=&|0TN<7edAA$=3a{~08LRpQR{5ruySLd%14wVjOEffE);_N;-VmtFP2SbuQLoes z16%*BDgG7-wO!*0^p?e*gpc+Kz>Ie2Tl$<*{LL+AVpQmQA{D*D<;m<%Mf5AevK{~< zyoIt5m1`;Ti@M>6xg!kOJLq{ySx*C(!F`xNOR0Mw@j-%bu94iG+u7vYGa3suo#1Tg z2xzT9@n{?)uFHpHYI6-KzW7%kJn)NU`Ldj#APVrX1ZS&1*&0}S$T1=+pkaxEU=f^ zcmd}lS&|Ye8Nz{CID`>dh5JJ>R(9?+9l(%TmQ@_+)bw>+LMoxhc(r_Qx)*tIs3Sw39$6#JRe=dqTC{y)3?qCd3VC!7CW8AsW64!8zRs4eO@2ES=#0>2G zBEh*plwe~RP|d`mox#UPsGTMEN?Vj`8x7fEVBv}w&`aBP$*|gnqZhWhq2yW2ko-a@ zZsVdN(af3kA|TFXYJws87orF>wb0pSDrD?h^m;9gD!{}-%+{&p=eaTIuVvXNC}`wr z2XNc+Beu(^$-+;17iCjSE=n5C1Lp}kApTJOFX zxhQPEU?6KHs@TPbZl{E}NaB!a(qyyKOb*fTZY3}Qp&ftl1YRJwlx_BJEEg~aV0LF( z-I;HSkmCS`6IYlNu&;uHCbDENvcOQpVm>jxyC9l2_k^Kh_R_yxtuA{_!tKfTZ~XRF z5v@<(H`aehk=O&kg5wFAl{w_P?KoE*^bEMTD{TW9&(W=Z|d;w58jd_cx|C#`3Ll4Wk&Iv5}(dDzoMtziwrI!{~suiQcuh zBoi5-q`9+7oy8sKmFGmZhU=R_<04huhay#wD|-@p&A6CA5%Tf$_lMEYD@pcPzq`|= z^S3*q}d{k;P+RgM;rEIQ1#ov2?LQOeYr#W%nNBUc$(Nk zXJqub`!ixODq*n4R{iaD)Si!lmUbAQSH4us{55h`>bPKLy9zqSgk|YPgStZ^=Tn|k z>LA?t-q>W73TX6VL_ve_pE%pS=~Msw?ZPY`|H8pB9|VF4!zHkCj0QQuP~l}8J7$71 zV2*LJ9UK!tB|sPr99^^ex%`nGyr6Ty65fU(v!!Fv$HetEybb&MRl_JyI;b5~3`zze z1^q!JvcIMd8o}cS?SNqvI6Oi@O^CS`*N{Qj_}vRTm@sv$9yOqI#4Xcnte`gh?)e=7 zm@BrYd{7vop!qd?kOIEX(hdTQ0qavGXc@8B?3yqLc!m4=b4LP3i1R4|G!5{xzm^Fy zz&g`M|O=z4Iw32!O=F-M?cQ#2ADQ_-LY8+yMkNAx^Qi&+MQD zjU(2wYZ}ei)erAz2c07>;RA4NnOCS$VaAxkJ`KV>`{KOmf9W~7z2nhEHTbzb3|NJa4`wwq}3zWf@rqg0a6ITZFh>G=wnl zR7pYYbTn^a0JGw=uM*?8_aU6Rif?_P5O;1bz);V%)f4F#+6;Fpt8p&Bi~)~`sjpt+ z0wO;cwTrujXK@m|P$W$f5XAz9jq%4IV<8h2%bS2?qTm`6UY#!!#e97+25@fp9TI}Dh?A=tK~85JOEkkL2p z@&*raZur*^hGwCrt~t{6v*OzZA98Ml)c1#aqaroz`UR(O@(0(Cg-W2PuU~Tuhaf7D zs;*rFgi{cwN!sl^P(daG<8X_d-Jyym1Nd+@wjTH(n}IGk8#@nTqZ~wH(kI&|AXL8> z{#&r3%|IEP8|N!#!B!{}3g^l-^5;IpcVW1dYvSO1xlbgf=+%_7hDpl7F`TC%^`8KE<_Nf~gc zSrgyG*GvV4qvWtin%7Ke`sK5#f#1ScO)>i!vs6hhS|ead?2|a)>^QZ;;_Iatgy$&n zQP%9xL|06bVgfG5VT&B*+V1!k&PDhMc8JxTg?hhZt*V$NEC`Uhz+zY#8#IVL&=ty} zhoxv9IEvjZ4JMRe@kpckayZFmh{dV}&kX*aAf=-2pBt2d{F7asPLlZ?0Q@OmMr+<~ zE|0x(4j77_o6ssu6Pr?>(45Ss^U^usABtX{Ko%p8(#=no%IuJIjMA-6cb_QZ5{awGSwUf;ny@9kmYBhD6zKZCIvA>*z|=*c>8%1F<}1Si0D6@mWBm zSJb6)Y<-yM3^%#PYaF+HEMQV%YRa07?Ig@X zIO#U^k?fEnsku%vkoJgR5+jNSi$Q7PIgqJ zUSx+F+x`%1l)PeeO@@?lhZq&z5#wZX6ed*76#Mb6X*ILa=EWnuwtcI<^Fxn%9%vDNjhPC2!1rBs9H>}Nq^ge4! z(lZ7;wF&G@D@=U)P8F8-nF+?-wiElIR~a@tQp4F`my;*))TSFjKU0=L8PcRNtStbmki6+lf%f2iVQlj!9pSR34%#ohC-|!ah6*SmmJH6 z69o)llO!8gxO&u9d3s4^ht@^&i2`PmFk4$>x|oB?1nuOCahlkbqHKxzC0ZAQSDP_^ zW{1Wg!wcI`_3Xso!pTBpYV#a(A~g7@H(i#NOixjAhL>_wS^HT7YRd8qsv)8% z!IJct$2p73uUQUP{Iv1MBr!tR1E2VbqDO*&13uJHT+DFanY!g3hw+_>yYI)|Hw&4z z?JckCR#Ztc)_ry%xcEg5zTAcF8`6&s;K6951zDiEAAYBV`lKlRP0 z=wV%xQ3oUXXZ&_cmgpi8Lw<&^2v=O$Lcw&|HW0=d(%~IqV%J?F+yZGY~Oz61v9d%J1|bTEOTsl5>Lci24y&_r$De;KRFsWq{;1)E3b9qy&f2 z2MOBS7Ab%FxS}uSVo!|@oTO+nlmP>+SJd~yN)zF1nN|^Y6IH${JHw00*oUSjhUK>$ zh^?sI2wpHgL++K7%&7AM9+KsQR8PN1rY-ev&HbvcV~74Dqu>u!g8kE|WO-n>?$nHYp=WKO%K(@X+W46*acf@Qh zcdl%;2aIgJ2g+=f2Mg}Di$0HoqN9g<&c8AJKi>WoI*!ImH(YT(efrJ&|LolUU!CJ$ z0bhFYg9iTBdtMd8uc_8X9g+?d6Nd9@#(WB zv?&avy^JH##=!6L>~Epe8jOdjSlIW)eMchpr zlRH1jzJzjLyE1L(juw4U{a%4hx9DY}&UB*Iqr|{;LQ&LEj-TQTp5eI`fF2<5U^Ey@ ziNXXztP}g{g5YBXw@NVKYFn{gq(SA>n*;4s*Uf=!+;k*PxuMO)_-Ipt+#an`*#jPs z7MR^}w`hB*`yJ6<#nOWw;ESvYTp7$h8!u|3)1E1%>{lU)f`h}&o$)3YW zS0~k;a0#B`F-MVo{2V<~b~E3D$sMrMSH1&8W0b)eU8^PBN@Pyl%E`#9{%v1J-5zO! zX1tK{*^NtHTz41|{>Lq&R8v+aN_mZEZ>x3aQYhBSbo#@}Bj+zl8~ueqDo!yP6$F7A z@X|ypy1NS_RmB#S?z$ZOY0t+zQ3JW*{Aerq=goVD>6W$LXodmP%RbbwgI&aT9>Doq}$4nqx10%{zzmEXlhD^!KFmBUTkY0Am z{rRbOGBCaq#WnjlIGX9y4FljK3L6Q$&NzIYB*H9WjYMnwV{uiNKaLsxSX!MQ=>4i1 zDF-;QmQ?87*PVm+fV!Oal;celfnGN&akoi%R&!Y_7;O>Q8UX*8t%ROt&B;7n&n7oM z`!R`?p_&kauis?+au7OkJoGW)Xd>UJuFHJo0iL5Zp!(++0 zP=rwCHkgi&(f#x(I}Fj zM#e|5ik?7tn5uqi4WV526e9ih={Nm{q%8hHOwyr3V^D)Ze$Q|RF*r#PQ?eI}?3Fxq zhU$75d}FDcQmVfjv>eafd&L0siRn#Y{PO5&M?X&`AMi1D)t(5_snN6XF9E-s(FFyg ztlkT5#__tVgk_2=`Y$DdLQd{qa5YXhot820dy_+=0Rt?tmwqQ&sG`W!&vZV7ZdoMb zZbM~$!scbyyF|Oc?L$-(`>vFn#Vn!iOAmy;E}9SyMtcEa;fsi_X8e|bu)N&13+RN! z(VZJ0mZIFk893a?9CmkP^gT%k99;wc(fOugy*8r)l)wX_LgnGt$^TQdPUu3Dn_&Z{zPR^a0h8J-DV~~ zGZmCcL~3Orc}GDWPce(Yf?-h5<14v-6TNm4W&W2z)=1+W;(xp>vJ}Ryn2(7Qy8oX> z*MDT9)inSX(87>FY|ha#69>X7xg{$>z&~0{8yqvH zn2lTu)ihP|EpDwXsO&8a1cgUB@--!skQ98wrHxf*V5|sF(HJi?1ujJ z!;o3Yd=0-p9pOZ4MZ6=EP?K_?GGc#5wO_d!(S+YmeuB$eKb(z}jKxMLmsJg1FX^GC ztDv(guc?ho5pRSMJEcnjqm`Nl1AuQ@#FYGU{jL=JrH#FXjM_m&@%WtqYbYhZC?<*v zNLDM)Izw;HUMd?=P6;V4MCFoAsKp%#s_;qGN*2vZD-27t(9A8O-x3oo^+fcV6EUnS z>1gpPZO#f8)i9o1$S*33+vH?4Qt9oeE2^SYmlhUbXp$wN ziw$OoGKFrp2@|u_Nhk$Mh*>P}cT-8sd8J$<-FVe=n#F@~jPdn~@b=c9yI@_V=p!%Z zA*+%V#fFW22c=_z#d?OM>3^i#P%J=?Nc&$K!^=o=PoTb|&?nV*p}AwH8Jcn=t81i4 z9CL`Kirbu9@;@fmr+M{y4g+r+tpU7?Kr~fnM6`zjJz5b)?e)#`Lo_^JNNeESAHrB3 z&&2q8VR(!ROUb1-lzR4;>;m6V}OF-ds3naOi0R4CA8Sm1O-_A+R+BISTYUA z9>w;Qo$p8IGw^8g#g127ooAKU;tQ*)m=P)QC1a9OYIY)WQg$`&=ce#wGxh3fj|@JU z!Si6TdDuK`4hpy16yRtE+Eii31m-CZ-c*8PEgD{Nh-+8#)WZBNh3*dibz-LFK>uiC z?lHDhyQTnfIuSKlL9QO{F6(`D-%^a4hA6dHZM-8z4a1}feI-lLadY#$vxZE&IM^-?MtetLc) zMO}1O@u#q#60l!J+L+nunBPyVzsmGmn29faCd2Q}U@mIguG_rkVy~Cf;5P7UAO$VW z9GZZyheUrD?idB;ZRKytEQ5;NUZ!2BHI;dVl(-g-1m*i{GI-*7Qw?z&o5j)OWMfL@ zb+*+!>8EJjM~UyltG6A&Ow?~SMYoltM+D>zYk-bAa-ff#{!+?>nhcrCr{09?8i(U$ zRyB$g4B2g|r`#6>gceSnM_72F$`Mw=8)->_C#nAF=8Yn?mIO_`DcrZHV1rX0O2A@6 zBf&tQ)RUe7v0-X=siPY%G6p(p% zBhj%8C9pgdyg|{)7IHb&APjziz2L(L@aup`#GGyXjoVKhYZk$ih)C)}Zk}Bgiwj>< zaG(ngeS+!g6_2U*VpeUGV^i<;3sx*$N?9FPF;7H%v;&EkkHn!S+I?R=d_5bp=4Y-v zzlYG(F;Gz<9MCK*o?X6FPsF4PaT>Ou&{bAa0``zIREo4JAO19()yCA6wktMWpP8B` ztn}Jya!bCT2DjecYuS{;nvmnKuiM^B#-`Z{KiS@o$|c%1Cayz>wDxxMYfJOR{#GJR zvp)R8hgnfLRM^_8jF(W6C`VT3sI-rz#M@WUNx(HG2`%m+rIu0Gf}3dPfP~TX?T+`l z2B^~-WXd<^Zh%E1hFRA<>`NE&i++`UdpDJ$lH5JP7Ks8S11kT|cQdKjG5f@ncqQB7 z!2>Z|gya-yb@8IJd8E-etq#-M@;nGqerWu_d-dt_58My2-OT zGp9|nN{iPBs3D3utNfzJS1O>#u!@&gws?5hf|^;X4qo$-(h+NBmG=BM1_}2&-{m^yM=hhKDt~P z>JJ(BI3|OO1V!YlqzgaR_`^0KB;w=?lCgnnC0i}|Wuk-&CGFrBr_``GnTKEp9TMCj zA&S-cg$~)GH}|}h3!XJyVE?kiOStkLljMW(6Y1iy)>S5oMz5KCX0RgH{+in>3nNsoO}z=xPbyp-C~LN&95 zk}*@ovXtR%ia)WJ&0}Xaw1p+Kntv9a!%T%{l9R<~Ng=9k@)G}=CgwyRzeT*Knf56* z+MD`F)o(BKQT&i2*5*4R3a0B!g^>0c;l;W+>#VxA&KP zno0@4o_w?IWabuy4V2U`7aci>4Bd)%qIv#g5Si7=BcvRd5v1+nlYbyT+>7~@P1AY# zM|)Kl!z-D(vXlZ>f)BNwv=xHD^y0ozqJwyx?|Q6)w+mPz-C4ut&*z0(28!*mvfKxI zd$)|W?x&^1xQX^BFxHCtjZ(8)NL)QoSX@R>Ji-Az@%*F<9~k}T3@wqE>e<6U{d9RO zF`N3CeC_p~FDAMtLm|PZ@@j(xTiK`cfQ^+=N^<#v&!_Z&PjPvUZu!wT^ajGZYkfsN z@k(~pKMt87Xf^RlIItHR*VQDAFtJOzS4aFl`wyvn#AHghY6NE3>Ma*hLU%S^-2Lp6 z54b2GW`q^b07&f#%|T>7z3q{5u$YWl1%Mi7^g(&(Ph?8u7w1vw^i`1$?y28%OI%i& zZrqAkRI`X#MgylMVs8er=td=zAC6u!J`UrK@0yQl~o=2WMF_0wK4}OB{HfzkoH&dGRBZF4XrQ z${FDr7gLm*4yt^?pJO7V(N39~7e6Eah&rfgPCT#jimbo9PvT3I0+V@Kp`kZ>>{$G9PTR(gJQ1jikXFpt{UO0`lrdK0m=8oT+} z`8dmT+Z`U99af>o&?F1Q66Z}T#J`IAp#>EZ0Rtp;H0WA8IJf3f%Jo5pe^>;6&82!+ z9McmkWt~~t>+pTG8ac2QA7NDY6%e^$d)5NbU!W6l zcQ`}dd=^RrG0t+j)^t>Os2(ru#SZrBMNBOe@6D-240GIe?h(on{ys{bx(nJH_Rw+C z0kW!f^DAvEEzYr4pk(nHbhtsl=)`kD=;_esf4h#tC5Oza)k&e2r&ubB)L^I5&Wy}* z+n*$iDBbhWQE{@-pyD8w5L%<8)LvJ?kL3Gka^72e5H-1tM0}E6S2L%Cj}J5$HYB~T z@G!G4<3-ESW1wl?-cav`%yV@kSG39B0cxK!XWq|2B{SgUYuA* zasCCKkgU*SGBa28G`=siGEC@&{iQ;RH`FtQ{PzY$U z#wTm-6ieds?lH1%dvd^SvBXBeBLR zx#xzYooN9Z40~a7)Enj)lMCAILw+&OdXR{$wK%K`)sh){Oq1C z$N(9?$yB4VhfXcjWj$Tm-Bwb;wQQR+GaT*>D+s<`$3M+QaaN((8|JE6CfSDG!Pc|S@7bV?_dIO9IBZ(+v=KgZ zHVX_c%5~+HclaU7-#;02fu0MoY>VBEh<1e%LtxBJqnIrQ)K|Lf{S_d`NEgBzqJ3=C z{*x?6XQ8LrZ(iNO73`rM?sENModxIq!=B!bkG3u=CQ#qNZ6k6^scB)8ovU7u)WL9X|A4NMtM$Q{q@U|O5BarHFZwNs&z9&y>z{1t2{acWf5erOIpqh;G5JLp_6nSa7^_c{xwa#p50xi3EB75l2 z=%waBNgGyLf^(&aCT9?#Op=`)cYQmZ>4dfkG9l-_UjLXy{eU?BXzri;ep*w-)JtuX zRziYIg82fa`o4M?pkZdW)37t;$yXzuUgirGKEpyJ%+ztiqu~ri8IJiNvS5y6P<4z3 zvg59$k=@bwB-a?U8EFpo8N)AbqnMxVC#`{R6_aFJa}h5BLct0{5&dhCApHQC%5`nd z;vzR!Z~hkRyWqW9LHL{=8rBruBuo67eh=5~9#13V0n0;sU^ny+LA-jEU=G&ml*HC| z6|!C{9zD&X1)IOUFd{8z>=YL8Hh`dn zRt}8%Nh>JD?hW;&mE#dx3z=%U!qZB-tVWY?E{v&zgDmAKbRjK4OoU@fV@Na{0xzzE zE|o#m!zxdYz|ujlBu-tj>YRa2oyyqB`-=Y`Q)eC2MjQ6)wosrr6ev#d;u2g76pFhQ zmo~T+3!37^TRg!jEn?%mnh-FasBy072M zx3Cwp{DdrBm1p#mrFE|zxHtA2&vc&0`LfI7*8F6v{u%tvz77tOCR%s=8zhqZ=Xk66 z;4z=O1?Ayq@pT+n^PG8<(U6U^hlAk{InR!|AsWp?4R7U!Z$?DL&OJg4h5F);{h#p+ z*<`oHf^flkYE5#%2HFPo-9LGgf})JV_AfRhEZMTEppc6n(c z{j)YEiqc+CvRqd52{prZuB(EZZ~8XVjx0xYpwW=Su5TtOcb*j22C_YRR@hmVtGZ+- znDDP)x$J3E$AUv795=#NlwrihD9M#7*~2@)$}|XEMN(A{btX{Nw<0&r35)O0KWH?G znu)9o#41l#Ze;9Xu1=?sB>PY}_%|{|(Ol&-KFHj(iY8&`qj=S~pSeLMrZt3qd`|Bm zeL0~Yc8l#pqw>sjCGIfZGG($ zO(x61>bO%RA5=GcoG-@J(l6I__DwN19?~f_t*?S@JB24Q{(P?LB^e3fsD={`0Q&+C z1CC!H7e7syRHeEZy>Wzh!y>z>W*-x(;AY}Y@1onTjZJZ{XG1;(n|F$mH68T4n6;fR zdp*+6jqSOyr+Tq;rDyu~YI5Oa;wQgQs#zghaHfSG{dJO|z|2A|QYsJ8`h}e2UtuY| z0QkkMTKB%JF8lWp`6yp!Qy~b4w5lv7PV+R}%QiQx*ZiXWy858)y$VpADXzHwJ1M8BTxx}slxB+9~UYgps$%HUA08BFhbwHfOandLYO zfs^QGB;D9(_XVm6LKcA06H$;hh0kh;xJch;5l_1$qK6wI3{_lmCnWtseqV_AxO}PO zC+VPz_o17@Dr;;`6p?vjY7*5S5F)MY>i(!+E6SHI;~T@6RX&daXp> zPEUJ)BBH|abM79JdY74sNop~x`J6Lkh*g3R8GK zqhao045@4nPzdTro*?;0c6?kbeN~@^kG8|PXz$d0!=h)=Wo?e`bhbaka22h$+C5%> zbla|2)Hd~x(Mqp>E+}Ci<-2;{t&Y}5Td_ZnJhPd{nVjRE;F$RF-c}ZAGluCH1pkfI zR3bg(9ldx3Qe3PZHS!579rB0De5CmOW|gNxrS#dZ7Y@5^-VO{hu5Y4Kfxhf#?ea=* z_a}D^vXzaxw4N1X1U1w%M4h?Ls~Ke!h(Z5N{d0pj&}Xw(zX9E+BB;T|VN8LJF+Yn?y*I5#4dbxjs&Ve zS7+qr?A2hv{03NTDa&=+*=_2$#IFl3E9v=e|f!{__5%ALv|jw0FQem!*` z%s-@%QOdeWB+~&{b|Wn@9T_8a;^Gjq5~cbYr*8@SoUSxfZY6Rd_Z?*S%TE_%bmy@` zTDA+tuu3tcwj>9=x$w3qeRq+|)AHV^E;UpAOeeti!f%nX35W(caC(rB_%HsU>iQvz zY!rUbX`K?(>Lw;nh!ZbJgLmXs5mB}kszB_JfOVq<#;O)tX<5revoHn~P5b zM9E5t^p5HhWF>e<%JRDk-wbsfe0eweL3`j5nMZwfmXOz<*Cn_Yo@>dr$7M^W_Tvd& zJmg?@e6IwV$C#l6_E<*H+Wf`09U}y&r&jVOn2|p>@M)Y#(S#uqUWN=cl@J_Pzw0)e zmyYV;Fvj;Way2xEV)b52*^Utl3>dzf8(wVHo9~F;#Q)HCdBBIvqsuVJh+=DNc_vNn zH!uw~`94uv9eqG?epA=CSoWS9-ExLA?-u}0|m(wThiV?*z36IDS(ufk~mc~luzrsGiaQ>Uc)Z7uDH%=x!;OFOswg8jaC{dMfixutCb1vSF z2e`IOWK?S(Vl&>v;Btdv}Ux&q5S~ zI$2j}|4ixHT2p3}oRxFvhg?jrOySf1)SRC?4@JjFizv>ENA7RQ{gjhkoSP$t{#2hA zk7-L|yxtrvEhzq!Oc9(`=P@NvBshDsI`@|m++rUY;xNykq)L`xw(&HdZ7-;|0e!Ny zCms`AS;vGoEUYF|U;>D|^_0PSA>$4bg|QTEPhU=y5vWOmLBRf?oNwSuhI3o zgTpiNucOelb_Sujn1SJ_+mEZ(HRlr`!y|m#p1jMpEfojwk1%J*Q2D(s6nG*!X{t^o1ONJ49dCOFSz~Nf?F*x? zv9=X*(7u`1J&O~!l%SxZZ}7IpRJpEFum{bw$;)68Tkuc;yF_R99H*J*^pfD=Jmy+o zm6OHA=;K%Q>OKZ%_7L`;VQy9ZxKg&U0XN+~%{tSjV)eha3^F4y|CEa}Wj0}3=&&~+k z`UeLFV8n3V?DjuPrJFm-wpZ67SGwTb&|^1;%_vMR@-7i^1U*0vs9$B%yE@j?-P?HH zs01(D&4R}q-g({9v2O7&b#DZm+U?Mh;Fu@U zEbR)|3;)Taf@`E|J;TA`fi96788%On3T2TW(S5cL5|?UaS)lfKM}O#O%#pxg?i&_n z08y<`7n>=bGMMpkHUcPyUHO1{^N_4r2o8lreieTc4t>g)T(R(O<^|lK9DFEx>zX3mxMXN^Bk>62-7+#QKT7n;)JB(<-qEuT zp+!gxXl+CA5xKj0nn!#iN&-ksU??J{h(<+PQxOX|{-P3dHhq}j2rvPWF^$Fhy3q%c zwu5eY7$b*6M+6g`cdhHUnY4*P@IN562OdW+BVuS}keCUaWB{lLVL+JYe#9H`o3`^i zrXNQD04hPa5L$U0aYVGxcK*az;v9-zeEMJZS1n?UI(P-6fnzOt5shde>UKH8ieRF< zL1SLv^oU*5fDwm8caBF65k0gwKQZ~VGxBq)j_ZcESP7B0L{v2N?>#>ww1|ksTcZ$m z5lhs|qZrfwWq?O8=Q#c%62ln!2zH!d!Uq`myG;p#HUf_Gg3bcysS`njlS!xffH-?5 zBE%xDX*Fpq96aSCaA{@wFl#u;!k}uzbHY4V@R3M_1FZ}SbBQA$45~oz5L&q%Nkxd$ zcJ^c3a1KR4$%tzrx%WqU5jxbtix_VlYmtk%|I08R(%t;Pl;OyWU!)^E2tyr?a3kbt zZu&7EIQQe_cU|;~OE%pI#Rx1yDICiPB_emAXC$JAFiAvW2tysQL8L7#F#~=;nWd?h z7cl%d{s2?wx@DVbn<#{HgiyrUL*(yrFJ=X211FmhCepfSQ-$!0$iwo z&~$h?zZ@QMHhT)v`HRb++k$P>^R72f>2D02D>@Y__d5|6|76&R74*((X$rmwi!miG zse_g;$o!8}QCgi5`JpZ?Z7jj~N8%#aM1NyE2KRJb88=TIcV<@0y{SY6AN8jvDCwL; ze<{?m(Ontu)Y9_c{AMy#+v(MEI@QQe$eP9qPDae& zErG`4>S}QJ@xICYc{4v60mu6$JO4>=AOeeYAkb3~DM3Q4M16?(iuYVb0>`!p7saZ1 zf?Z?2iDDmIiu?Aw@_=m9h>HQFs8ER&3iK68^VY+hBwdo;1jl51GXHKs=}7 zinH$Rg~bRCM@W+bgFMBN{EW*nf~W{wGQTqnS>#U{5Pe}^L>cK;;1RE41+Ku$w16XF z#lDC+(ji&UbK5*zutL@$A_z~9MDC3#2EmC(AbY{17=>%iViyklaOqNl!7WcyPuW+`>`&Pr8Rf2^pD<4tb1$q zTBPTH=LI9XWSS+BD~wCzg$R3d*1e5-H?nm`y2QF=`wdcBSuwK0L3;yIa>neWI;1^- z%s9}MGt!7LJ8^uk-jd8X$dw;So2*P~CL_jFIAaecAX}6%j{5RM=l(rtI7^Q6jN<)q6gPKsI zMqp3^ieDF0{qQXpl!M|o0Cl2ZhM;g1Ob=9qf|-C)Q11Gm29&!IC=TUr0;)tE=!2lB z10zs7icuF7jbbzgm7*98KpCh!Lr^m+PY;xY$}<7MP*(b&Jd~9Ys2jDS3kpN67=sE? zD@LHNC^=nFJxb0P6pNBG09Ald-MSzMs@oXUhUzu~MWMP)KqaV9Lr^*@)EERug&Khp zQK2TF8q}R3C>Pa++?CBMJHkmOh!PL%>_KMBSQQ@ulS%YJ@u-+roiiKR+<#@{EY{o@ zR~6Ux83l|%F{lO{N>_fO(K|CsAz58&@f z`>d#Cu`;%4LMrt7xyfe7jWY|qmIaSRC<7Uc!`)N&w~Ae~^A?a({^uwV+Sad7V;)OW z2wBQ`lDVplHiouMacR0FPNOZg!I`UC=vO1lyQ-P1Z_!}t5g81j=Ve6S1Ml9e{dJg$ z8JGfO^u}qw@vYU!8VFNv zjm4dg-8%Ggfy?i*=d;r!x^{Gy|6W{(NA$D2H=AkhJSs7_ z7@5^8(pUjlfk%^h7XzcEpIf+i+a*n)sYc(-Ev95`h#Kr^eypj9l~e;PNu*l3nA>U3 zp#4TE=4iFhG*FsdP2U=?zMLA!vr&;bs46-D3fa^2ui@&mD2F(W63#)j(d^I#@XEpp z97yin2K4g*w$Ez!S(HHDjS|B|v$I@80jPxuxF7o#&PbYsbla?jo%^gNq_NRO`SY;| zU<|Tpb{gBJ1R%&+fWg0Hb%+{l@2#5|^(~h{XdRMV_*k|SMy91Y+Km~6k{yBdjoB`I z%v)X~HY&f&I-Z}V0ndH5+GoL5eKJ)LoU&>7IrG-j5nlfxi>j|#nWCwlEHHR@)|^P= z5SM=q&~9ZKP3w^70w+CvG14S?YRRL94uUSs#kL#cK2Yo&o4lSi{C08^Xeoz6mm1Ek zTIj-9g=fue?4>>cS1KLmODY7OLNjZpyD+GuS4F*B4ff66lAe-`fay1>~@@O0R)g6I42cP-L-B0TO!_a z*TU|~X)D+v*2VI*W*CtFV@CUIf1m1z#SVrklMJ8>Fp=o!m`(2^oJG%!GQxa`gt8sC zq#ShS+Viq(p=}f3g<-fm3($LHd3|r+%!jIuPt-em3iIEnM%25kG1=v(GP)VshKlW& z?dnUIMc8#qUA1u-HymBnRrpgOODLBQvFH9>U-caN z(eKxD{47B5h{UJ@O!jkDgvf>zZpS&P9q|lWS98NM$e<``d>WWF(Q)oslr%eyr+Hu* zL{OA8HEo>ryTeaNkJH(it@H-gMWk2e=nSR+-ov^W^vYbE38|jIWHZVeMMN20p3LRF zo^FFeBR9ibbU1dNXleDUBj9CZzV)R*n+eR~(sN%(so(c21l*r(M_p?_p(N5}jAe&b zYd_p5%4LjsCs1oY`f0RFCaG^~se1ja=e}@}`^-b&6$4B*xqL~KvLC+>{({su6I{w& zNA0z*UUV>HC_2jyvs9YKg2vg#t}nvh$W~VbRvTLc3F##}Idf6*!@3g6IYr^Pvx2ZL zPQ5WlXAfQni;l4J-=dVLp#ga2^RtvvXx$I5eQdp2XJ__VX;@cWxwr_NR)cBIN@;ot z>fF!$1HSY*(8OThl(g-<`%OpzxI()+(L!2z8U;0r|B&KR%en*5a{C@P2>-{rL!ia* zsXx_)Np*S-Dn-5fYECY)+(XotI>QhaBB8hHvZGoJv$%d$6goXEWa`**N0O&sRnUoVJ&ni=5BTI!d)4=)e$`n~I95x>w$AQeqNw(-71AHZiqhu#8r2LZ*c`Cr%OzS+r)Aig1?l)zBi1*w~sJNBEF)=AedGe z?y8}|oNfK@MW5iKHE288uH0PdLwavvg?Syera?cnow7<{?)>wjib0FL?Vm+|Qh09Z z0g`rNk3G1$^kCrQ1pE-p>>OTt&^z=n>UB zd4=gDXdr%-=3FSW{2erqia^_7>qrtBNbI8XaM0*X#~o!}CChALdaKe3lR6eHp3$l4 zD$|^Hv2>>3u+o+9QZw+1J4`w>kWRyRuJlRdg9gE}+R74~%}r`mRY6ks#n+8n;lfTU zBtf*s#efL;pos+VdRS)1k#?7rc7Io&gID0M5kaqLWeO_} z>nZ%)xZhlGKO|lm)w>w5BOj_e@P4t(Rwr92t+1{)_H(OLzUYQtF$@FeO6?-cM9w&k z$K4r?Si!*zdI9wDPU6W!WZn6tCv`Bt({jc&+?8BT_l=lkD1UuT{}ImJ&u9fxUXz(wfbWN=+kdE8%>ajXR53Jy+Rhjnyr-&1a%}cDKaddo1%a{LyXaBCp`X1!yZmvLMQ| zrE4%k<{CT8!x~%fn#$Bh9-m-;t`K=g&%JM5z+FpPd8+bSYlY1;t%a`d#7;MV4mK}Q2^R&+6 zE^qwnDo*ZY%xms@5z}n&)9SIF=jX#OtxEh@M?L{98Y}XTlN2^jLzPb0u=4Khrb(LOjP*@R2t6tLRjM(q68oo1S22 zgs?mNJt#qUOAmUN3i$|k;7q~elj=h&r*~q6+8yFtev zZGEto@^e`bWKuB_WKvo^%6zdxXhI=}Z$j1m*n~3lnaPVgoVmXO;V#!6M002PkLUj7 z|5}S$YCq5IUEO9&;-4;m@)XiZRn|n2ht1&qNOoIC7l+2L ze`CL&cXuCl2Al%7MzX~_8Us(|b>s*hO;!8vD!kl#u6C}e?J>VdspFovSE3IdGz>i1 z^IUW>y0_RXnOZxu!g@J9uS?*I*HKI8umNdy^p@F-`ewdF?wt|~o4-=7_rbAURlXe; zQ>sW66M5y^LG7!N0x95TZ%8F-CZ}m&qf2hg;y3va;YM9Fq{6S&*Wx!ozPn-dx=2!c zBuI~4VmjJZ-BW;D4fIu$7g7#(>`3{!5WS}Emt5fbwAT-A8=2y578D3D|6SZ!p82B> zdECUk{4-ki#5gl;->LVNkytBVJr{klvev4R-jC=mqpu@USWmC#1*7QzzFU2b+XiV5lFk4 zS{>oheottL!gVVlssjBXu&;{C@YvssYF~{0rctU*DM0*>e|mu4rPr(4G!dum-|~Ag z#JA>wX!u@x<@af;FWMjT=N3rU3I*uO$rZ+;VJy3GnXg-jg#0@C!Sy~+=aw?NY~(`- zWiujL!rVsvcb~nXNymF+G+VaYPh+Jw6xQTY@+I_^g`OLRpYqu zaxm{#puksj>0q*SV^`Op;XpjBD1aMp)vZ^y6U(tnN_G6r=~%yr0$;rkY~$a8XHN=) z`x8yGiXj5-SX?)ds@k4P;~N|T2WA#M zw92<;?BePW;N-<4YH=a+?K!|Aqjm-RG~`3Rp1#ifQStfb@ag3TEtFP$uFldC;lI9C z$M{UW{r=_vzBNr#H5rHA(@upWOh#spW3L81k^nH9@#;lTf3(TMnOSFR=CQiPp)cKv zO>)-n^uSGXvCfgyB`Us?G=Ddc&T-08iK237Z}dL`FrtocF+=d_YQx&n(-#v4g%^kO zN4BdDK%q&1=v7!YN~^iLz(gM2v)ud*EySouoic zz)!b5aHLtvR%|eHO_6>zPbuF;1X2FU7iz3tS><|+j@S)Esbs<9qj2S3tyu8Dbwz1> zFH+{`*Pf-LWE(|2Qp1w_hBa>^DdaElzN)55(?9ZJHzv5;q8X1jNZly*-hLo>?Be>X zZ`zoVrrN;co8eQUMFhOZ?pvaCJtS93!z~_X7fjgT<>`5fCV;$7NJ>;9pfTw-rEC*B zKtmr|D|<_L9{bmOnGpL7H&{8lsI9q+9gH&kMiwZrx-Bq%5oyO_-!yFSatFA}r3x=}?Oj{M34y$H7CzT@+(|cVgPF-lUzJ zfYrpb#X2ZlbRpCu4y`d7Bz4E%!|y3GwHl8LZ1fQuy07Hs2bA!$Rn^vP#YXXFMg2y! zRRY*ZTD**3;_~pzOb%>)7sSm>82W1bcOca^?^;r<`4vJ4cxqgdJLt--Xay^wuy3lu z_jb!cQA#{x?TY8}&)2*2*tc z&sdxv)ez5otjAxz4x)4TV7WX(Oea13K`QRO@qBBFebHAv_rlY@aQ-v%LBt5Lnsm zZ`!h)*-O9j$4Yeu#%H&$fAnvqP0k(FX7gqB8q-&{owo~C7 z-W0XcW}Hc~v#Wg|0dS8_wHo z2JauuXu0gBq1(jrP#w0Tn9(B+xbZY2M)~2YdTcyJymJ{55;MI#dDtY_*ADUNYTujifa2xu(|%aGZHUr)YRsB@v9kx{CeAeuBz231 zE)38Oi)I+>r-(0s2uKX--)8=~j!SIes_62rVBSw?Gd1d_IH)_;CJwuFpz8F^BnX`u z=m<#M96gDm&VsRlYZL!H1ylYG?&2$?w{@yDbKZMNGJjzscrtG1I{IGb1my#%_SooM zZb|X2Sa%Z6=K6XEO-yds-CTC2WH^?w6m{6z5R*exnSQ8Scr$1!_hDm7W}P7<@uE>o z&cv-xdI)FhDV=q-;QD5`z|w{K_-epq3wu+cI!2Vv`Zqmx*W0yV;%=OttUgBz>2lKSb`e5YS z=wybLKaoeJN54Q4^`Q+bBdX_EH`=nHjvM~RL1~VZ*k;cc7@dPtX_HGV@o*D~rt_Yc zMa(2TD$MLpupv-?ybHb$OO)?RCfxxJkk_MmBP|Cq=3MDo^nI^TVt3eJ_5Jfdqq>HC znduio;c$;Yb=JEl;CIPA4aajA&xo8neH{ONF5~o95w9+e{2ct{sBv?zrWmBk-mx5&T_;ONWc{<*>e$hYUUQuvwf+v2@OkApo5F83d?2rld{N97AoCY!K-vT!9WlOvO`pS(~o-6OUHQ2df&t*j(f@#=5AClw}9Xu;-5Y{RUPbaGm@JFK;N2D7j_3q zd?oCYsciG)@^8VW6K`1`np0m5T2(D-jDN)UgU;zceK#rhW*uDR>@llCW3Om?TW3b% z5vcE|E%8+qsJP~shLij8m4FeO&SH!jGif`w3yIt|!#KT495)C42vKHH^XkZ%i+;FP z`Uo12i%rpdb4wGOKp9_$VK5q*tV>d|z$_ZN+xcZtu{i}iAX_|NvEz!(bLa>g{-AdK ziVKGoZM3-bYF^jYHQT)~-aj{dB9L~;Y>4u=2HPHAzi#9umVV3RO_kjtO0^z<+zWk` z@aG?aG8K-*GcEnSxH=3$<&bZ)>L!TG@2%ru@=)iL;jEbX1ERI!5 zId1%uQSBeF>2%pdr3KQE>s-O~?y2Dz*OleO!M6ThjHddd-7YVaw!v6>JG^CI{|At6IKR?sKg zUMGDp?5DNl?Yifo=BhJT$^7?Njrk_0ZC9rWVF|#J6+Ig*#wb#-A{b;~H zTavd|{*L{dqd^H!vpdE5OL1Tg#eN8`o^LP!Z1#~XEwJFav%q_s-1)7n0GCG?>g88G zhR>=BWwnMqQeUjcZrynGtwhItGAVe-q;Q+tUyV#BpQ~rS^L(oQS*@OS?Ly9{7L)m* zP*b?L!A^g;HhIA$EfagLaeKm8$`N<79MVdGVxj+e4`jJvG~53dBASv}#F3(3y&d$8 zAMB)fW`lbL$K%pbt9O5WeyaWE+QU5m>QsOFjWK@hA;gq%`dtdn-wp_$z7H$!ehlEL zLwldY8RmuLWURjHYl%{(z}~hO*Uoi;y%kL+zj#YJ6t$s?63TIJzz+c$2Y+1ojjg({ z$~5XHurGGXas+#@r?3_?8ybs$ynJ6pFAm012QgxCDpC^ZZ#mVCf@Y6zu~@t0!1txK zvtwWF0E+D&cNgQQLr?BY_V@K&0qzzn=X(Wm_(?*5>L&kyEBF3l-Ht^>m&L`Nij|1Y|w(nJ?A@We><8oa5W z(`rhdj4y@IcMbY_7CAh#31;pDu#&M^l&}%CSAkVnyFv`TG zT_KL3(tK!2>a_-zuj;*)zJ0;`mi$&TVy99t#IlAo6v(pqh4 zY`Gm=WQ&>z(N*_CGJye-_PCu&ZzFA8q^!P0GUCKv@$-Wt$D-s&%Z#+;FjO%{$=4e>ZfaSCthJ)td`bWa}zr&E_S4y|vO z%`&E}Q$@NNU6uSSj5S#9)bNcF4=8l3uF|0SnoULf$1^#Tm@P0Z+!&T$_5EM=kI1*h ztwd|n3?zIbz{O$g0S~R;CrQnc!`p(L{2CEo_XZ_BKO-GNEz<)Xzn}FUgAkicsq5O2 zPJz9fl4|Er*-x$q+eZJA!3nr$J1#80OglUDHaSaL>1^Nk4*`2JjuI&TG4mb-=_#Mq z;wiC_@@tW)$Fs`_^he+k_!p$VAD(kQ!hZMVWv+nQah>D_v7tkG)0gQk?*4B^8%7f& zFa~#<^x}#r@nR5?o^Hte)iUu?;gzu7QLi&o!H(lAs^PbbF$J1_0Tw0pE(%is}^W}%Vn+;-_ZF@;S`kkb%&$` z#9(W+N(JTP`AWjH>9_Sa#5%48?bM1qD)~6Ki_<(qW%A8fE@j;^Qp0~)J+!jHiIS_G z>+svUrq~Dm+#OQmc`%JsXC7PsWC4CN+LSWR_w1cDQm6O=2gxwAl2|S=?Dg&`W{~30 z=a1;%@C#A#VG|q;pNgLit?mod8W*N<9!6Sq(3D`OdXgBO$R<3es}hRUiafo68Rd*_ zVRfpPqWP-FT|4F^0`fEUs&|32k7U%o7AtTGvKkl1+;j*E_JC8@WAGddCEv0+p@d8x zZ-0U@NkAr&cjB|6U^t~!Mx3Hf_By&sh*CS*_d{j+H`KO4>C9X^3SLFu=wB)G$Z)s^`zvtC zg%VTD+gqsJ_ZWufA$qFEoRJVCyPS4qa%bW0kxWI73iP+wsg6z)`x**x&EhSGrTt5) zEtfCuT>YzL#JdLmaGEJD`UAH9p2`(TN8uMTvwcNcltkcPhE*x)VR6$xY`E?W&Xfa3 zpI+$2(sryHKR2S~N?FJKdlkzsDsE`zXtlXlpfh7q^L4!w+dsotYlf}ikN#ic#!mIg zX(Vj2vNq6_#HxD57K<`c?fziWxw>0dtWpZgyH}BNvb(Gahnaq*<$T9}P@*^qB zZJZL85WE`9@vbwuX<07Mh4N|k*^Y65lWQd{)D&tquVdC>s70#bUUcZG&olfGaaRmC zpGlD9{8{5s`TP92@w>oQ4a(t^ooAD@PI)%}G<>%^ji;pFnFSe%zO(E$abOp#eGSIiy+3~^|;g!eCcz8S6nn46M%4 zc!kz`4?wuQw>WNo^}!q6pHG|^jL+6W*Xn5horJL#f`OOu3Cmf=Qe9iSx`6l+UkPM; zclLzkXphsrgOW15yu#0k;hiX!ZgS!!1L*E+{bZGu!BH5ixa*oO3nZ(2>`uk&UB^|w zyq~%SS4~D`$Kc6w_HQ{e5q|-0++XWq7JLuV-L1;EOm1ElT%Cy(MTR|YDEkulBjy!U zTS7@XT=L(qdEGmyMHyS-_INMr{i)?KHt}{9v-qlR?csl{sl|WA{6Azf9Z~&c*5#@9 ze7|;J*s1@$+2Iv1YA(k9nR7^P(<0d{NxAQ7mh1<){)LCdG=8EfYwYk=UIU-?C4xFWUzHSZNw%yvoL?^d;r{`%`L z2c3L2)oFe!udaWcir-|#2Kh|IkVR0raYNf_zQ0;Q+TZ4BQB$;SZ~|v@&&V+GH8+ed zZ3yOR`t{*sI-hJ+ZPB`zlP{}}NkHE4Ax9cJBe*x+x+zt$Ce}yH=%r89j&24xyHo(I zo~Csc`^C})pr+k`9@|;}Y%dD8Ua%pYI8(H^PAsXf%bbt#F z=5psyu^4eZx)&O|?<4it?FV$i6xB{I8DcFtYNjf?JNT|yYMDF=xaSHoU}?r@@x&!e z+ncEepYMLLWNxW;s+c)s6PSj`ROq!q0|gB{D}27L6bZaPk<1<(fo0AH81eCeZ!c=w zOT^W8!$ZxXSBe=cEH&{}a`!xU2es|FEo!^MkpTZ2IRmh`i7-rAL)2q;Z)?=pmvGyn zHSnOQq-s{zhNH*j&~e{2yQLWZVI(d|Iaoz6^ufEb)6aIS?PU4RSDHJBqC*KVUCB!b zRl6LC8hRGS={Q8;d(YJ@x3_i1w4Eb>xTI(#t8Z1D#~-Bd_~KKus!wby%4^eHgE z304~z`qNcz{+Bp=6ba8M?pI$cVB=fF`J*HmgEDOKN!$`&`9nPxQMIPcGQRosT z2B*j4h&4i9=%OBBO?%UaIV22qJ{rT32V9UuVA==Z z6o%t3-dcwEf(RizaPZ7QJj3CnlNrZ=6>vy|BziHt5hFO}|AW>~DYq#rE1t&5m? zoH=R>hjGBXn`Z|8u5ywLa zl#P%kT5&s)iy)y5p2vK{$rrq6Li{G|c08htsHF?mU?wyGlRy5xV0kMG#=Ek_C7NxV z1vFL2yzNoJ3cs@cmh2%PXANfTIevMoxEqjR_#tup(<Q+d-EE5VQXu5cQlrm_t@1AVk!iK7oT=`&NYtVHiO|j6MXYr%lWdxac$WI( z6=wJ$Qu~Op>Sq*`Ga$YLTzS`@+t?bW!1nO|lZRh&^8_Ydok)e+1qR_&82S-0-s9c< z=+Bo;k_S_O4HhH*VaZZgXMd!fxvPRtR|CHlmIl1CP+E2##;x-9O(Z$Xt#S!jv@)K% z6fF1l?IO|s?Ytea)V9d%{Nl;FAM4AHYzh%1L1ZFVf>0YyrgQc>a0s=A;E$NwXE@h_ zu{NJca7iWPG+C*4dJ)*Y!4e7I&(=J{b3-IjY+6aY@%)Z$`4KR=CbEPhTQY>Z954I) z&luux*Qvkm!YXg_!CHF2+2^J3lUru}L85!oI%x z!ZAMKd?BR*NulU^j+ zcw3i8mf@FjH=hbdVwlKykJiet2|_L;5iCrh%60QGtE9ZgYyYq{LM~VpI!M6Grdtn2 zXQ|)|PK7d(dk)hBgS?K#cWbNxsg08;sc<7XF;e=?Z(4PWC}!-p*AfXBYNnXy^t&5) z;Tyrr5f~5?_$^uWv6n|UTrP1WlnA=85rO zha#)z_tn0~)|w*D>#M%}cQLUFnt0{@PleYUktwipTjb1}T!Y_nfk3|r%?PD*TF8PH zpjioyBLvU~DCOXoNTByhAhz1ycr1V_U>9I(V=9lIEzo)-!PC`bZ{R^mythX9v0oK< zK8JqgP{(s__kd`g`$f0fi2!gNfe9O}cGkdBr_w>1ow$1R1HO1XDrmAdhPH)5{cg7#5q1+RMoshqa( z9K=oN2hsW?Xg@#yetMvk$kfi>T3j2tdK?|>P|UNKC8-V|$d$FM{|vDgY3!rfj4MIY z*FrvwTEYI0L2c@x4*&rpSV51Sh%b}VlFzbP`RC9PxGeabe09+28 zJd^00LP&LE509A8Df@`47e}id58$`+)*FW+9&Nj=;E|kl&5!*RXp3UVRPG>5A_Afz z>YV}Tr?j@)!XL@mpvS~{L)y#$OSxE8gMca3))56ph63fhK{?4z^>Zdr{i|DxZC%Z3EJ2DC`Uw5{`? zFQ9EdA!~8cS(i}Y!AD^GdKFp*1_{dPwe%7I=s0bKI%M!L+HAcWk@-cxhMy04A#(cJ zyO^hY01Y072B4k%`Zv&>r4Y{C1sEs}A})HG06-FAJ^RHWmk(s^ zKCe$dF8am-!1Tae9$NxKOCX2R@s`I}z)0X&j=we_yHq$d`WGw!VsiuM+-H!0R8-C+h;w21CBrw z&OI~MtOp|aU{q>uF#>W7U6_h(oqYx5aOU{+#?r+DSn3F5LV4E+p*3gFq1u@)qCx;m zz(&p)Of(OoBnm)m`_;sP(dcRPd(JI0gDgqK2X>XSb=D9FblH085aFWb@Ziplk?@+6 zN`qWNA!~nIXElLT&cKXR&l=XOcSR5&C&WI(3D`WfYu5P!^Kqm}iq10r-;)QX_fmTZ z4ifnOO|)@bt%K_DDJTb+Awe^@-t}nC83;-BTEP`x~a)AHa*YSYeF6=$ju+ap( zl{U9{sFC2ZCE-xza%}ZU?cuR$ZhNSaHL2MrIq_fFYG8X#>VLDAiy&Fv4gbyJbmln7 zS^w`exS(oMW$phRvmL0Pw$(=Efdk4YZAd$QsDT4YDs9$1`EB-p*t!mQtiCsHdyV_r zdymLW!_F#7Wu~Elv_qjGmAtm1gyLi*m81xj)sU5_h>BDqG*lwmi~i3Y$?f;|`T6{A z=lksEInO!w-21++Df9$69<$$-&GH=y4U_VDD?XpkBi@+nnyuRzx1iU{uc`ICOgD=c zwd?59V=ubjW_n~gh~x`CpIhek17NKlEd5I2w0RwU9_;@2+a?`ZbVbr%AUHo)|IDxZ zrNLg+orXIkPNx^v%W-y}KI^MBuwAcPW?0d&%bG9GcjRH%SKqf9x9uQUES?a1xAKL{ z-!8vq+M||!<=C`E9erKwN)OsRjue1Qp>H|4Lnp4amj<({H_X^!b-Ea2a#Li#(58z3Neo zgxE;iDGpK_s%!fAO>CdC$Hq1E8jNT(30sAw^?ePf;5N7;%QM$~&8jj(mclFdk0?J-GC6cK#Q8 zcdt(Nu2R>1?OP(md|INh(hi$ztS_Fg&+e5JE%l1+esa9_=94Px+(PEX9cruGx`H3A zG!`ps(+fYp!?!o*ig@PAosyXgcS>Y>?v%=O{i>e1?5k0x$5)X|x35~6E2i{Z`*F;B z&uC~s=%`A7%_v7j@tAu>jwL&Kc$^2dd-0%-XFN;WtoWC9R53f+SVDzGzxAH7Tz)Hk zySTk)j;ZXH6?se7EdeqJU7i0^4xrl-P1RO&C@?5DZ#CFCim_; zyE8_P{pQ8L*i|v~lV$rPHa6Ey|GsKA{xVtlpgH!24}aB+{FB)D3ufh`c32hhC!G(A z>{CEJW?VeTs~HnOgZ7vLD`Zi7yH)@CWGM}_*HO7Zq%KO>*4F;ftZ96F^Qs+0xo()K zPq|gSR^zS%N1(5VYstea3j)tSd2;Twcud8D6{V#?m#&tU>U4emGO&JN=g?mN?rX*$ zHPTdioOcaWZuoxuW!9c&&DX}NHh6J`y?m#lY0$W^x<*BAtMK|Du03~Z_po@b{;H{5 zCwI-ew7K*Bp+(>K`Y1;vUV0)mZ1+&rPkW1j@jC|3m5{F7FCVU}F3vcY_+;Lv5KmUc zYS$I|FI0=~6v=ZsHM)gulNNX`e0SZBe2bku zk=mnZ7#0vT-{iat-#&hmrl@6%$0Fz7=fre%v-_t#lY6cI(RS8#>z&aXjWX)wkH#BB zGrsb0>RtCVe55pzXM6RqdY0eY#Zvq7x_s<|GFrUDUmMvBJbc~NQ6TDSsOy*Q-A{T7GTkc}CQ~bQ-w#m_x7-FSM zB#*c~nJ&_QTK=wxiSwYq_Xriy`}b{2Oi{vR0{Fo~Ix_MaR@HOuJ7i^(M1n^(7-LbUWiqtXW$?TKBG1X+zU{ z%ht)NXoY3W#@ZIn-0}U_xtbH&YRro|_liU|2z)kUelFhMHZb%x#%#9d@n@^<9TkZW zX7#zTe4idYYB=jKM~10ixWJ5-=^KAWc6opJRk(`N!=*bvsAKWfjOA~A%1ZYvPajD4 z>3rk9VqiiA zT>Ai)XzxmQz$L`+Nrluuq#W$8O<=@#ZI*8+MQ|2TX(|^+@9_VY;V|!6sF~+|5m0eQ$UiqMSDW_RWUiFyqJ6L_v7VZ&_ zvRrL^k;ANL4$I%`xb&nCYBfh{m745><+f$67LS<`*So0TN$Ra8NzoeTC3!lQi|6d` z)zAB~O**V{hW?v{(x!fgkJX*d=t$SQvG1Pp%G~Og@`YhKB2UlQg~*PXiLv>vh#Btc zo4z5&ZIPA2Bh|>g=M)A4lw4i*moq*K1$@gE{Cq^jX+z7a7$ersQnA8tUx|u@y3YZe zwfDEH+C7&LNa48ZaxYyu>VeHJ+hdZar2>}k*9cC_P9_Fq#d9{QyuWwg{u4@!O_mGWy%30w#EY03G zBAh)oOeKj^&)iK*;5lbcXcYIR#@?ve!`VmkXGR&+Wgc6;dsa$^#;O7NWZ zj}}Euzg=8szahihtrT6E+0eTy&HM0iR_=1UY&{ zcFG>|>KTsPXxLGhoYL%g@0)BaYf3HJI4gbSk+@Bk*;@fnTSU_L%*$#j}>9X(ixUwvZAY0bY-ruG*a`L?a0{nwzdCEjGD7r ztTR()f#oc0a}e{*(ccZdO0`qZXfCg796C5Wh56e_o-_Hu=d1E#zK$LHn-6XuRg8#e zO!Ahj-BlOf>DMgu>Sb*0iz_+@9sE1p*Y0k*DbFpDaM@&i6kl@69KVPgYBt(IbEU;u z?;aojVpEfPP+q+I#!RQiL#KNLk9~QX5jXhLJ#kXMr+iCb#P%lfG3l1d7o3MpoNj6{ zoLmpo#})OQ75CyxKH#!@5|4%xe0LVl`jc%V7X?0=N;WP^Uq1cR>)K`V0^BwGOSkO4 z_hjvU&&;~O!eH~deckStf|H^@n(9}pMxDLT%F0if9pC$L!{Z; z>*)TgWS}qV@asNzRax`NGj|_zk6R$F`@BND#YXyAiw|@Mnfa5i{@6R_By!K(`GVhk zyQ}tIWuI)Xb@|vSX2su;n0e?q|4b$CPMPPn+StZ&M!4I`n|H!?>^XQSd96dkV)w#T z+zss&JgnZ@>Gk{gxi%R_>79AJe%iXi=M{=N2N%viUd6O>Ka@W5)1~H9N`9P8sv+t!%Zz7kxsGv`pK)2BXtZgZ0$)ypq)AK0%5NiE};oLsvit=&0o^=Hd< zT+@9Qc)ou12wt#AVO?4wdSgq%p4KT#4GxFsrE1Me3o*9W%GexaU*o1N+9Q30Pk)|> z+x3bgYwTad_m;Ga#t!!~8bV#O4|G_qxXoT+_(JOam#t4@BN=N-4t>jLtBKlFBC^Ry zDbBg?rF>Df&L)1R^(j}Ca-TTXlnXd1^?b9rmYzGjbwm!HjXEdF7aIUf5TzHs2yw*eh{mni5ik`IF1r1|)`+xf8E;nMk z5%h?mH6*rB-eJ|2OF668>9Z;n`+}=_%pUj1KFd<;wrU(v2|4QH`+V+5 zWUbEkcqbgMQDfY>ul|ZD2w$scT~v1K{3$DWzAvhN@{X^M+9xlXJ90F_HG$O-IC)g) zaGAF1i?i!DscmXVTz1m6?w79RnVygGUe!{Y7CC&_{z1^o+E4z?(w9zW&Dd-1$UFD+ zZ(J>UFM|67yaCXbEMGq*AjGb9$CsOR>|S+Kw7*SCD0+@WZZ6w8^olcY@8$ zjn8@RI{(B`%c&zqe6|fYE8L*LVRq+%NjoJM*6lME=Iig9B4T1Vd2q3sr*?m(suyc4 z{kgxbto#BuTj&0)IlUnY-rwK`MXHpgnE#JffH&#MA{ z>5Lt8XjKbWo$g#xFk-y>=i0BopMMkjr5UkiY4J9LK(}jydtcrE!^TN+4&xv_vk#dEhi?1ynyy)sR3s$2#<)T!qpNvvMS7Rvjv4to z_qpfPR@F$kWc=8(^Xv)9-q)+mgNo}0{6EHo^m(#gv-W-3H}d?c+qVOD`d!}LTo%pq zkFTF+b|@uH%&Y7Ek_)LOYwx8^D{AOa$etmly1H=n?jzk<+iyF?tT`OwR;wLo|KzI0 z44&MDF<(@KtIsr$Cy*rQTkVLyvcKj`s_vcWUm>-@(e*=%&?=1tMxxVppc za;~P)g-apV5?-=yDWq)O2^e z_~qQ34^GqGo{w6czcPNhP1ekI-yciLN1FykPKWgFZw}X6-|VGW&JKU2NWUuZC#-87E#k z?9(g%d}hsnc!v74ZxP4#pLYwL<{Z9terj2kchQ|Z3$^woywN+JbUrDIti1w%075(> z$9S61$6J`U&GN+`ef7 zWAR4|2W8!JcIH1dujgdROIPW|i_Pz5TQ4eSN=FAjR2;Fh1}!2_;Y^e?FVVC?&0&kWehzMZ+(-baqnhq$kkhYqAEHm333rNjCR@X>vIh6i@g(c zUZo^oR4i9NV^rg=rS(qJck4B;M(?%vF5mjaJ4o(yd_~svYU_YQ%O5J+sEBs!`_EOE zRz31@ck@pFqc!);H_03C<~(*pJ5Dx&Rbw$4na_5*e(2OLdiH+A zE~-A*BTW9{?e|!0dvWbh@$akky+*sV-|0u4+-{a+_`GXh>5dgHS?hQYuGanHaA8HE z>m!w@OZTTm)hb#awFq%bU*>yI;iL7hVK!?;@#4z{0*TG1%wzoTjfOlJ?QHX5Hc52! zv4kGH+@+GK*P=hVl0Ey|UBg{p=oLorX`gj7tewEJob2!$<03lubX}o3xNoSott2QSiC* z%H*}iA`fPC&N{hor`XEEQwAFR&rcbo6n+rW%zHHZ(NBjqO?B7f*{GL4 z56_C>2#GE{dhLhy=?L9jpEW#89g-zq54Wu8zxeWoTVwfx*k@WVgj2?XH*>CNL0HNa_NOsc%Z~aceV@D|L|5VXv>Gq< z(7ai(tnw^&{*}Qj!6p0aWCPu&Fx&fzr;3be+IKmNesvc4PN>>K@*|6m-;K>A>0> zF@j6^E_`-SKa^Iy_?KTi>&P~-&gyfF-zMoQU0Lnh9XEHY1u?lZ`M2o=Ec7l7K*m_0>l0DXXqjf7ZKOGE~5TizSYYZE<(-d1Ak#ntfNd zw|fqc#{H4wYm-<>c4Ll`--T3IAN5Oj3oQ|r9uPi}^r zE2Etr9oltY+oP`|aFyAz(mzY{F*>rdbpX`!1 z%K3h$OFHK+vpcmlrQ}2Ok^a6^vsD+{LK=4;5^vKjbzJTf>wR{oH^0S&N4}a@-C5-w z^&|G*H#B+vp8D>yReoiwcbSx#7F$53h?YrGK*QOG_BArQb9xSxsIAjm=TZH}fM-Ls zdQIoGZ8(p~#X z_a}S2v6~lr!?W~I@?*b*gdaQ9_s{bGqQt66Gka@d9%FX*fy<%3Wv(mRW<)5>QzrpxpaXuqfs#9mf(s;L8(NROuD!J?#bHAwX~m1)-GGPXr;aD zg@Y$oo7>eh>+e!FetW|dtEJzE-YS|rAX zPQKykzK_K|xkg#H-qJ*9O7vF2j8~-t+fy!`$ovf7P2k9nF0r3Tn0If7hMj5g?^!2a zd0f)ve$B%ei1V1&Vym*^wOK;PjKl*2UXde({i_1x&Tg%A2~(`EPrW4nbna>)j)ps{ zcs#weuL@uy8;UDuJTP{i&F>iTlH(r^NXyXXVKm>KbeC?=a-s zf${Co6EPcRc*j1Rk%C%TkpX`DFvsGzV#N%7&C zxmo?g)n(6v1=hVxZai9{6gR@|9wSsUKScUrkD5z7>(Ii*pQW|Fo2-mF zo*1{Kjmt>O4H6*Y)D?$mWX~1~X;!;;hmSX!50c z-CHcqk~8j`F*T(3@QlGwe%7nr2S+ljF#VAGYnw!8H;AUqYrd&_@8BD8tB{=dON$Fy z_tzAtTe=JPTUERs-tgn=SCwBKfxn7`!|Ts9eOsoy&e5;G@e}jI+pXUi7w$-`kl&%v z@tSGb@mV(dzIO+o$u6ZASMokthD3$y+}_GGZVi0r{nmJYZY{U2^U~ll19=uRob!0N zdv{Lp zVSZMlKlgp|jqbWTw038|3wzY*cZz0~MJGR2ZnvEOz0XoM=~>PDebX~$rS#i0ZctkH z^%AejZ}Lz2O-k~R50qhJTexK6lOO!gk)C+VsYX1_DPOl1GiT?-$JkGCO-6%tOsVp| zbyza-!KBH5f)p(T{}e*`&p8FrUSDkNucX@nm>}}6 zX9}Q7KkO$lUcD1ERMj&j%D-*K&QKZ#;R_9_*I`2CcLOjXQmzU<78ZobluK^KxQMaC zy*31yWVy>W>@Yc$c#`BqjyIV6*mB}x0}ESAT-;@08~Je2 zPYkAhxQLP>F$uIN44X%Q*cNL3|?~+d^Cz9>CU<><1`MIS*17 z8~}nw-uCChCW#s;Ork7QNv0yU zFBw}waJ@>VXxt7{(WpC&ts@|vBb4vCM<|y?Qm}0V6q|yrB-v9a!#q^ z_)t$U!RWBFPvF(J~$r+S@V;NNN zI5H^#n=`4@b!1Xb&p$>%rN^jHX=Y&_q#s#SJcj;UEIv+gH6EuNGR&rOn3hdd8Se?o z#o!YZ&C3(m0z%;QlT=z#PGZZ5k&%;Bs9a7_rk0+f0<4gOEhT7n=1|#a&%ss^BPORQ zn@^plYJo2o^CTdjT*|?=Tq<}LXQ+`gXQ=on=21{=9wqQ?9;L$mEagtYSxO*wj+(SS z=P2mzIf~slpVEFTpHjhFKyhs>pd7qWfVmKcNu9^siHoi0srWoUPYIk`h=mZ)%|a}c zxR_gnMG+Twi>R8iEv8E8S}~P^DHo`KAG<)s@Ye;ZBzInTwwDn2>d%E! z08(FsS=8^5??f z2DXP_FT8;*CN6mDsc5gOrwXIC9`jblo48~wXW0pijqR}_8=C^##2@kN$gBa=QNgM3 zaSjR;n@GgQ*2IBq%9-LQy#W&>l$~wBA;u6C|P*`=~Fng&DTyJ4w==*IHHyDp^B?K%_tr8!+1c1kz$nWJvf0>f{biFySTm+b=+SQmiHEn7dO)Hs;nlmR z&Rdsqv$1`K%uT0BxnE9_RyAXKgn;+BfVfJ0ROUa{lxF)^HUhsCSVXUYdjtnr0ZDg3 z#Fy)Y2y|!!<460hVWPz1wI<_(MlG895R+hEh+OVsvM8&8Qw~|*qr$(z);!n{T;+ru zn$Zm1egoOGVVdafElvr7p0KvC1yqSN;E)2!&gEjD;TCKL;j^>*`If05>JIpAL=$!6 z7D-?Hfs+Sq>4$IA+R}>267u3(LEf?^()55iTw>_iTTGOI-r&&CT@tDm;}S&5y};_& z#>xC^kMlhsQn*LC9>9g6poid}e-D-LYdHS!0jb~mDaJ(n!_+iTx)0FRMh z!-kNoQ?a0q1$D9q{;K#4n&ef3m3ak8-`^0Tqo(dcd7Q}KjSO7(;n z(e&CeZNlf}?U)>UB|6cDDWb3zh=ykum8~m)a2)(ZG7h)Hejes3(s>A@tzXDd$RQ8f z@Q~_~@i_GH8*Z5vavtNvko8Kc-45aq*AJ4*0BF-M5^{PErJmhEl~N@R z?He1nfPtQJLOm#bqDp=E?WP_*i2M_%PiLCH$JkKPAf|>^zJd4c#<;oEP5_y7dBg;Nw&oWsP32+V&B&|@B4fg%#Ns;y_<$0!Zi8w){sfyrtkOPm zFE=5BhnOVCbz#y3m`FTGSdxpJxJ0(q%vp~|!4VzE_FS4Hy`ltD>K9BDSxIv#5_L!D z%2<#?se*#2rMq!3rya;Q9F9XBL3wLZfP2v1qdWK@1YWOhN2 z9cfakOvWp5>fc!v+5=K%n2-Ad3&fwf*o{N8W{%e#_Scn}y#TGY9QRTh#r0waL;xyr zNZp2npc-fVol!T{CciHLn?ArVy=Y8qNqVR>5wy1t6C-?4Z;sNv48GJrmgzIl#%^3b zQSH1)<`Wg=fj-c`aPD|k<&p4xs-rtS2WZj!@h}LZJF(PUEyAHS3&wrrL4%*D=E8gd z&<{r(QbA5`TmmTJ8YW0gzsBG!3>_MV>9@;;Gzjt_imG~Gj&?1El%8dRXV0KY z>9uaXae`qw&oN~}i05nYakeiB9SVTGg7Z6S+Hl;pQ7i*9G4RubX72ONBt1lyn5Dc( z;Te@~`8Oc%_ZGYoh~7_joe+F9A#j|F=sFBE6a<;9I!Af>6er5uI&KOC;VmXkguB8g zg}oEZ5QA{*(oD(PMyh&Tfk_b#CB6kI4|a^JA`Ij~tG46a8+IUsy#0rE&y<2pUPX#X{}gE5 zzn{wgl9YC(|3B+u!f|_*(4!bgJ)QtEH}60ciX>fu3C}>8@2DMeB@PM3PO#$lJB%y~ zxj}$R_fOzjHi$_R4ykXG56uOKZiCzOJ&)A^JdEU?XVA#xku8+a4G1>9Oy?xx!O=w7 zDc}~q`VeO74}rqx$)rM4<+I|Gp#!$ZvB~Z+wU`I zF>4}6iRRQ@L3w-|htAz4AlQ{nBE0x)`a1S9l*o4|5qcXaX~DhFM9g-W+xRj^&~J&E z67rG{YF6@J`lkEiN}1@+7izw3vGkie2C;kvv7~RNguBR$5t}1DAJ`&~SA@KtW#VgK zD*sOce4dd?{w#&uL_!J6wzY~3TEWrHA@zSXmGmO`)c#D)$8IZ9;aH!;`8`tj2Ae_n zH^R^PITPMjyxzn!0YGU7J@hs1F~x$azhP=BIPLEvdBT_=+y}sFN?&%&he`2B z`8%eq0uLrUlDCaaoezn2g9w5c52lTg8Ts2%*{Joxzn=Y~-(bis>TQD~x- zIBL_#l;bQRQ8k(mfYN-R?~HlI2!UGY*bhoi!4J^m3BxtJxQ)?mPHxz`PlmfiT+X{# z3k^A_l1bp>ESk-)*w6_9rZ)P;2?t+$e?qIr=`RSL+^`uc>p1W@)93?vNct85Zq3wR zlxm@0keL;HBvNe5EseJPf~5~0X?e6U9+j&?Iko!c+*Q3t}TH zEJ0xv80kPGohpcn)e%;z<5HQMo1${>aUw+Imw0uLVpJX~gi=;{F;CVDysixe(@6vqV=aC|oM{{?$bJT#ozj`99r zWwH<(n>o!&8%3N{2W6{4=$n62v3dF%q{yh_&kgR`V zB8g^lFr^9Wf8JYsum-Hwg_PLStgka9Y)m_pjpyYW3xylP=lmu9WGF9Z#O|o z@qBIu3Rz33=386(uo!ZHiLkLPp{e$sgELWq-Xp_gBBfGTfAGXP?NvQp0>lh(eI|`5 z#evihIp9S-4|#Y}7jp9w$B{%J!nwhkOO7OsUJQ=_nsk(sIjLT?N&@_OE%EQX`s#+$ zQze@n$IFXm@-SrxLwX)@2P(t1;Vm#Oq8Sphd;(LC7q`av412-@HYj?MFq8y0@(^J1 zBQb5t5JsY|{U?z35n4Nan#HdnnP37;Bh(*h8_7@x(oe8t)AKOuGfpavzE7j3kvRiY z9}XOcWY94Nlbj1j*drUQA)MKe)`c`rnzoYkLk4!zGLA((+O$O>c15bm$Q0J1qr zLSVBpsyf5XkA}vm{?du#EvNBbs)K|Jp#d5*sY1(N@3L|TrpY34Ha1&Y464tO@(w9O z!_zJ1W+JNy*d*Z7q>IPA=LiID07{y^fl|JJGZ7`tkL0qcx!67&GG zQ&W~$bp*fn?FxZyX{Xe`H7<4ykJJ((v_FI)blf*4s`lcRCz>UJhl&8+T#w`0NaqeD zEKQtBST7EtJ0wI@lC>yR0^n2Q$bwCX2?JgP-h0J3byyD2Z8@gn6G*uau0CTWC zA=y2jajX1Iayz5dJq^nFG%U4qXg20NL$2b?MSOTE1T|DHEk;whm=YWpUXWtmi!;f^ zQCI?m-+GCU>LOxs-3lW_*b;Flqn~6TDokkutYK?Jn9>9;C<*xY0Xoi){71ky;=vc_ zMqxP7ZXU$02+kSsz&k8&EqM4-nY@B{Pb8AOpvv^!6);`^%EN-@#70q6BMUhjUdziw zj#5;&;>^nV$%Ght!^&+IpD~{lPUUs=M5i0u%UTNKw+#OgW;6V`b-jE(Y%J z@Jqihlb1zF^316yN}4H7IGO=G98={;0T2kSzw5ND3_!i|q*`lLo+*Eq8+esgj$@i4 z$pu+gMe&euLO0{d8=gGypa@FKljebs5-DnxEYpS{HIciu`YvQR6bcI8t^WPVnuLpX zCoGhg16?n)N!~;eZf>+mj#{ptk8~s@f-W^!W9b#SeHuw$y?|ThpNjm2%iC>2;zTrO z21Bz_R;RkMVQHtAEu^aiIsko{`elg+&y%oyucyejUtlnPw}|hu|NdOJCc^@|PX%N; z2dZj(QxvEGs!eB6u9z?}bQ4Ahd2QR)r(FXf|1A_#dz^j&5esKU5U^?l06Ksss+>&K z?9|kx>Rqt2D1t{r^nMM`sfm8Apv6=nq}XVIlqdD%D9i^rv_X)Xiy!x=FEoURSU{-h znSFSN(3+~voJ7nK`7*}JD?oV&Vn?Ukb8mc>i~TLHL(;cKG&$OBH zgneV$VBgLzT%QSY)1kI%{yH$~_I%uGCaQv$o>7wyBnJ;>CywuaLE=@a6Wir78ko+tUAZg=eOQu&%?6 zq9oEcpql4A1At-}IAnkfg5mUGSOB&Pf3^vX?^ux_)crlEd-~R0OOO=zClx#>U4&N* z9o$8Ao*!HM^G-uQ5QF|kFQ5w;$tfhpD~km1rh_N(j@sC!w~(Z7kR%(LV>d<732UZ4 z8k@>gA@V)_y1y{8W3|n0 zlQ``CWXbbvdKMa9) zx$!u!AnKmUORn976p<^tCLhA98}>Ey&cHCmnW&q)RwJsq2aP};hZPPHrws7?!j@P5 z?_R*q81O=Ck`+pvfvy@;9^S*DDjPfyEcTnDzfY$VyAZ041~IfAradY<<08cNzehbYqe*>mBEv-fGbnjYmLShPhLi_)N@B!AFQRnK ztpMVJ$4hu*;ijDj?X#k8ulsp+R~3MkFYs$b%jEMURAa@oC49d==T*Ht?9}!`nCR{2 zV=`Wa^O3(bRT}zZGyT}0G`7Nf1@!yl_$-`sHPJqCO)%StANrFgEC==4Ftw0_4YlB` zumR)OQlqSC384Ncu`UrUsE6;qy&n zkKyE@8PW|K)(Jn!k4Vz@UC{bW&r%UQ%gsCJ4GmNWET!L0HuaG72j{@11E1stbHKpl zK1xbIuN1l6#aABrAN8d<_>m&x-)-XQmn6OCTqb$Semg6GuL2Zm137&=ed!HOs)JVT zX7D5V_Yli*D{szv5a9+)F<>SA4YjTTBx28WBqHc-4+b6^Bo#v9`B1SvwSQ65tb4o< zO8XAnU(mx+JVerC^Qa^0T@sVbT0oBwv|{>VkoJirC8}raJIvtm^OM)BuWvR0k2XV= z3?~GgjqSl#lF48c=wDx^GI~6&LwO@O6atFq?>MgiNzy~W_)?l663+9fTJxL_?ir2Z zurc!8$WFa-h_AUVIHbjak{n_B#qctu(RCM!Yvuxg_VAO?z*!7K%4gsO5}d05hgu~_ z2=p<~j|EI+BG(EI0R568A*g!>@^xV96Hq1&rKyfXyl7ODA&L$3!6^T6J_wq1eov>M#AkHCopiE5s9~&Gvxm6U8Xt%w9lM`h+vhU!>Gd)9GVKJ z1bB!OW-~A}9U zKor{|QWOLavgJxO%h6YfKLn}nOuv6Rw-l!*CJql0@?a?bl~?SFTkV14X6X28C=8{A zl-2qR0g{6?8@C#KRU-Pws`ESrm!OcPq5A0^wQv(j>TnL8^Wo+50~b)gnbh5E$u5Wt zwn2->Uq~TV9x3iRp0i-E?SHnfuVI14wL=z3Yq$fc82}yxFvgr?!(+5*EUcN8kR?A6&ZVK7Oop8H}P&JZpGM2si3j z7()yRE`})KO;2tyIB5b)Jq{5Q;aChL7_WB1$&SQFZSo*b6dDV?Vsqn2rn`%&{n`L7 zYEmMqSqeLG#(An5@eg8fgcGAPQPvVFIp>$a=m0gkA{A2F>cJEw?)7meq2!4ly2ruD zdkH+y3@C)CniOIrdDqeNU(6w(Z-FO}Vk7@IFit)hO>(Ess%ng)zIg#T1MWL~Xyo+> zx7-~qkA)tA=f4wpIIgAPqf3$VGOA3~yR>(2fn?l~WMf-H6EGtig)d_U5@8!z5Z7k{ zYVsg;8)#J1&yZ@W3K$cfmB!)ED%s%3VJUMh5?H~MBBa#X`zqlF`c41wt?3+2x(sEk zU}_Li<49xOY5+wpK<+_Pcmjzm2THw*4C=Kw+&AZypzq^(T*yq6w~{%D@VFHp{ZUMg z`jj!$&=wymVJkcUs=Q1>dR0(zc)|#-XEp-O^C9la7h`ToswDqHau_ zRsp2`VI1N|iC-BK1S?@>%fUS5xQz3s!@9WMAf9dwLAebS5j92YvV5h4xr^NC1}t^p}e;bjAAR1b|Sh+hkkA!7nGB+d8t zjz(!6z^+0Q;2v>4A=KnfrF*$!$(DU!gx`ORu!469Kpi+r+TgezBzcMb8Pr2GJ-s-Z zEc*u~-6U+^yaA8~_`cN{#iAh!1lys-DgVuM3W^(oXvC-@xr=n##ZT6`M_P0p{qb1)tns`exgR zcf7EZWWnwD3YvkB>~Q&;2!(rnK;cFwe83t#b>o{*=Ip)z{ai@OZuRCP+abXfh(nv< z;W(}qAXPNx4z_x3AZG~tZ67%fC3p-@!D?uaA5($g%)lYjR82r zOxlNnpkI2d7R{Ag1HJq$Y{cmOd>TBt4`O;CgFxzzenB9p(B6TME=AefVb@u?n~yw< zA&#cv4hYGksoUXbiX9%hQ$&hHkEq)*GN2Flva8{tx;M?|(A|VxsC6rIIzf8V)#|zf ztjpJ7ou`wU$BdK0>yX>wel%smA+TL}EpiD2)shG3L=%i8ia~cfI5BvTPDDPL ztO1DK2VK|(OR-QOQw=3%QSK3jjfA-Q;!gp;!3?BFYWd-DaWMP-glljIXc|2_0ZPc? zgR=v88HbR^o=`lw1zL$W+#Avzb%sa%K}>&wYFT9**Z&X4d3dx>1(}QlLEpJ52lc^} zU8Vc)3t0Q|aC#%u8p)JE-BHv5ky0>N*)NXs{bb?^NRwml7)iA@R*q)`=nr#16Rg zT}~^Ggj!s{5|r3EVWuO;Js_q27AeK0g_?VWsM(RTmYfH}JfV2#4`L+mkbZ=+m_pIbCh<6+?s1&4SZ;-eFMC8UT<`mwMZrsjP`m^?Hov*ArjJdAhy z$R&&*?@sJGUk7CPzL9t)P`bjBtVnly~cg8LFi%eG4R^gA_V@zp|gT? zNb>KdYEKm4#u5|oyHV81HEu4XpZKAleMM>F^cKi5nrg}`qe04hYIKzzzxv;8=NlX< zF(4TL;zrs={IaMuj$#dr0erS0j?ei!`4&q&d=^vhDe)m%Z_6cJ}TK z&GO^tL;N@4BQChHDvORRc7jRktNibcbii(sKI{;a8x0+TW2*D@)O)XK+@CgU!JYR@ zxqsgSR*f8I5<$MnRNLKq5cFR>fI}Ln`XKcjSxi^GG!k0TPLMR07ANfBI4J}9C-ch@ z?@bd9E=T}T+;DJAi6U?b6q3q6;h0OUTSxOcNW>qx%%e$ubL3ynRq6cHi~JA{WOWF{ zE2iQ^>Igh1ACab74rZvqf-&=)G)k3SZ7Y!8w`!1VT2pOo}u+6X;hR65v5SIaDurifgsKL5gZ^ z;+I6nZ$U31KGKUehTI0`xchPNPxTHIY&i1q4M=v4S8sT5yCqu5HPVIEbH}cf$nIqcJUNM&1a% zy5jhK=r{OBVu`!^WEV9}JXfI*`>8bgZK(AyJgm)n$ghar;~zx8EzducZ~gx*zj~jv z>1+zM#N57eNjw@X5d=$|X_E6Ekfg=OnUwj=ROVDde&55Vin#nH_*J1XoqI@{zdMzB z_K=hcNjcgF+jy)lvgJJ?qGzC$&WJ)p|j&YExJCG_Rnu5qKT!9`j zrIR2~9Lsyh1qh+vlc*N)f`iX$4+!`SZmH7*Ea{_ckrL!Wibts@VrEA{l-es2@*fcp zK;;~isGV#4AB%vfM(FqSvXSj4=^;XJns5nfvDz3OU=eR{;633jE_B~plBn_wQxH`R zLnqcxqYBm{4e**lN@*ILKjU24_~`y&a?EfjuYff2%B0Nu z@F05w3uptt{RK370WK6?3=^wIT0jUDXEJ9H@;Oa2dK5suH}od@(3sn1lu;1Tf?UN{Is5f`-9t^3Bqh2f|8b@`(QSHf zmTriK0$T8&MmYuDI|f04<}3V9t%n{5%_35yI7koq5t1%^G)9IDrEoU&qMmj(j7ln! zv@2nhi0u@vc}ERFYXq#9^i}u{?=bTO zK$j+y(3TTS2|~;DEN9PU;MYZ1k?Dt#zbVqtlT0bpa)NqVHa*v4R}r3Vp?_c3zBX-K zG#?r;fs9+6q{_;9=%Ai9l+{J(KJ>kBGkhr4U7N#;BJ-01o^`! zndB_|9qg5ytHQ>1W%s`ms$dSCo(J7>6cGFSkTsicr~D>}ts2}v(&umK#tEFQ0Rocf z_MiFNu&nE08yx-bh1o<8SLpT$Okf@llFgwG&Mk5v@@0`^(gI+Vh`iypTKzkaU;MR7 z`kG!6LyGz{s|Eg9*x%#wI^#&9fWy!##^CWTQSdgW0qRH~AwL9jA?!3Y7Y^ajjYA{^ zEuA0TIZc&D4-P#|rVK0t+hua8yLt0mfC^JduFbhrZNB(4z2r04o({It+iEJJ*CsjR zwl%)!-2r_f7m7fW)>mF;5cHhh+r81)O^mz+?8TK9Ws#EpbR3?)y^V0y>I@K7949Sn zVZe4G=nUmgJPu7gMMAL9kk2oA@X^UR6YTqb7JBpeqoNsKOZu;Zk@zD^dYjEYLyGb} z4vthlUH^0m0NcvW4P31+cdCW;fFBymvXcL3TxkBU?&?0da zx#mGH`IB^g@(UL5h8cJk44->}lzHkbl>_&!tZ5-2Ne5;xJ*HPmNK)vnWU1L`ZxO;D zrOyIOb!bZCD@an?b4+z2s=ntym(SII?RTmXU=Xj!5=2!v(W+}Ck!h^}`A!-E$>sy3 zTSY<+`Bdor@zI_dGW0Gr91L_WpSp9qjYB_gkPKG6_+qI+rBSH>pht})1aXH(iC4D>kniIXP%93px0BH56Ifn`;T2c{ntC3fFC8S*(j~x${LWKTWDgFl?<66x zMVr`a5J!b>BUamy)loPqjO!+G=&k~2%L`a;jvCNZhxOdeYGtzx#nd zM4$gZTS}8YG9uN5)S)_m5pMQNQUFms)a8e^=s=3=?y zP23gbW^P$AnOufu@(BcoreJ}EMp`jqGCFy=2UrO_n4%T({`OZS%s46%m7)fhO;qyL z=#6Nr9#V7!Dt_#G;uQo9s}4*1eIf_^oDP}xjwOisSINm@)$GX&CE&8ocy4!6RVyZo zt~T?r{izK}=q&n~3-Kh(Iut34sh8{rQy0(Yu&x0{)Tat-I6cyCESBA?Zb$b>$_#- z>c)w~oa69iPGl5uX>>NZ@UQJ>IF(U%@0v_Mctb5>5Zz^;lr=JCDx-dHfg=-bNJks= zv1wn)auaAtH}<2fZFM)a-Jh#U4;P9c+K;DFN^vJW+jI{kOh8|fPd_Y{SM#{dizL?- z=O1B-XwAqBQ-(b3?O7mY;I6Tqdr;q=;eQq$G!QX8zo25k8$UW5ocu>O8K*y|LSj4)=-C}#(OY~nLAlT0%i2V&vhf6QN?&S@k-1o#BwV&Zy*?pjgzU4#T-)CCuFq7gAdIg5jSf6=vF}NS3Uk`an z;k3RVJ9Zwtb)RL}E@O_{j+jGV{wGQCH}_-8WZkD(O6G@NDOQScVX0wKnhT_eX3BG6 zU1PDo4IllX0&nKVajr&BN)$FzwaZA8mP>p){X{Lis0cRKEq8}okn@5_q)%OjGFnyn z>|d@S7H-=!{RtcQ;Q9Yv*r#|;`Imdf;F;H=rXxhA{3{I{L+Qbxv*d&!Jz^y0K>bZv zvI--iH>4QQ8w0~|p>GF_Sjp@A0o4@E=#98VA$gl30ZE$of8PDUFEB}6OfzZtwrZ4| zedUz$5!0?NHEH<9s+EE+ntttz*R98pUu9vlTNw~fX@iDCj^x!NyO#5nvN&`?Kht<* zt;q{$Z*0-eVv1w~dG?i_-Ua3z=&`=Tus%i^Lx>}6Zd}Kh7{uO=`RkJ#P9#CWL#U(s z$>=)fzfbx>$q@YDsr5=g-E(+Uy?`9by_tR#$eXM{(j`>5#J`b#^d;!mi|}#KBnAst zepk(f$xm>l1iG;eLM2)ox9XdDXKF@ZgOzBRo^J{(h7hMznsXBMR|DPCR2oeCPMT-c zKVVYL(~5)+3wpF1SVNo!l~t{$Krh_L^t%X<;&D@?y-Yf{$tzVY;PbduFAbGCcB4hN zVF}VRmLJoCAtRoLHeP~`OT>*Aw}vumNTPpF diff --git a/flowvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java b/flowvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java new file mode 100644 index 00000000..86f5e13f --- /dev/null +++ b/flowvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java @@ -0,0 +1,11 @@ +package com.skyflow.detect; + +/** + * How the input file is supplied to {@code deidentifyFile} on a flowvault vault: base64 content or an S3 presigned URL. Flowvault vaults do not accept a skyflow id as the + * source, so there is no {@code SKYFLOW_ID} here. + * Also the {@code getOutputType()} of {@code DeidentifyFileResponse} and {@code GetRunResponse}. + */ +public enum DeidentifySourceType implements DeidentifyFileSource { + BASE64, + PRESIGNED_URL; +} diff --git a/flowvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java b/flowvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java new file mode 100644 index 00000000..c4e0b5bc --- /dev/null +++ b/flowvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java @@ -0,0 +1,11 @@ +package com.skyflow.detect; + +/** + * How the input file is supplied to {@code reidentifyFile} on a flowvault vault: base64 content or an S3 presigned + * URL. Re-identification does not accept a skyflow id as the source. Also the {@code getOutputType()} of + * {@code ReidentifyFileResponse}. + */ +public enum ReidentifySourceType implements ReidentifyFileSource { + BASE64, + PRESIGNED_URL; +} diff --git a/flowvault/src/main/java/com/skyflow/vault/controller/DetectController.java b/flowvault/src/main/java/com/skyflow/vault/controller/DetectController.java index 573eb349..90ce2206 100644 --- a/flowvault/src/main/java/com/skyflow/vault/controller/DetectController.java +++ b/flowvault/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -2,6 +2,10 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.detect.DeidentifyFileSource; +import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.ReidentifyFileSource; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.errors.SkyflowException; import com.skyflow.utils.Utils; @@ -35,6 +39,16 @@ protected String resolveVaultUrl() throws SkyflowException { return vaultUrl; } + @Override + protected DeidentifyFileSource toDeidentifySource(String wireValue) { + return enumOrNull(DeidentifySourceType.class, wireValue); + } + + @Override + protected ReidentifyFileSource toReidentifySource(String wireValue) { + return enumOrNull(ReidentifySourceType.class, wireValue); + } + @Override protected String getSdkMetrics() { return Utils.getMetrics().toString(); diff --git a/flowvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java b/flowvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java new file mode 100644 index 00000000..589b5aca --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java @@ -0,0 +1,39 @@ +package com.skyflow.detect; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class DetectSourceTypesTests { + + private static List names(Enum[] values) { + List names = new ArrayList<>(); + for (Enum value : values) { + names.add(value.name()); + } + return names; + } + + @Test + public void deidentifySourcesOfferedOnFlowvault() { + Assert.assertEquals(Arrays.asList("BASE64", "PRESIGNED_URL"), names(DeidentifySourceType.values())); + DeidentifyFileSource asSource = DeidentifySourceType.BASE64; + Assert.assertEquals("BASE64", asSource.name()); + } + + @Test + public void reidentifySourcesNeverIncludeSkyflowId() { + Assert.assertEquals(Arrays.asList("BASE64", "PRESIGNED_URL"), names(ReidentifySourceType.values())); + try { + ReidentifySourceType.valueOf("SKYFLOW_ID"); + Assert.fail("re-identification does not accept a skyflow id"); + } catch (IllegalArgumentException expected) { + // not offered + } + ReidentifyFileSource asSource = ReidentifySourceType.PRESIGNED_URL; + Assert.assertEquals("PRESIGNED_URL", asSource.name()); + } +} diff --git a/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java index 23db46ac..e81bf9e3 100644 --- a/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java +++ b/flowvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java @@ -1,11 +1,11 @@ package com.skyflow.vault.controller; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.Skyflow; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentificationType; import com.skyflow.detect.DeidentifyFileRequest; @@ -507,7 +507,7 @@ public void deidentifyFileSubmitOnlyReturnsRunIdWithoutPolling() throws Exceptio server.enqueue(new MockResponse().setResponseCode(200).setBody("{\"runId\":\"run-42\"}")); DeidentifyFileResponse response = controllerFor(server).deidentifyFile(DeidentifyFileRequest.builder() - .dataSource(DeidentifySourceType.SKYFLOW_ID).value("rec-1").dataFormat(FileDataFormat.PDF) + .dataSource(DeidentifySourceType.PRESIGNED_URL).value("https://example.com/in.pdf").dataFormat(FileDataFormat.PDF) .configurationId("cfg-1").build()); Assert.assertEquals("run-42", response.getRunId()); @@ -517,8 +517,8 @@ public void deidentifyFileSubmitOnlyReturnsRunIdWithoutPolling() throws Exceptio RecordedRequest recorded = server.takeRequest(); assertCommonHeaders(recorded, "POST", "/v2/detect/deidentify/file"); String body = recorded.getBody().readUtf8(); - Assert.assertTrue(body, body.contains("\"dataSource\":\"SKYFLOW_ID\"")); - Assert.assertTrue(body, body.contains("\"value\":\"rec-1\"")); + Assert.assertTrue(body, body.contains("\"dataSource\":\"PRESIGNED_URL\"")); + Assert.assertTrue(body, body.contains("\"value\":\"https://example.com/in.pdf\"")); Assert.assertTrue(body, body.contains("\"dataFormat\":\"pdf\"")); Assert.assertTrue(body, body.contains("\"configurationId\":\"cfg-1\"")); Assert.assertEquals("only the submit call was made", 1, server.getRequestCount()); diff --git a/skyvault/README.md b/skyvault/README.md index 921094d0..513e29cc 100644 --- a/skyvault/README.md +++ b/skyvault/README.md @@ -1795,7 +1795,7 @@ File de-identification is asynchronous on the API: the submit call returns a run - **Submit only** (default): one call, returns `getRunId()`. `getStatus()` is `null` and nothing is written to disk. Retrieve the result later with [`getRun`](#get-run). - **Submit and poll**: set `pollOptions`. The SDK polls the run with exponential backoff (1, 2, 4, 8, 16, then 32 seconds between lookups) until it is `SUCCESS`, `FAILED` or `UNKNOWN`, or until `waitTime` (default 60 s, max 300) or `maxAttempts` (default 23, max 23) is used up. If the budget runs out the response carries the run id with `IN_PROGRESS` or `QUEUED` so you can resume with `getRun`. -The file is supplied in one of three ways: a `DeidentifySourceType` `dataSource` plus `value` (`BASE64` content, a `SKYFLOW_ID`, or a `PRESIGNED_URL`), or `file(File)` / `filePath(String)`, which read and encode a local file and infer `dataFormat` from its extension. Supply exactly one of `value`, `file` or `filePath`. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). +The file is supplied in exactly one of three ways: `filePath(String)`, `file(File)`, or `value` plus a `DeidentifySourceType` `dataSource` (`BASE64`, the `SKYFLOW_ID` of a file record in the vault, or `PRESIGNED_URL`). `file` and `filePath` read a local file when the request is sent, send it as `BASE64` and infer `dataFormat` from its extension. Passing more than one of `filePath`, `file` and `value`, or none of them, is rejected before any network call. `configurationId` and `configuration` follow the same rules as for strings: both optional, sent as supplied, vault defaults when neither is set, and both together rejected by the API (see [Before you start](#before-you-start)). `dataFormat` accepts every `FileDataFormat`: `BMP`, `CSV`, `DCM`, `DOC`, `DOCX`, `GIF`, `JPEG`, `JPG`, `JSON`, `JSONL`, `MP3`, `PDF`, `PNG`, `PPT`, `PPTX`, `TIF`, `TIFF`, `TXT`, `WAV`, `XLS`, `XLSX`, `XML` and `ZIP`. The `VAULT_TOKEN` de-identification type is supported only for `TXT`, `CSV`, `JSON`, `JSONL`, `XML`, `DOCX`, `XLSX` and `PPTX`. @@ -1834,7 +1834,7 @@ switch (response.getStatus()) { } ``` -Outputs are written only when polling reached `SUCCESS`, the request was built from a local file, and the run delivered them as base64. A request built from a `SKYFLOW_ID` or `PRESIGNED_URL` has no local name to derive from, and presigned-URL outputs are not fetched, so in those cases read `getOutput()` and write the files yourself. Files are named `processed-.`, with the entities output as `processed-entities-.json` (and `processed-object-entities-.json` for object entities); `outputDirectory` is created if missing and defaults to the working directory. Polling blocks the calling thread. +Outputs are written only when polling reached `SUCCESS`, the request was built from a local file, and the run delivered them as base64. A request built from a `SKYFLOW_ID` or `PRESIGNED_URL` value has no local name to derive from, and presigned-URL outputs are not fetched, so in those cases read `getOutput()` and write the files yourself. Files are named `processed-.`, with the entities output as `processed-entities-.json` (and `processed-object-entities-.json` for object entities); `outputDirectory` is created if missing and defaults to the working directory. Polling blocks the calling thread. ### Polling from a worker thread diff --git a/skyvault/api-report/skyflow-java.baseline.jar b/skyvault/api-report/skyflow-java.baseline.jar index afff0c48eed186cb3d1be20c8ec97dfed508a89c..70c1ea81dc6d1bb284ca7e380e1043ca658ab6eb 100644 GIT binary patch delta 132162 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

    kF#NV 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 A=ylGB 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 u z*sCtpKJp=XwGCRb8tGk?xM9Br`JHY>rLcv|V6j~8-;OeGuD0(xq1drg9uK3~J42z_ zZ7Ut{bG4ZMdIu{bqaT0D$777vW(P0K!o`Ugp2Uvf-!Fe60VO?xVUh(Q{(LT$3v5;W_0}}>@(c~&4?>h zws6~yb1owi3`MPpTn%n0KWci;Rs`X$B4?hnqde&$2Z38*AA$kp`M>Oa=%a+Vq@I+AG@jCpG&a7o9ZrI4B-o?Ert_AV6U^m<-(%o!y<11=bKJ6~sYh2% zUE~#7VT~0ne`m1c;BV2~{kZy#(AI8Oc+Xya`Vw^rn=l3!bg8DRVVALn_RD11*Wg6@ zDZps>v>YfVppf?K>)YK4w98j=!BR_Xv>c(!?*@$Q1xJ=wqA_>j@gs98WD#;$S&jD5 zNL%1P?K|LTc)ifOX81JScd!<>28Imu`swc0r9yk$ye_|e;iKvK3Qg@2P^dJG=z;;} zZqZZt)tKtb^Lm#5{0=y^8rXWS`wmAvt3N{)CO`}bqW((j(TZg8W#f*3^v?#Q1v1Z; zOg-~o2|cMWfng4*c)UU>MCC$w>2v*1acLC7GFl?;5cRw*%)f}U(@i}a)z@+OVhslOHeA^L2CUCY3vKt{@QozSd>~UQWqOVHdXQ{#vr@S~w?_c%imNjR%vk z+VF)@zQ|HQ^o%Bcd<4zhe~o)9pre)D3m@dmZE$5Z(iDXvQ!o!QT8(D^O{aZkhM`d> zb@R3yqET8QI7`&SvFZv5VN9S_M^Ks41B6k)r3L%Jc;Fz)=qF;|?tbj5afaA=lCT*z zE%ku4+538V3E>m0aD$iyHFBxr6H8ooK>QDS5?EcIS@wx+iT$_J7wA91lhbH4BG5fP zBn~Lj2mlY%<~1c^W=@l~poDkZa_@L`FBPEjI<-;&UJ@_Ny_!=NiZFjUV!qk{b@;e@ zKK=r}|J`HyQsN*K#XB!!8CM4t4Y2!jYNy7c>a32Nm3_nm%DV})KfM$WeX*SOfR%%l zh8?#Iop7MFIKZ?pvKp$rq;6Q>Z$5RBn`xEFkDLS&YK&@eBD)|~gn+jYh92fk9FNR9 z@Mpqu$I5tY3z}PbV;L=RgwN#NW|AT9fFu_~W zK{b$c4=0ArR_}%{NbHu(I=kFfrxE_U(N&?W`xSd~o>W-b3}JY+xh@0#*BFi+0K^$~ z?(`^kEKWeSN>!uj zj&0kvQ5|%}=&)nk9aU`GwrzHB^S*bCbME=htv@wJ?O(f|y`MGLT+f{ImxD(oonI}% z&V-crM=)Pj2AcO>nK40EA4gSH)uJdRb8Xu$W zD2&MGT0CpSlqCGScWpX?QpjC?=)Js--?QGtOtEc`OIw6%a!Nn|;YQDnp?A`tHzf(OHO{8yG_u=-OSCzj8=eC#*`&pZpw{Ub+qB+#WW9e!z!nxc93>aGE1r^ zad$v@Z(nAxVa%;9Mz6}j4aLo>hheRv5JgcJUK;4d`71TTvgpt7_IFBrVg*$@g~c8< z`DW}?K2p|5#M_2lW%WVIJd&}Eq-(|v)1@82eJ0Y_ypa_f`x8=ttqj+*6pPUKc}4cJ z)W}Hb07%9t{OeczHJ){vPAAS6DKcAMdeyA=$sE!z71Ag)R>cdj%eT-_G+}Y+P@`@jX1y%$U-Jt9 z>oNTy-0onmjM@l~7~~U!uxz+VWs>1Puh9V^kfPBWhz!M>t=if~=jbJ<~RT==b`NUW$ycyXnxOIz^{I4+=e>tz-NAl*iGM z$BK)ed;a*fv1ezJ2<^`+VGdN0s5@v@jS2m*Emt&xw|jrDcsg?KWr^=O!k<3V!wg|? z9Dg|k*8XIEkT{W%;+MLADH4Mv!~N}0h- z0{56~>Kz+I{yvbsb)u?A_Q6JB_Azi@3=-)}7rcgS8cEOSw0=ToOSq3^mOKM0Vnf=a z`==kFB?pAwO^xPtt;i3Fh`_0S^T>hlJ%XE$R>&ahljgIh59ddsT^1&mK5s~Bm{se<|6I~;Z}=N9c_CFYQwoa2_(v&Uq+@NPE1%0 zdPi^*4(lP8OE3+_*2T~B2ueKp*?MpLnaBEu%V>LhK2y^gRm+tLw<2QRS>$INOWwDI z&YaDYx%UZe&<{OKwiD1~^CADC_nW|^;OXYaA#M{+PfDW_<%1aC%>R7$jd3Q!SQN3koUgodli3+my z8jqB&7N;3F8{*ufEMHo_LV6}H$*a#acCws`GCxMFSi)j?_JHbL-feX7!h0k#XL2QT zqlEDBB~cGY8&*WuSe;YGrSx)iy;*o2(!1zN2I@@?kqOM{{IVzlyV%$a}{_ObyA~q$unn%C{s-ka4{fess z#vBB@<@9g(xor}NdrG`1>Zuk9ZRI1Mb3KKZz%GB7(3igwzN;|MEznSD9MA*j-xA-4 zk1O2Q6cnMdY|ZTs`kmS69EuUy;oR1=9l2A;OtKOcfQ;O`uF3^iZ#dTByT)43L@c!k z4B&j1J|`l~Gr$aFY$&sWPQT-L2f0`NQ(5coi#O zL|;UHhdd;jz?KGMog99`bLZyfuri=2d`LFSbx4pOedaxQX-@s*cRpU&?fR5oc%tjj zSr|*MhgY(jkFQ-PHEh8*-?RAiZF;)`0@rQjvpW79`4ePv=kx&P8KzV_fsM-F2N+CW zywL@Y%$=}y=iFHtTyuAuJvhrFJ+-HRRQ`?{;#`HaWrjKS7Zu{h-ck^0miw=t3`{1#jfm%V6FPesgWl97f!Cj(};CW~U zD}-G-&&|v!aeaoP5DPAsw0pRYnU>ZDrjSi1`e-m?oqg2ni&!CiE6t{(*c z4+FToJ^b@Of8LSrk>tO0;ei@+9>(^78t@d8}c&B|Ey&mr1|P zk{sAo+E5ROZcXJ};8kUhstNTtA!?}|bT&5(@R57zjS%}by<2#G7B=2>^VnmNiWdj@ zbzL{u*7Lehd6{lGh!vvIQBgI@hgcJl2fd20opvXymA!Rt?vWnZRJm^k0NaHX5SIMI6fe1bbrjOXWFeQVXA zAa?Eio!5JayB^TA;~W%d&P1r=Z?KfIh^6UORi>Re(UQ)lHRhev_Y@~F9U$55ILPqj zuBHVbkK);EBe5kNLIKf`d&pZ>a6Kob; z{S*I98610)*3$thM5IZ!)Q3J1EdJGqh2)A1I=+?fZ*)74N)c z>WcN+v*35r*}u$q)mt61YqZ^?epUH6SMzrOOu;56Mg4bL1F$>VqDjO3mLN$>x`wR9 zyL}m=wiqr_fx<&$>hm7Qw86obv=5-yE&oO553QYDd-Juwdwf<_ZHT+HHZku+$QmgW z9uxV`OiRmdP_Yxcvyxu@TS@IHL$Aw`I&V#+j(xfX90iUE9trQEbCDtLjIgIOJuTFL zGuK;g5IOzMiEclKQpo8PZB;I&o?8)vhW-OgRDFLQ{$Pwj|Ey&7R%+i7zn%FL{~kZ( zd>O9lP`xX|3b&MaCG>aD%++EsIQOOdc&b?#*2jYZPfH-DnUWB1?zhc?*{G|#~v*$A|Y}8DPWi1?M zr_tcl5L{W38}fuP@c_+qH+d0rB)wMqdR6{R*MbKCLI@ONA*ig0aNpEx6jGf({=+*s!yH-$@pVc#Xf224 z0%;+@?wRrNPUJcIsM82bVQ!J>L&BE8IzpvbYz zP>lhsvh+)Re-`SZ|IVkKu09M6u0G9ObeVWcvkDjuO;H0z=M?y+Ib#y7^QR~0wJw96 z)%EKw;GZobPY-&^7uYXf^w9p32z1{3@6eoop+(N`&(Xl*F2q5ApG8Oo(J11oP;SXS zM{kx>-wg~*kFSOgZ`Aa}lkDRN@W&>iihS-OQGN9H*IXm5nwI^sKkX!=ckBf>^Sstu z1ca_Eid#3S0mO%|Z+~}AS~THf)Xhk^6Q+}!`9_*+4qIqc_;%3O>1^vbc)D2}T+JK( z+{xZSP0_!Gq(X54L?lhpDf-kiHNu19)L0d~DIhqD^lpIwIt+qFO;dOA1qu7Kt$Z5n z-pXw>LImehqy6PbqYk9szw9-HYkqLb6`1lb%sJr-mgK4plG0<1At52LVrhD-eYdM> zL+yo64=Thw9!p|S9kO>e=S|Mj+d@pszgGryS?UD+#I)`Mn1>JRz|cx{B}#F#{;~*n zbIyaG$4freilKv~n1#)I22L(Ie23;62ixaQG4|%Ppki<~fvTFTQ5jUHx6t!fcpelr z9%_=1w>4}v#_cU=d~$yGddf!ybj{jC&9%Vdmb+JU>r};W-=~r3Ri#B(SIX{R#zMEt zq!({&3TI9Oj3*`~kZd?A7Hh%!QhKCUAawvkD`s9WP?2;K-=x828%k!Cs`J4X%?%-) z>z+1uXrgr6^Q@>dG}`!yj1nHcNT=NasOxb$9ji zchAvP{$w&Y{Jcvub4rWz-yM@igYx!hDdCQlVR$**j+cNA@lmSeGsS{?tApRKbSOFC zlhw~kCcl}HdaEvhPPizyNCdt&HjfiD=#q#!{idj~u9o3sYyqAJxmzNnNPECInCv@n zzJkpHH1Xh)fbye`kgrX@3*p>6^RS6Ee76-u)PX8;&+!-|XR}5HiQYZa*StZ$Nzp zZ`<0WeE7&nQ0yseoD?$xfrF6a+PVO|+6N96NBRa2l5)GAuttF*^IBP@?N?yT;I%w3 z!b0KP1&z6S8yQ3;=cgeGgAvak=y>dfrU*yyZq&EIboQHz=bAc8x$9oC;v=GH#36}y z@;Ge!3moad46Hdq|ClF^ZG@IDAP^=iZvN`a{F&Z^PIE{>totR$%;0XoKB9}qAv!M%@aDIP?s$IWGN(~Sa!RJ zen#Nx05?@Ym?nE$*{)=nwtifASQ3uoF~Jj?$z&z5vW?;F^6-{^V3DEG!^a1F*3;X(U;cnfAHI=r)LU_?(nhnE)OG%*~M5yE)RXyf&hV3pk z(F^p0HLT{25PmB-%j7b;nlXAZJfLJw|3U?_+r3~oG?;DWu!oLeCn~Vl3bHjsN7Gdr zpZOF>r9h1kH%vFFRInJ?sPH>P2<=(hq+3Prn}{r9v9aR)0Rm*s&uF8`m-uoj>6<~W3zS)ncUpbst_vOlsnCeTLO!AQmrR*{! zGaV)I_+&?Kh7aQ*9PR0a?ajFkMQmU*621I`GQ)dLGX?LOrH(!=ODX~bNj2&b=kG{A zMZd9V#LuiDu55s*M8PJ;%u6Wa7UqUGCHyLuZCmwPz;?ynz{W8#EE)~Nz*CN;A{coBFKY?3i1uu*Q1Y+##l=1DbtUx>qcIv5P?E28i;Y59?HB z6BksiHGD9a)S*bt#P)@)bF#KbZ>f?;5=Tw);W|>~5fSjDgp(~p^y{Fw;pSwAYWfD- zQt+3ujAe*y_il4ERGOa9@g>4_jr9yU=vuU}T59<3dCP}BUFogl^s(pht;F>0z{Ih= zFW1$LsCU-ej>4vZlQV}k-$!2B!k}k<$%ZM?Mk|KrLl~GTXwovVu&Li%6TT|*-H}4u z-L35J3J<`nOgB8!cPI44`R6g7 z&K3W%;JCKXTTh9vL&sXd1SIi{dAi$JLZ+&g74xq$&uWQ1*a}lb<;q4J`-RR(K>Gh=?})Hw}1wZBra+3^_g7a zFEZ{SJFX@Vo1^(lMGM&Jog@a@iM)tKzCTa?yIVd5nnZ$eBiNxA%kTr)n~h2WYWGZq zXfd3)9w!@(E4xCJxYIY7Eja7ImriKz8SaS$moUAFrtu8*+lexWxU!SO9D(sBg3_%^ zf-%6(CE8vdB9sVHsag^Pea`84HGIj3f5dcY{(j42Svz^LUp!}dtvcO(AOrH*-t3$RsV68#Qxv?~AwCL(^+0Y0KRjX* z2-pFbJP-S?)EDzjz3RE%oj*|dQG1Drx@KAUZDrjK>GFanccDb04~p)Ds+>WDOeTQF zRn*?mzrPM&X4Am$-(0?cztj(+DRyB^n?>&-bV(6XrXg9E|lP`0B>n)Nxj?J_`E!Ik#SZ zskjU*O}w`=&Cbqja$Yi{f+{)1wWfsy#RBW0kC#QK=7l73jBGdoCe>!_%B1Gr?>0sS zf&_7wo+7^7tP=q$O-7Z=lW=X1_zs}@Ydic;zn0%h{aVqoH9#FsBOXo{3kbmdyz(vw zfqo?AoGBe%4a8!1q&$wXeDsdbT9Cxrz%t)-6pRx@M}&qSg6lQls-4m zfuNW}s5jaRznwe!yxu)D(davtvmP*W23*W%ipt=L99Gq#`^Q?K2&2^xqRV&~W_n~Y zYDH3V$!YmZi9MvViQ%6~39*10eJ4XRkxFykSK%r%amOEwbo;b>%9qaC6q@K%8w0Us z4HY6_=ITQ_+Jh&8jHDbYqc?sKk@jDs(GYla6v>UHW3ZVeJ-}A;k^cPJ*QftXTy9S0 zP2bxO*;w5RC{6G=X;&4bKyo4cv`}6q9t`qSD$TVi2WELHmE`VXv~U3U^R}Nci)*BM zm63!hX3cJC)NVC6R3+-$fcY21qF6Yxd(TW#`t z-12n|QEC~Iv6`kWeW+!rS`A7LLy+D(S@7OX3JBf|(nGclPzFAfLv-=Tas&L&TYqtH zX%l{Hk{7~z7r04GohkwX+r;69bkl#dH9jKmsT&h6uw9O#$9amban2;R6G?{_b+vY)A<$x#NdjTN&QY_asQbyly zMVwK@~t!P0Kf=n;gxO+TLn^LDb9= z(Aj%o|n>kO>YglUYZx7SQ;se`4HvPb2~< zwoA~}Hbssm@FOx+vQpAZg!R4&I#`y6-WqSDfH!2qoH?(Kgeok^_&V@j{+(-DX{*)K z06r*bI4q`>a?83d7a4 zR-&_Zr6S!j{@7q3cAu(S|&!Zb(=+lZ9mEC%5ZlrrkX#$(V``4T{F4s z1jVmENodxT)> z@v2Iy^=6DoPi^A+eg5K1VsU950My*{3{X|(Ctmys(_Dg`=nR${a?bfhHWyswK9{=`m1veHR zHg6lDjO6C2Ydya7`F=hsYl!>~uG~NADwy+RQ*B3XXCCK%+$YZysHxLg{nOEe&@Wi( z$+O=G8Kq?gUkZg7->iS@!&@{7n>rJn(yk3FS6`MU3&&%LM%5KP{`P`+fTtf_4*14l zG3N=eiKuCXO+{M!OUjD?1I2{cro449YTs~>X(z$j@wcX)z%dW_z`(N|l0W>dzSl2K zZBLFingre2Y>7@isfB=DulL!TQw82cOQdGBs`?z%l4rW}!)9?m7n@vZQW!XSv$aml*?e3Fq8jGQP}p<(OWdlj-2Ck z^LY<*7Y2&`%R^5x>Z}_qWiAr^%R~ETaHM1#)o#s`4E*JYY~+gwIIRW<=d8{<#Dmt= zJt3>U>#<&$2Ug+BsH0O|tIJnDV}nFC<|jIqc(X2$`>THX7}u~gz?zL$9}@~pgH5!l zSFOWK1%FK`dC{SUAb;*Q5#6e!F0J@aNRy-+%sXwh7;TKO`>D#Tj zL3=7}tNVibw~{N1OJ36wR$fE%KcmtU@u`W6&vIUo3$X(m?GEsKmffV4 z7f?Fw;`JU3QzzNQ{YGh~>gJn$My~WLwT_qCYfX=c7m8=uL6rpAK^Z+Ic&Y zBit+B7!J>RDU1Se8pGV%z@7AEt89ne873n`;&-r|%S-khjnb`lIpNLNPY}6iFTNGKSKHilz6TJhXf>)h7?lFLs&LFZ24tutw;+KtKrP z2m|Pc{SzE20H`d%5}3Vf{8tL zj6vemK%uS2Cv=0Z+b5=X`s8izUtLhOSWL_(mN?x|wYUIOzH80e&>Mr-V1sx0v%$@N zl2_G~@5CduDme9j0}@fK*@${~@AxU{{k{-?r$M#3B5`R*{EJ55|J`*Vn}#$-Fe0{; zboU6(F9VQt3#Slkyf3bXr!{M`m4H3nMP*Z#``(B*b|ub^&&;G;Hzph&sE8}2gzwhh z-nSAvp1Gf4K;4P)hCOx{k%sStNFcw(1|OzC&~M43qtml}nCLn?Ik}6lR{GNKFi`Z; zAEBLRPm5w-WZCDQ{e;c%s!K(KYyU||W3rLB7I2}dsEparbd-Q)?`hK>c7#-K+2ZM0 zdA&ai{evc?SvOw4{(lK+mihl6q_b1eFah%#x{Bx`I06ub4eqkG&0#xGSE5WqGU_P0 z*D6eX>~R>g-!~i2zeE=5dSa)&V`jg?rNNS?;bi;Y4g*XxQuXPo>|2sK`|SQ?W@cXc zSx)%*zWBdgU$gy42N4SszxZEC;rvMX)>e2%>!Mw1H&p(q5nzXFvu?;slZAYn)&gwA zqF?<*iE~0j>)y?4WWcXJIW@1Obew{p$4p4xL*vjcsZbSLt0!!iLRw~aZ}?+;M!C;n zo2Y0pLR(ow(4B`)+nH zfqO#+V>99NOR>nr;itEfIzz{3k@mQ9{>WW!)L-t2XD5RmC_Qp1VyLJt)hQYGplvJq zQ+hKEf&@t9)!p=aTKh(0I!VFd`HsH%4!Nt!(4Ln0`4}s;HRVaNuyV8_RC7Q>!DB(P zOM4jw@y>@+4`7ztuZK-9*mj+Jdtp@|3*Ev{T7s@NmLgG|&duDiRrvl;CU?w&RJ*by z@iwCB#?p7j)S+xFKHH-tc(y`oBhAKv760$svPHhb!`=)M+y+tIdV?#9#I$8Gsn;@J z73AiJBEW@YE9V`CzFRcZuLYpYDCt`7;gNVE`m5ezDVmfAE7Fxj*GS$eAkT#u-vg(g z{t|_Gc%@Eo0sgV}Yji`s9maM$-rxJ6tBu%o%Vkv}qFM*`fG=o@XWiHzAzP7sV4}WZ zZP>7X!XB0$NuHo)V5@Gq>F`{oz)kw_JIlSd(4CuMnh{cyRy&79K_;a@#;8 zF)eJD(XSIV^ZeprFjNmLEwOcm%-bQUynU2&M(92KSl=I5)*8VyrzRP{(SNagV3{Xi zVML*-Xh7<#i5`-S1oe`_{uPsN_~t7vJeV=%$}n66wQRj+FU~nl;9N_wTpxTEAJ+DW z{?AL26$aIN_9=;^MMC}$%>DmrRzJr+h*R2E5g7nf@@c>0gV4cC;lkzDDgBeqAt3+k zNwFes{taG91&+m~DhOG=r1P#PggDpQVKDpSP7Xc(`FnQZ>g((2__6ke)Wxub>XyS6 z6&J$j#`b+NNnU&b!(ZKiw&FH#d`h73q)cFZ3O9S`F%PEQ_&a$g@0r(Q3U|MQY z4s>8yn;?iWV3%VoKD}2l&iEAE08O>cPk%U~-jUGa;2DANh0=5xJuS%*cj(2cOYP44 z+cCae5oXB4Ic_Fg2?B9VD5{dJl=PQ9`fmWz!0e!qEz9XWrgC=6VdSql7VF`DtQ^0b zSxaon@oICh%ZsFgTvn(x*&XPhq9@hQ%Z621Mmka94zEbWQdCNF0vNW8Wx?rxq@wo{B)7rMK;ig_U!X-k%kxVyo(#a?tz^wm3^ zQ)bT%ATj@(VAI?+ZZ3jMVKhKZtMmDgs!u;ci#?>tSc)ESH{2NIlJDx4wM$UAW%pWs z{~Uc~5nGbw0%B8XQk9JC&#CJ>(`~GN2#06GZ}k{k$EOu_DWn5dO%Xj~Ks>mnADc4k zoV>A_A>)x2d}x4!N zz9s310v44&6p1HulfkGSE%7hsO}XBsd3DaNlNAgs!}c=#GFAJVdCxpq4bXWcV!O3_ zYiLT7Mo60$qvA397u`-{xHcI57zy6iy-;(pC%MpEh9rI!2441eA){sS2#DXoqh*<} zM2O>UnHY(S4jfmC=a>jYApzjKD0NR2*e8lGZ7Ochf>yB_Y|Yx7Z0cRZ&Oy8LJ%AP zXy!=vaUrJyV&17;qC0?UOPgoJ62Vb9AI@sOWXDp%*9URU79inmjkxXCSgGCyRz=f0 zSX(qEoilbMbg3>8gaxB>I4y^oSq-Ca6>TNc-1(Iu;k8|GzygFI?yU%_aUki6%=q-})SK z`@E2Xxc%QjJ^x-o&i>3-FD*ht12lYg69^U*|AV1;r_G=sAVzLCT3$Xld4Uva4y1S@ z_ww*a_ci<~{!q2@9>f!M-x+iuHTB}p%_YZ}LsLP)&EhW;wZz5>KVFWdUJi%53aVL2 zWEG$y%;f@KM0jud6D_I~4PLhDUJ<K7T|^>iGjlg{Q@51=E=^}T8VsNzrdy_0 z7zOxYU0$lrtf<8ALTih)`^Qz<&){E=9;ZFUG)u1LWQUZ8L)z?^vX;43tXO2VwEiUHdY;4$7ADDh z2WO_u_L};jv*7zzk7T3oQjb=RwFBCQzf+ppS>Y1YLw)H9(Tk|SJOL>or!d*g-_rP9 z*M9PMLmA&18lqQawe4JFVj4?33ghH0qFA0lWROks^l16da9EelTr>UiXXx>ua*TZ5 zwEq9lQvLIIGN~c_*9;~~2AU{+gO;u)x+ccE0vZl%?EpsJl23UFi3l`G17~7{moKo&gCo_2yJwP!D3yw{UeU@)l zLHR;;YTFd}W%MTD@G&O>wu;p22l>zFABVd^$|eFRcrez+5Sed;E7J4v__AT2i9lWjlAwZb;B1 z8h3aW^gF-yNcwkCC;ryP!*NqhJZ=WW3=#>?8+1vgKkzPaciZ&6f%a%B*%bp=?3RHf zna#u|?I@uUU{Jwuh}#6cSFNekx|}Hn2cOpXEy~*-89G;a)a#SD2WcsXSt2JGdATK; z^5d1u86@Z`<79l+IOA+`z=#g~^469yDC$~PM%`dq1swiOtw$0E&myU#{((w(Z2SCl zzdwy?I}i05te_+F@(NtGw93flP8?Tkw~@E@19xO~`+QUQCC_&YM@v2GUE<`6kG=*# z30C3Ay0y2OhlMC!NbX;SXe;dLixc^7S5e_5t;=>v*gzxC!?`EIiR&p^~`yHbP-WZ}> zC>^KDrb)=cy-Y*ITgX!D!DMP7(uxtd2`1u;%G~8cyS?QfAjF8#I8X+9iZKvo{B8_| zNoM@CrKBRib>sno6X)eo0}ZOqZjP1|0((O?*HV^6kcWeZ%cIcC-X)EsGcpMfabQES zUI96-zyGy(cYX?hQ6w{NIt3t4Nci4O-nt7s;LbzG1W0z9`ed*(1;Z!f(8|{ddFmG% z#GUs|)!G*srH0uDpwA*m`B!vZZyszkWns+WylhA&upY%SOF1st-)*Dkr}(|#!yb7XvvEMgZrg%!39p z0g3MJzRN^hbta807D`BshzThyRPCh2>KCTgY{b7|hGVM;ciAOH2BQH~deE;(^otE) zD%Wy07r*A3Qg2Z{!|BLESL(yp9*De9T5*Usg)5b3ij?QK>a=6lrxoG*Z%(OeF(ia- z9cytu5-`->uNj6_kR*+_ixd#Oj5L+0u;W}8bYca?dl3KKb)jtP-WKXkh;IyCWANYWl z%an|5aSKg|{BrR9z8z0(XBINfoQs~HMSy!?-MWf%<35p|_YU9f*vxe1ziMTR2@UWZ zxDGy3U`gvGyFvX)d7f;h05xi^oJN4@1WxkqErN+qpF(kLys}v8iT$(O3?DHqz4E-~ z=so0uQ?Ekr;+^PUy=wp&<)5n0vHHPJ1HAv%yZ+Oof1Ugf2qBR2d3b{cNE(;<1P_B$ zHmwh%3pzr`S^RU6fjgBug(}o)w2WaeA~Oyx1y!x5l&gPs$h@wgAhUad|5>fj>PnAv zG%<41#o|+?EdpK>;!+liEx#=NL_)Ga!4Wt_yN%3o8zZ4c8j3TDT%x>i zgJIrj5Km~)-w+W5^9?fg`sG!D3_JyBE~Y59pUA{7f=OKV@ly_wrM#R# z-eNeV^?A1{^Xd!Ao^B(#wN{Ah2#1!K6EA}TWHYQa9$1hzY&s<%6r+ITm4f}ZrYZCv z)~tkS+#%W4F9^gu9?HuU4Gt_jOmx1|<8)<)KujKBDoRC<5AQAXKWi?E)ci%-=X(1N z{h#%G+xZ{$lmN)vd|EdBG%Ov)L3dI>(E~L)UqL?y(u;l*Me#hB zb18{)(X&j|oTDp|^q+g2Ttw|cT!iBdF(+!2*g&?$7L*^(!pCoBhLW7fx7N}@Xr;7d zK}#P=`7`PESUW2>CZGxRSE~~FmeWrF#&OvzEk{zyw$-xf6KtfVs8`DM7;Wqj(G7;I z3V|ieQW!sNxnh4$u#8DpA_tMuzn|Lnj3;QWW!90>AH#+)PMqwBwg=0S^ZFi@Bd<_0 zsIUBAkZg#6dp!F81senx|Kr95Qfi(NkyDZ`5Q6~I1vcfT9&>68*QRFUEb|dMjitvl zwngbLj26~o5kzVY1!b!%Pp@$}{7Lv>o{oHR^E1-(W>=T9ZsQx1TS!g)5G4l(wm5iH zNw^eg8h2`U-%a8xpp+1_MKhy(*qI^wy%rW`rqO2`EskW;x{ED}&b@(3pvq1!ehsni z%3lD~K3PO}Q=ni~;U5eXBv$sydZWrH6vHW{nj9vYZF3-pY-9}eLf_}GP%bOH*)nU}GI1yG2Pvd7*hZ0Z$pWc`z~J985&t8}x*9EV`t!JZZECOuO1OIfKT(-Y1(Re`M7q7<>R` z1j0;WT{wq~)Zz6bD2&?@!$?EgKC!Z+BtS!14E0iu$>Uw$Vn3RTh=zV!XGnjvm=SJZ z09p+AD!J~g_TT1IYI2IsPwm4Hcc4hTXwb>FHxe-A^Y~&qSXEC2h*OcbeZ#VKR3G<~ zjdcfy@-c!un*H%5;+fto=PXNxd(bkDIvtlW(_~WCE1N_c&fT~KcSfbf#8SS6n7Wqi zp)yFrH$Z0}+FMZ}YiGUojb){S0xU9qxcGvWz74G|LUm%1BYQ+84ws`!8&6syR-uQg z;FnsZ>XTrVR-?^?`OLJmx!nlsT}g`XHKHZpW{94;qVf%x8lh0;(WAz`J`&uJ2LT-4 zG=zMawNX)bxl}u{5@AZgzK>Jr`H3Gy$&+qUdshW8#x2Fc6%5e&1F{il^6~;QbkKyx z+)tn0x2hxP?*~a=5e{B`nj26KM|sL*GV#ywtc*GFy^6*gprWQ#Zt)Z|Ger-o`}P2& zT3ST!J#Ie)H!*y;bvn4BxbIoL4tPtMN3DMfk^%ch#PCuI#_1;3yS*)z+FKsQ4Q06G z+>cGu&*rT2E~5ks@#|W!znI4Tb^Fx2Rcc{0Cwh;CqQ>5N=hp}1wjClLuY}3prTY@~L)pBsS1IXA3J6{&<`mam z%@Ee`xDc!Cfq_3x{kBabjjg>{^Jm}eeQ5=^j0zB|#{x-o_{nSrWG4`74$p9qmugOs zi1c$8qtnQ7Yk)$DY`DZ%uxq_hSAoy+Ua03g7K5ZMKr&A~GLaw{ha70G<97fS=a#PV zw?qhM#4A3e1hb&)4@znjhZE)oKMk=0fu{k8vlob3UoSpn{%^oeDk6u&Ku%B&QjjSn zcX^>lL{+_bChkcbh(-T9cF6X3&#rJr6l=f_PoBWh$~R%2SC&bgt_G}c8P=$xD1-{I zRD}FAGw+CF=`as$g5XpIwyAOajC7yL>!|VN&vLBf~onF;3zkH4VtH*T0Bm5We5Xybl?}RD| zKHAP~5yp+L9`<-QO>HCHTs`55)24xHeZ`L~fWF&TH5Bjn5v;=nILY<4@XxMlBAsT-Z zXTwh*or6j*=nT6d%iyUuDw)=I!PwgpkKHsGy(;N)ha2rH9sl&ow07>BRK+BDg=vjZ zBW`7dP^D@jS@O1G80`4;GGL?9gSB?I_X8IJK3XBh?F4 zhQ5CZz%cO$PSoRO6ddzvJiXdEQaW0zH}_7u=s^NgHSYg$cKOuIjH zTf!eIv-dOGRf)uB_fL&rQeC=eO^#r#^s;yz2#~3>i^BOdC}1VSRKr z^PgC`V8c2}Hc!sQ?~d8-2F>UyMc;BWRwS84|D4ne2^FzFJAM6K*Rzz^-j**=xicAU z4(Le-NMt0MlesZv)I3?a!xEsKp?A#p|C(AkE;|gl1JuLi)|paxiG!+I;Y0Q=tE9j2 zi#9))#SrDwc#vwSfGa9})kHW)lPHeY=g0J?7YVUE;?U(rc@w>povwDi`&XHX6j;<_ z_=z|m{x{{3l5m1Z@t<4=9iTmN^pobm08WA^LlA^epI7{EC!wDnvRw=-a} zVgoZ!yzGuPg=aI8vn1>oV(5-zO)5T&_NZZ_I;q8m34I1$&wju|H|bOMeu3jJq+Yqz z^2{K#r4Wux{pHIWGX)^Iii5m(Q8ldF_5NGw$5&hIO0w!YH54AJyu5dwSc|LUyD4RC zsrkaA|3VyN4z16=!^XR&d}(nxSNe(mLx)pm~^% z!rM5{kl3B1Z4KTe6g6#o!5js3xfc>`otHpNd7YQoy-wRoNDEb3z8tu2O#+kOzv;|y z^l*KlpY^l*Ux@KPfD>8Dza-*6=n1guims0Hky&)yXe=uW!ivxkkyrhOA=0H$uNEk( zD}%uB4L1FNeVucep*7tAg=q^3BWW}N`Q_*+-H7Jf2zSR2cRnC~*Ha<+{Gi7?v2WOJ zV%hcit>bq6VfAhIGW!C2DXN@A?ORTciuk9^4pr#5+Za(cu5_wuEjbsckO#nzD(e)A z%*PVBdNVnu)w>q698-ud?dyUbojEdTex-aQec<*ik8D6HeKR zyO^g3GbHJFFo_z%3m))=#a<<{kev*7m6({U5d}+FU8&rJUC`X>)KLli+60gi$BD$n(&5iViVSxU9JaoUH{rveH`ihps+Fvh^sNs^ zN&fb2N~6T8OJ=2l0?o%mG22|hX>_`ITq+OlgpUJp=q;El-y+fGg1 z_8XOyvpg*CXYNcc7;tt!>9UV8Q;wHu+XoXr)KH7^lLlRHsuYXi=fL2+ z*DvFrwo^rJ10HFJv(^!}lw=8{EKOS!P`c`Ny$=M76B4NmWV>n-OjPTxZxpCi+@QXO*K-XSVaowh6d*1j#11NZX=Api z!!_ePXr8kHAPxbfL_HO#K^(7PtF=4Ee1mRX#Os-2YbYvQwEZDdL=Fg_nW>B@@wWu= zpz3w5h00ZhzouGqsi|9{UjPRVt0F=`hUTiZcWwpp2aY?-BYJDWl2zWqoUg%X$&_6* zNe+pm(N>MUmB#=#TFxS**wrG`**5XocDGIAF+``(1r$B=;?%7?mno!;bm_rncjolv zp7n#8WV|_g{k7KMq=^y*{_7b&Hs@$9i?nTr0yDFHSQ%P0c}q2nEJ<0?>F{ixMLu?a6G+0d4wkdY5X|rys}1U zf#R(e2p(t0OiBt_=RGK)Rmj)g4!#q1JYN%EKPs)(+Egp_yz*Wut;8V11S7eb?@oXa zbS%OL7;CD_qg{qXLKtzv6J*s4pd;>6H~Qvfj$m{}J{OsCsMRgYA_{-&kU!a(E=aqD zhD3PYe$m!C07$qM+Qj0hJHGi6Y;lH3ae-TgU0;V}1uIE+Dn=)oGtbM~EznAg$pX;H54r6X0}7^rVbwR?>{0+M72h~v6@ zM5q!!79n!4V^8*|us$UUrsUxZU zpl{o&YGtRDu#=?yk2i5w$YUUIj`61T1*~34&+l&JKAzBp1no;)OM+clv%AaxYPwAeTf2%9Q4sw8 z(Qc_Ym@;`6M_T}^1pEhXFF37yc{vgzgUH@Ye+&w~qD&xvoEbpoPPVp9g(dA;XTTEjNd2SH%I>hXFq$s5~5f#|N9#Joe zOA=otT^aLQMAb5j&wp7zktJfrvc7-aM$!K>HU95C#Q*GKFq69vV89YjU=aZ{jf#OF z>ii2!@=(u$wGfhKlwBxnt5RxOF7~eeGk`s5zI8gEnN&jA?V^u0{KeB&*JTXBl9Lo! zQrGM8e}E6I#~GV%Pki0)KlCuLu?#}W<>SowiTW%3+RNVHS(B}vVs#GSo+AFFw~hYP zfpCg`tFxEV@qKHW`mhvf~klPeCEoi zu|FAw#HKT`){2==FaYulDFX;oj4<7)p?>GLW_;!ub^c4bNE?L_>896@i7 zgk7F_MysSx%wrwUgeH8ZY8BfYuJDRs2(aqqCl~^w`v)44DY&I6=}qr?M)-gHCRu2y zRZWCV5`18eU4ouQ0HmHyNCw#sqb#i>aO1m7g^S!zN0A+qB7nR$(EcgRERvzw0wiip zr-A14WMY(z@5keK?CtheqhF_L*>@kT&6-avisvbD{rab{ByrU|>|tRxD8dWT~bseq+n&wq9pfbS&+IU38zJhV znMk0BZP;sOP8c|h$>sx{P9r(G5hDY$YJ@Vou+`>8m>{mYOu`!_9^=hdp~H;(Z#Wf@ z+2oydfM{Kqb5K|FszfdFBfYrpv5b?d;)w=78^l>-7_^_)Tqh8Wt~_5*ICD|;=N-Gh ziN&d+$R)(&JGod-?E>q9vIq32@-~`=qG{7i(wTCT-2+GE&~0H%u67Q*6=-oRKm6*Y z2)1GYU!;P&ZG74d>JZQ>@<_@Bq!q&|^2uHufXt2pqu58x{nEglM#z%j2y)IIGMQ+A zGcsT*Xkl8MHy#*RD?bA#jz2D!ALIb)Bi;On@`KE~Z{WsR#+qhvjkZf&lZvOvE>d3A z(z1MsRY6GeWQT20WBpWs?UzO15^yMlPn+T?nVEc6(U;%_gND*6AL9B@aC9yupFk)d zfCfK-bdW4JEhui5 zeMb}zCWJ|9{tL7XZ@*wCLzKp0ftEdAVIA75X}xgf?0UK zB9MwN+6^xOFb-*NsQu7Z*vHutm({4$O(BuZgtsKA)lL8oVzE>9Yadjn}oBIE@tmeQVEEVm06JirN$wBH0p5T~FeZL*@7xr2T3R4R5Z zUJLNOUYH5+@>49H+3$~$EjDY$+;#Ba` zp@A%c^EZe501Sl)TQqP{YgT9LI3VS>PwtESw^-rsUkF%b zi0Wm!@0VixKhA;wM>)XY^6v)fce#!WfO3fG^A%$hHwn@Q)eAv5N8bKJD+Jx-hYX=O zJpn;zZwQU73)yJQyNIlx8Px2-W#AlOat8Lcl06xU17i|PzlycV9dJW0O+UZ zw073>A5uAXt%$4@iNH$STTuomxoW;rB9O|yMf?TZ=;zoMa3W359uGA(7D;#ypw8hH zyh_ol$>JL@Ck(n1jFEP7Ryk{`*w`@O8jUp8Q|VD>uQ9p7rRB_e+stA#L`YGP8H;Xa zpuQocZ)fu_@3a~mDuc`kkS+dg0K|i|S)P-U^Aa?SyMtfs>4!x=?irR0+b@O%O`OoU zi=SFDvJNoo7uF3z_{|Xr%l*DB=89d_ymR=lr%6kwbE?CYEv54uY*9+|LW9x?&>0M= z5ReHcyFdCP0^TlLvJY>MEdG`u@}@a(Q=(+#7_c5eDC2iQ^p%S>(=rMH<1=xOBCMP^ z=1Iaj+Q<31Q_2o``I^Ue>5PYEU1|20CwoG{5(4UZFb5JxMF5E0#Cmt}Q4v6tkTB?F zHS)cLsNbN{o(g-ASuYw4tJ#Vz)=n|bX=duF!HWbETIya!&_zmF)62aH34%zH-k9p> z^CP`*6N`@m))$91GF)F7jfHEIV0Nj&Rka~%bKgIB#%&hd`x?np+qm%H1+2Q63UZmZ zK7gv^955fyag_?7b%|4QYhX#&0j)w%56~k|I0A{kx%cwrIkF-=Q`4Og8Cjyv3hT#l zjnMxO9n6_OP?{e^=K#I3ik4bFPOVKvxGIwVshyZIk}DSqJ;;H zoGUBxy6ao~wuR%s!-aJzgau-iW=bG5ioIoGeh(cUBeSghn78 z=2jE0gQI_AFbUT;8apf*h^(3zl6uN2k*uWK{G>ppMrRM#N_LrBQ9Kc8jSs7qA^|hwDdWtJVSJ$o+=nC6CW(J*lT$az~d3-8kU4&K2naF?IvVh;mjdO_^pXP&=ds6WyBm z8Qxlm)OR*Q_2XyfnI5~7G0Pj*%NK5WL(`t3MWy0~Wrx63ydYHV-{PeD9Rc&V<^z-7 zmWot=qizvV@dt-TdYiUw9?oN1NZMsQC^H_+kfO7D$WXN^_mrNQUBjf2JZuLvQuH(# zO#7q?RI(Lr)xBi(jzUzhVanMGtK9GYU@li%s%VjYP!{UStS$Y{%w001z3733vPo!v zmoX2K9K-EgjFt)Vql2iJTm>kO<5>N&kxp$7QRgrazW-yBmVso%ZmVEVWn)-kcCBc|k?-mkeG7iA@geb1^pb^H% zycq3y3So&0Amx@mz?mfyJyb-8+e5@`rGvIgzhKbAIsMc!b+Z+N?DDIobdw(3f5yU= zZ`+TE!!r>!sx$Qv9V`e>FVZz>htO5MCC)O4OsgLKQT*u4wS%&Is&L=L;j-o8Plg7% z&AGQz;zd9pD#qub#P=D-=OS~=8*Tlbnk{>9Bpoh``3(#n&rYp62WE1)7@9<__v$gBM!CpBv$W2a+(&@$WQDx`HWhc!Z&xY z=95)OWD2%K0Z%6%hh;BFQwyw=4d(?Y$ZjNYa~jny#PTbt-T|VY&+6nrnd)T|f&CD; z4KoZEg&q0Si_;8cD^2Cpb#lTfB6Xre%X2eZep#Hc@Pso70|Agh2ye zlB~t70tZ7io1;n=-a3p_lS3ncbirCS$icBb2_%V#vfWtP!7w}_)%|@i;SoeeoYDyj zgR0)ufLH-YnNUQ$`{(3OH@FOfFQPbCsB7pO>T157d5fwsXVpcWkg~uhf!1_6_h*7? zC5FId(2-#9!J9oXFG|;vZ^}GK&2@qDRPs6kEG=MWhp-D!b*4iODJ`eB#G8@QgS`Qb zbW^4IK)w-8z=dHc7xK!NB#Q>z}^zZHYNc(Az1U&yfk#Ryfv`8Ol< zU!U;hA^l1YL4id9WMU53hePL!@}odN02|B}y{5SL#Os^f9l?fZOE0gmZmu_+Vy&+= zNLWV73(3;1uk!+@4y>+d1l3u!Q!}Rw6MLoF5IU*8rjqXfwhbW^uQFC6XCm$sP4!s0IB3m zqMtnpzXrAa%oUJ}##@k?ocqA*wuxOdJVSgVLt*ju7??+1lsYq9OX{O+a^n`82+mbO9gk zcZ2l+Je=Xcg{QpgPJE)_8C-Ad%1b{|v%}`nw*hyYFOd;c`iiFVhNE2z6B2 zg0>7<(cy&{pdM{=$@~*ol?$1mMq$MyRkS7;>uBEt01B;4Jpc<_FX-KwgsO8`x?eq+ zh`clrLR&MEI(1=zBW4p$rBn+M4vHh-UBhVs^4>;aSIHFFLS1`0=^wwu@B%3&`eXMG z_90YKSxFD0Z)?1G&Su*7cAk2twMX&m@a7GhQQkY#SH$wSZNwQ9&qk z*5?X62T2DMTiFWaTw)jFpOiaNvFOza%*IYfAc2-QS)wRknFprHC#QP5ub+nSSG z`At(VDoaXQ`+d|m{#m83p}_`gH00U4(_qhRbGIp+~R;a|_vnOLAnoKMPfzl=~iC;;Cn_a4dlUqCWg zFAD}C>IOtS-?g9rO1YcB=S)tmlvV@fnsGev)5ob>V@zdl=xVv3h?~p}f9&OTW5{>l zoc2KLo-R@C6zq1Y_0_KdYRam{_01VZ)et*xyR->7auB zt?v~zCeciD=>g0crYXjc#BR=QEYX63ss!}JCyX;~V&@H=g=(dd^Tk`nSPv;9{+RBX zE4TD{+gUK4$4ma;vLtQD~x^(zw5@rT$VaKA8uKb?JwQFuT%cR^2bcLS4Y_v$$eTQm_)~;Pj^M8E50eS?27_QRHZ3p) zpM_#89nl&kMPkiz=cE_yE*rD+RqPS9Bfp4{0*2jrf3lR9rtD@JveNy z^=leJ!=<~%Q0Mx)$r=-Qj?Dcv<)IoJ0GRTpG+>timO4jVNr0M2`-2whMrKB@6tLIO zvo{f>04_Tk_k_S(x>FGrd<%h_Np4#~fYWTz0HohAlNxlbU`Y%q^PJE#MP)ZkuDRR8 z;UzkBT@T#+fsgJx>g>jZd!UUA`i#R{y~BVSy$?+-S}LG7@bD|22$^q~gOpd>3Xr3d z>dw|xvM2S-$S}~y>{8eM4$R_HVfb_E`6jBUHR#Rr#{s?6$iI5~1B&V&|Q)m#d-TWUPbJI4Vo%V%y{iq=jN7Lf|ya z7n>1O@qsWI!)lpWpRkJPMiPz}8K8!l*0;!J4}W*bc)G!nG$RxQ1hLg4PO4W~iAvox zZU0KkvUv6DV1dP9lqPd80&S={PTR&s!#=UzGY=wJdP7-a)|yPbCzT^XY6#Crl-E8b znrD4Se#L~LJ%er^E`(_gk9lKK)`Yt_MbG9Dl|Qer)d2B>eA!;ga{ zu}=Q8#f5;MhGXrL)P#kUx-7Rvk|aTZ^HnZHKxL4s(K6a4B@%Yy>Pv#GHA|LK%4u@A zmwk7?->v+P2O#eQ4Asi+!l`FF?3ll+?*94}FtT@PnlJ$Y7x3yNmyav2QRHmNE1UJu zmBaUV=~dPQqO=jqNpk{!0*I{}k}sjd%HkX{#JF7lXkgu^EIx8BydFa=o~$tnRXFz_ z$mZ!EyT+6RCI}lb*3Ud@knJg$J`Wo~S4&VhK~eZc53o?&qmzvY6c$1Qni{;D=g6*m z$?&hfd4lY+KCIesZIKgf8OINB;M=adQTd!2fcc~)95y&GgzOq>2E?(mbVb<${f$o; zOA1tfCVeW9rh6ey+@nQjK*5uPnjpcfp%#gWLn+wNd}e*>HdNv>ho%mLp3o5Vzi;vB z{Qye9Fd3$QLdinzcMMM+*jej(P(Y!J>{YS{V*@U(<%K4*Q*wuCB(uAxxG0(E0_2z=0GvZk==Z<;-4N~%pA=9G zXs)}@F-9I!f+ZELMM2AI!oHUEp*hNG5m`#aXk6&0J!@cj7YHU21(@ZhCfNf-aYT`? z23$5G(Qt?k?Hl%BIBzi4?6Nen`N`&Mu>pO!E_-dM_s$bHuD3iI4Y8|Vygof33_PPo zI^x7iydMaB00S&3@khh=0I$auwq8#NG@r2S*eCke8^?D)Aa|s~XA&O~_V=_6B=y_G zZM(x}tyVY=^j*cBtz5lj5fn-@Zzx=-C~`M5cVO;rDudYI_wAy$ zmo)?@g$J-rrqFv%O_?>>pW@Yl9}lLy#`a%ytWTit;w<``B2^!-Up?J{2hQ{8Y)9c% zYaQ@n&wTh|B2n_sK2u4Mv1B-cBB%f5uzk39%d3C{0)oc=&-5oh4)%W=W8WE%8=&;< zNd1snk1uML7o-3|g+@8~34sD)C153$JJ@9=WhoM{e$dp(EORC!_~UqEd{Unq_ubn|XT%0{VKB{OZi!m+a?_0PvVidH4(C7j01pSquTG|AQHyCACuovX^ zETtdk!CjhCl$~uyh9>GZj&n2U3m;uT`tFyh94#L~M`aO%RQ2^K$f(kStN{JGc1_2p z0Y;(>a&f;a@;L0ZM1n22mZh{Bg+7@jQA-K+IzcgdutHjCwCWDI=7&l+u(z}ZetbjA ziiV#`APy+fBDDIeZq#BU3tn7K{nzI#(}wN>bAl=&w`vKec2E=Yc5qW92^l<)f7@wk zT1Ib>9MpnJG+Du6H%%DdFxQ?Q-YU5T`oPCJ0j$AwQ?0t&&#dd**7Tgi%7>Gl$$lr_Z=x|FjU&q-lt-wX z68#o;K;l^Lj|T1&L$#_Ik6p$#_KQM!5`W0Bik0HDLqv%tz8U4BMG(IGTTsDIK0+OnaBPb#XDGm3c(#|l#t@ryBw(1}m_;fMhhSPVT)D^yDyMSK#5?Y*CbTc>&0b>wQD@0$N65WRKQNfV3QP zNpH!(oBk5=GB`BxNaW_F?mQyu?;z?<<>J;GY?SPf zdigQ1UpAj~rtzU9tdjmEuh>^8Y4HX1mK5WWJbz5qdJ4%g|M^L+=_YGGGvEVvA*_yK%09 zoHdqckTQvDw~zMotc}*2_ZFzvNnx$7HH5!P4n;pt$N2(f39OuR{;nkt`G7%`X$OQG z;3m%!!J-0Mk#T<(gIr}%s?d23R`{{IMj|Eu()xnm*Y~|9f2QpkWr^JMyao?dA=6_{T{*ekV*k!j3{UKQB%^8G$ML{ z4)tv?v^R6G|0}#f&L~E%p!9z_ZX6g+wicXCcLpDr0J7V|i|_tp0GtY(7Mb zcnKi@q#3cY#?JHxJXz%|X*Skgot53&E<@=0Es_q(v!$XB3V}fp_Eg_wS}z5u;E{2M z*|E}y+!G-yJ$OrAhORt^T}Bac^IR4+~Nlo55s z&&P5;N_BLoN)Yo%ge=Nd#$omsdHlI6N<-oL%~Lt9&ZMl%n4%e>%wE|bkFaA&b+ioD z3^$|gB59AF1#6o0NH}XP9!*nZV@gup<(gTTAcrEp`pJ1p#abcc7%qy)Q@aILUL^xS zhU{S3ve&13Hr~`jH7n6qeYWE)DQUI4RUUL zPIWPKP7V{&RuAcY)gR)bCRobXZyf^mb68ilra$R4jaB9v^&a*#T@Wp~S#~qS>M=C+ zR>`BG3^zS6RTzStNm@fSvHsqvu~RJ+oDT=$!SQO&is>@iU{))VL z6*e5Wp9`~ZdcE`Gc+NV;A<{Nd*A#;NIA|GC;#CsHTG$wP0xz1wImq7`FGvMofoL;d zaBMK9=Y&J1ZwtVarriRbSwD24D=>8$oBQ*RhC5G>=}5J>U!{x`K_$?lD|yl`UYf6J zG)z3}&5xYhDo~k_ie5$H5ZWaJxA70k{nk`XyBb02%=^hN9o{p`ofSD3*Yxu_11U=w z)3HQzq6nDtZ5ou2S)eTx%#Z=KX!ZGeZMMPPVvdVxCWfO6vWt^!N=pp&Y=6(ysGA|; z3dI}G?%f*seJZ!NkP&Xd<=~mxoMv$d%$1_YLuxY?<#mm4x5< zXN)rmCZu$76dpi?5u^Ij zTz~HSQub5uMfE@Y^6dcB5dDoe2(&D0&o9F%%;-% z!r=@Ec`+c!7JYswrq8>eq{?byL|=-e?TZy+I($4^lVkLRx-3nk?z&M%Wb;K7XBhDL zXj{03<=05$#LK?%a_~Afo6p;P4vUGi-LVG`r@K)f-lF2M!R@p{)S^op(1{xWjK(`q zy5G@td^mhwY=Z&n{3hA19*>0z&%|EMzmOkA0AW)diB+ zh7(-rP<~GzO+du&HQ>^s-o+3K7s)q?1mbX~DId(L(<_;!J&tCnha_G&T3_(9%}$#2 zOQea4J&PtxcRO&44xfUo+Gk{5nj>GCbBtXlD5p_&ABF%Ri{g1hjo;fr)X9B+O06m+ z>w|IqCb(A%QRz?|dSAM^ws`rHDcQxo6HPE=qTCTBd96YFDCx6_s1KXOA18iBt#YD_qqqf<6<9*J__?hA}bI))#G$*mPd0L*AF z&`~O8&yf|TcF%66RIwRHrCt`xgId5fixX320dy+h+S!RGQ4w>_95sJCFoR8jT)sge z=TgQ9k~vebyeAVF96h^_+Ls78IvHBS8*1>K%5D#~U}Ac5vQiI(Gg71m@>9wZ1dR!E zs5u4`k$A)>ZC-uI457mocvZH3g^&Q{I)9R8MY{qI^IU*Ux{hMDJHe7k6QRfKmzm^HtPM_3t~H|CxMa zB@I1HWYRZp#;&{tAe$P7QwtZ^-yyOGC1My?~ zsQMx$V39K+_Ja8eQP{3Q70E^!cc@!xwaqmPr2?Af7!yio?u>Krb*AJ-d$6Wgeb$;Y zrRnD_oI%Jo7h-tcjC?uf))MUtu$L~8RuE*_1vdMYXFS1~i5FgTBEI9hk^j#A$r zK~AbmCJcH;G>G0JQ2&HaUkUu}o7t@I&mTy4`4Eyh%Fq?fS`jtOD62XI=QnVd0yxaY zc+zMnrCz7G(d$3^P+5(WU;Rt|7sG8rmf^8GP1TcbxB`X5$CH#e~;(DP7#ANZe}A{Fl&wDX{>ipjWL5s-{z; z1tix`Fsw=Y9Fk`1d*4nhMEGwf7N~tljKo^`FDe*U6luMKU_L8kOgBXxW4 zxw-je{SS>4J*hLaU9B(wn?_oHZjRl|=UCxdXNIFsb~%^n1aPe0AN$;RD0v7@4B)R= zmRe0kOust32K{zoC4sE3MO~di+pN8I1|!AUOfTV(&KiGoicL6YbV~*yH3Rz(FL>mf$F4 zs`0mlNp=UJ7$FO8`Elj`&Y-a~i_b=8%r3#+`RBOKTElB+4PP-$)s2=)H)qBpn`q6- zp$bC2M5fdmZeqaGCU-ENBGAN-8A*zCEhsDCKb(CWBV^0K`$?IOTHotb-SQS6IyH;QNo$*sCFB=j$+)qZG zpAVFIfG6GKHb2dOtXS12{fQgTlv9U~30c9p4ba{0c&<;)@2Im$?i-FjVpqu4#z)$( zt(jT1gKl{(qTli07ZL`)tyqWCE300h(G&ag!R`Y)v7O1}|7FFxYeuwZ6;^*taAV5bzd2~aUXG)E>V#Q08*j?S{rYvP#lM*M^%|=;9LV8JeAh8__%LHQm(_7T$&P48ch!_GSd!1?r5dM1o;2fMd zq~2K7Gh@kv_HYnnB?^fH2xAH~FlQfFV<8RLwtF-hc!+4&w{>tK@W#+vBMN7%>Z0S;U#`V}wph4GD&#q2GbC?;Y&#SZD2X0qatis58 zpsBN~she*OS;rk4j#pW_Un|~_J3L;QJwRalAru&W^g?%-+XrR6lR<5Yo}|pl`fk73 zoL!^z>EkP-3_$Yjzsvf5eSn%Wb(+Q16&tSM9V6xVuD(}H^GQFsuov?5#4i+^HMxn@znUAt2Y++Eio9{Z#`N0z&B z*P^99u%Y;vSs})iNtB5e!Y~sQ=?zwY$z-#R`xiU#E+1>_FKZv|UH~@xaLinq;Q9%g z!830d{#!}oU^AXI*O|AjOLPm4mGXU{)#x@1VHd716pfdyZU)!|%k~r~DReLl+r)Fj3XEsVH_r6hu z6TXy$>va2GGDGfZyMV*dA!ducz!2FZ5k9COXh@^ja6{2v=Z=1QY=vVlO?V{RRp)i% z-3AFJ5$@mhXDAn;s^DwRWxAevsT^zFw`E8{q zu<_t54{w0|t&~W;LH$sr6ryd}bwDXv5SJJ=(~!Z}`Q6ttp~u!vrADUQ*T46x5G~jx1^_UeGf5;!i86%rgt*7(*N~%w&^+vomgHKat$1!2Qgj}uPFsR%U zr>)i88lv%lOK|Lkb6IP=DE&>j-1DzyGYtWGjdN2O?dsMhAzMV))mXd|UW(J2h(A}9-QKg`EYK^VL*r9cQH zht~9u2H#nZc|wxRFYn;fU?~}rPTRSPuoOC1)+bDbR%)0V@0 z!w1<}u1JLpf+ENR5?cO!?X%n6=mJ*J>9-c#Gx-k=`h+*gQ+&>Z{?9%4Y*9!MK`c@( z@wm7hIlu{(N&&H(3Am{%q#v%GVZRT>EB+sg z??1SqY2|-YT6{TRN&n3<9LoJ)iy97CO-40=nBVk?;ppF3I0{tT7GfbawSNw>^lZCx z`2O(C_}uzuDGeA#cY0k$pPh2Wvjo*7!*PE1otJc$HVPlz=Y0weTL*DB_c>^Wd9ogv zgWKzBp=FcWHM(-RIK<&g<(f^_Tf(N(Dvts?F{%dma_ZC z7X-yDPDV`L{Nhy@jKscZ!5yS%pn6sw1ekj@!Ojv&H#E;--nF!P*@nAGf#M1Z_|b2L zs-t9{D9%(0_G1S18{;TuH3XqMx%%dk_>l3xxuJBjm*>cd@J%s1T*8VjxwO#9)gWyc zd{V%#@07W?O|q~b#HnvVQNeES>gr+?IfJP0%u?uBQRQhsLB{4@heNIxgK1(@sf z>&N5-zVj-9i9lRuZMA_d8fm?6zn5GK*!2+N@|Bj@{k&Yo>uGjW4bXC1n6kH5g9(>I zOFC|epFNhQg=@%MoHXBL7}y{S>IC&~dec#vhB-WQSwE+$zWi$KK0}YV`3iQe?rW86 z5OE-PzcMx&v=X**a; z%}YtIv827J*kv||{C2MA?_r5qoxLP!A;C+?AdZL8TA{Iok2|VWtTe&!NPpOJ$02c^ zAHD94s7M+=#!<83pOvq0?||&L6{2sg~MAv}Z_GnRBC+ zxv2;|(3#fdM`;##EG%fN;`|=eRj3g}mr;3A_>tM>#UeAI!+J6>A~bB5V^x&XQzI`k z?}PYgU4EzpYS{qjye?dr*_Jo2*x~vDzt=|A?1hKPye5=zKZu?Y`ucEwFbbcM3ecfu zwm`8(no$wi$I{ACms;f(xlfrEyADVCkSbZ2(~MpV7j~EMrg0-+O-vr3Mkg+K0MKOsU*uJgD36zkZc(uKTnqX^; z;dh>tG2g!uy<^JfmoO4Q>^*%u3g$5&J6EyGv4;&{Cvo{>BIB?`9h0wKeoz5Z6G;8j zwX{3fWuqAVn7XiMvrbQ`P)`ZvA_dP>_V>PkuXt zK?aO}bLmimw6=*L@J zSX5Iq1`sCDs;t0=J`n3`X;-H{sF)cAx&o}WH=A5mkfN58xN0;bQQ|RK{8Q zaX@-$@s_6vK!8mP4)K5#za%QcD?mYzh8{Ca1`u$@H@!MTq2$df*Wy8oFcB!S57`p4>hxMxz>UThQkY$nNPZ|6-lXW+&Z6%-G7s?oJ$?Kq1R!eud;0jVuQuok1_5A)t%~^>W#n#c z>|GjHCbK>eltwr%krk95i0j{C@oPx&AV>>V3@D z{Ymr3^Cq9zAjI-yE;d7I?!wDjZ+B!QG|U{ekZQ(zqCw`Xg`bZkN z1nbr5!I1w~;Sg1q`QcRMYmp>D-Q>PHzrCllu;H}9;}=Vk#>;3hC&G_Rrj+qkEG z1M>HR*twrwXB+qP|UR%~O&wr#tTip`3h zR8XHnclvbjt zM*C$a$omBCLQOWCHFG@+wT>QYXgi`n@p+0wtbw}FhZ9f1OEk}}7$eLX>A76snSfR+ zIvM&t_b>K~IWS-!r0YfqB8=;k^yR8-mDk3kzfAL8)oF@TT3O6ORU$P>KyoBE z+B|TQzmJ=T>Pojn4P)KrqcBy1bjrDV5ft3jOF3D4S1VHmfoj= z(WWrU6{{S$WbOBL+LiB0$-|q8*pU_3=h(jcG}y9-cyv&wS6@XY5V(gUP_bu{R;2@g zZZ4K)-MGnqF|I_XVb=IsF#m_Ks|9KLl>cjJm)jkyOUqNv`else}g$`jkt< z4F(g1%0+A`XLv1AZ3k=HTmgV6aBsRfPCM`S`a={hdBFg6I%IT#9j;V1TXG+OgP&jP z%&M+BpTqB`$cs#~c0+H9*~KEceRC!>=HJ9>?opvfG9KNw2dOawkw+`sq-f*(lG91< zZt~A$BBvelJYqkNQ07xvQ=IiXZrL$p<#@pdwV8C2a)YKA06)m^RugV0+QgQrVP6I2 z<+~8*)p_!H-cfSBb1f@5zd||ys$d3CB&)F1LlSvWRF{&w)hnyD2HD5K_LtCCv*%-V z#_44Q6~#@p2!Ol%HKojAmW09=}xVo4qD*OCr{5?XvO{roe8^TLm{#t@d~O*VU#bp?K4p~UA0$%$6+ z2iqjLz655?jL)-;>1Z7Ei5s6(x3?Ust|y-LV;LBgtx@z^XM;)RN^e90tZ&llP+CX3 z4{F%rWEjWw4(zG{d)^yb_aip(8(!-kCRRTqx^_niv(R2AyDkM^zrpwz?FhdJy$rnR zsPcosXnm{GE{(j{mqhDFn&&!ffD#W94ZdOkCe8QGGQHBuQ>7!7g?#3f`SC?3JUb9C zb6DpJ=o`Dh*G+`@y=tOST;k6$yh+osC!&rY=PPb}L(ry8o?sXF6(xeAGl|67iGTP+ z)^gx)NBO5in*VfthKj=8^40Vfr0I-*C$2IX# zd8`^by7D@e+6&2xmS^MYD5b6fP)K|<1Ql9!m5q~bu4VJfUB0GlJgp;K7G-Wo&3CLj zAHl|47PW3Zk@TRoxr9a^w7+Z(%nYAHpdUhL)e8q~=0&dd+3n&?+4-zg2Y(P~S-%Vv zn-dXIWs_s3ojhyxuLN*90R&=U<(!@&tsYC~*mRQ+^v*_sYERdC=!^+X+l+$3<@8|4 z^C|b7*OqW{MlYDnAF;u5h;Ee*S8hgo1hjDL8W5BxPn94``ClqC(|1r~oIKf4!Y;q; z*tn9HnIIL7^-Tm63<^t9O+s=wooupMA-i`O%BQaOp6AcWT0R(YcVICMy{H+lcY{9jWKnrp&ouFrlJP$Q|7M zOe|CIa)-~yKW4LQ(ynN}eZHr}IREyh{!4iNFZFr*&!35d9ixklm$|J2P*55k?my+( zKA&3`fNk~g+(=93ND$*;Kjc+@^k8B*!ROdJ>+M};y8rzB-t7hcm#Mt;Z{Rydr-vkb zJsY?WbjeL~D#__%rpfbEU7s$B?YZMbs`3K2MRHW19446+f5K|%E9sy$vM!n@1XFs9fG?p!6Z6pIXq3fjQ3SI14s=vb2s9uy?c zVxSOTInl~FA5es1DXNQd>>O!->iWevFQoY4It_J4NF^+^@_qQ*JAqC-lRS1YtZ`-# zGmNT?P7u!vg+vv>eIm_yqo8EPKVXS0Q0YieqAY(Vf|o6iL`wTQQF|-20%fRP~$RIpfsl z7iZM;{v0juKpBSKg3%AiV7QC75Yl39$@S+HR&#N3Yhl@LkE>oT-UhDVtrsUJ++fX+xr~` zCikSdG$VKgvJTt|3dmy#c*=FTs|S;Jf60$QT|1^}oe?Q$4C=Ybvzk*bdUNN#yllRF0pjhzVg9!>B?Ro1gU12Lc=dvT!s3sAD~gPX2op-F z2-IE(p}q*&lg>bus_7d*G%+;Zl_2(oETD@f55hmXwOFlxd%wPc+5VCVQUXHTZR-D!&V zAACkq^gJPeCeBy_ns$by?jHzQVl+M;inU$p24dtwgIm|g zXw$Af@Jj0uQVy)gv-yU!s?d#&6h{1)guWFUaV4Mv=(ANA`bc)X1FcY`d&O--9A6Ar z2UFfTK&w!nKW31=UHQ?XK+TU$p)oGQMcP8zf@3p9+3rbGSuh4)Tz=L zrQgw8tJmAWAC7nv&aaGG&tO($=~5s3-WuI5ijLQtQFQM7_kw60oui^ z6m`drQs+@dT%ybB#zF&-=i3?}^B(4G&#+l8^njB({aAm*EcWz7|K z8~jxG9r+u2XNNqNd@*ciRHlqsq~nL7uR}NS{d!$)VOEm2L9(|2iLao(9d8OpxFzPV zS%2t>wARWh^D4tdvHEsxPFd9NTguX3W5%h%KNjvBQwG79!0E5!A*Sd6iHx@j0yuF`ad!ZqXQn1F_0)^Kd|OX@Rg3liQGp6Rl*W&T82UW! zCc#y>E^R?ai@LW8=M|E43fp!(Ob!lo3Nh+J!3wgV&fYM#ynPUhnopg}58H9F>S<2d zd6{hX2!{*-)Y||3LeBgP2Wef>Ir zu44butmHvo7)!8aq~mNlDzOJtD`P*qyiPq%)R#tUk6aysO)T!9e;@M7w!_*TElk`Q zJ*lK8-&``q5W>DBP?9@1QIcZk=}Hc!k%!^5OQ9TwPA*BDdKRQf@WCdIU^kyilZzyE z%T*3-2hiRpFIR}Xt<({rN1_o~U}Qat44D3zfiI7=&sTGmDp)7G(;f!6Mf9BY4c$ep zb^bvMlbAY#I{yy-EI5Gs7(Fulj{hi7aMw+?kyOdQ(4w>+>+Pzz9>H8cr62PG1=2w2 zZt@3v6x0GyO#qZV0MXJ9D6ur&FN0FJf{F)MDAO-u;S_8hMel3u^ufW?;`C125ykw@ zZ|&>FF2FZn((Z#ffZzx~So{N$LGEaXtAR)nD{0)ySR9$xSu8fo&!z+*t{96sWb zR{WO-IxqF`z45r5?MMGmUFFITlKR0kcN0V@_qsIxy@8zmszLwYQiPZELH#08WaxS0 zM#xrXZzf;;0npF>fG%=G2dC`u)J%acsawLWK!M;j+afrVf*`cQt#V6I6WEyrTd=j0^%IyM9jBfyF7&l6?guOHycli@<^yO%9+YRp@LG}P(aAR zWn!^1=M(r-*L@dbSLVR5vP6%xU{-DT0B8)Wmd_V?AtZMTsdrrHVcU0h3Q&hJo>Y2L zY~38l58m0>A5&9CWUFqs6nndmCqvkXj6Cp8%5fH@X@*u*KlVt(yLEN<#dH$WFTxJv z;Fmpx=AP?52)^(FAU5gaH?sz*Rr5llK00qIoXdr)z)iz{sbOP3iVtosTLR^A0J!=c z;=ipD1X|jQk?-C>p&Fqh!5~q7QgWqjI|iCS%TqOpFM0&Clu%EjU{HU+8z%*y0?&2^ z7(G9@OZ+KHb|^MkU+MB5X{qw#_AH=NGA3;16_h*?y^+30=}T$2B1o4za^MQ*z66!X)@CnGez4{^iO=Nhn`;)%rr zL_UqST^&0l&9m9&1^M&!QIY6=19F_j|0Ku{By>a+G$us6=4UUUbfGl~st=@bNEKhE zXh{`+|3~6gItJHb@_D{b|3)zXI^X}DV1AxrL7<<`Cp^q1sk1O< zgN^pOWGK|0VFRbG@<0Ls4{R%yD#t3!m&a1ovo9;5(W8PGeMh|Svo7Dg6z?CD3z1(E zB+PodY+Dgk*0&?lfs^`ZFHedN6u+cq*``4r$+Cr|J*%?2EKC)usAF1Ov=cygVWp+p(y{r?^OjOd zD%g@u;H5Cy1wlCS>Laot6kqnDO41%&$e;FQxyS)wbYdm0D#ioMxz*;FVK1Yeyl?1-V>i;$ z2EM6MlMYoiMIlE8k!4p@mFdN@?)0R#K-H$a6x+A<)j!tK7F0Ey0RXIvW5t<@U6vZA zM_BdYLpXrlwW#;{3On0G-GsKgOC}6T3#B> zmUwdppV^GwXw$@xd34dQ>Af1m@PB40^ybDJ*cPQ7!@zpD&qYZO#VBU3Rf?&^MgF6(@+Qv^5vef)9>k z$5N-U9Y5Ndgu(v8R)(uT+Ssf>1Hy+fF?fjTT&7Bq6lI#NJK7+Gc<)8v;lGy$F0NFp z5#sVJ249vW?QTg$ePMxn<#ZOUGgZX2BOybi{1ig^S?3??dSWd#z*^`k-+65JXWBLL z2!;rNZ7tbMT=;FIVc(+)(O*?emPbA)72}VnTfc7JUi`)0L zp^Sz@ok&P6G9mXH`5AF1Wt=`&6|EfZu^1(F+)#)n!DI*#nfFmEFGw806uBREjRrqR zv)G(v;R*T$(v#|dl*vMz?>!U9fX^^A zYY5*1(0D;TK8=0ad&RU0e|mNDkRv*d<3w`6*VQnEH$OfVw6uq{yT0XPv}M(}kDD92_fL9|v!Q)DEwD1+etEQc~U*;y)53kH={y@_lbR(D|5*2!*NMS&Qgs*UxM zbHS!6Ka(-6rktq*%rOTKIaCMqHw%Uc#rTMW=QqkYW@=T^i2^o^0p+;KX zA_m~M6jH`tgiW;VBGM&{{fPj33Ut{G;Qi6#s0;;ZE>3k?6rQ(0#SxNZ-p{taeoU6t zm3$gLEd{Tb@lBX=GSpe?OZAZuv{)F=i8IylVG-?YF9Njd+~Q1~jZKzowYMfbz>Gi^ z3p!|8ql8I&^LvGAY2tQKrs3`I&J_lgn-X7_oY#FwmTMRedUcj7rED`uv>Ru#C@SB( z`XmjO$6U8177fYfS{ju2UdA9h3Vx6@PFs>}Q7}n)I`!6= zSCXaT*qgm?D5sA4qH4!g-qc%B-M5BmjaYZjnc}zfUUM_GCa5~1^-?;{Zu6^*uJPU> z#bBvNCBp2}-9%~0U$xy7a8V~+Fc++NVnQ!g9MjB}!nA}(qgG{BMpnNhZWh)|mx8&p zRuNsdB!3Xtd`|-n{` z;<&9VZIdJT9G5NEVz>`$kC8DicE0l?t#-cCBZzjdX|t-ih0%}SL3xPVbfm%&W=hH( zbPdh0xLLOI zqK>UQo%SNU0ja62v3QdbkO~$i%!p;YrK_MYP8r9c>Z2Z0JUuSM5!qrMZ>m`}5Xyvw z_jISsv?)IYyp}$*-wUE6zXdUPYdcCxL(t~VIJ|ONYIZaBjN-aXTm7;yo_W(#IRf`( zDMT07Yd=v$Cy1;+rlZuQrO|4vBOX;3p5fhJEeL#00A0^*V!A8F$Ww*L$K>8;P~p>m zhQt)md*B!B(Er%Z^-jh65CcV)zV(E5K|F!oaF}wh@q8aYLXd>I!LO&yfL(>t`YI)4 zALt9V3aa(x>DyC1hmwNucROo1|T=YOD=>fr2Zv`hl3KuVy)6W#w?i*Kl=yb-Zt; zB;n(9qV%y;Y(zYb^*7w%TL_MD4hu z)1;js+Jv*1PrSF1@~d;xTZEhC6A#Iff=>!r!vJ2=Fc#68vH4Yn)#$-6eoMS@T6S@r z6@fUH-57){Kc@rVZF>}#`5h~e2(Q|&xn#@$uycciHWSWA0Te_$Fab&9VPZo}l*tw9 z0TE+41}2Chgztd*H~HubvU*mScaVr~1LG`EGJRgSckYNc>(Mu%-E95s^!-bIjN`(7 zNPzj*u=&rz5~zU8AcjGhyTi=YZ4U@z0di0YNUw~;JX~kn5=+o&TSQ{=EUj3AS!nt} zX<)WVx{^8Qe4jHt>qwOak0$4YEE6lfp;qeZ7~LYbH#vUGPYQv7UmY{a2wI0`vVv~; z^!QCbY14Ynlw*F?{j5yu*&qM1X_mgsvl~aG?CO_QuvHi@ga*_bK2yYfv$4wfWnu^6t$;4Xr!p^C?$YXf(6-q31>Yu! zv-z%>wge39*15NluiCa7A~MlpO$z``SwvhJtMvM4b*#9#!Vzn2Gq!na6MTLv+ahxl z+G^&Oc^(r^JEr>?aT7v2j{AA_J^D5CE}2ggS*uc~@9wy{Gq68sZ1D!%4wWe}Qxn*Z zCDx9JR7|fKU)l^Zf0qj!>!1yN5G zKZn*MiU=MFg)XRa*XGH(h-F6`zi?=wx(&`A3&WOU)`ST(#Xiq6j0JhehNgZTdCEcy;~&3e>*#H#lm^UrkCyvuI}rTFwEL=Xz@ zhl{M+tfMR!myg$@WzH|&MiMi@-vjePkp|#=Qe)Ia7;%>h1lW6jMlpzZ_BF|RgcHXf zX8~+NBhA5);XCt~H)z(-yE__M6kC3uMQ!ZH?%X8m?=qC1BGisEb{?X6sTnX$bakv1 zcG`GYr5>6`=+v~=amb&|zv{=xPu~^6FH=c^ht5Gd<*Ooei-j{%`m zc|SI_Y=#?t>%f(w{4RCFU8b2*WRZ}7N$=4|x46lDOAMbIQKD*ooAgwE_5^hi8{R`; z<{7^dK(H3N#0^46Z#g?;soR%YI05*|5diOf(93I~&1X>g)5T&WjnQS+$9~Vux zXL?GWY`QEXnmezIS|iy^HNYmp8L`{KZnFW>5pS<;ng?A#6p=(0(y2Zz%m3((#v~$dUcA>g z+gB$f>%jHPDUL88BUvASAh3=S{4S4VogKif`+)t}51E7Ur+Xlwbgtw9GafFGz&vjh zp}JImk86-8LM7)I?VG26ObrFp*PuBMT4acdRD_CTw5g=ws6T>N^1&zG!B)P)%>#~& zu_{#?6{C3PP+^0Q$|G)>FbA|7*YzJ_TVNw$KXm5}BLhEX2kE;2U|X{OlqLNAeomSD zbw0N*)W|Y4?%EW4qJ~${yXBg3Sr@Q#RpjVrDUFJjOz#VgDOc@CX?qP^KSp5xRDW6; zJ^!iwfVdlhg;P#ItX*b38y1Z0M2m`Y;_EZ>72$PoxsH$2{u3SUgt*W{~sYH?f(&od8fC)|NjgzKUZ7jpZrqQ9wv~4q$#h8XuB9)SQ{?CWlUOX5L9bT zMf3kHzx?_SerfzqeyNkfZ8HpFHo!J76JIs<*ahJ!%woD%h9*i%Yj3$$5j615x0xu zb`2ZfV#6!yr&07X1)IX8wBU%YP+KmG<+#RVEi>Yu{8HhQU(Qod$gR7UV)K|-kYesW z5xp8^Xd58q6D<&F2V-b3MOY@tfppmRWSUq&`hGXKD$x=@|fE9Q=#@6cUGoUeM? zi>PQLO!7B5Wip|yU!^fo^wVvli-1Ked~+_rXOJIbMT!SPq$*<~7eeopW@D;sboSPT z#Zr%^GTq~pb%4NDgj)Tp#r$J%KsHA!QWRo^FR3I1-J(K|At@wTN&ja#Xu-vuLnFPO=ejc)#+-QS3UGK*$8Z~s7XP9lqBDx zQfj}Y6Fq282BhG3!tqBAeCDK7Pk1bVv+SZJGt_>xx9(NE)mEurO?#!)m|DXRt7B&| zNdG=H)k1G(VQZJ(>5zNKD2%PvrwO#e&Sr}FD)K?*c}hKlC+$#(DpV>&ts%?4V2R(k zVVYS&%#pvcxyK{@+=1|As7$;)lxaDkSwdR^E?M3gi;BnslsD>938(sbhvoJFX^(P3 z3h$hf`w20Ox;4GtZm6tGJEP~(8qQ+Wf4UDYpn#R<@@8~l%u`2nw&9<<| zyIeW`IGMZy+<-=FFj?vvI4-iQKXFN9hQ8AcLf`vvh9-u}5A(m<5*_4)+nRsQUWHGH&-nP-F|E&X%G>{KIpvcY z3j=3rP+$PvDZd?5)UZZ-Jua5!oktk(adC-y@#f&QurrCO23qWc>^8OA3ah>gUaqar z&Nk0%AyB;c89eIzdc=Gj2ReQhS;)H3*+;NU7O+gBl}w_U#bX?zr@g$@&^`&3Ru-5^kh$yj9B8V_Opc zaGVUPtxWd|Eu23T(uaGhkF_G0N7|O;p5jhD?mE9dNjN>%q-w%H}M&HF@ch4G!V)PQH z(rTinv|ClOS;-$!JD(b0#pT>Gg20 zpkW_N_=-LRxlZ$P)fGz0S+DC&*S_7uz*8#qOmBT*qb7*>W%jpnhpi*F>*_wBVfcUs zXro)>v3ls7G=Tur(Y1G5y>RZF$YvmAcxc0OeU%G;8B!aEk1=CWi{<_XDwMzbMTbY$=UZAc%G zY7S}?5flS1gZ+piaVfba}}l0zs6HisMx zMn@2j#>Ld#mddJhFYMO35MTe`xkKq%c7cA-3l1Cp)9|QSVx#qy?t~}RJ2g5^%%UDl zhEztq_K>}C@_2Dby~V_v-GyC8{-LqjEOQam7I!7~OlF0n;lS+&hH>Wn*(ygP`k!Lk zY+JGJfa<7=;F`v}y6go2u>Qi3_C&Zv&(^Fv;evrf$6#t{RDCvcrNH*qn{}OOo!Sq4 zeatMYCwwJD5Xc{;-q91{-4&GL3CtONIL_*g^Y;~+{u#y<8OIc*;E0nu*Ww!ryyDg$ z!Q_f#bOJZnvGWazyQc3M@p#1kWuyO^2Yy}Hf*@#>{U{c-tzpNO+_Jbwuv~h@c8kq7 zF&!?Rdvx{9;OzHbDYPIcx*Pmw3jO%$FYxzfwg3KreTGs6z%P|~A*9g<#f%n`f`UA% zM^Kw*WAhox(?=qFJZvnU79vmu3-2FzWWcmejOW^?ZNfgngSLpRm`3+d%A5EX|DM&& z&W+21T0%jPZTu$wG$W)?Eu7;71aq40nj-Z_AGco*(; z@8(7SJ+;5!*H$qIK157UG&*PDH>R|^^&sIlEpel72G%y|nmD8_01wV4cF9u$(x^bJ61a@ZvMIq- z`w4}Er$ZXAyeU=pSiyyxkM@Qh>Y_+q6$d9PZ9_NU`%C}f2R2~|y48IpF_lh?j=|~+ zrx`TgjYSA)bBbei$o)2ZP?8NE7sS@Dgi2;ZN6>K#>@Wum>oI~kxP=7V;LKnL-u~)lmETh_HV`3|Lk0X02Tzmvx0k&RX1e-*8<>` z0D*d~DrW21GM}YSE^r0nH4SH(EvXPii)B+*IJQwF&e^XjMjeV;(u)|&<`XHE<=mrg z6)i_-Dq^F1bE=EwClY4G+K$%ctIDh8i*Y4g&1TX^*~+s{-E-$_R;Sav8tPm=H^+Gw ztEIGysSSKlcfR^-?SPpUB+X`|I`TlX+zJ$e&EiO7=rcite zcjIL{PqQE~rM0>V_K@uCbl%zXiw-JWKEnchL>jDHcRK++Y95@81g`t-9jyC|$M~-1 zRzB+x&0=l3cK3F0!jX3@9$CCTQc+(SIiNLpt+JYB&4i`#s*c*q?5Z25_U@ttK-M)< z#)<#QwtCmv0+k}MfTM{=uQKXJ2{nu}`H7tWHax;!iGz~^>B5Afv6q>>^)%wf36*d? zjYpHZD)N4hBG$q3_8?>FKAj6hJ*2!Db3?4vc~OmP#mi&L79~BvKjexIC9JrVL;Wnb4YMy01l|#)t zmp}vF$!Db@LjpNo$7x{P%Y20AFs7#kBfV}UX2(xZMO5otdAF%Q1R?-)aiq~UpGX>_ z5C*B+y1S}hzB_j!vNoy(=se_BqwuxvXP{%*RB<;^mX^Lxt(P3m^r&d{ILs?T({3ct zh+CTgVL;Z)fU(iZ!txhfulku@cBivB)y^nSb>6`*)+X@XWXGRt1~_q-Q-nFWI+tbR zL#u}4U&H9}YHusQ1ys3yJK0s4`qp6StG+W{qUTM^TQaco!8kt;P#e8RWa%o(>@#_2 zy6mIEbaL`_q+(^`i^s*rHIKMQAMYn;$XNsl&wSN$lSDsnY@jA?f5TNG`(T!S{6#MhIVd z7a4|zjN4NQ`}jw8K)`?nS4QGG^V9v1LmtWx4A0mD6G1gd;QDpuxE8ZrzW$NxH@NdHjh9V(np0SOW zx*Og{y9*Riy;xm-`VK=jw%fxb8Zc$}5&P3uiZ_T%_S+z<0JbL|EYsh+pqxmsy#bEL z^zyJ)tn03Mqjk7(CW7s0>jw_=P(7dq13;^N+BL`H9mQVHpSX^OkCsRQ2{Y>My>1dn z-5=<|vqIb8U06g{4}I4*Uw?Ia9?QkbTmhVOxaX+nsH{Ri<;f|sDelHL_I*}L>*U>M zEc66;_ZyR^0kO~Lg#u^D6bQXxTNF^2Mid$g@j}N`@^z4}A>lfhiAvZH7Sn(u~ zr3pSbc^a7H=fosVi@Z6dzp9l9{-&rUZSKu|b#wi=12FC{JDoS5?PLGJODFj-YckW@ zkCHk|mJd`u9>S%fs0N{z3!|2!sBTIXCrzFrt0tz;j#TFPRHA5Jz%O*AvWl@RAIxjw zw91~Jo8n0C;J1pgW?sYKtv{0c^$@X5XHrDUv;OLGMjG)esEBpW=2rrD=U2oE$H_(YahqiFQHp+X%gyC8t&mD!WJK{ zSK0kFRguA1J|EPX!Pu~2x%%7sk~10Ft80C;^Dw8>FXt;e->^|f5z3aLOGej^FH645 zx@Ty9FX$tFPOCUG#!Hx$>e^9BJ;z!i+F3Wl9RT*KVVRyb>ln*xD}&b}H~A>mo=0jM z)u^fUj#RL)w+{7PTZQVCi4_7fm$N~Hl5=~K`KhAKLA;lmsrKJH?D!txJfOdRI~);` zfC`3l?1eod`_KJ)C;Tf7X(!oonfh!3GD7;dG~~Zc=KyE(A@KflFz54?QuzOAL4{*- z5~Wqw#mFvesr0EECp+g%3b#fn9tJL7tx%U#>nHn++-R2L9OGA;**aVws@;mSv?US| zx`))*K;5%AqEJ7WdmFCrOLD#dbl+m8C#G?=P|%1Cb&eNa2N=*Wwx%7Xpbk@2;K(@& zaNnFXe6K9f1V;d+Q+%+{T+z1FR9oB&Q+~TB&>bHCF%8S1%%;)0qh+wpMlD)AhUWK~ z*-GxQZ!TlN87e$9NQD>yqi0zId40-4Jc^Fb!4ms`DT8(w+u7K6fyEgBe70~>XX8?& z*{@bCdGalVGmaXytbEhhSTq*DZkj0;QJ5so5f_!^-=_04Q_P~ZauzVF5xx|D7VbQh zFvne?tZjXcoeAKyGIxogjcr8Ypg2OuLN z;HzD}YHH6EM9j8*r57Cf96DCMx?sr-B!&g(Q) zwy=uYnAB{JG#JXFDZQRm>g>1|PjX;T7t{`IIl;*22#MlE1=cWW{wHv67mcH&jIAd5}qWLVqMU0v1H~D#u>zT@#HNlV7pN zy*E8I83a&bJD%9E~pGcvwljC1{4Mu1*B~` z_UsV|er2cb2H^R&kVCy?6D{z7y0l%gUIiiY(I5MSkSY|*{bnS>2IK!J6o;>^&^_W5 z>V{IvH%lFS^@^h>hXe*u{9By_PL&>Cm6|$>G79qqu$>Jxe+M=H7-$``V~$^{*{&AH zy@HGoc3m8O#(_Sr(Y9yu5!D49jhNJ4(vJrIQ5dG<34rcOf0dW@34Gb*_+j*L_@F|P zs(RieI}*{ijXI=KPr$v7S)?UHvqWo=KV$e>Zb7@_Ld-O3=9CzNd8`8ni28G4@Bx1s zgNao{La1MBu@nVB^PtAS-1GcC@fhm9b+}86-h7OWyhl(5D3lS77As8fBtnWe!zgw! zm>=CvvzACm)JUX84>&SA`m&jGTfbs;^N#x5Wks<>T8i0yB3h*(|B^eg&`aM1<)(r* zYAWG`z55kIilAhZ>q!U4zOb|khIJ#_EZGRY_3a-sxI3@CI(@GbUJHSfdRoU?P4jE)#;Y;-f7^Y;hfWAEkt zclRpa?PWk12wnc7dJ&P@w~T04Q>2Dg+Re!M%Ez@VH~MuojrjQbfxTNW4HRX3ugUZ} zB9%b35w5XdYhdp@_VKaR-LnVRx@v9(weaGFYo#!To3*vj$5j{`5XZ5_yURMSb43f| z7;xQ=lZ>yn+tc1QaHizPC!Z?QTXqKH{rc%1Vl`Qx()pTkS{0r`+uRVcXC^De;j^dC zZ|{F-b%7kjj*04xFI6Vjq@_{|b)EFxMJ;OtqOiTajZMo$E+V|yi`~0VL^uwZ`=U!M zXL2zG1F!&Uz|+v{H`AcOSWCXvkm`*jvbt zb*_D`JDA&{>J2OaR~_J!C~(xD%)9L9(8a!G$~C+z=N%UzsMT47V#R~bc9{$-24HYO zxyyH-jD3;jK~vu^6#AAQO_C*(#uJUhq3_grmSX5rxJIFSM21Fg;<|u9i(#A)Y>XY{ z)wA2BS zR1@dQL?6;Us9vSz%liu;kW;190ltlZZ=)olbK(eF-`S)@R%SCTe@bQ--0KFjKp(Ks z)X_Xq8!j*t)W|$|ZLE!SxartToSxC*a$!D$S*m@-i_gy1KXM;lMBWbAgi#QPo5rV{ zY%d$IhPE+PHKEVn<}&48;bl`$v{UaQZl+V*LRDQ&%hE)PzAX0A8D~`r0%${@nJ(n# z)KN((*r>HiSe>4rWHhe!XPibhlvv-Zx5=iVO&T|m`Ye1Ghn8dE$V=}O^-gZ9F4PeI&o#lTU$=7GzEi7p=m5@0)r}3w7AU9 z0WBtg?SCaZzRkUPd4xO>=4@5=3MUw-X~TvMaU$YTFd1;`rJ-V=?fFTmv` zJ5Qbs()(X*onv&R+t#hCQn77TY}>YN+jgx=Dz;Z_+o-T&Cl%YaE6!bepZneO?Q?E^ zt(Ns8E$?h&zI~3-=hN%v`B_vVy4{t8kxiHb*mzC?{JLvzzg&~B5ygU{kzrVXDa47Y zWZ2DHqI{NK#XkHD;*9*OX$s6el4gGBnrJL-F?i`PSTRxZBJzs(AG?`#ES((@%mO5( zZ4}vW(UKh;c_2wL0)9 zko(h976;UC=5>Zmqmz)yqE(QUtq_}WSMqg(0NM~LRmWEmK`tEBE_tntMnI8pRY`i= zZ?TJ4or~`%?(5~n*M!1Bw;VVvyNHMw8Qfm6rYYVqp4aJ2({xGA;W93i7xC8wXXILZ zUAbKbN6aS~zeP!J07OGND>V63_$RdSCZE z3N`M+6aEkrCS273b%Mx%V}xF{ zhOM9lUHrCx51rFXKbz#Q@y5^Yokc|)^Magm*$#J4Ehu>ALj5|Titk)!wLMU;X0{x7 zIqHQtlz~tQTnzJ;a38pnvykt{@-RO%jN5d3sb4B^@8bY+cX#u|AP~;KX8=^9(Bnh8Uq1nO-#hz_TD)p9?|AS&ipgR* zU#&5|acXA6uoLF|WSCpdw~+^<+JKmQ)Q@P<-kxCH%!s!B<$-iL#X#6cBhz|9))_DD zvvLJ$*5`8M;OlyQnLo0=r8eQqZ&W?Ijxh5M&#ne{L$Jw>tOH2P@K7Pp1jMl}J?X zjwXxVft>S3hO{Ns3FIK^i#ILd`s#45G!QGK+a9eM?*VX4{Z*6if`!0`_uB4zArjc6 zte9*?EJt+1=2gw~Jx>4P57ZZ7`Q!3=z#O!hs(|q?+KA7RIeTC zf1{zx2I!res@-Ev>_|$En91fxK8~}GYMyk|l69#8O9Po0%ciB(q*K{lGzXWDqPS~` zAwC(`KPF;!)!(@DyiewQY_-#Tqsi92^%Z`CKoSD{1YW9KDZb;!s=bd(;=;y-i@Zi& zx}rEoH%GgPRIt(dQddG7dbx(0iK9B)gB5!kEc3 zR=el}4ESpqCV0?Nq!j)!ouydC^z~t6@GT@-<+#r;qJr1Nwr@uC)xpjZ;XQ53N6KT` zuzblqFJ}_4dr5uA7`#YuGksJ{F}n&=Z98l-_S=RuOLO5oI){5Yk?8dA;^&Xbu=jng zvrPQ$bt=4uGq~Q_${F?I9{qM?%8QsJ^#K1H(B4fH%CWy%WWd)DI9|3~KJ^6AkG>8!}2=SNy?(vLX3Z!VQ{j6^_ zh`7)U2i%ge>vgajbbr0G&NDIGfiKiq1bOuE`lFEwo@mi%gMFv4(;a*LPrTE0yiOzVL zF-3DCNs`J(OiLvOi|_&DaJxCf1}}2}*KA!@(~o_o(_VP9Uc9qjP*67t#n%iMO|jM; zvDRxtZ+&#mf(R#SlcR#{3w>Pw@#aPG{4&mdY>Jxq*Yl86rXe^u|}A z8BB0Ii}BY^v(=vxYApee>5PxEN!)hLML9bsn=M^leuFa^8Z)K!blCro$)bY5XE15 z^FJf9=Hp``Oc+Z9iAL(9cBb_KI8#Ms8Q)EutWcC$A8muP_@_iLEr$oyzlPqj{Gjat z%l?4KyjO{NrAZIbiP?mV(SsYRjJD{Nv^0jA=$&`ts4n7ejX&6-;DKtH1-nybcpeG( zkrdmf_I>e4g`XCP`#aiV--?Y^a-uSfLs*N(Vv9PfmaRJTvLKC5hsTcsV2mTzA)MMT zh8LurAB02S&?=710a4}{+08Tt(0nDBZT4!MoNSJ$%4kcf**7M&3cg;9{sPzbNUG(8 zk%+y9-Qo5Hq2oZ}D&O^yCiwnS_=# z|H{`kdv;ja0%eI9(fvpB3Al|9^G{#{=+pxN#Lh$@0R&lEd$UjXe+EC$FQNX0oG|z~ zz0iTWNW6I}JnSouv_iVT_Zd$ASNd}~7}g89lB{DzxsQTLx1W^M3MOOKVQ5slb&V}Q z*Bw2ZT6{}}KF|SQoWKM_>OLcou*q17u!`=buv84E=PQnC&a`+9T3B7Ey3b!&S{+?T zH|0ZAf&MeAu}hW^hdKU^%!UTSx(QeEtK$St-=2#}n;u`#1bklwhmBmCuCXR|1~N*# zwI$bTCr{#9s=Ev*BLu#xn5E_DR_asmXM|`tSwM^IQb5)nVuRiUs_MiZ8*GW96 zX_EHp5s;h7#RmSg6#;KH z1oZ#;9(E}lB6*5Fp8K>forFsF$ZNDjj(;4FEY3(C(RL8dq5;UabBgBs8kKY!>%ktm zAh?21P09>2g8f(?2e;I6m7u&I%8x zY_~rpdZO4?!S^TWpvWVtVZDRs#~-e60EiRRpTAHQ_`AClqP)@5D1YtJC)xeO-GPIDZXBje#7q)Se z1ddI|v#~^^sK}{D@mmz|7pZg;>i9G2E)PR{DKwRo{-PHLB=vTAR3(t?6;X)V0Q_mV z?{l5qRW#SW-5s(zboqbYvZWO7$kAJ|tJaEzFVSp^!+HNEz>T<$K>e6U#PpR&Q29;Tg>SQziSx zEYw~+Uf3YBxMR_9O4gUvBdNK04p8Ki`cq|$Y41Ow!gyITg-!%zZQD7!o1A0$Glq2y zU^A(yzrYS3MbA$w*yKszn?9&{uEh?|H;PQ?nG$2fWLL8`MSv2nNI7vEVyxR-wkO%f zZ*EovU3@IIso$3Iux!-AZb}h_d4%e+h2mtgh6%4KvVgN}q81k?%oE7Q3=lw%@`j0E zeb$N+h<8Hc{MsrU)gI`q*y}ra^bI>_Hxjuk=?bIEVyW9KpnM8Zn<_uFY+*7M!K>1fL;Tm&yB>mx)dj4cZw20#9ie@d- znOcRkglY7#9SvwCY(#JuMnKRdj>ls5==7Pwpnwky-lu0r6hpM|6J(;1qb?jdKevKY z;%F5&F^t=0aiRcmU!t$*Zx|WX_W~lTqHeEeR;_zdoHOpU`Ym}FtKlmFBqWD2rr3_3 z5Xq;p-z4Jhn9MBU*~9_DLyF|d6Ns)Y1rjclUN)(Z3la@MSK>e6!T=s5Ywh3d#XCOH z8F{wlXPZAX0?(|6s2FB%X(!JrVorW!pHx`o5 z33+HS zFa@GIuzP)9BsEq}?x>9N)?P-{@2TkC%@mBtNTv58BKkxIV6A-(tKq|t2Rz-r*Hr2W zplNkYX=dB}?0$v#$YcagL8M%kC6#b8ACIR8%KZ73{)BVwAk6<`Tlopq+<2kjKxR(z zajxJ3`5xgII`Q4{n&4Z{B;apWJE@jYM*+y(;Dz%a8+&5U!~fgYgCzdp^j5Hzp&>jLg4Vu(%-UAGxD|^^=+SLhnfkIYI_QGqA98*2OlxLfWB7 z@Sr!i^`W4@t!gPaOvwr}Z9H>iZ`}Ci`so>R>ys_YAha{TJ?+P|ed?Vy`*QtkfGLLS zmXA`5zoRUxrezIoxbfyPa9EWhOjBLKq?yFpZ3?{np|9lyuv)@%bh=S=nwx=d9LTge zLr@jfEbp#uEA1{q{XRn4aj6!vjrue8l`{TwY~Olb`N!&U6^C~Bh-j||dtwqt&Z@#r zV){1ixtlJbljK6Na41<*cCEU!zG@TKT&6;$rq8GHNH#sQL8-d%5ZTor;I`RQ>|^O2 z*CZ-h1KN8LpzDfTZt0a2z(@q!JKmQ3M=|Ol+dqh9+XDRzdfzayO{$gX+AIw73uQ0t zwnNeiTK=VKfDpE1*WezMLO$^~GJ~Wqs>9vpC`I^#ZjL#>Dwh!2#8UhG^1>kMWKDnr z)h7RHKY{{Sq5k5t3I4;NkRSe82Z(?1k98pd3buprU)_ZuSNE6#*k9b_&hKGf!X3Ml z5Ds=CYr<S4dzZH9o_t z_njU%*H`N_09<6d3>z;7{>tf3q#IjFjBS>Z>ePu{CK03Oq$V8qRNL8=5$X#$qdPL> z81XHp76Srs(Ey=z?G&Y6(Iov%TW3ReXuZR7LnilqxJ3pvzzzmvANoAR6AQmzpe)!; z7L!tM9&e>NB!x0o^O)L}D_DylbOa#YZVdjgbpX8r;PuYkNA@!!a6w0(e!{8a4o?47 z(`?@Q+ORK0FxFOPyJSsB(RdGD6=BLAmba(s+N8N|a_z3WCcB@5%%xoshXs}EULFVR z&&R}W>InY^)q*f4G z1Z)J_*fi=>fH8D8xWH5a@{g;un7-5tG^UtcX?%h}m_}8mCu>D(U!AFp@W5+$X5Q_&}v;kIA*LO0)6HJQZBQ8aB>Cs+!rTKQ!h>i;AROc{YZ&1gdPxnR~9jB3Ft1 zsOulh#hhD8aKs2#R_R z4CS@O6736V4o~xD$;qRbMyUai0vCL@`y3z@%Z)&{kIGFBZT@)u4qL?5lXam`#Kmjj z32I>X{TY7fz}Ij!Rhu+phy)rZ0HDQ6Cm&p9AKcTI6;%2Rj1m!`918>T9| zsNTp)Bvsm}O!n_*j#}H!SdW*XTVJ23eHo24DFRiX+2b6_nV3rVU^h5Zstql|$duRfs>ABZb9M{u4}mI?{J(AMTmTKf?!=VhRIcn-!UkEmvKiUDl`DZ8FlCtg2%swEt1;%!gbe^ zhEWPoYC;VyMk?T5)*)n_*-ePl;``~D5R9OjU)ZoiIg7w74Z-}C3IuonZnM~Iswp}%Ba_tf_Z%HUkbf44GU`GX+Qwq&tKLu7Ho81i&ec`g*fEpwWR?Pg zjCwv8MVmKtu{mDyPLRTD$j|MkGrbQ9bUs2CSmv}5Co>vyJBVg)#ng5UbO&ws+Ri05 ze5E`70&TBX5nXKp$4~Z?_lOoToy5MX@dN6wx(lU4br}LdMpZ$z_fI#aFhA@+>yEJr z6$5Bghu{Oy*aHpO)BE(>mds0f^zCPv+S&yb5{O3cA}i>f9GmR+2Q~dai_R7r<7}Y! z3He#;ZZ5K`w#eu#xWZQ?-H@A4F*W%<8`w}`iL&aT_k#m9LLN*b_g^`lETM-&UFiEC z10y`A2XoI(&1Yq?aCi)dup$U(c&-^lfd+KA*~S3fpKUu!zH8U;7c7nQPRPqg8oz%; z2FVK_9i&e<32sa`7KRWGPDjeZGE}q%R#1MuZ&N)e^vqw<&*BzDLd`{5M8B(e{6xg! zh9A0J5oc^B>)C?svlDyrsnGNh`Uk9l2Feg}-~H?tx+O%UGivoDk(=K;GCv0oKKB{% z=htWg#Dx=#tKy&VQ|a+6;(3|LuELM9P(tiXWjUB6&ZW04q7#aI%|lt`GVQWPIPX2( zd5TrkQn=fP#Sd{Xr;by&zI?KW~9i86K8BaocwGT4wCn+oPW^ zlv7CGC-RUN<>%pbH|B+7R>i`24KJKqEg$ZiH5pBOYYWMl>$;hl3Em{{Q7PwFnP*{( z3!WdB{eWvxO`JRsLj%Vs(irgdAkfwr^&4;IbS!+bak1O@v}4ZQ!Z86$qZmGIjf%+8 zsvAX>AyY@AZ#Qy$%P5(#BL=M=-4OCe_nd1?pA)e+za;^Sw}JQ0+K^$YlSnpTFK)w2S{{ z>;0|R|JHxF;?1{MZbUV-9QUyuB6L zkDmmRoG<8d>&zmbUMN^M$It#u9b$c26XgxT?X`1Q?Co|0t~iKEgk-`uBE!M5A@#=B z1Wl}Gc4*PacOALxky`dgQmVkQ2-COthYSL?ty@@=L56!k9L|7K)U?is2rRukMfNNP zmP9F*Ijo2?>smnKR?>)1OW%*U^!w!apCk;Y#IJm2j8GILF#}ON}P)ToA5|k_Hty%Ddfs0%sFlD z9YY7&Q6_YQM#OarBoAV8{e}U#h$t`2zRob2waPyV6A-NG9U2B!18%7T;1+<&H-At0 z_uD!N=s{1p@*nEpuhY+esBA7^S0RW-HX+j|g#6v|&H5}>=K~N+crp;YQ?(;b4IM8- zyCc77f!kaxy}qvY0@)SFxc$Wo8C9gP(nTW7L`mK=WFs zy;Odm@m~AeY5uVOff{mD-NHIK9# z2vn~lk|n%ivzKe9V!C3j-)IQM0KxorDyy<5^)WB5jhEn!7ge))hn=3<&@8vz@+(<~ zLhb&9z9^wc^&iElOCq5?wjUnu?i4_q)Q7i19QPVtG*w5nYAEjP+SpFx59Knichux7 zzuMrQgYT@o!V2IllGPSmPN_*$2wJ30Jg_2Q$IzyMp8}kr2}KR#663yaDdw{o(PSpZ z%{(+V#|TS|%`(l#TZ(eyU1UTa9g2E`%KW4by*kBMd@4W^tfDqs>R*?nBOiXu z@!xX#pBhkrazb-e6-^WSBWn%QBr5DXq*_OAFnBnz6)n0jia4oOVA*wuY<*8J5YPcq z+@6!w(pr5^IJ4KrQ}?`^f8M%QxnCB$yWbIW(KcVU19bx_KQa2jo0g61&86yR&awO{ zP>rZIGgpo@*t1h}iSfp+5Cce_z%XFx752PxyQviw3xzB6mZiRy#Qq*~L_a7USi zoAxStvR3=oDbE(N*HWP(a6!&_j*xONV0<`^O7^eywS-c#9}Y;wVFd8+ZU*cjtLEa9 z0~heQxb4^-aP=vq;qx_M`({m_=Zssb){Q85DHBiFi{yIBL_g2D7S9A`&W`7?83I=E zdITm(Qq^Z%BG87CAjEfdqd(*K2=7pq%$5%v*l@7cn8~X%V|#E_j`m$TeUj%AL4{7K zj5fzk(2Y#E->Gfi4WCui8F_`-k|EOVsI1Gffhm;FEKv zV^boMp?f3|<)u<4)E;rSDh0q|b`y# zE66p8{g^}qnrqxX3t8qqRhyS26U@b_>w}c~=TH*1bW%_vZXPa;xL9|!rCeG;o>LU; za$>zP%`%j$j+=zS1TGFg%^@H>A86&U=@8jp6?mtprRgZ|8h)cG^mwySfXj^r**1_9hnndKar#}_+G zVe=FyGV;AF+c&-kwlp1ja@V*l{@CrXK9q-YRJbZm9kd9 zcD7||w5Nj%y-P}wy#@1hQH4r}g?j5F?c05`+&v5(!v49q)e9h|P~$&0bq4!?Pn?}fViL<@I$Eu6e#Xhzr9oSzmH zi@jGr+$h^c&!)ted_}$9Z=N9ISwuf;m@4%cNb&|y6Z6UA(IE4)|3J3quq5*voBo-W zh+g&peSU|h_qj(>@JjeBSDF1I8H@j|;>R|Av_5vOcV}l;jTPXHZ{oOxSCFXR!=|%; zDj2TuhVvfvUb2rit~cHsytits6qZO=LY`|+dobH+xIHSwX}BfoO)-2XI&zK>Rj29K z4=S4D95$)+3lS)hJGhlF1$<$wkg%Qn0Ro^C4l-#>U^vRqHYzD76G{UAhh!8NYz?;a zn}68v$M5p$l3svyj`=6Pd17U4s+zbUmaC+b#$bHW+*jx@#m{3CnPIyB;L z=TC52)^4CO1WDPVYkQLF=CUrSkBwr(y@(#~bjcY)D)W%+|R!y!JN($&{3KW%% z;}h)L{g#Qu-AxRn&ZP(%=Q;HfXvB5?!WsTVpO>Lqe!gq7IhcjY^uTK@R|R9L*R!SO zInWVqvMO>_5KTO|OCz$$im%^`Lx{yz;S;hz-ssvrQ+a@sFUvLlCfvYpQj@ZpXn|ld z1=Esk2G#%oS0znzP15Cgjw6|{h};^wxiSU+s7EjiJSEaYeKfC6DY{^np+jU;xyGYO zaHw|UJKkOyO#J$~BTcl(n4Q#Wa(#H@byl08ZB`UUpB7KK+Z+}cp0jIT5{@OC+KOsT z^|1ZpYmxOigioR!guf#AAFv;i>aSac^6w~ld+byI?3hMEIB$`SI7f)HGEu7^$UHX6 z2lg0b09|#eFza?$h`bfh2OQ9ckp&G5*aR#@*jVrpES?dMM8?)iZxkX>0fEoK=2h8>He~3gbU~C^k0nA}*A7y6afc+DYw;w?YKr%3ms4g5Dq2R{c zzwfvF8}2xfT#^%^st0+0AfcfrPU?cNI%lde-Y7$@zb-9rc8A+uL=OH|Tfw)bvU!() z2GvB8u7rC7i*Eon%$F6Fh2+I5hNxe!24I9|bF08@_L9t_E~=XI&V9PQb9 z!Hz*5NM}~;>0dnI+5&WGR4mqV+CHViO|Fx9d7b?6kWT@?_CqSIOX4i-0?p1Vd%#RVvq1Yh;?Y z&No!>B$(WK8~a&`y|?A=pzz5oSSv)J{T_tdn;3yCnPGZ^UTvdFI3XY82*vwyI$+m7 z4QLou)YyJpdLO^A;~iwqBQ6OvP57#Y!7vY1RPU+^ASzt|I7unxsN|WZ+aP{rr{bf@ zu8dbmB9^BLd(}5%IxX&t-=GaKt7lSAa!S*xs30h<^)45lvnBH{)uYMXN`iyPH|b?r zqoGpGLUrNMWE#p1&i2Qce$t2K6=rUXKK2%M9mTw7WWPEL=vk_D;QeCDl#*PFHtwD# zdN*VQ;0%H$2cfGY#Q3$&fnRK|Ve1@Etvb=-grz#r}TDtz#M_&=K8Bk4@!fIPqTJBHiENYEfwCCK0exunMlUINn*u zv-2o+>-DD7yCln$9xL2x>gYmuWzDTEfJ+_$6tj{$ge*HfS}wIWCqBe_11;G_2P}={()Bc@EOcbDn+T=H)lx$u}W3QK%pM%$aXjR9}jjTwZEJO8(~- z{(fl{>nnEk+~|v-(kili=ls$8ZL`D#0tzY3sAm1>-bA#%Rxv%;(9$(YdG#iI8OQw& z;7^DY(F}P%TEKQ}bTrvoM+>tDD+3sFUz__kLLJf9=<%!IllD|#K2ElDHEly^cH$Yr zPnbFIbF{TI7T0e-Nj$$je|Uc>J-86zf(Yq=V_}=PBqfE13%Izt;1`u+I@2;Y@1CaX z74!H@jz8(b{h#XJvFX5ODG95-i13nGrBI1w@#|K)h?zqM z&r9g>a=_}*qCWtPD6cvAAg8c7QX>E6yx`6Q5#{7_OG&kew7#ev%(_DZ`8|&VHvoX4 z3#>h7mp(MT%gF8Q!Ry~gU2#r+Y*mnQ+}dR;|Cw|J!$*$zDW|`LFNu3)UCf?mz9niE zSa(`^Lp=k7ZvtQ0n|C>vf?H~_x|642 zfE`fuJ~@N4;FJBH&Zx>v*Poh90P33MjNcw{FS-LvWw8;z_wU_Z{tgfX5A%2uYu~eG zDx2`I5foMImj97c^jZA7zryIc;?;c|CHbDHEOy0@S2W>wZwx8tEBCm!rZ^mUw(sNB zLfN3-!wJ8;V+_lY4$IM-;pdcOf!#EE{;X5mWap!Um&z3fvjUK|zx#fo2OJa(giT_F ztzh}TppY8g*guV-9_Lc7i4rCxoY;cjBC$*YAdS$8B(Cv`!AKHrhQ1WLw3?H9k*E% zb~~ZtjEdph73}D{gHP#+3h?#pipjn$6Tb--XPFe=F^i|Oh)3@Tvp=IDtdOGagSbeb|l$u1c8@>Aicdq}mC=f?eR_zE>jiR>%&KkFC5J|EekO@OIB8x&#dVhJQK z^4w5Nr0thGG3#7BvC<$Sub>BCn!JLI2KZe;Wficbm2_}&>FD7dZpB}JlxdeDROT#d z=BIz6#_^tv5e(cul1xZm1?qj|Uv3HJ9}Xeyl6S~`fihb-{-s!(T(5-mZDmHHtrSYI zz$1Gl2gLi$U0j#(E+>WRwz7WV{Ht48Nb^v*0ph>U5dQCO%U^u}rLli>YDs{grWW%5 z1VdHD`~r1c;6pyZ>Y*vlenD+*Er<7W5?e_Lp~-b1wVOi>rPXEyKiUv_eIkrdO3AQX zxpTZ}d7J6Gc0}63=>$jU)y4c4<@dp$zmyip59DxhaEZwjSFN8zEoU)h9!oY|Mx0+( z<3YI{bvAgK+I}_R<0H31nQ5|G*V(OP9DgyX!Wa2dAkjhf-Ra}E3mRq4mP z`-pJ^-V$`o{z1AX-|I8$~1|iu@9_|uswTd;+!;Xu{J;jOB2zi$I1Qx{m9hBpHs=!t) z>0KwOlEUE;VDDOVYDL8pu;{Io<~I7dMY#J9Is zigMdk#yGsjHixy1p|6@ir&gNzynrb8e1;n9O6@BWMzCEBw7CC)Zc`9TE6k#CVe`6P3BOrc^_2v$+`q70B7y)3{k+Z0cYVJ z8(hTDP5^X#T5D-OI1e;gIxH&zRW^*&nDCkCyvpZu2?6x5axz)zD|zx~D-w`fgf+!`h%p3&1#IY4wIiBd<+BtXcu&K$>!|k| z&r-0{Rm-v7`X_Q}05jlS<~DYc(~$h=UVVhhF)wjb_AI_;OHES5GK9Uy@4E3yjkF~H zujkF!5f^KTmMI@^KIfVA`3UX_j>qN8wS!5#pj)%nYcVd@ zW_468#~Qjdc&al$p%RI)tV7RIJ+5cCv&}UH&1UbKOLnvaK>Z=7YI;?&6kPjczy+W6 za`0K;#pF`DF%SDr=2_vsOERS~qn(8=7^y2U@lX)V+dYqTdjJohzp?E4R5H znOR_+I}^_Fgs!6j5o+TuJe)eZqSa;Y)EBUprc`fEU5%}-iTRK4KJ5IAr zAk+*3H-H~uo9&oz8wtH$eoF&7Y5$Eyet*WlMn*?I0YlG3Uq zKl9U_uunR@v#=HE_ay`Br%GeIZvhUk z33I+_YF-$=WtV+y`931oYy!Qy-(z=71&C?!@&FteI0i%6?j3LVo709G8y%(umr0y| zYIfr~xI1F5UDJSgxitlFH7I8YXM;7+4~t8&i{x%IXqTe5>qFP@0dVgZvUb|xP^J6Y zooUl0v@8phiK!7_vRLnsbl_j#mi8k~CuI<2Rnt1R}hIL0!hW*gtpj&vnwRj^c8DzWF0$joz~eJJ(EV)`G=2J`!t|p;s&KpMCl}Hzwd6_7EA^a7 z7+5KT_CrX>DN7CNbd8ZtP3c5+mJ6DvF&YOfP3OGP1XpA+Mfu((RcUPU)UGY+e84a7 zj!+2r%k~(`0 z=OTJ%)y!Es@$?^M8kRg4+GVL1r~bQluLwk^-(%;0S=)F0LiDN|L?jUC*SoHSPA4_E!cjD|z|JRJA12SWIg3MT^H76i5mO$LFE69vxnb~hAs&bhLr*;v1 ziRdv2aGOrPD3X~*h*2V@V{_M~EwC5W*UV7KQi=fFLKC$E`vd}@yit`7iia^=GAel zSxgJH@-AjDx81q4AyJ5u2`RNrOgwtK=gq$g8O!r8 zGnV{cW-JkB*vP-ESYi5ogMX_-aCAy|6Oc6erx^>R4)uX_iwG3|YiYQEaf=94068gW zT&6~gt&p*udOXiRlUIv$ub&oBNpauenZhU`7_T^V{& z;?{jY=T^m$G!Wb8o*TsY_Dh()XVi=t-I>{9_ z6gmqdxe$I?kAFgw1v^h$gB}1)v?kgYBkX?8qj!9Q<*D*thVkRB(MEt8_r6VD2cU^U;2FtpQ- zIs(lltK-D*{?+>JZ(iNOdL0`r=uy`E*TC(+>^Of3ZQ#>A3Ib4V8Nm;b)V6ind(~QF z;4q3 zywkfbvf0g+VUHEj&*bK17z<4-1exP`$^l$Q)})C8tgy6KDhiO^;D1=O*};st%kf^e z@vfm^{=s?1L;}v#%Ygx;JBp2!hEB0fwCsvp;lp9E#2YLkgITnbaP|4_ii!Eg%FM{x zEZs5(GT>J(Xq745^;{Z@nxpyB8^Y29nP~ZD!&`7B!B;{n*bU)%tFalbjY}+6VLBrJ zu)&{t5gn$t)<_0vohRGS#UAQWO44Fi2NRS=nk%>*r^bcE7v};N$<2)flj!t~q_V|K zPzzZ2XW@6iPh$Ezn#2?=BqGRh-E%zOYVO>Gu8jLHbph;+#}+KKB9Z(NNMYAQ<@11)ufM!yQP+e*=7`%z-$ zWd*7QPB}xTOX+!z=J9*`O?UVP60@};=Y?fjCt()wMds6#wlxX*&_kPf)IS>Xfyw5_ z)fpbY@94M@DR}#f#eE{q!x^?6y&RIaOVngB8fo!xOsWA(Num1HO%E)3eEMW~#!=_# z9?@WIsAfZf4Z2gY9mi?v^}V(-Nw<;Jn#|3uRNlq=k0e@~!)+oLPpFM#1m?pfIS(DS`3>@n&q}k{LMDMXxt;^*i zwzTR5UGRW-O1Gl}-DtVRmcWGU1~VQ6!uVFQG}Bg}pQE~^T-8HJj`=|wre$rulg+yV z9{Fy|7Vyu3q9Ic&#g}8Ju4uD&F~jXx+Su_x zTOUCAv-Y?W9#kJ)(@g@VYQZX7x^R+@5a9Wf&NF}<)fQ?xr{J(m=Lx6Nm&BhT{|kf& zy-AFOk3YhJv*b+x#2UhtMKXqvr;i=cmlv&oAPv5@rF@fE$<7NUAa*Zhs|KebVS&Uon#PJSh zs*HcwM-fymf?F-iDR)Ue%1Cu*uvaTHBWHkD)>$Q@Qlg`I#K?pb&>Is{%Ww0BOz-nW z_YHuu(HR2eLLuAfGlTxpz}7`{ln(7SV6FwI!QVIL?ib~ozWSbxohU6L#952^NgguE z>bUOOU+;yIj6P@%BVGzN+K4*%1l+JhBORmQ%v>?nXkYZ(5bn1jsy|)%m&$%sd)?M# zgQPxP{!(db`Qfffp!6m~?GmxH;%59yFyQG6Z`ndZX@C3s-`iDWXzb2D$n4^ag!G>$ zRE>ACkmq=gbzo)=ySOI$uu5x{<&|F59AUO zw@Yb|{5d->t*%)FP}~&!l|RKClLAB3}u^XeqWSUwU91(G?h_$%WixX`*wXs z%GdEY4pHX!G(<$Hw!6U+Vl6n zEhycmJdgi>3s>ppKc)-+YKj2cmQYXuO{x1I zv*?`}Y?6H4YP3DpF5D9`q2DK>Q7$-&Qp+RbV%E)9zcdBG?hV0DnY&CvA=}2-l56~( zG48LuqSl2N1~HFPKHPU}GMs46CZT_OedJH~ycM9GUv-`xOrGyA)|Ag9#Q-l0rHA5F zU(9eu(U>vx;LvU|eg(;}fX{j({{V5uoThZmdk3w3%Yq0qMxpt4XN^ix57fzYEy^=- zt-NU~!%FKrnJ6B5E0(xI5(OM1+&CNLJafPU6Sdj)}1X4qV(z7mqh{jzmJI> z$2a!3OlRz~QUA!hVZ5O8hX#bGj45@~(q|?z^lMs9dLG@k_cE-9^ zWzyLATd)QHOCRn`V&1x;WX#$3N@56(xNl*6u+&jIaw)aaL6%}SH|b)r78Zozk- zW4iuc5DZEp9u3gTv-%&NpucnosCVf$7jC*@SPm0KhZr zcf{8&NQ}}sB|s7Bcl#h!YRg|&2fz~6$pmInyY2KYDLm`#$Rx+sUR6PbNqLy5)Ml1m zT|3VFjruHHcHr~=A1`0WLDc3=r_|bsoTiQtQ96!qQ+pn=krnQ9#8S`<>1iRynK`Zy zB&a#8Sn{NYx;Ui!OJ$j-EZx6P>C9MrIZIgb4V^up@&KmoAp|@g`6)^j&E|5xgV@>W zroKy8yD9chl+elX#n;3lrL(oNLk?%g9+ux0{xpO}D{q?yu*YYqK)#1?MpFk={C zxGi?YF$bI#hCudSxBK$$xAulvRCTCAEoHKs+DwOqvWvN~<)uw47gu(ihK$>3v=VN2 z{n~Tdc~x>VD|AenF5VHe_vvzCWH5{3W@W$RZjR^RW=P4}Xl&ONwbiz~0yadYB-&W8 zS^C;iVml)35W^#cy72{ih>X2VE0j71rx9|pasy({;)fTc>{5>>QnMF3nRUFC@vpxe z#XX*o@!>E3?1G?NN41o6QtM+T&_AMJO9{0QaiRTsQW0#kC^cNX|fq4+3+4T|$ zJYptLzGL!IRnVcj>SxO&!|!b04L;?mw!BL{R(2*CV)b_s5f#j9SgS3gw=F@+$NDm( z&kPXZQ<12nBH3*g;4dPLA@P_@&v|Aj7F%e+UmZ77TXAq&S*kpxlfLvA)5E23OFoZb zZBDzjBv|y3DNHsOCS%GqZlq(v3hK9mq{d4@zsPrjGf|LbwuC+}a<05_jFTj-CXM|3 zqtUCM*z#7JAg3SPSaQLQKhNxdR>2g;4G8$u5JD*+B)={E8x|qw>l&b<}G#)KuA3ImjPgEng-a!ZghE^8`&e>x#h75C{&sTuI zuUCB|{`S%ff-Ez|yw=yC7x^x|S>sKZl3+@`v2iB9K8Ifi3?6UTDeipa>nNEh@5s95 zleNDD1V{;P;Paj)+3QP{(q5O@p|oO9@HULb51|oYwi&rE{IvE(wDi!a82}G*UPg9y zLG~&|5`9=4Yri@(dsQ@5VuXP5>BD!b+tLUDpISnOliDJYY)w>*7y;(N+j_Uvd#?R#r z-fh<~Z8!D;%$Ci%Zjx4~Puwtx0<;G)Lc#KV6&Wl2ufN$}Q>U7hnRtJeW|B_#$p0V4 z-Z9A1Z`<;&O53(=+qP}n)~>Y8O53*0O53*Wtjst6=k$B;xgFgR{cXpypHFMg82h)@ znq$mxd)lzHE(=ezamo;Kt97{L7M^wg*8M3A=l&cg+3_bBXWv-~4nLw2nrcUz-xXAu z(Jf-N3%jNWfs(-l;pqL{2{)V+&rCk=0Gn0Jo4PxRxf^Sti)??D5!8>A%_-ENET$>m z)om%&X!!gZ1$3VM+kgupd8HVZ;BufZ2R<8X_tDM7oIv~r&2lTC;7|sB85ab;*oZZ) zSH7QVcMTExTHmfw^6t?GPQ1rI;;EUIcAmfs8*gBZN9V2ARPw4jo}Zh;Mgp`i0HoOG zo6L<5Qy)-;f?rx+RI%0`r>j~;$JSQPwDdl>^aqbB-B7Yt5*D^R5Zozp}^ii!eMc4Ib=e%%3)o*VbIz{(sM{1bv3)GX|?2qMz z>6v(YA4rQCi@yxd4uT)if*vUi0lqXBx2iDJ(Bsae%?{B?J6v7C)NSFB@bjppHE+bj z9YC+RiOBYQW8vo<=v+Ne%2?e{brG7JK|1Bk_SVt zqK=U?F|Tw?hK{z&w~Z)`0lcD9GY!@a>aSH8hZvpX%g3g}-G$3HDfvHf07ZX&cJJHs zJF6*bsNdj%Ns7Qv2_tUUZ!lbMx+(M&9+>phAF#I69&p#lDKAUl9%;XCI}-L%Rqmvz zUP+TbWKerPs#W5=qjS7-10mx4bzLCdPZ9k-n+gI?6|vOVL{1^hPBGZwbba*kjo(8x zM;vvEk#z|1hoI)Ed7imM0glmLx9(iw07l=))9C7v*M%O79G${w+MFZ8gpa1r;O zp{vCp+AeXnSjBQ!d4gQB=D+y_ja_2IPI*XAfwB}S86&Kk755W;fmJ==v%ZbGb^1k@ z+k-6%l35#1-4hyBh4&u|o|xN;X|Br&VdC3E&ngLR9-!OD6R$tz0rUpTunSfz*o!v< z*cSWxENlXwm$NGa>@!7zJ!6@wSX3+@62f6^eZ?#6oX^16=ALr2D%%rZ=+cIwQ_-4O zbip^slwr}WK{Th)Q^T4x91i8 zMOMsbYSkn$F4%^<*I~QixbxU^`@VbnearcEan9Pp#+#TQgc!76t`1mqkfTgppW zje(Op{mHD7@l)TeD@mDkGK zXE()6mH^B(V#_vtYqETXx~*O?WNbxBg|e0+Tla}G?BBWkE#jAc|n((ma9@Zn$vr^X<<<-3}4f*Qi_0g6x)-DdRZICPIN`#9A z&bV(dRwJ8_l?d`?P>h&^NXccXZ4Jt9#Das!kOMF#$S~^-STdHT@K_bdYt1h$$a(d( zE-}f`7l2*NXMaO2>=OdRl3~q~%xICQ(Yf%tkrDqD*vSqI^z9n)T6=%z1_w!Z{S?0> zNcs#fYh*PfCkLKxQewN`Yb`_VKn8PzxX@j<FIU8Y$h(pj zK+c$M3VW}b0_lCX?}4pzvasSt8Zu8+kO5#%&=*u}u3qDNrv)dyKT)gc{I5cYu*7~w ztq(s?B5$4;I-u<@coI=E=k2$-aaBpXYtDoW``U|%vge(Z$>&y`IN&&4+HhRGPD%cr z%NCuD1O@|(p!x$EN0&-cWE?n`lky2PF%NYVCm?NzcaFs~s@QW~79x;v6pLXhiVtAB zCB;EpiL3i7U^St$Tt?q}1!Tf@GeLerjdRe&aAWH4ZQs;He_p7ZaO{nCK7Na8WwE`- zEXRQdFT_0o<|sPVI)}j+FA|ZZq*^vEc#kzzQyZ^~;k79kYe_K{Sxbl{<)xn5+obTrhIs>{U<^lz^sR zZ4lpsHH}ZxgZ184R(G3DbrL8nQx9NH=R}=rg^eRKjXfR548g;|KF*VGS^;2ud{@0& z14()MnGn+GifvK6rzxJ;W;rH4SM%PFhwVm^yH?8(PvI$H{WV%r8|Meu0{?77Cz_sV zk<2(hXI8C`rHY!ynw(2Mu6Of_LOh~XW4H|Ka6dUXN0XZzYkL~0 zHRr&K+dRH%1_ctr-izhVo9)a+R2W^IfcZ@{(1M%g-VguwZ}+FUCR45-&vF9_<#>H) z?5H03Oi`}5eEMLt778KmzHIe3rKi>E(p$+`#8daEE?3Q(dedgsI04*Hh0h935)7gH zSAm}1*RDywxwW5}^%@_hnd~eB>AFW3l2z}tL>XEQ1>2^%H@wQLwLotgJfbSd!?%z` z2rOo5t<0uMukB%*T+W%Fb?D@uQRl)S9G8Sc`q$(Y)+_nu{Yd(#-D^>!{IVTnr_etr z74~&2`(1o_Ey!}|0S^$H=ecV8Q-?hE(PP1)8_5AhmLs5d<^(z}Z`<}u$p8&*bjp9g-E_~$Qh z>pw>8$1@-5HrtG`;>R~_0~hDku#Mk{DG=WpX%IiU)wx)~u{nIf zIlviSEF}~AHHP}b))YsrY}Ygms+^1|R7Q4H-^p4AzoScAvnxzn6Imq{VVke|rS>+x8?~gabV^Nl--N1+6<;iD+S;`@o9wd5FVH+IdNzhA5^x z^16&@|HKyHlaqW8EGM7$21W&IW6AyxQ5+#Zx+(ykF{5r^8!;K|l^P}l!u|0v!xXVy zhPuYqVrg;?GxaEXe!t771f#ODA7F4G56Gh+WN`%MI5l<$4dhTBqh<4t(6=f-Mhf#} zoS~~qi>$|!uNh5;o$=k0(RLOEqDMC$r93<7{;T(%iKO!^;)AeBuN@Uq6DnKU8|7Zkd; zLJFAC>RjcOv|HKe*zjg2tSYL~(#AJ9@1W|Yr8tjvv#PH#TGo_=+ga`_`0=AN|4uF;nl>DZ#<|baXwd=ShJmAh%jl4ytpry`_A_{X3 zqw-rL78d0hE;iWk2(3aN409T`w9RHkS{B--vf{ekr6HPIr4?}zjP3VI)Hz5w6r`dh z!dndYAKyKi6_(t#aHmeO+=K4-WL8Jy<$YJ6Vq_STL>Ntm1X*iic&t*y6+oL)V`4Ua z)lyU<^ch|{v%L(cm1BWF7xJS8f(0ECHF~=pcVfIBfy3mM|5mo}W|glm?q8s2t}kLY z1gWnRku|KA#L)ku2+|T{ux7{$ElqolEW@S;X>w8Y%y>&x@_RiPR#8V}8esMe4_=K( zZT%2XAk^+gWnnh}*Z9SjRtpbyB*&#CHw027b4sAmQcJGp;)Yy{pC=W+tul>07_EvR%x+QFZl7LUEH2x=wn>BLrN-(@>d!9kWx zZ204_nAu$cR?sT${zhyL%hYMqItNt@H*Ega^oxrru5*-)ck(Z4{j>e=z0 z!D|QLN5DHCYUbBO#&}4jr}4W<$M`YldST-QOk=mlF~iR=a8I*jyjC!s*0bKNS+qP8 zYzS!p8Z(=JbA%%Q;OlDj@$nknNHXtgxZx>06{NpL>NiIS|HBc^6HKnONGIK1!%Hl; zri!byoL)-4&GzyLLf<=DuuR3}sV<`Y><$OxRi))74j)kJGYi)6CwAeB)LOaqP%>?xmTt=XC19>HosN$ zxWh^dE_>}oux!N$w0Hg59@MmISNXiAwe!brwpbf8P#e2ORO5Jw*6KDFAk{43g68*Cov$MS9HZ+WF zYG+M3Y*24gNo>nHN5FSL6Jy$7+~0mT;F9oyHkUtiKr~V!$c-uv* z;>%(R`xfIAZEi%8TT-9o(aGS_*#H-SRT*et|GRGsv^G;^nyIWCNXeZp5le$e)Le^b z(R6!QL7K#UZ^z%<;n`nv1DTrzSR0cMm@|;EsXPW@=LYFl3KQLO*&*dONN_O)%DApR zdpZ3B5(y4T+)_fV!faxF1|-*rmel?Y?M@N&?etn5_-T#8awl) z^b|>JN)yNz@6O!I=-S9%`@ngm&;25(wAwNGg@OHI%;s=8Vs&3Y5dqjfTBz}>~g(YL&P=KC-=Iwp(7hpf3HyqFDeR-Z+bg8f3N`N8!TOhsu?Ln+g z0wWH3w%zN8H%%`GJ)05!LA?*<3-T`Luj1q{q|lpuj)1R|loN5z@*u%3d=bp}=6yyU zxpCtD{?Hr4B&0kve8Z}gJDsSC*wggKZX zpYP9TpZsR9Gy9A_2z`ObpZ7$h<1k4WFH!y&MS{v3kr#hQjp#hR3OQ2JWZ-ok@4vqArT?f8+^7GT{Gt zKJlju2`$z09Tpytn8smc+xttB089}PSwsQ^5)3H;L!`G)Z7=Jvl&z3@1WgX_rD)}Y0gu8 z-ZfoITh@P{*4__J;ahm1c0}4X!*LF*M(5*Wf%;w+hqVd-&C56L%gvQqwqE@K0jqpH z^gQBm+M0`+5a3X(9IhyW=$TiL4~rp7Fm8`vU{)QnJ(w*0#Vt$LA*+pS79o{60wgDl z!cDr}dd!V(VzwEKwE~-NQx+GGzx~`8hmAKIA3}Y90wfq3Jhz>A{c|AKNBoBwr zFhXxx2Cd%!oj%9sSSnerQwTijzk^p?Tmz3l5xXH5v$KinXw^123;486FVP%rE9!08 zYqrrFoDDfPw#`D`R@Vya=uoUFW*sr4K*{k&!yqGMzO?iicCH(a49!fJq$csL#8u%! zwFeNnVg?lhFyH9|^p6z_5t=HOnwiF_khEI)*)!?zu`k#lkBg zFq~2foE6ds)D$WMZq- zjc)3_=h7`JY@g^0=DCq)(Nf{AkX0@@(BDjCMeP1ds1Q@^JiGyt$?tK61}y0JEG#D$ zgQu&Z0x&ig)!X%L7K+~E38<0BP0dsG`#KtcpEIUG90ccYUe@Z^*{p&nu>EDMXmjtTplr zK&t}w8ya2eP9HIG1OH0hd0?$}MZDNb8Z~#3t7r;0#cH zLQe@lg3BD~)iYoa>pI*O@EnDCi_+T;Hfxi0BTw1)Y5J@}P%(!XDohAc@X7%rrkt=9 z-gn#?lscdy@o-H$A<9)NL&uqM>0hV-{Nd&D(U=rv%XeU-rR|*?VS$vfiCtoTnenPHRxy7*!Z z^UPVhlwEH;arJu-1B9G-$TS_+PV5qgA09q?MlmzYcU2!9lkd{$i@YK?hts31U34PP zTRqCuZ)whM3jferqmgZCP!Gd$*$v9t2wu3qyiEv@R9YnRpw^u-Ch>0t&|9zM?yGGK zClhr+RXqo5arUW=$iPf1YWa!+M$~Uv`wWG(Xzzo)kv5xfS_h&mmX}?9gjZQZ+-TXB znttP0F&_--z7&UaEMk3Ck;K*?7SlZpkP8pAfJW9YvEbm?BCxfCIw#;Z)Gb2O&=pJiEMg@F_+ zM2pdP85xY2 zGxCJ0?=V!>qm>RYH#TDcjt7}N)CQcnvenD1B#Wh@2IEj`;XV>BGy!#IPolVAWdVZE z!E3~LO(L$MUaTLf22Xv3w^)9pX&v^EhD~85mjXsiT;`=L2R*JIU|$2h2XhxqSqBHR zbtw0tFx4l6(l7jn8Z{6xlX3Bd(@}R_mn&uas!fp-&ktZi#Z<3=s+euc>B)PLPL`+V z0L^!{6hmZ)5G!n$noE&;RsRrvljO_ckUv&P>eJ!Nx5f3xw1UoT2!9BO3uduC2W>d4 zBd6}L5$XO2lHuz~w<6o`%fbT2{zTdkqS=h@xG_ugt{83gWyqNg0G4m*J_#|bZ9^;F z8Dp~(93$iX1+Q@dzl86}C^g^F8}fI3N$c}Vm$UP?GlsFW;ho#)`MveAmFOn^%Y)m z8)a-)88zVo5Rg~W?x_#FR>&;ymHy-#NWs-l{OSRF(nz4RG$8gPvszRtl5XN+!p!hu z*o(82fmp(d-*QM?rW}#1BAa*R)N6Yt#EsEtbQ$L65|mpwAkj7ZGp1RkmNK*?DP>cQ zwCIO}YqNWD>{p zUi-W@3d!iz^;*L8I~%iAC07m-qx&(jnBnW^ELmuujCrB(vj17Yxx?ti4T}^z?PjRg zIx>>A8vuM4v`hYd2R9(@!r>FgH~;}L+|_trFdIi{+)=YW&B`(A_;+%|3CGMlt06jx zXn8shkQZvo^K4KpI3SO+yJO#&NXfPsNXZ>KH?a=K<>=IpXZhQz$ThP{ zfQE57@fNDJv3a3gN5<|57U~Fm7xrfh3F>^CxlIe104l>FR(Ao1+~cH35g`IZXun_q zpze{Cjzy0SYgdBxuS&PGj=xU+6a?L(slduZ!$5kB5qXB69_!x#I&0Fw66%F{bXQ0% zd3DZ1X{RQ#cEtfGB0B8w9xwtf7xkha)nYs__nVdLqgSWpwyTfm zmx<;ojW!=*wMCKL@ci|r;Vg8~oCG;ebQ>X(h{tMaomA0V&Slgk(g^DFJL64#UG-kP zagF;o3cGGx;|sSI?ZbIb_fS>7p)CBNtZMJ(z3jufesBB%U&W6RF&>N|z(9(KyMKA3 zB{LrCf~B3*muA+$r3a9xoj8j8cBIcT{TY<%D|AbN6Sba}-1tUtb!x%Oqp`sQa$|#`YwUvHb5pRORX#GtUTNK?ttO3vU;>B^FcHdFuKi&5jeloufui5 zgX0hORFA-F(GS@U7w;VC1J?hr{e=xC&on`-2As4?=XSp{CvWJIdFyqi40B}f8aJnf?3E*0%@jmYb|iGo>OqoBJ4Rq=@5ke+*ZF`d+6B6{jT zo|`GX1y8}90HaqGs{4ca9Frqe(lm9N!w4QFKB|ZIggEwDu`L>GPud)u1J!+$iQ;Yf zy7(654Yadj7~!o*r>NjgO18Tf8$x?2umfH31Kn7ojbBU~VZ@He-fhv2uH4&O!=K&5 zcs)W4e#tu>fxq6lrUuv{D!CnhUiEYNAfG$3(+#vZ08p>`s$STndjj7v*WmZOSEOEe zqu+0Er1eb3zBN zONQ3NJITY#O2Rrz!aKn&HI53&*jwlYEPwtA`A?%a0USPm{t*b;f~ z+Lhwe0c0Jv2eb(#7k>1K8MX(yLmyrkcjXPjTa6%hWF^Ek<~gI|3dF#7AWn7c72M&~BD`BI@pI0qYe4tmSNj?#o{!{UMQymcJ#r1L9FKW`VT{RM5ehsa zfWC-Btdpok8L@^U+9QT=uS}aAwJA)!6osx1MQxCnaZ^sTQ>dRI>!0s9Y4$kx1{?5B zX-u8kbSz12-6;jwpJ@PS4t8?mfm@58zx+_`d@`!B!7HtasIyeW2tKa$Hf@ahL8Wu%+P0mSqTqssQP0^x!zMsB>t%LK$~*OzJePqltw)!9|MmL%IN3 zHK?on6@Ju&HqH`h`rOxqU4n#%pD#S{$5*hD3DbyCq-x=yl>?ww>^#9KRfLknDOS#r zX@(x|!cf9#n$@)D?IJ!U*mtAd- zP7m4@|M;I8MJ997=A}M+?;KlNVbTSz2O+==soK?b9Ecw_X%`^0go1M?658Rxe}F> zk~3(aZe4_Xph%IYAqp7@qwUYNH@17=TN?AKAR_cG1_O8zz(B;P7B%w7ZQNO}+kh+z zg8}Wp2S&s$BMR9|i7ND*nz8Z({{+to^xKCtJ;Pyo4Zlj3FXz7&M+V9 z#2gF4`+|b~YVl>dn6!S$r)5%U1o&u4_~!Hs)(V|xc_M?E%SXEs=t*#EI}e`~C+`qm zcmoGD_uz?oMo72HnI|&E-r@M3XMs7d9zP<}xB!-V3OgA)#H`2Q70$Og9QE zITv@(?0_vzR%uAL$41{NWRfvG_d%MVXJu6=Dv($5m+Re1EZBwDPw1}V6IOHRto!GS z1@i7;59!T!jI?xQ{TEMzDQmlB_uiTJ@GUaYxf_fk)aSLW{~d=OT`sVH`Q1tF0P+Lw zKOFD>)W@{Sf7eHRA{;Lu4l18AScwV+4V3uSs{wP~vW0v6qLKBhJV5KFAAjfiR*R=$ z70r?;WMd-RIqjMAnzMl)0Qma3!-+>vJTSun5j~TK{t(26?4|!*2qy8=1o~n>$6?mH zxpr@FUyO67UL}Hryv1N%6)<+Ot3_>EYZ`Yt;y0iRAz(q@b9?}Zm}NpCAI&gDtA-X$ z8^qTW`~K)L9@7?>G40@h6pOD^AJf^XFK7$G5T7+l0dM z`lCFKqsKGcFd2>KkqSmmKFdnKGsUgF3DYb`3o*N|n^VBy9at%;sP)&n3mc^~<@8L; zT3G|udy{8)(bSPT3coUKAh%1kLHHDw<5_90KkJ`#WLUt}9$uVC$|Ta=-=vS9ZQ)F$ z{B0tpWbNTdrm8^N4`ORqP`c8yY+k=Y3r(Izq%&>`DdWz41aJ4SGUX%AA!~Ws7=Eg` zOMX~LeZW3u7@2Fy+pD5o#0S@@ZU;Z#* zrcDCbcrbp!8S0sHpUwP!{V=WnL;ltP6Eoz@dU+c)N1TX_TZ>v(2(1n14i%+#qV}|m z7!N;&AM`8@UX-HII%wM0Fvz@>4D~q)&4)Sxu>TW4Jch$-MgM39|gck2ISGSTOY(xuMe~X=unU0S}g_ z>wmse6JlV7I%a1DPT;S;3uHhs8~Z``Uj<^OKfG`Y1$%s*eZdvEmenF0QtuW!4IO@d zDh(s6bu|&mko2@5;k_5#n8;cZ#a9o+6XI+AtM{p-fI`~w=klqI;*mmjo_*E2f$Nj) zK8W;Yv_8dWt`->kiB2C3d%bTT^~eCqg3|*hUUMn-BKP zrlF;p4WZPKwk%Em%b_a_9)|x%hOI8k77 z$bTNuJDEDW{P*+SJox{39qRys;$N>%n?sQ!{nzXCE}jmi&h%=Gsfsp8C;$@1e-9Nc zijkKV5=0rAe$>3S^tazG4z{Kb7)Kyc(h^aa^~0%|=AV!1>kovBS1P7>61AK>aqVUoa($G*FVJ+oXJ%lz(meQ$IHRUPx=2Hlf z5TX=+*(8Y9*RIMwgGb=!=7^gkWOB{J&%iI9`exW7$(Bx#{FdD6e!t>=&h)psti3VIt2gViU1165&I_32wsBCWp5i^& z0>XrT;%i}RU9Y80)z^K1ZRp1h+4US?>ZB27`Azi)1CdY+lkDjMSeMzgqP!~g$zwH< z5lpn76Lge8t_P-urowv?%Y%a8Dnuty~c1_|as z`5aF%h(qJ-Bs+V~3OH}=BUtaS?zTK5P2?aKHo|S1dZ5XHU;ov}~8m4ODO=8f`Cx*n5g)p~EicM$u}d zT%HmkHO<@Pnyb6>UUimctYzzMx!X$5Ys;+}r_*bMdS1oD_rcPxqS9f_*1n|c(>s>T z(1`df(w&32c9DLue)Aw4d9P;{{UZXaWPrZlf@BU{d}4Eeed@) z$~j@MKS9gHptwA}gj$snhI>*huVReWm0WFc7JG$$T|<5L8&IEMydvoajg^+^!OrGL z8}1tNKK8kXu%HB(#K?wpH4R8iJCiPTgBueFMta zTOYW3Ujgxcs%y|TMiAC6n1^8_V4`b-y7g4DBp*Rh5@1KS&KRWP9mFhTbIc>HPEj>2 zg9Gd%61GM9O|>J4uo%%s84m71GEHstgDCQv8^kJPb|!b|C(}YMl)S_%Jy1#{KMs3! zi2fYHF_eLl1zUD*6VcPKYlrJVAfcDM5>2M)cmaHRZ=q8HZ{UR;BMm(`dGFC^!Q$b- zRHeMC0{u6P2#}`=1Y*{-DxBeToP1-P9HKE;e>D5{ z5w7)Sta}f*W$a60DR{+$JcFb!K(w&iPaoj{M0mBEC8)v98@bWjFqHUC~t@@%%?>Kiz=L=N-NdmSFkC%JA2au zy2qvN*RQVKd|vTF@mRdBM{!Rd^Lj9daY|4+CT{%c_gkL(DU;9F=NA5-FovWd2>nn* zROJej3<)jltnS9%LydqLwYDML&3#Z=dN1qmqt%Lh` zv(A(PuaQOw`yU5##+GXS#io4ow6%|vf0Uzmo9S6#Tgsh&7(p~TAZ@fXB~Pw8qrIto zlD_7?a|A)og?>q43tdHLkTgV#H|MyT+S$+oCW2_^k!lY}Zy(YiCM;}K3{}>GjJZpJ zLFyzlrfUdydWUWRP!#bIq<39rAxItA-$Q?9Hf4q(KanNc>hfHGQN2?h@T}Tc5J>2k z1YAbFuc##3-43o2PserZA3%qSzsDu~_a{1%P)I!MrmnGt91olW1GX^GCR75I(urZ~ zEt{0*`ffL?q;P^_5Z1CYjP;_%s#z;u(vg2zWl%Bd1EWk9K(wbiJl_zl6`56 zK_=T)x*e<(C0uSvqsgV_M8Od}`C(L%tH3fOBea6-hpP&vA^Pt|XdRR+!&@0g=il6% zzN>}5Uox|nCq*|I2Ul{UJgmVa`MjFf3Y<7DGJE}g;mgasqO>NS6S3{>Q62i-q_LB? z2f}d)Gdb+00ivxmDYUZd#=b?1;Lm=FsdsxVfi7#=dBm01hG(;-)w!47KohMjePH7| z%aeVi?VZ}A3VUQ>hSb>6XOD@++S5`iG21N!X9%=r>_-Ad_fab7Y;Q&BCjz4*CL@gc zR95T4oBXid##(VXAW#QEcr zzs{Vo*n|(2`YgctZG`E9A$1L0W?`n6`H9EOA*KG!1_n6>12gXRSs6`tW_1Kp&sFYB zCu{6crbo>3!{qhzzj1`$Fz7)y=Tl)T6i)3TIx_80<~`_iCNr0hDjLvM<$wKM4Nq9KC@B~oIwMIi4! zJb6HFG4jl@o7gRn$lt_HzIzY?6J#!hWS=hb=~g=;Lzd^hXst5FfFAt9b5U6>3c}Q9 zepO%;ubPbE;qS8%co+GI$eSP~@Wu;cxR-7V0=AK?YNN1d3PLQJk}T8J#BU&@MYFM@ zLE5Qap%>JV2#_jL5_Opnn?SzJFr1h}B@b0a$&7E&9Vp3$L^Ia9Ma$WV-qG`+*#-+x zHJ$+we3xSj)1?s?g`Z+4pnGEr`Vg19chD5^sbN9xf9{4!e11T^;-@%C-`5vjrVXNS z0&-H?f|H9G|e%v~)C3rq10wB|+)8iqr# zdJ<-s*!91*)sJR>DOHL-{lRJ#*Vk$91CUiCpZpuMMcNF0nf%awZO|--!S}EmOX2Lu zl0T**e~q_t9^vrFw4ng0oI)Hi{g)VNC;%XmKl+E5$cxiQ&~HE^X{$SForL7ClnV9; zQn0VgrVO6`KDL%MsSSM)c!R?DV;W;wt}1B0Oa zfPjGb*V&2UEZlzpD`5mQ`M-eGfc+==zmb6y|81q54)sYRsz98bpP^$B|ZLuNc!IGvRcQgo5oEggOmvwH|@T zHedjn>`S6$x6zewypUYmYKK6=xj*uykAK2)V+HF0;Q^Y2zjQAxpcju#9*o(AV@tG1 zCmn7m^}^Q`F}>?zVQ8IMr)eW}IDxxk*sE%(A5)9c&|E$!~E9NG| z5m6`4HeX>B4QHagtfs>F4n3~zSlvC1C`Pt`7}!&aYL#(b+*`_xBQYUyOkyfek=ht# zj%pkOSagaW7#4#JmcoFJU~t*a|CQ*AYSNQ*-RBr4&5UzIqDOiRVNd{*CW0+FpX?Zu zZIarnBJ%gs8piAtnL=1ds#bn7rY%CrGiM;&HghBhq)@JJ?XiWX<@j335yaoq_K#HQW^T|Y|UHmE0a^^XvetqC0e_$8G?YSRlFwuZhQ$9x|d}0zAK4}T4uO} zb)5$m=H}=)HlgNiXFmXX+gtWkXv^9n0g>&Vo6GG~DB{9<*3eF*MZ4 zrDM!5Q{`IT#?Pxgm3i@^{zAoidMBn2;HW)C4axb8-F~tSww`btbw5ti7#?)eq1iX$ zBuq(6nzAKQJ}jJ!NZvnYRYdiThAIf)ZJMy0ZyawfN}+Rl`#YIBP|AR_x@NE5TmsxO zgyAMGhQ|}t0W-oL>)H{8^hcb~CrX~ghiaeMN3MsT6=t$k6gZCQS_L^?C3PVaV5_C_ zb93lz9{(|=w{8y$adwXHJd*o|(0SHRx)7{rrH=^SA3jR`ndpvJJ0Gu+@H#b{anzAlEO)aLe5P zi~}mzK7felHab=vAU*}^nPGChqpOu6=*Aj2xc-ZwGxV7k>^Zz(hx-`=eA_2X_#TAl zD652-lxz5-HJhX_+copfpY1&{HV$aXaVfNr0Koy`!nL1E zD40QNSH%K%z%redekO_rAo17{!mE_U;?Q2?ut|I&MK^y1e9Zk0U4XRdZk(&cg&u!z z#BgE|zhpdtaO(Vw!)|TJfeaV!cVKBwp-H40FLHOnHO2f9;kjJ%j=c-b8Mc2?1fXHY zhIAW8ow6IFPJn>Y2%)C|s`Nyosi%gLCxa%Q6<~Qms0_JuO2FMP)>OAIcrn?yaWJj) z7$O&bj*u6drRKv7QT8!1&lgGa+i;=Lpzucgh%;fcGep(rc)gkTxg1DU`Ot?{-j(wS zyuJa>|92o+XfOd($M=*-;s23#^3Nu{4jbfu={|i4G$tTR#a0ohBKL+?6xpZwMoVzC>!s-% zgw}h0kjhxauATnh!v(=1ElO&i%AZw-09kdu|N`b4eBImK& z{#pw+hyz2}FRigyd}gg{$~KKzGgjfD})M_NzvWy30411JT)6 z;mD1=(~o5$rt&Efzupk;@1|XHc7^Om)r0|-M@r4Bgx0zxN3` zBw{}!s>d$5o@rkZQnnKKF=O62pq?qU$W$=jwq8tU0oI>@SAKE|*G5+)Jv z8F+RD!T*@c-^e2bm3Tu&sGqYLpucg%-sk{k)Fqix_}Q&OEbJ0Db~Vv8seUrbV!vWlGvR>;=5c#qOSb z3DKcyA)HozWHS?iVPl9|$Hf;JV2pYj_%C8Ou+HknNJePS-df$q8y??@kI9n-2{S)B zd~NOT)e-X0AdX<1!&kyZvHCVSR^XwuUM$NcM_AI0Lgq*&O;w8~pR%+mg$Dr5kp2LA zkRv!F%2;`#WNcTZ&Pch7kb1GWu*sQrG?4lUu~01xHkI!04dMie&|BaG%ABGB<-@n? z8l8RML#_mojuq8~g;x+)(yYPnbkntA70A=)f4R3N6+ri22zjF!y$2r}99Etx( zwM_=b{x=5N*CFBnk`rw0kpvM&zMzx5Z=?{lQSi0!v3p0~UWVDo)})MtdL^VE4xMy& z&m6_C(6D-v#iGN>{C@B!Il6gU89$0Tk6lhoUDzM-cWeWEUcq+wmUIu|S`=<-e-R0L z>Q8{ei?Zx>?RGz)3Oh1~0X>Eh>f6KMtT@oL;>qzkOJmz&kmuj+C8W~Vt_PU}n) zjZZ+Q*1YHxn8$Uw?IfVzLuct!@X}WBq|=zndeAH0pcGZKjyD6&q>dDrxA0=57X%gu zzB6AYF__TtQ1PR&c)Qa>)87r}FC{0+j5?=6rh}+fu6Yu7~*cAYeJJgD&{R8{B5AytP z5zhJGA#&Oz)t;$Qs{ISe#Vjw2_S{B}dtk7WF*Td-L+F#HgZdr)L2!H9Fjb}@SBi@G zPF;PzVzTrf@V^N_xY8(amt<7H2vVygn;})kM4$b_Ys-fON+4LkoTIQJkPt4kIfHHA z{(*I4?PsCx(7rHTumAKUN>PM|`}dX6T?tDDcvnYT!uEx9b#qNo1j{#tAj63qPqBJu z$c2m&M^gY%>>)!q|3>>NWNL;!ha-zK-*BS-Lf#;|*1%r4Wr?#eQ_N9PB6trt=DtAW zru^8{+np_(?qsbPuTwJ@k&hY9;&r=x-Fy<5zUz9@{dl=)zXDl~e0m=d>4Hgt(rZ-oyfh(WrlChg1dx%zLt#IFs?n^efbm zE@yTwzKnf`aPqUO46Et=5nd}Z=m<}HT@&Eq)S$c_MONZZp1nb%Mx*ih?Tm{)3n>^? zkelj{0#FqO<3Yk@oMm@j;0c_tA&AcGVIzqHftnTto?Rk7S$mBXM=c__G|spHU~yVN zLqM+XoPJOBe!lVsL&bWr20{zH;wK!u=HhknjPC~ldjWd8a-6va zRG9)|NKq5wSup`C-E1>0*V@iGAbafal`HASZt40La_N%P@*b>03?w=)+xY+kM1)z@ zuh21+w3O|)@xZiLHtzQa2=f73bT2kO;#lf*{vd6{(@`};(xJ=wYqCdL`@xmCsDuQ1 z8U!j0&uP@V3PZbf775syAX9kyK7Y5KnqD=BPz_Vk9lEs`wf%@34)}{>fW8kBH!h;G z6ZduI>#t+tEM9P<@=va!9k!{OYi22kaYyuRTfs$rm3}9~R$WrdfykC5G;1GS zs=bPUIsN(fzfU`OQ|0bL{Sk&s|_3ZO0HxaCvs-+@$l1HuR?tWtHaLXxmnZc+j-TwFkpeG%v1Vp}9b;(608 zNKCJgSf+eA;7fprOZr_bxz**h1}**QS6K2Kv{OY`NqnXTU|J&8j=smh#^3%Pw@+Ro zU-6v9_OCFAR@*2T2=1up*m(gGUw`o|A@L8u_$DnTS=HwT9_y2HS!o{QsrJs>h2zaD zNq!SuPUB|<<|AJT=U}VRMcCN5RLqkKT+arN$TndNL*)__^GtbXl#lWd0$0J_C4S57F4a=X=k7(H??)BHl! z9#z)G@<*qCV7?9=zD-%Wu+?lM zc%c#8m#%L>wL(J_r;HAH3_IY9mIvESV7;PI-x*Z&!L6WIj9R9w*1!Mm3;CVglb!2A zP5g$^1(0#)EYTw6i|h)oj-?iksNS{m`^uQwid9+fvwAKze!%$3rI?=z>E7dgW-vP2 z#abH|^Q|_F;qTY*1lHce?Pc~7FursR-^BE}eLtWHSEsw%LRKp62CEJq;^ivKKjE;n zbN#Yy#)Z1ffBd)_^XsBA+|xV4*qDb?P${3g@<+*|lb7v5 z1=#Bi&wwKsBNWXMNOo64w@3%A4{YbdaJN*L!h}`*0KQteKSEaU#qJuhr_AGBk=FMJ zNp(O(j66Hy8Ojk7TXmS+=}|_LOl(nAPaKUr!irw8J3Hm^8=rtv+_2eh7w$Jj>Gr*S zia74<{61N1GoL=O;_?zQ=L*{&ffHF~6TystcXlOBUK(l37?cg^}dsF#grx^*Nf@TljQ zYC~R6>QePqi6S9+Ri01&m%i%G*f@FLJ+$T)OCR@%{_``aJ ziyp_VxOVZ@}5DRbD;UXpd`5*bV6<$ohDNX$F~6)|ter*9%6Bl%Bic=%Jy zSCWk^#`PRC^&7#nV-(Hn%hu6j4Cge}bf1y&S35q!cZQLgJqC4fJfF`~(wbli0oD3d ziS^q0evAb`voMOjwIOo6gIh)}VcYyZ-$`S8rv;91)j|l;emic+I+rwhv8F1du?{xT zrUUm?M?M?w@h8fPt(gG_mo(V`+*5Q9zcx1pn!?_z z!WCW_2YvXX)le&$hi`lCnB7m$)TwWP*emEaWI(``-oL=y$Bv9oQ|NEsSg`)1b5Dq4 z{C6W3-3&_sP_t0~O1Si8009OGAyJ3Bl;=Y#l+f4)HPu;~gIa>puVOHc!o$g!?oNo# zUcPoU1M+g>vIEuRUmK6^?*;E;+&y15C5a4R;}GAOoKieejy8^}0fg@$xu}BQ6+m(V zq|jA=o6ex9X-Yc`qd#h|&X~FzF4oG>kLn1NW=PrqLgn83kejC9-?MA5%i6!ZTl9>t zA=ZZ8e*5bQ{Sc#90m3S!vwCrwXt*^{8^C0=la$_6@K&z$IY?&EH~6+io>|mN**X^j z*jRdIuvfs9SEWqh^9JvohmaJnkYMz`-W%KR(1HS zQdsR~c-vUOPWx)(!alN}dqny0iq5T~tfvlw_bS4jxa5WCgGdio+u(jGGa=4xA0{RP z+Tp2>4Y?GMF2kLN>RR&#?=s4N8En}U(p;$Bfd1}zYu=yCwJCyDt69E$@DPd8KSqc} z^;EeJ*xj2R;kzmtGfIWSFgVRPbd`zqW+fKp8V0z25HNj##=RlJMdF{aSJQKZR(uH79eW!zR#bB6L1rRt(g zP{BTDdEFMy$<(WmLFa4&^y-~_QLah=a-6LM>rU%zu)NaEqdSqys`QMq%L~E)KwF@5 z8b&DHgvDS~;ve|Zw7KmL)fNJK@y(P;)e!q<#OL$(f9HFj*2nL!zl7R`?^t^(EjtKU z%*Ym`FdAi|&2R&LoyeW3P;onJ;ZzmQ$?MRR=p~P1I4sebV8SogIYy81Cge0ojLVQg zlE+CS0G+fZzI;k-ZFd(3wRgh+w=$b4{{F2&BR@4IKwP5nv(ej%f+do>nU+807crkm zAncf(6X()-(ekWAVcb@wP|&h5286kl=Chb?0cIbm0w#`}RtbM*OJvV4qsDK=Zf%K7 zO)i447K)^`7ROsq<8z1}HIvU;IHvb&c;KH?KTvYY48Ec*x^VXHBWLaa9^dq~r6Kf6 zpK-S6;BjL#IPH}08=>UoDY&T*sk80rxv4DY2TQsmczO>QX2RL zIv9T(fF^p#OZq=Cby^6=@k#zg+>jdF!;kolE70YK->uJkp+#VL1&Y8gy7mUj*2bm$ zz{?Q%N`iAV-)O86emZz>NdK_~tbe**S1q z6|&9WaaBpUEuxuW@r2#`29-0Du;wE*-AusQ@AeELn0Fxfue$%`>c`sm1==Pe{72nS zad`g!?(pydD42k(#4Wjh$j;QkMJDJ}8imi8LQTPS5a>xZq2cMVZ0XCz&?)_{bP;Ph z_3dIF5IK;jaiS=MJs~XFEA%#bow=LmncPl?yxmTwt{-pj54b%>XsDqEKZUdhnZ&V@ zWt;O}bD{-SFEKkA@OEx~EI4n%J-Wz0``fl<&y4$10^9?M9Y!vSf8+UJz$Fxc`Hr|` z@VfY{9d_CMJW)i4Cc{SC+D9m5mJxH9?5TTj+-HkdaFFeFLElT&Pd%pU+~P$t?O{@C zz@uF@#G0#9g`gf=B25?|D=r#<2Vz&k9tCc*cbUPGY9%qV(%2d%3)#HvHr7-E(SOzy zUDB)M0S*?TtO+$BoZ$X~yfoA#i$XS&uiyg%)Nu5xiOV~OV^4E0kSZ&Ht9nhR2#Dzf zD<|U@jA}GP$-Oms4|p>BHS0CZDvCL6<#0DP&EkD~N_EA50q!7>+JN+_4?F_Y_2)m_c^ z1JL`wGHXqUdF8qs_=vVZC%b0(AcL`=rRWa92r_ zP|QZoQT8hLIOGxy`9&29axsKI0wgHH)C!j<#cx7&9WbQEMOjR_p1{T&ux8@2F5~fs zP^qOeIIkO~OL$LUOQK_#C6d(Nh=z^8?lt9X;@3^yCqDVrak&;Bc<<1l~a}F&0_s(d7(tK0| zZ{Gx^D&PzeJmY|6RTrI_0s>o`Ab3V=LNHF;g*wKuCR9-ao!kCU-#h-`N^Y?j%d7l8 zr|w_Zz2J%ABM+m3No1^;`*IrPao*M!_`WmtrZUr^qhQERbb2wazsGKRHb9K*NgG+esae>{w@%k$JRF{fQibxFFusKD?T-5 zWO-Y$@rZL|wjo~b;k07Gj$H=0W-6R^$-$xZq)D6{ZK0G^zX!cl;k$^~*2H3O?9Q^_ zRSEJ19KY8SlZ@p&_dd~NMQ3B_>HelRc1U(%+JHx}ctpzzG4SExe^M|0Od%-Cs1 zh-+>i1qDC;=7B zWG)41!0?6u84T7DmWmbMrSpxIEthvM(+n@Z8sRP@&G#B3$PUc(CPMo=&n=hAS zteSo>VB)wNv`5zmo0i!2v}qjXwzB{HWe^MuoLLT+u9MDY)B3nj`__SOi^tZXSKgi% zO}3FnC2EbS2XA`hpNeJadiv=*5kTcZ2!7=t`}9*X|Cl9tAU7S?-tR&4@YIxgcZh1G-Yi|6#SoZ}((t99AL63(hj|oI zB^QvsoO0x4rDQ(*5n>>@T%Gi_CA;hP)@a0mH368$kJC#R)$o)8hHP=TIHr!LPLdO+AQG2czPITW$P!9p2DK~x18X#krpkyNf^Ipo~( z5S?vqXvWMncF{fe1;F3MI}FC!+YjG6R44HZlZfwSQTxUnF%X&-8|TNp-{^T>MCgUR z|3EQ`8T%s9LZcvA9~%`=HssRs!(wu~vIRz+S`j(h1L{F741fC`Oq0AQ(V}&4Gbv?M(=M|77ulNl1nSkMZq`Ye2T=~lI34<}gSAoAGmH}X8p-Q7;dvl8@-n z?wp`!68ijK5UPKD2-!WF?)PUPS|V9L{|UU%pse*M{DSh=zYKT&?-Khj{^Wn1>F@?* zDnOCaxLn^4G=4C1blQMt-|nJZ*F0W$*eD8$-(fh9MUhJM_$>G;0^_304m;nU6^GUW z29CzWjyBi4rdpdz?p_|>K=on8zk(v!2b`VrGKi_GXr=yeOe$Y41syp7H6#;p;f$~g zt~*<$vo5$iXUd7I3J`hvXY7c8?xlIpX@L0kGM32r#UvM_v}h*8PEDOg9I~VyKVV@r z8YK3RAk+8g@|L$Ck!19T~rn9l%beic!=q4#BfS9915qI$fcRG$V}t z%EM^)jdr(UGvZ%Z(t2+CF#Gc-HpS!nzuHARS=NBMufk37p9`CWp2vTG;G0=ka)6@r zSB}Z>XZc~0W_pph{6jL%g*1`@6fs2atVsCPS!NK<_vUmg8QED^u?n@ zMeS`r>vbb~ZavVLIZJEU_Hq(FV^4iR^Qn`Pn!#JEB1J;ONXyWJIWCz#vxb-Poi;wdW=5Utg+DHW>xM1{I#@n5WPR%TOeLYj6xmTWO4 zHNO4fJf(>}2&Q#*sq7)xR+veJgO>3+um7B|Ho%Ot%Gdi3`2V>${~hA-_25dGjs(O0 zpF0#SC3*)I4zMN#s)(ku*1nf$`ZTU3V6Gq`>?s)#3o3Lj1ntQeU4n;erf*935|Cd# z>WKvN;wM0}I$V+4%!Bw^H?`?i=`*$VdPnOAvp640lrB0UiU-|SbpS7F@8NXmzO*ac zI+l`m3d0TO)u%2*MK`UU&+Ux2;-Dh*JxHZ<#gdT23Lp_AwRZ*f2wxa0*T)p+FFEpX zkc1ZP%s3!fQe6=n`+Kztp8zR;aIUmBem+QJ@{C5f$)LTA8_zj$YmpTCFVIZ#Nadwz zszjgedR>{;Mer+C2tO>#qKr zQyYJZFu~pYVbmx*k{39?%uioWyENCG4AX?8(*zHpee1|H%9&&Je*6?VIdD3Iw9a00 zaM}v5i+{M0e}@GX&A+~r^Z$M)$bWMqXFWmxeNw(ikT@yw&B*Y8%4C50nhMr%cXN?3 ze4YtYTE^lIhYoIRC>STbk<>7xW{={~J|aJ*EF(E7nNIpde|Hz+R-orT(*}3fH@(E+ zqvAYS;+o3FBQl@Mgd^W@dSkWi*}8Gm+f^f-Bh=i0FmXn81Vc%(-4Qov!qU9ew9c*AJ^MZ_(bBi%YPh z#~a~4)=PRl`&seZJ)CAaD{7@ znd90#2lP!4jZnjwl7-KOQ1FiCU+sA!AR?MJ>Vh>^|BVPVA&d6;gx+FCd-<2F1w7tx zQx<}7$LO|c+=WIx0Sej97<=Xp2Bwc@t*-1j3TP7FNVQ!UK<(WZYwwD6`}cOVk$z~= z1`0{qrn6=)q&3}GX_Qt6^=8g;tl#+Ul(aP&@suGiHUXo z+(g_r6YWJlsX=AqPJ-Jow=%!q)scj9=7@n!5-(Vl)QbBNUr(i$n%s$2F zLLE8TOKqgTA6*|AM(fZ!)__ac@yIM+x;N;KD}2zj;a>iL8%opK`=m2>jG2$%d=PH- z*7SINyKpbtd2!9*O_8G%b^{QwMSD3PRz89BPur#G&=qe*DytH+tdBm4k_2cwcrR@u z$|?dvYA=W9Nem%P1}QX0=Q3pFcz?lcNaw1rYRlV+Ow1rB~^y=c_6i=UR}kr$tE81Qd^bW7sg_$w1~$kyFPIh)Wrny+fHF+_VKm<$Qv} zE=aWn2cn|g&zk)je>|0of+~IwO&;=z+_nN}i$gEfijpc6g5c}L5s)DoFyDLUK#`D2 zW})cAN}zu@zgaa+hU$oC11^jRfUSY5Fqjypc^$~=Q5js{DR1KHO!d{kX}4^ zw1k=@74vxSo^2FOyNU#EuQsGF7dyO-gAFXqM}kH1-ku z@Yt;KtrlLjR4-U$aQO^deB%`OqC`A|WPcF9lX`l-OkR>eH;iC$eV;tf;@$F@%HsWe z*%}6Xx5tZ6WFyYc{WVBojd9$PKWPaKP_B0j3%f_>--EFxV4>^hCr1ip3OpC#y*o@toDk3 zDmxZpd~k{iuuVD1z9_G~RCoC1qhdVd648|wB)97E_g%q|L{Kfy>n%jZ8 zZ;i$sH=2BDe`xkJyH{<1Id{7T5H7zfG~chBAa2DAyym%K`Ju3ykVl5@VN0kfP_3Nl6|O( z-LTEtq!2p{x!AK6>3L_KW{8Pl#!x25jF11_%Lu;tL4GtUM=@^T*Qp_IfvF@WS3?`B zI;6eupa&m)&0x(sH8$Oqb4)W)up|Vgs?1LO4>#4YNE?%}Xpsw)go(F^3aCgYOK0QV z^#p4FY-5o{p_86*8i9~$0BbjEx`iAAe$KFw{D#SuPCjK`ckb>l=#8m&3>&zagE=P} zw$?&j7dZ9mUn9RqJWshQh(UBfoNflv5i;rMomg`4)1Ww%MTaBl@_|2C>wTrhM#`BK zb9FU2wECs7|1^~5RS&9Yi6Kwds}+$eZg;8Ht?^QmqgTN>nMI9H18|Bh6455=n%2F7 zlf#|@!nr#}B1cc^J_d!IDk2%B?Yzad#m_gTm&4P$Z&??%ZyLjX`R;rr0Pe0xV{=P8 zjU!C=h8^?)EhD9GIBFdO9}<-VK@+Ujo8M#@b##c&OZb*+Xt>anl*sMwLbLuHL|JIO zv^o-3@+N4mk`>Wf09e6_*@k1cKx$XAnBCbCDu->Pv8ffbC7fS5De8htEGF8YA?9iu z2h0LNNj-ezcxn++hV2)tvx8M1pkkiHRZnf9E+4QPk#lGn#NLnj&GLF0z1SGgOambi z$K?z~pfC*$;0GavoD6bzj+_GHDf)S%qWT2zv=F~>x~i?M0;I|tn{VC+b=eLq)A+`X zVxumK)qa{a3S6%4;ZIb%UERTc>86b3EQamSp|W}@mDk2LTzzD+DCG2DkXyW!L~7~4xz$s z7IVej4)A^o^%{-#$^a>XZ)SBEnW|Yzre`dLqzKWB_3*I14)Z}{Z!gQB#5BEcJuxP} zYBr<@*%~(aVft|^HuNjSdscY6Jd<g}@Z?+4H4U%>wTp*Nn|@zV1&Cee}N+;hj_ zmGoO%0F+tJ&NGSV8$#lEgn61o1J6aMUHWj-v(0(Bgq!w+(H1@84encK4p)x}+aC7m zHC=a3!2%mXZPq)5x(XpKj`96KHvsM7rtj|J``&B@mV4i0q+C%g|tN_#6l@6AY|ptNu6o!21oZv#b(%z%j$Nf zdt5QU#A=2&IZwiJCWo@E9`c@Z5a%Ir-9&&sK%1bUQx??+J?+_FX;YL zs^Bn{ka3Z#tdgWDN`aSO;$b_)pIUy&v$K5)2(Y?;kuG=NkS{JfjCZVz*A?8gmJqwM zw0{~|_*HsWj&`?7W9SObL)a73&tjs7zl;m+<%G_Zc8yXIn)9r`OVs49-HbKv^I2%c zO}DMgiQE}zaQKQU2{6D7x%7{5z|rVQ%WyaRfx-jC3WeZ%K*ami)0!eU5DeknG>Dsh z0|;S!5qUwlA78JvL2iZ6Zbc*1@FQ=0I^fQV`%Fzr-4yzDOOQB9t1NT-(*m~T6c#1o zS&3a`80*{2PP>H)4uELja=@l-RZ*f5|&Eu>GxnrxI0DaVZ`lEpU@br zijB{IX4`NYyb94T;;KB_f1(%v+p>QllBg+RO<-tW5QeNg?pJ)aTr!=tD{LM-wI00$ zky52pXOT)$*`q=c2y`MCr?*N|#Vl2I z@NtAD0s4LM06YC`;}gP}<57f9KlSN*k!rdgr`S&>%mRN8Ahzl`Qo%$8X4^DU2lMy% zpKUY=osL|wf3s1Ae(EH^Y+$xJ-jHE0ld3WStX-~{6+;-Lvy+8UkyxXT7nz)Y%*E@_ z&LtokvJuC)%BGdXD^O{4;l8Ey_c^tF!mO7Cv{I73#*)Zo$K|YcfWAs)z!1b${@rIw zH{Npq!I&YLzFs!dzVmweuDxOU3bV5~b|4GbA3Y69aF1+s*Z}Xpz^E0aVlOKI)PB~@5cLKQ;dM+LP?hA@O9+GPBl z5o)b)og4~<3lRw58VoX$?u~9i$(f3^=nb9|x&`&j=n(%8eFji+K7KNf$r^-9e zIzNBpEbj(*{WzfYlT1Vn&65^c|H0{rg+Z&kVcD^~;n< znX~qbJ=~dQ$DbnZ!Q(i!_nqp-lXMuYV)&TMWjpcy<1Kwme-uNpoOMe>#f_XvQml3; zFWPFtiC2h#9uP^)v4ejEU$~39tzDm4Dh)LDZ2y#_j<82s)xhmD-JI2GqG7SApZ}}_ z^dWIdr^QF(rYGy-oVdzeD&sI5NQSv&ZBE_5v2MB157F%LzSZ+m`Y^=lHsK|knxgV z)`0B4!O+aRB<4{6)R@beRbK|02#SomUKB8TSrSSJimuMH6(g10fS|O*_)f$F4!Gm} z@dbz3qRR{zP!B-eepQ%&qu@Q3d#kXCjQ6A;so`;3m@04v zfK=_h)=a8|7*@?<(-k(Gi=BP(Q+n= zGnTd;ZeSy=P>G6+^Z?F~HXK}A_!&_H06~`_BQagE(gZKLJV6DV(_Xn(f<|D75{}>H zd=x)S_h#U9%5ae!7tW$G?H~<9)AND4zcpQH$i5TGmbl1}AV)Fn);oL08&*2Z1|mmU zb-@`EKZH=qj|l_G@OYESmHtu{kEUSe&@_C<)<^1)HEM@%QjesOtM-Q=Fiforz^TTF z4$dyVItBX+9!S1OTU24s;jxHTr+SXZ+1z3@;-b2Ii4I58`gfxJiKI4y>n(RtxYpDV zF7ROyaoi4zt}EokBfKthDpovUap!mj#h2#gv`q2wd%tDDIX_BadPm~qT?;wFZhhS| zZiR_lV~%_UYm52s>$9fc&f)nx0K;+|60^tFU&s$bRjdPzhy7uYyM-Gc%MT;j9Nix6 zt*IF4VhcOCu7jgtCL$D;g(fhjg*ZBB(oGl0e2mr5)%r&pRL@#3=H<<(txP)F9_WZQ z$b$%_R`54r0ae{MYNwMVeQOEsV(2k7_=6nK6-?HN=x_ObAn4CY>B$BcfHko^vo|CZ zt*(Bj>gS}L+ZBn@^uYeqBEE)M(iLE;_x{N*jeB+JhGO+o z*vUe(w}G$x-6GD35M^af)fFe0_hGepbwKN$z<%o?@}~NKXV`<1`oR?YiO; z2s{uM?xa?8h(Z&HCkhM7Z80|z$v+ze39bz^8&|*mcrvcFvRSl^ocF%DI&Zs5c~)lW&Sl*Vfg1U+UQls%AWnV zFkbyPAjn9PV`E`J==GJ9eX^QFcrRR=R=MGu?{`og4*Mfv)hOJFF^?7dx}+* z?3f2&2Z6!kaP?Q??Ia2ZIO-4Vk=t3^Kg03GY}aN*8^BiO2ziN;mC>CF?^O9u?t%)__o?L5(Ht$ZWA;0b=R3c^xM z2r=`u`)S%1^~LfdwVgF@UHjqWjlzhOG4O_;Q4zgFtq!c%M7uOrftB(kjgDX_mYn&b zH2?;x@N7N^Er!uzhw=a1zQw}Gxy6Zw89cnnP4Ij5&Ad)$U;ReKezyDpp2Q5;w=q0@ zYS%=}X_I*8$B`GKeLYNNc?~}zUamO|>;SR1dQ3ZhaCt6`7UzYLM zi$#$HmqHcqrS{SV>eg#|zTWTtw&+~KUEgma_R!(P^Qc(spg-9-e5o?Ojppr7Jx*Yr zNc1)YpsB|G<*M4@5xEb|92bvZEd&47N%hW8aHZyF(42$EC);s9T4q{pvbZ zeMqadr-@s}lBpf%4Q1;BY-O^|d}@>CYH(VB-(E{t@xuWWd%h=vxT?k@m%PPj^j&7z z5luu*oIqKh*md8$!@1Z#mM|Wzx^tj!pUEGNpq0g_kAkXVg%hGCk5A9?ND3V7OOFym zx$(aNrNiJG7w`iO$+(x8K4O7=pEKq87w(iMKn>v8G!p~8d_PZ_?;amwP$a%aw9Xzt z3X8p1Z-AW~A%e{XrYhm=!(Axh!+q&{H4zm{L~O2PlasY zwZccEMD%dw*)HH#4K%-|!(_Nc?;wT%RrckK#D}Z(q53QEylcG=ed6r~CvN^;Ivg9F zV5EQLfBGIP2I~|Y&JFPTF~CnUEw-cI@=U|?RKIZ9IqUIq+wA%yDtgA6zgLSQ-u%v( z;y{Op3_BAK-MksZ9z_^SxS)Kuw5RNHE2G1?x)ucra}2e{s=spB~j0 zDAjYkEtdM4Ko=WV1)iSnXa79%Ccp|QEzvMKnRbnT*uG}60zTf)?7qqEt*Je4rywaH ziNf}$bu?D+NL#@I8}k_)6V}qlVawE9BLHQS`0A5d9O@;lR@FtaDQh0Oj`SHqQ*u#T zlTk4yB@C?2CYKh7Y=8cww0gG6K((0^i{{1#sExqUH<@Bom;mhu>&{PsJQt%%ENBgq z%hkE~_;C2y{&{H;maZQJ)9w5G`5A3q{=I}zlRu%BB5@Rqonc~af#qH_=Jwu=#(=bS zXO~H=Key70eF2dScxaNHL$TqekKh?n!=|EyFKG9BNP%p6y{4(lxcUiv%CAg*q$ngX zy2H3|or_AdF483n;?1@B#TjT@hfm|+Q}#qS;|p*lw8Dty3cX01B;)Zm2i%NIaAI!Q z9Bn*_G5r?diUVW==wz{lAf47dNPrP7h|5VPdS&ToS_S5bnrUiHlY(t@De+n7^CpEH z6?>SHFta8FmHBS84ScS1hb}X~M6$%Rs1#_cO^*Y_Ec7X*1e&Aia`F_wc?GiR*Q&b1W$^icF$v+PGRMHX{_mRM36ky6-9q_ ztT`~5ImZ41dt+bu;K0Ln3vG6g*!Y0mNW9+VMh6{oJ^%Q2h2PfM@U*UpW`KthD;cBV z_X+mG@#kLYu~hKgd$m28@AAVtx-D=n*(q#0L9hInWrNPAiTZA z`8HMfyM)xEz;kDWyIiJ5-C0rnX*@0()(w)}M#<6$c*tdVzq291COeP&6*VW&c7b)- z7bD;RGM|Nqp&r;g2T+wP7kzOxzt1eG<~2Sjc(C_Iechd&6Wzr|VCC!2 z5RjqZw0DLbCJ>IMM9tu;&DN&G1&A~VG$>{U266j^V$v)10!k$!^r0aKE&D;}`U~AL zBt`TYnTTd374oaUo!G?!<=&+P=zi1@S(xs1=emKJ6-V1_XNCNnzuhFnTI+enn2VY9 z5V*$UJnU=T?D;|#vX^_lkM6sIq={Dgy|ZTye_E3-qMqsIAnribq5VvBiZ=y=Q!*4O z?7o*+rnZ>6k+C4ya9|z@%GsWSJrDtR>x6v3==f;q9x$g06ogrOJp94zc|3}FtiBld}+ z=iz;a-0bt5z6oiL>N7w0!uYTDL|G^wS^jI%U-{2=_3`ive3d^ zLic5i7!Cz7GF+co#%fKrDUt7f6#10S5%9Un67q|!%^mk{aY}KT=DzZp+W2^>=CuPk9_mD* zQ7Fxml3;g*&XnT0t36+jN&__1V`Z@0%(L@3@tE#+s7$ce>(ZUHm|8R0q&0D7-_Q+D z!JPA$tt4Y&wqOv@TYbcK>bFMo%ai*QEJZ?)Cf`*!TThHwTk?Dv3y(Vw4jlpiKEXdl ziBgCxN8!K|pSV^22ux4rIA2+QUSMZEfmQ*MCa{aDmlP0qfm=?pmjl4teB{~B(U;o~ zw`$^KXNQq+6iDGO=4XT6K{dzNie*y<&Z&i!BSK~?b}o1bdO`f#;0yMd6YgH-E&PY< zX9q?Kff)Xm7ZN2G#!%m9X)Ji??29M9*(l5&-F*@9ZBRA|2z5zPMis^;$7+puqDkqH zq|gJtwldDwh2AO>ya1k`NoJE7a?yQ;qPNe#@9%z)D%UFyOJWH~EM-yZgXJHTHv&2*TlkR+%Nhtjj;bzHIUVwN6-Zo}O9aq%HMLhi$3=6Pu9TZKhtuZN_bV=G| zHkHo6%z$;0$t^(Y5(zG~D6KHeB+jP2aAO9U}od;JqZiy$zxF{a+#3+`G8h4 zs2q0F*d=ur@0Wlepsod~bCSVN+i@YHWLvG&J90h;Ma%ChPh>_$D%pj>G14AESfVUe z*tm12ly25LnB?HnH?23fQp(|@noQBc*9H9_%DyqW&bI5ejT-FOHXGYXW7}+Ov(avB z+qP}nwrw?Ok~TW~!OQPEXN)sOeq`*CKe_L@uXWA2)|%5@r?e8sxk&cg4~?d8)EojP zZKy*kX?&6S2=UHy_H@8i1n%;Vgu&NRPs(DywVmbij#y3A=g0Ra0tJf5cQ}M=&qE@4 znQI$x)D{H_eB9}nu00li=_NXD6A#ydl=Tko&m}qZyV#>#mWU+DZ`CbY4xvj{) zMUCY{=;PAp?Ax`OBvjb0wpGgI>0TWhC&?SVC1u1m6Y{dSHod^tno8xI?kBbSPPD6d zO-(Mdt(bGqc^QJyRl%6xkt7cYy=UO&rd!{xBxJ*$M=`D3*j@r{oAE4NIDzjxkMhK4 ziN4WR$veNorcwC)XeklE#`k@9&1p7fqoQQTqI&oiYWt23aAU`5`WH3+dY|I`^(Q%S z+uNVWTdo1?K3l29xpe)HEr25 zjt;Y0ugqJpth1kSI<-C@?;eFZZf~#V*g2lJ#!lw@cUY0T3mBZ-BkLJ#^fts!j%~`o zEu{qsK;zNDl>{|IXfa@S)%r?mLgd}1;+ z`eWpN{Sy!`#}Xw$feofyXpt;ON;O`gOhwkObm((MwG5_Bv>HP@9QsJ}`C5i`S@)^;en_iyT#2lRm`xQXu)w6QCnwcnu-Er1R<+IPQ+n;@n ze4+<_(RjKFzn~&VVoDR9t5eTLRYPjTU&MMfG`vH$pPC*}yn4u}ZHWL0uG@lrd53H< z_SC97Lgu%Jv73DkQ>SgDd+U>W>eUx%75mQ|Xp@K@&6!$-$wyzgyO3qxK3+;`-}bEM zOVX!x_kp_*?&%-o7FrhGL}I#dkZr)16TmaniKd7Dxb9X@Vo84Qm8 z(lSm@i*r_IQKb{CwrKsaRPPl3;SiS5<%Lnhp4$g4CTD-R*Khtd{%h~)Q>m7H-2=-@ z2KVP%IFsGvCsm}C<<&>47bs~R*d4#>zAsPP^<=*h(tZV$DZICX+VTNMppp-&*QQun zq2Sh_<|X9+XkPAsOvV4I)05$#dBY8P03uMKJcKCO&qAqQ5#=yXvYd>uAJ9K> zdS&5pV#;waaUFQX~wit^14WR!CJu(vp+|AD`k z51$lkF$UDq!4lqO+TJVb-;8Q)d(hAz?$?lQW7aXmqMO`WW}H$8&CFBaE;?*gI{-fS z!OIeO=vt(X*S36Kg0!H^74A2Wt)YO&;uO>5_KO=+G72GEV2lZr4HkIjy5$M9DX zzVu+j)keG0wQ7RYm#zhMz|-pw(~Dn@02P`|m}O=8S(EMuWyR&$8&S ze!!oGC6=^Pys+y#Nhn*pW4K*8>6bZ_O$6Y^`C;Jn_o`qwRGoPIFdI|!3YS;X7=l{X#($yt2uNvUrgv&Y`ho2lAD^G=J zb!in`>}K(GJ&qULvl&j+-ra5Th~+e3f|i;0_j|LafD5;(ImJR8_n1fnR#c;qtquD( zhRgeINqWYGPu1xhYork3jZDB3I))!~4$3qY8(Z9&>K`F|`tSOP?!Q%2_rXsiz)~Fy z+Y1kWTY%?I5}@0`qqe0Pqyt}8D4fN|-`?YahXFkBd)dv!yECnQPz+2Pu6grO`>(Wp_<-0GmB|b7VmksUg*j`VLDD%T#koh z2vOkjw{lKbk~&3w3~?%4^~UKrvuJ!_!>eT6V&X4_ShXwHH2nD&rdr?fer2%g4}dmy zWGt|V*&A|{+3DiKJZpd8{rW-3IeNpx|Ad}8=0h15h4I{`Ak&^B(PbGhY6y||+=h|- zXrl9k(j_Hq8-K-}bXwijHN9omxMgaxTZp_JA*g!@n_^}G*EW|n@mouJ$M1MF1@RSi zKhb{@KuX1R{kg_LngEJGK2fgvJy$HO1`_uGsFJpNyN`wm!IJSLkws`0jmO9 zNc7pdB!m?RUxdDa3q|ESW{^+YBP2Qoko-ERNuVgDb^YTEqkg0?XaP;HLxZ~W|M_43 zSBDWv6@U(OLRCe3v(?9)ql3@wfEDTmlU%FgEu$(m$MuC$77P;=^i4l#0{I6Fh+Y}J#{$}1b_-y)MY{Y-&y!;6kdbPcm{S26uaO;Nnzte9 z*)~p*`v*VzdaZv{_^~lR0MjsaSRmZEBWlHYbwV;fi3IjAuO`$~z?EjD(2&D0K@^;L z%zmvd`bNh$m!T=I_$dJ-=LQXpMJ2lU>i`3h#pR)e0qbc$I`q(@`ppJ%`CFBhYcZb> zuoI;ECRhM$@e?S@Na1y`yWgeuyn_lDNjG4&IfUh{sj0C0z634$d$UbGk!2;5Auw5o z7A7O2_dyGr*T|QR1>+~xVB%7JLeUuTfX6ClFfrqlpf;Rx@>%Rk4uu4E4;N!k|+Y4yQ%GDl&GI?Xgl|ubtk*pC#JV z7Ljn{(8guD!>hd3)94Lz1yzY=3g*RajaNy?N1Nh@^~P8_vVImbPg{g6(}GW!#cxJE zzAXw1ZxN{+yZaTScvk~`jBbC{jRSODX!_;nj5K6&&sdSRU?zj&FB`|z)KV*+bVga9 zA`*`ud>T!>B+`FMabILE@hiTZCqI2pq%{To0XvH=08d*j3Rih!>Cow`wG$k7|`QpiAt9XVs=XegSc~&1xNm&G?Am{u`7)xLdPDje* zosaUwqjI;1VQQP{j}q4>(oExy6LjPZ^aZ#}rwyv`!Ker3dj^5*vVsxub@JgvJ|2t2 z%M8x4@w1=obRz_zGRJ@Z6UA6M<0D*KiP`B0VitC1%?#9 zo?Z16qr9YsLF$C>;9z$F_CEu?DtD5?>_DEcQ8-c@#}%5nCLO{=mR@PcI^#v)XS7QK zueyYMAAY4qII-A47Yi6^)*mW4w#LyzW@%D|4tt&k>tN&R|7IVAH&Svdlvr$#)J(pTTCF>!U zg!qJ879$wR#(6sfs|7r1#SvG^@Pxe$<+1i?1HYm(@@Kba4|ZD>B~eXc)jE>Mw z-i4rV1H#R$PZ`iC3erfi94 zOgR#9YxHJ`Kt7*hc&k-WSHfn6Q@pyULo$fy=ea-{MKVP%4&prkjl{GLW}po_QK6}s z6nbMnxtsW1p*jl?qhfUgEBEMTSPX(^5VnPLXxTTZjg&-_Ss*AdL6xEjyQE2}z@-Rc zJE1X%q@@=tHO*Y<=@hD3khF#wC+6Q?e!hPC9(*%Sm2;AFU!mujf3X9t)n4uws?KF^#-}w@vPfc`kH$3B_8|l?=QUb1Oh27b0QkbaK~aV1H}s2 zBN`NevRvnNhV)6*3>O*lZTovPRWP)op;KQ)r|rz7uAr^m!^wTpnfd2+NtU&41v?3V zKY7MF;xmosNa7^5(>TM6qsiC9m3@aR-*xt4!UW#&N^>Jq?d^l(CLuh39gzqx)Domh zD4M!%YLT^Ns~Tj_sXZBR+ECDUg1zFnT0CNP=F!b8`5j>y0*>*L{f{_UyAEb>J3dqW z*gB+K6;5P$j$o%0Z3)#DyfQfe`*bfY*3kT|G zhGP)1rGC$@aJ%Ea{xc@8+Y#;f9}0-102^uH zkFhifhLcw6Hj9=y=rs&8vU4a0PcD){#v`U2wx;1PAKn9iIfT4fM$@%nJ~KWK;+oeo zNii#4R*uXJkB6;J*`8)Urn`Y}kUQ*Uk^_vUM7D-_r~nq9a%z*~q{i`XxNqvVzki|z zg|h9!d`mW<1!k_we?@@-mqb- QYwsFy>46XuNv$YI^i~ndl45+h!4EVbE@?Cpf zk1|0O+rF4DfLHa7ZQv?^6D&ONqOlNKxmTI8F$>%>w2UAeU-Q()CT8%h1%_W&^HYQ>2T3*)a* za=C+jgcD-5w^5;x9nzzKj5vcO0s}o6Lkx9Ukf}5_N&#k-(~jfh#lzG2N&En86|M%` z?MK^~%x#hcSa_ANDnckWM-AENf$5dCma@t)WeHLvA}f+$UWWpg^xa)zME6db4vhW- z2O_d<1>l8Dac~9;PuO01n11-~5cHWC%FkO(I%tdWpY1y2DFbvH>^G&M(>GiWPHJXf z77=-e8@qD*m{QmdZ&=ZE+7|Ggj=3IU!&1G2bUZ|gBaZwl_O*R7vD%H{qLcd{J|aGN z6ck%`AGJKo5iRhe44Eh^Tvx2y&8~=+P1~MG&H|6tw^(M;16~GTGT4iqIe4d&qtLp< z4b*G|%r(Sy2q2dO3$vUF4UQY+bUTtV#!Qm*IEE-7gCEvrD(KC2S$&btC%CWH7=}t2FC1H zeA;wR7}9ikUCzNm^%U>WUzj+1(w79q4uM1G5?|4soQcE9G_P8X;LpG7l`_gytL$K1 z&2b}>&hps^j_#FHwTbeWaA&=u4>7!IpaQkbEnWzg+ylCiEv_wcWUWO7O$Hh^!9GsD z2MrR&w)hnur-VHSyvU5ze!OY?coPWyVueq|{>m8jjI4-w@(8`In2>F*MvJB)xtq18 zMV}MZKCI496IrXb=Gp!Y2t@8ozrZqIl(m|fN72)Lg9^ya{DvkA7?hSjmJt6 z=v#g9KU^_-BmSWqoJFD#fZDAV>g!@?o&6N+ROv9e1%b5WrS-WnfwV=`a*UCo&0jwy z7nOd#sHG#7R*3^Iuxfkre~Svp+P6=e&+@s7K0C!74SwiJPZ#&WZi3Zogn@T*owXo5m=Qi}=8{gkoNs253`oVXb_{Q#tx zWFx+9<$`lz83u;Uyh2!6KE1ivEy%T$@YzAI?+bP?l5xwNmO2|?UJ*aCh=pu8!cULk zN9>UVz35)+h*uEM!0Xe#9TfB@d#qQKs1d9l9>B5d?#KR|$xJ{qtLk!A3x$qKIt75Y zfkVj56(9lY4eT6e&g>{x2_nH4i=7fQe;&GQlN~Z3tYWH>{PH^}A{`p_G|W={ zDkZP!G+_t`_Jq_-=0#?Nf*d5AF2N*asVUO7%yj)DF%s!9*pSD*lhjCx^UO)cj_tdJ z7wv9U1ePh5*!n@UC5NMovVm>$HBH?;sm2y}-PBz9KH4Q0 zf*!uuQ?xmhtMQaT&UerH=^gcOQN*O(UAf=~^oV9){VO$H!dRG@#r*6io-N1psI{fT z+VC;JAw&7%Q&79+?iFQ9@=a+(@KeO@khbo!as!opQOjmWkxq1J6$dYYU3P0)yXvTU zBYEd&NXD;>T}#|S+43tFj!D>L%GxT{vtS46G2Q#+Xl|o}()Csq)iBC5gsH zieo3hM%MwY{a{f8G!y%T5|Qw%3`WRB+h5_t*aXB zY1v`M`KexH@zX;nvoh>)AW^8QX@3EBBQk=R#E4mCeK?`>t65EF|M}d69g735jK3I&q8XPSt}7=>>ZHEc4qS?%>%P>B(XvRa zG7~zFZZ;Qdh)(T$X-XQZVc3u1fmkWnPp3MWY*r^STB-!gUedX$)+9ie060z%W!a+c zH3ej2O=MpyzJq&dGiNCegB3aZ}@vQM)xM)T(jF`PPTV2!WbmW9WU@? zzx{jS+uz(2=1V=7X7pEIJfOPd3j!7mB<}G^&ijpzu^x6gUj;;Xq29+LNdN!#@l(% zqwUx1y-zs)tm~i~?A-xTX0*i%*gNo#Gts4b4!8xH%bNJNWlYGwf^GhlWbnr(2=MQS zMYX^447S)|#>0_92K{mkN5heFVrfDfl7ytwh3I^>${M9t0s_e;<7M%?o+g1i5yJ0+ z-8a5dRL0IjrP&#`;-$w|dVOHNa`w#e&puhlyvG@xkJmt-XK+CkaOf`;$3SjS!qy^+;ilKcF>9~*kZv0O2ELdvp{DvMID_@rabA#cRS?rB7 zwb2#R6BzNi;^lashFo2t;E2bW(U=j8=Dozp%M862{w#GkOHHPQ#ug>ErG1k|!-4w2 zI-Kn4v$ndja(|Yz+NvaMowhVm$H%_Y_=xz}dr=t*Z|EFtAz*X_(UuvO?HKg8SEbqV z1vwqSX0)Cc(QaJ?|2<0thgpCd){7K-xf+dset!M{=|%-Yhmja1nbG&)A>E}P=TL~h z#F?RPnf&upjG#FdIt&WHvGzjIO;2o{%~P-K9lxhU$TLpt%+nx-rfD%wcxmriIbi2w z0t5knB~uNSCJ5$Bj59x+aHsFH5l@+T%UyqY7$p3$XfBKJO4d`(k{V&?eb zXj!)OU%+5Aj48(9S$b2Z87fk2`b=zRsGk57GlEtkwz3=S^FF6w(xQpGYnmZby$DM< ztKmYEIATv8n*>|KTUZqb>)`9Rr13d)*AS|udekH@o59IeJ`mxC zr7>gV!>5qfKm@Q>mHuFeA2>F%8u02-M7k8li1?p6V{`^K!|9#p8ASAW*_UOEz|tQ5 zo`69;>QR+^mDS$TR?{WhABVe*hd|o~w>Cbx!)`aX=b|zAjG2&L-J~}G_&aA=)WnpB zOnevU!&&o8Z4QIA*xW-1(V~M)#g`i0vh3NTEA;8p2QUU&xen5qiX--=@>r{^VELR8kY^OvtO+6UoF_blf9wsZs$a_nv_R( zd3fI&;IGyGJ}F=Rq`!{z^Gk*nM6qmIUUE2eue_f!$pa-=^^WV+&=$$pAMt^LRl2y6 zS`ARo8l14$+ePS^D|16TWoW`Hi;&b zTo&lzdOzvKyy{twpS=F*!G`JBPl*Ro2(JE!4EvA7u-#{I}yZO z=n7cdQW8~U2?=ci$;C3i@OlRn$|(F*1agiylurSF$qf-4kiC$h!mf=h+g?08ci+_R zUWb?MK4k65VRKa^##HBhC+U~8EZ&gE0Jo9yW=89m_ysK&hwfsbRukn2lSsp^VB(JU3nk z$2c8Oj$Pm$?KhlK!l|jad)40P^{e#LzJ_nm(?r3V zM_DWH7no)2D0S8{8rwaL(1s$?*9jbXl4}kW9_&Cy&%Sk`^CRH(iMrIocsT>0)ZA*f z^S(v8y;;s`#Imu)8+o?g*J&V|a)Bh9RDbo`6Snm+oK!Z|m_fWX)3~=k&g$oJS{*_B z5d~sTV646G9RE_xaN))Lcmm$5st#%PFox|8doH(wwuWA7;WNx1H9B7T9Dg08NRa(& ze)=Bo>|@uNmdz_rEvk%wtfGL##M&BWRbG_hXH1ey zk+}H{6NN@2i?rzwJ{@-NneVD4%Q?HfIPQR~7BFE0+B3xZ0C^E!wty(*$c-$Mk#;f? zygV^<(#9sr#0EO3&)VyJP{Z2e*E6?C>!;t#Dub1F+r5^=H_=}MNN^2s!V4%HoZm<^ zT<;8LbUhe=lbhdtf!|#-5TXJwSPHll3q8c65^7qD_WEzK#ab}s210jQ6JZ39R{LZF zaBia(l_LF|V*B49jBp!HOlD5dI=ka+N7K7O&1vxY9lbJ6N%+~x^y*%GDDiQE=uheP z(Y^WMtN06)%tOoO_(kb*icC+pgr7wBpEFPZ*L(s%d7R1qUc%7uObuf~)2KO!bztz? z^nq8YUBx5`E4D%GL!W0k^sHO}llczuCQP|AALF)LvtRv*w!bu5w~Si2bEvb?@vYfc z9{rq$&<>P}_zH|x-5bfR6tiCRl@C-EQn&9ktLReCC&JiO=riXD7x%I)qHTcYUHT0M zq6#9S++)l?0JEN}xA_PHOvAqb^Y`B8f8r&X9{~Xx_)oB87D&Rg9l{@yAI=1ip@gQF zOQ;SgQ&-0Q|AFQBrUVR9gWCUC7+DIirpOEe3x7mB%Rj)f`X^W>lK7zCCz zPLW6&Axj&58Vg*2T2qrJK&~liJ9qzQ+9(Jt%>{jKs}<30pMNunvTI3_?Pbl({R+=H zJ{rtvzt^+;8S}+H#5Ds5hzk4*EK+}fB^3mgC4or$ZZ_m%KQpzV7li^i4h+iy9yMt; zSO$@(->4DRD>=zu8si_|l-kJc-ir2%5oG*5bMrWvL^$la0FPLB44%CF)_vem^7LkI z3fW`O`nfJCw#=e~JHtRcw8(1~DaH=<qUPfd*r^CgF zD^)9qG7*s>ynOIMGjvr((uv_TuFM>6-cPkNWdj8oy+ZB4TqVTzi^2S&fu&;Zkh_R@ zK6Na)q$ZRk&4hOB86=5ljpr}u1Jdh|cn3+Ms*w2A1ra_KO1ACY?=ZCFqjUZ2^oY;J z8X8-EERpCaqN#*sSESEX8pJ3AM9*;x@A^9vnx@H%F#k*-tCjmvlOgRRlJ_}yPBLD? zu%$Wz)+Q)&$loZaIkFL1cK(>hRZz6q$mAe=u!3PT_QXoavQ{>LA49J24Tzm0Up#zc zs+({&i6QJv)xUzE2SaHJDnF3pd~D1lw0I6!L!k2W>Q1r+*99$gC(I<^)W}G>1t*uP zc#e2r0wjr_v79$3xv#^>Ds8y)d?$J1oD>xHvP7}rJJfMe=yM5*XNxQgOK%Y+t2~tw zXdXfxeU4m_8z!De?;vde+P*&c1R8gD{N6wckHXlJj&5)8Om7IH4V$}^rt@gFkGi=t zZj?NhPhVYp39^34Q25U%87s_ICWK3Th<0U_yu19iJcs-Lnq z`m)4vtv_yytXgCZenr-X)a#$gMX1bD@Q7}}8usj9TgO^f_h65WPm*Ma#0Pl3e4DrO5-7!5L&t~Nm5dD1Dgm6;*|JR?y=07I z8w$hyt|OTKRfNugw?5KJe>)sMrL?ry#cy=WKboqLYf$YM%yuD+FPsV7Fg<1yV%^;n;I>u_a)zfL-ti%nTSWKXoj>-=cQ zP)QaL0FHxm!|8A8ahmZ(&a<9NnufD-M>6Q@GS7sQKKjvkk_Z4^P*{?WaXt8qCc=g{ zFb@!SBcrx=(U>-EJ!b;)I+O5mJNmSkS<|vj&Cok>lzZ~KsV7%F`PtHXB&0;hIj~+% z6m1^pks^FHpSuAV0-{yIJ`OJ2>CR{6yTHzijm*cTDa`cQd-06FHqz#rl;vkXgW;l1 zku-;EsessZFEYFX(u)>h4|tGP@_8!t=9nUTcDM~&bwpf)^E6O8p&cnCkCE3mA51wD zFg?&zW!Ebv^z|IvU9Hy%Cu-LpAj>1nC>)7AWB%J5QgyOeR1O6v3hsL_{P?XqJoL0` zwGP@>uP?%g9xyFI@w+Gi{;+z+?yl_+_RB6h3|r-9L%#y?6qWpPa-t19lBJ}Kg2T|D zM81B)o*Hs3u3!baj#xMBlKW;82aQTml|)c~%YtCtN4>{7uFse=y^+FFWbCVPBOMPA zK$nbwx#sVi(a`HRzsyRJv`XnABkvCJUnuLX@5A4$Gp44Q=VQ9&{tU(kqi7|^jJIx( zMrrfKQRmJii<->C0~6I-Wsn+BlG2yr7tQQ^IWvJgeC-5ube$czYd1G64s+@osP7ZW zSFpPF4MAnab;4IXgW)ZNpx!~$xwKGf%C96u{b@Y&{_TAp;ELhhm=^vI4}ebAU_0kJ$+(vGgzsx&(oV1 z21tV3Ql|m}(C-nhDjaEuQkK;}w1%m6IB^Xv-Z+pP{W!Pq8B(@ch()%Ek@sMoUA8o12Pdo#skZ_bdOCFv+-a8YYBybNa@9E9ga z-_`Sqtzvb*!@R^Ijud>Kw>sjVwvj5}w12VB+Omdy* zvG5jTsQQgn+p-&^K8{cLcC2c8b3tpnHBJYxL)+wO{M~^aZqd*Rj&>BZT|UmOxf$ zH(W*GB^?#rx%&xsY}pMC-(w8c4y0FT)^jKYI}ls{;{h%0a<|l-mR6e%so zfU(tXCjWAc*Ithyq%JC__#gmN#F;+fctXf!xK=@=+LQ_cgq0gZSrTpAWf5IpWrS!Ag z=h-8wVG(tnzi{~xGP?SBuf#bUbT8JKzf6?D8`Ql zQa}v}IYOrQ3?EjaB}0m}Rl$k!={mbFEJwFbJ`kYf4I_}hxE7k5KSSZ* zMM=H1_q1f!lUoT9yoaoISlcPsr;8nAUQ_5CaULEuClioc7Pn-n6AuQI#6}tF4Bg&& zWc5rtQiXmigxxRgbEn68`_nZjMbrL7^r!X`D`0wJ`LBGGtO^vmS&BQS0Dc85oLP^(o;L|# z6e*j@MtO=E=v++s+51FPA50S7EQbjVzPQLUoyRJvzOoulyG19gY|6Vex4kd^?C`0I zxZ^v8wFQn&T2$rqH=ZV@=IEqmnKj0H++M@hst|(yNg*D(pnX`r?T9gQ#-5v-#fi^9 zF7s(+@(6`#^!fqK^OQ{V5&N3($M#vd(}(K}Ucd!4;6|v-6m`1({0%ofbHvrBq=0r4 z979EkKw6&kKGUbJPW@q=y)Zj(!<+jt=lU5#i78nOKb9lu`Mi~tpzAh>r8~JwTbNOG zy4oG-ZS+>O%o${OP>ypDfnK#X4%bV|G0KQ#N?$v`jeCw$ouj|M znareFRVE@^eY`3y|Y}%A2_nl?6Ky9@v z#sb)=-bz?E*~aJ)rd9)`aO!TuReVh+AV&$AzE-o4ZMIw>3t67Oke1wKjbdTK zgiCs`>fJhUo7{9wYv!!wz;rbKqno}B;|8~)B-6_;0lFVR;vnqsWwmmzj>|=6{>dBN z;N+uNe6r=P?^;^pGw1AMwVlUwfM1k)`eqVIeiIBSW!E~~O*T5pT=`$Dw;T#6b@jR# zfCoX!KZ9x{9yNd4&-3O*BMdn(NTLpz;T$=*LA!<8>mw7Gr@*`FliiYs!6dLI+{PGO z6awbANaBAA?ch)!TW!QdN%K9+RDOFDuct$%YH$f%SCw|(ha6tLKX0XIigT9rc5_TSmP?QqF zoMh8w{XGjITb_Uec8XgZo+KvapES^NE3=m=Yb;u$S;!s))+INRWcT1fy3r3l=a z)+1X~pXij=mP#jN$dh%SRD;?kB1_v{U@rHQXAb2Zs*(V!$PoCR1d$jVHVKo=BrtlQ zuqS&?y%bAr=YpR8Vi*1^W->ng0^F{&(JK)B5kc6Vq&;Ob(By4qwXlrH}v#<&)0`0a&JX zYG`^1yt<{S{q@@kj{3A~fi55L8^Gh(h(Tq57dj*w_7;Wf*sC$q%tHcVVXPd)>aih# z*oGvbk^%6TK9;|~0EPzni)KIKOCK4&gU1c##!^_uZ#nPeTr9D%Wj7G-%%hovUHX%E zLX`pJ=eWWD;GM;3(W1<^fAP)~Nf7TO{q#@XNf*>Oly4OD7@7D7?_6(^7v%u)&hlRk zlpx+|@o&77>rdWktD11uE*o^B5EOgajVvcaE*lA()NW}mlESmc81inF^L(q}h2%w$ za1?CldSz)4)PbA9+ZiiI-veaq{BAvitqzH~a^^ zo_tueuZ4gtL{TaxbMeuL^wVFAa#K&x=#~Z!J))+=I{CG7WT{cWnFA&jHL<=ik=rIt zo(?pNfw+t{e*ZXpX=P8bi%FCDU{#GkDeN--3g79k)96^RMvB0cK`)ZLQex)>^MeOo z(Jk`XA!17vWF@OlN|M@UHFb@fM)q}$F9`V6%Mws3Hl5VyUE`+S3%aw>)OE8mB*>2e zNmKd|d>jl=n}v@+rFBGX2yye_(H#wQCgC(x)iUP;37B*X8h-1yd1%BmR0kS&Q21tc-zl0_sUlE+wD9CVoI*x**}Tzc~N4lRxT)} z**{+^1eazo{ETe0z?GHKDCoS|rV(N_GyveZ%eeK?=pxcWZ&dEk{$ARF9juO1rPL+T z-CTVIfRyqCfmrqLE^&pt&5$2QweM(Kpm0C5s!qJ?Q?^T35Q5+Ah#_=Jj>>HZ@f7g2 zz&-97AQ*5F!|-*3S}dQSVQ|0GJpHe_=f5%;zVxC{B?EE)?yn$g|D(V1$LC;bOv%Lk zDCEG-_;D$4CbS^=vP;g+RgcvcS49q}UR_b7ToN=`xy3*@$zlf?To#u&Du2Y?=a!p~ zUR1Ya7_^P+?BP0Hs6XD1$$tHQdxH3Gv;v3G$w-qb zWp2l~S4*sbr$HPHai#TXlYG@2wZ!uLCojd#(wPV4611czsvA`NWg&J-C3qSPX)Kkg z^$<)4gQMfzYq_#9b8g(j>Db0$<@;Irob803vOxA%-?Vw~r%`5>@mR-a0(CS zVaJPHdYM1g@Tz6Mc}Fed5C1B<#+@0c1x)p0TqN}UIf3N^FJ`6$dO?r>JzM$DRcp{r z#0Tr-3S5N0E&c!PwV)+`!b2bi;-;V2*~-EC$5}ipnKA^=E_9&#%%QR z@r`Q#qKp`;dR@3U^O4*8a>C22s|&n`3(q6Qi1EQ?;L@2t>38aiohz#9YJ};pIw`cNyuaHN6{;8B!Y-PfB+g)CR80* z^qcct2=Cz>td}{gjs+e#q3u)!$jEp(wclw=d6FTeT~PiYKGTofv`E{qtFRZzNFo$m zRGQ#wp)kJFk}umsc@iWR5N50Uy`x;0BPq`Ba9B(nuyv++I(=hCzo!s2GxJ&Mm9}S@aM{V<3-R^6E8%lAG1Pa&At z8Tjx=P7%_7Hx2&d-RLJbZNvX>@8+fl$j7I`v1ASy{d1s~Q%&VEhW+!N84Wx0p`C1!Em zShtpVcIw?vfig5sf8A9l)ABU$wb=$8&tq1BnE3e^Z@FuPk)-2ozCYkjoYI1&TzDr& z-!EoQh5EN24AhA6BO@A~oA8{{ubV#`DYzC!bK@XHs)L@(fA(;*a1s7)y!{74y?as6 zk}U}l5P%+u{(9Cj9S$TESaI+;jGzp2{3Rg^qxC`1Zn@V7!ZFVFp|26@7Y1)#)pyHX zz>cnuJ&+AXCB!l;?MOadX_n6wF<(RBV8%!Ok1A$2tn9K3lCLf7ow^;)gCEGy8G0GIz zSw-n**SXaZ3#v}K0aGPA>2NqHg+DCwPQ|!ea|El*BH&fUqU|%ZlEbkBL*vKnN7<-? z*a2{rT%g47|kq(ai6bhXv*^5rUD)nG^4A zVT^adOF!!M^t^-z5%e~$K2#MS{D73Mx>A}QDfjuDI(m1lcuVmR$4-~X{6lKW%p$U4 zp3c{X{wpWpL+MI1I2f$O%$yOn@8?ONnREh{Hy!Gi2BJJ7&{MY&jU6GCZY6~$wz672 zlH-?C5{!U!R?t`?#Sy`5L%%QK3=xJ{$3bY#F8FQAW~G)>^{X!UK9^{#Zyk0^aW=Rg zOm`ZbBz5#`$`&l)I|Y1V()~b+9?Ht~VgGMuB|$TjI*}5N%n|I?y=%_m&%n4?T zS{)XL%iK3oq`jet($!Yl%xu%>4S^1VfP8PTPvI;J{#JZh9n%~!lBXFvL8XYt7)AFN zDeQ?!W*qSgbNgCLU)NIaSL>l5X%y>ti(hD#q>oo;U#G{_MC1qbK6Xt8hu#Tg&R+H| z&S}kGIN(6^<#Y9Ud?DnZ^;b9ta!f|h`4*Q98ZQ*Fl?AP8!=0{VBxN*Hk!kr-y9SvT zU(v;~zQfaHlA3(coTs!YO@%)NsX zJN2VEaA7PVotLy<#Rv51?${r@H~Ag@U=zGDrBbaQTuwp-ucNd@)k9+eQsSRuLrsqx zdd8-E=|bPP9kY82@~~qz`Z$G7q2A6U!B#E&a*}PnLy}!dHA@a)POP>7b23&cmC__u zglWLel=*$9`oyKYH>T@a?w>Aa+tzY=R1}=t?7*q1Czpx8_}upVkO_t1Hm zsF7t)Tx6aeAHM8BM2<5GI}1F+4t zMJN>5U@ykj*kS*StpQ@g$J&3z<{>pO!EPr+1#-zLw-Y8Vu=k5k$4H4txS}oIqrv1y zR+ta-d+3VH`hM91;!K|Rwqt=EguJ3T4rC>bB0p=P_?}f-a}%X2k72Q=aSJDo~3lYsU*(M@Ds%aM!pm@ z8IH-p;NsUdo~7j0Rw!qyXG!XEuThj#ND&&yQq6?&ir}-|e{xOb`Mpfyo+F_$=kz1m z_Tx>W0BwPnLR~RcpmS+GeRpTfQe=x?IoV5EL#0kB-;}BR9ylV0Yx`!(`V72mTd$6C z9B?ZdJnEAGCxMLplGv%I-_a+|VNG!r38i69tB^7uzlTpJ2j-}%45giT4$8NFf-zDYDW&%W=cR`LW(oLFZKqq)2R7gPz=osQpNRTGL{WuXaNvtFM7OCJw z{3`@VpD&_$8LuIfUKfJA#CLpI&^4pC0l>bdAyjm0;}>df!nT|CMyPJvVX!a0+{Yza zknhwUn>*XLAG%TIQykc@V-Ew5e1>8JGpbv z5PAdU=SD5&a84n1LMVK$jUL$>8|f9gSuIRSPNDPW|3lYXfK}COkHdm=pF?*y(n<&@ z-Q8W%-OUj}ln_wj00K&f0@9#@G>UX1NGc^QDfR7h*xvWPzx)4u9v_!$tyw)Yd*2w%_Nng-ze9F7zZRx&PUcCOunLM@SP6hB40)+JcK38y0{y!EZ zByjg=3<8*;sSk-f$)&ip&=v!; z`yKKA8gVSbLUfcl>BF|}M5?)5CHmS=f+G~fa=f3(JqS#|cgBu*n3LtRiY}9F9{G5= z`F50B1}s*Ahh3Z9zJDE6y%23j7h=<9Cq)#d^9MFE9CQ#)+Ar~Kp`akZd$aRAi^i-p zFBNlqQyTq^vT^s6bbp3aUO##jPO8MZG%2AqzF2{}22~EdqMP@yKmK<}$>4r+(ILig zL>6#q8)iL8J=6CUuf=Y!MZ^e9W|Qs66K<5_Ty^v z$e($7ua4-CIi zwPp*WvCuhq7#mJjZeK`~A|cUg{r(Nr6Lgc2C}-6onuh+`*?R2eel=F8G)-I5BWqGc zFCO;yAG4&rbbE;KP3f!q7&95)F^9kkb#%TH0o*55AxefMJq+F_QuaIX3amR zOE#mL`ZP2>)nl{{viQA6a+)!wh}Xklf1E*rIpTyfs{Vpom#Pr^OhyorF>F&q&^A0G z^Bg8Swk@=p|6WxPc-9Jc(OHcg=0D8U^OkAQ3`7|fb?mC`d}>cUdvq7xIEpbn+}o{u zCDW0hK5d}0P&42?&1Ks?_!`SdIC0y-)=rl3-Qt|TWb@Am9}_0|my{`r?Ty@glv`5e z7=1o;RSC}ZX=6?b1RWE2CjJtF`5%bu?bBfzY544d51O((zQ}OE?>=Z<9sC(WkkloX z;3RNz?kVbhgbE7qZ3u>3HYOOcf0y>FQvnJdEVec%EQaWNBqkg8nN7hufw#} zi&qZ4Wa9g4L?w;yV)#>rvAl%2is|^%C2z_9ydxNbRzGh_g4e13bwbDkwOZTdb4&6H z?5$I_2=_WV`&z|aE9i?0>=s`l$&>@tH@wHMAx4?<9O(2qZ{cpzpM$rb$I`t&9kL}P zPVXckaUQ0PCDPlqQ%XC~h-|HWOMUQo|6701*2Kp@zq-7;$M1G`_S{-0HL zP>(+M&Y^F@Q+vogJ%!JebLi)DG3JvA?^&^i%iRrc$2gC7JCXkb*>^n+_w1LCm4KYX zeDn3K691GwDE;FZu$)Ux@$vEUq$kr?EiHnpSd;U#!dj{FS_}7rB;1yiUY~>P08f

    z502WUG}{%AwYQHz^2^`qcU~xad_O+@MTZwK-|95C8|ngs z+`Ss8CQ~!TeUSrcaz2pTW2E_g$ho+Ew-?4$lk%PI{Y7%2nliU;Xr`swXjDkN@N+(8 zt!Gd@^hoE<8u6Tt-($pF*u|Xm2_*`3C7dYiKRU2UpNysuDhe|(q`@B&b3G(}Pn|_B z=$Wb7ZmfNyICbGI7fSK;lTkC8fml>g7wm!eP|r-<1>t%8fjCOha@NIKlGbTC&tMf; ztJC3PE!mS%of{71ZR@vCitBD@{QAD|F(u-+;7=~X0siU5CR&kU0kRgAFN<7_uDKrQ zVd@9BhbGx7Y$YO7MsIb_y^We$6q~pan_w9B^KR*b;+rY)U8%EQ8Z#bqB`J`$x&&r- zbMHl`z=X0f=kj*8bOSMWbQIIkxIeFi)QUtV>seHkS&2;E^$Gl=u<(_$7a`sQR~J&pUnc2-(ORM6bCFCWxG9bt@|4zp#9?90 zbWb;`TJD<;ic{8O+o?WFw|*tdaby_KwD`!hHQyRXSSDnO2CozI&XGd@;{8|g%Bl@^ zEU(!&FCVfl*Z&b9HZbbWmZYqC_RgK!o@XeRa58bmDW2;53IFX)o^R1(_F3-=ep*Si z7qQ-a)@0;INA{Zof0RF)KR{wNsdj=IW*rn!OM0c@bH5u)^OUgHPDY(4Nd6JZQbfh$ zCb_#hGk(d$_wciye+u?CI+RsV+4)&7ImWmw8_#VV#Fs#po@>p&KvCh5Iz&ETf2KhjJip8*y?6J~lJebFxJv z7~Ss21M6(uaG9<@k2!BI1-JT=)#KbCbk^eLx9mX8l1aaff}duVDEH0p!#$R>lsVT6 z^yKHF+)*~ZWzmm~I>nDm)Z2$oWhR?oRcOW7Srv0b9ctCyPSd{*z70AvR{>VNvyI*q{<3lG&CNq z2YV5Cj?h{KA$uPQ9xbo+cG4`&tdL=~m!>_CVv5e&Q%Xd$W_3C#*sFA+6#HC8QdibT zhG9ls@k>?O`Ze4=hE;0!^eX~iM!(tfuNd9n5EAVhKyjxw%8|5=ciGj52ykj7n}m?j zM-Qfx9_MM;YGq=ZlIEDv7g_nj#%1Q79b?VDUThAeZ+l7DZZEX7)z|er9kVPhRh)jv zlUYhBU94!pIkM*|-iL{fXEoS;UP4kVyVm&hZMSAkaZ$Wdd~jXI@_F{mU^#@{9NbCo zIZr6uNgLHWwoXJbb+#FGUr;{~%~e^5_uB5$;0{k+ zg8A+1H~52+ZKBPIEJt?jTo?HlDCR6MmFL zarq^~*v?Aq)XSBdH!lr3c3^tXe5UO;h9Xz@FiBlu4}?e-W+a+|nReOTmu+8XU!;k> zJ(g>lYJU33@r3)b+j<~hjzd7WlkM5pr)3AX(D`YcVS`#iefND#2iE>*4#cF6(A_DI z;9|Ea({X!ZS8g&lJ)M(bo$Vb=;XzXNp>gxJxSfYd93+{WI8t(CL+=sHtJp)JBe+&| zH7Mh%SVVO*JQDLsg2<;!B6mse9qzfIH<;T;#&-kg1t3k5(eW)54sl)n;oGoLGF8IZ zkk`hqw`nH4?b}RoA|9;NP33+kpwzGF?&l?a%+8gtX4a_J`-Xpz`=*(|+s)T2{gpRV zVo*OIyXS*+|Ht3+Ber>{DZXP!rZP zDBg6-k2N|Du zG0~2i;8o_4??gU}GLRcN$K!Y1El7XAC*k|O^XbHr_*I#YWDj3zZ_a240kPCjXBG*I@6<@LyH_I1aclhZ`Y-Cj@>eTWQT`A^Ga6f z0XFu>*vXU7SC804(Ta<)$UgNJ>jwU+%EV-N!J%n0p+N)hjG0SLF416m=gmzv$>ud- zkoAH1>m$~e+H^d$(k=}Ruzth$H_4wRysinsd{4$w_3cBq;fv0~*s*h#gX|<_yg=Kz zTo#_4;MM1y(N<2ellpDdryuy^80VjN9yZuIQ|(-|30h`U3dg*p>r@OXB9g*rVP4Zo z)SOTF265f6&ke0$ky>r$i{X=sJqxwL+$MYj*=)AG zh2{ihPtsqZLNJfTLy60Y;-jn`JLbTt#Ra-HN0E@7DwdWbj+Tn_(B#7~E}xTH@$-SH z#eh@KfR$Zizmv$Sj#UNY_}30-g8_*P=y#?Qo9`(vIV5N)Zz?Z|42-lLkyV-CtRLsA z?3kx7a@0{$xh(ECC7-}*25(c5B+y^x-r%FMQ~a}_c#F4_4o8>o-cBpAFLk2khxI#$ z1s@!V-Bzwd_FG%<`SvdFtQv1d4H@*U&L<0`mIi7+%P6sq#r34oXp1>Nuw~RG+}+U2 zdMxi+-DQ-(>e%DdNK(xFNNDJZ5aj15nq^4EPse76Lk%!xxo3Ta87}{R_pB z*LP9+kRds$v{5g|BIjBiBJNUb+FB|`ocxz{M(P)h=@p$+@9E$}>WwM4#aLR=0sCT|E^hj7>i< zRRvfIFX|~&q+8th^6Fl@0YLeg?!2|+}`7=7!@?LNA_4| z%>0;r$L-DOTtf$3GLN{>+{4wI{aSRbYFdj7wF<^@Gn>h8pPL#RPq*&YCT?x^vUaR- znkne9SkCs`?v#X}y}En9BJ6Dh2Ug*Lr3yUC_9WzOP1yrY;Jj;#-gzq~*v{t`EF-QnCA%G6yLx^tpQ!q0g=Em9}iH;S|ytTGsPI*3G*Jy-MAr@NGA%%5s- z0{x`&g|^VLrlMr((P3AAAa*LjM9Q)$_Gkm}Vq>y}FO+#jW-#-o)XY-ceOabJ3YGOP z;QZi-H=HVsIk88n-d!@aesK}yQ*7@-%KtR(uarjxYn_^0mE3&;qlx(WS-;L~m{wCV zhf!Kwd_tegm!*N`P2ahMU)$wG1Oo--e09?fi(ro8vtg+KUOVpjtatjb?!my=ggc9D zF)#6j^X0AP>ug!y8H@c+TNU>~xx{2DPt6DoO^vhPyl-Sv9AUaE712D&^|16#;ki)G zEl(eoozSEhulbrRPFU|J{2lm|ot20?`P9aM##y*C>;SD2#ZbNXU_@nMKuOH!SF7ER zh(<|_?M`!4M#WnP_B?k>B_d3j>^ejCUsj3Bp_#0F@OCfgFQJw=5uaiNUTn|nxX-=~ znF>dztesV3d!h~#uPCaWm-|!$jf+!oln=r8wWbft8Hz&{Nrh3D!S%lsKl#AMZ=5RK7g;ne!^tA0|QSMUjO zPM%am!sn(rzo@s-rBTl~@PFLYBha$i=9Iz@;WgFF{Ni;UDubTNEp19@_`_4Pw|6}B zc@sfL-%IHPS`iQTL%>m z8^I-(#*yxC=mqGIKJ547+u4DT^kOnlCmBaw>XjB&b2X0JkREIr5;ptErF+0K;} zJ%>5oX~)g&=d20r#_t(wlr8YiJX(Q*d2Rz-!^Ip*B# z#tT#3U$iFLdJp;dEhMqCg-m+#w(T|FZrMDp(S5RHiy@Vu`A+j!d3(~k{HQ?3BRQ`p zG{C9VP)*7}s#j!FFj|3pt{nONi7aoS7I%q4fxhANKUk+cu$?ZDoq5v04cb0WYNr@| z@wmDKx9;P;o3I#qsuM_f9~U?JqY}<1SayL@!ip1C!fo!F?*6}VB0u?0jc1LAxxaYS zKwy+0o}KYhYp$d|K1OVTO)aGFLC9)Ic-6O8_35h)9z<5Cn)8i8@0W(tAFj${$ItWo z82$8e=@qC`VeI^{b3ELuQz8modrzmmP9ju_YGJ9VZbt@NX|z554gYc*f+ySmi|zxe z3~9@Hh1)FSFS4C#g|OZC!G%&2xbyhW?D8=`-S<&te*D9U$Hgmn>}x}N+95R`CtIW^ zmK>MnR9an^%G=-QXCoo3C-`2ks(yTiQt<8-2aKGFRA9y2gX3vEc8rnT8P+@vko3(B zyrJ@`kl6iL0fv7`w*^UTNG2dXoVFJ)|5WfGynUHHnD!3J!pZ9^{mx=8smTTQkC!PP z7qjDMx%I41>yIWGEEi|k&f_O<6`=dSrm`NhWw%%|RZXDcTVB1tTTob?Y{ebkCV5Lp zK}wx<=9@ejK6xCfi!w%LEte7*y7D>n)6!+-&5e09)CSm3v{=~if_R0cV+g5WTsKcW z-|_^{w&VM|aT7dw#eCMV5HdyH#VNsr0K-r5-P@U@cnKo-k6qGs+e8fc#ap7P26zVU zWaAn->^&tLfBv`$FSW}xc{HWB-6fOI-8gHf;>-FU#{jpUnJJB4P5ZqJ^5LY_Gns%b zoSgi=O8>7gPq#+4xXSW{$9whf%-S0)dyelg^6-ts@H08~$aZSo+~uhM{Vf)w*6Z9= zQAk_~(p5eccQ-K6>Ym|;p_nkyM>p5nq_bKX@s|1N+M1QT{bDVD-w_yC;8@)_6K$hg z4n4UM@%yF~J7qE!^RB7c>j@2oRVE9@hf$SSM~@|@{=n9u;fm=UDSKQN%=3`G)gZU< z9)~KqIXpk!Wj~DFAf1*7(&%5uKPH|JmY+v(|FO&n$lrkZ=9=VbEUCw^v${tn1+L9I zCaql&Ej=VK4$DjO5OCi_2mY~u^#VWwlXnvEk>x7GtI!~$CT3~BCQN!I7^ z=%v;ur1RFQScSCk|31sN&s$@aaCvDw>`Wuin?T2ssuC7;w(cK@zHvxR(aONMV)~5U zj@-08J7p_AFJz#VUjfS&6J|^H_|wm+rK%(@?=Le%yo>t3UW9*bBj@||@wI(g(NQGX z&11EdK%0L3?1yI`Q^xa3^o@nu{LEUrICv==V zYpW?&`La)I_hjIyna{~4Z!KTjbK3q>>IAdp=&PoD)%A(g?2|Pji>t34yTx?2?!){j z)~91i(3Z;p{8^cLi>n(9ix#F5SbOs3hs=s~e?DvD3zzbe$M2cXw|Tf?S{|Pp?DG`z zhF>b)-=JLF!!Tv7AAg?<+oa=oIU_B6h9dd3Ns`4sDfkVC zT6pC1jo_kc2+a6LJ55o2M8)Raf;nNv4|P6r9TaVkh@wxZUSdW5{%BIDRI)J38}09P zNvuHF5x;Gl>{zY5K*r{GWZf@=BBjUn(7+wcq(1)q%h!FE^Pb^xZHWIku6wI z&ah@CeaW$%_L=wbUBsiNnB8!|3*fDnC9MDZsHu4mLYvG#fCIDk^K}FsD13bRq&=Nv zU7hUQeZlYh!LpWpUicNYkm2c5hDY`C#(JS-+9gcsOaiPFQW_1ilvCSx&XN`at`gax zB+zAtWe>r*?_@lA=-AT_1VdKle70@r=3(36==>3IE-E7Jp^`Od8DA*zDh|h&pz6!w3P%@M!+is6UB+ug4)fkcbx3LtHSLtICwNMR zz2^}sA|czWrCNMYwW&PgP03c>BSu}%e4titD6XO1;N++nzr=}?*Uzfak=z#@^Cw66 zP=8(!Rd4Y0r=YQz6RDRk*V>3D-FG}&b|`G>xM(cp1;_M$wpF^?7-<>3g4QN3Rj}9d zTyCv=w1T#q`4@RdldO(ytOwkUG$gJMb1M^Wak7*RkNMs!U%=^T_c|T5Is>lixbRH* zb71+%z%$kQyp!6Y8*VQx$`wtdE%4N(O{00h^U62O(*EhngW;u|9WB_~;KP>^28*9y zP)*H3N-81$2;Z5S5oqPPj)kbIga;Hl_zgn@-ozYv#Wl57uKZ0izX!uxi}!`&T^igD zmyOM7dl^#+%XQrBW#V^N)9Oq^Y8JiZC+}GAJn5mFd$mvT%Fn`?SNK(`^yv)25*=;>$5-5T(;8fNyqjC~x(yG)+=9mvrf9>$T&y7Zau- zvTM`)AvTL|W_Mj3;&Kc1&W@R%OD^d_vX>3oNVYvE>P61I-vg)ph>dU+UHxpV)h8=9 zeXBHatWIa%?>XA1tckXj(@-KtiM)8TPcS}jmzJL*}^7=e+qFSUxZFL`;ZgRg7;s_mMviftB61Oe6Z z(>&tua-oq)+p%}uZSb%hB6#vOdjj=;gr5-B7D?r<;{Ks%vEJ=K@zZUbA|7!f?cg#e zY4H4@B1nOQ(jP)$GTr96Fz9@)b7tfG?xJiWfCzhdjSj<*qv83zpW-e*^2T-KJw=!lPQ5DLUNM3qEI^x*d8A0yw}J7Q@oBm>?tz5hRb%R2S%Nq>8|P#RcWTA1#P z0#Wy?I7Y#0ny17{sD)nNYOC;LK67&>5pCXQ^mBE_ifZ|~j}q(lh54)S7JSW6`EJ*P zUbQm^hd;UE)5-eFHbKsPz7j3TNA9rW*)8Y7PnVZl0XL4VK8r>^jFLjX5dF%3pfWQ$ z_QHO~MLt$*s$G=G85R0gYeW`WMml z--vxE>wl9_23)-1q;ZDc0kwlnx`{9EQnE#DcehzD;wjeo* zqD$O5Edi?6KklLOZj>(+1#Q=s@p4ggW66H9C2jgbq)eavE7O*Gg+Tp7JU0xgKpMZ; z%-i{an>RBg+AYJ*Bu(0)-|kh5Qh6n?GZ(YX(s08pcZa)?D~)h3A0;EjTz3~ms$k() zU72kvWtz>F>6&0*xl8W}7QJd?EVilHLXPLHwBo=tx zq?iWv4}I&F!uwq$83DA#BfBtrqr}4UJpNhWC8wV&_Zu*m_+;8?qlfcl2gcQ^+PWsi z0~|2C5~2QeopoG^2CgoH9J?hiEd|||BLW{5Q$}Ab)j~Si@fOivSWkB+X0|G)+co-z zR8x;FW5W5<0uL3t?=ugulnu(H$ zM!VESX-)am`s_B`=W^6|qvq~s^HHKfM}==u9VpbO*#^gYgWM}!PNC$aLnCz~(e~6! zb3#XA9~A0de)Ie2J$M8&NeaC`bEO&|Mus!C3GKLWcTPo7NH9}u- z+OwRx+?xudc1^LerM0q|M?F&4H6Drl5);$#^v_jT0T?GwtB8MIJ|uF*)`@&+<@@iWw-h)yy8)~^D0MRBFD2;&hl47<1(su+6yIt;q6H_`898aa4oD{jbnq0n;^l1FM&j4O$BP1;`y(&rP-R(!n#dGI zmT>g&C5K=XMfe|zKD?ayRn%N)h`jkbb|B0{7IE`;+;+Vk&xBoDN;^}v1@o*#MaW3K zS@iT$I9~J?R`bwCs;bVK;_U-QX=#1*;WWV~iy1u8(}-Ew4>2qAogRuCi;0mc7myU( zrs-%!(ZNUeZ|1yR$mU!h%1N=Gksy=Zfd%6VH|rqM;4ip&Tjf5L1pl{N8>I@&2GAozau&ZWvROT2w0NN(7t$h|?R{5Y@Ka^`CpbexlI>HnO`Mox(n40c)4FPy zr$Nv(3yX0rzI%n2BF2t7|Aw0qRb@t4z7rqKI*nUmto5_^7xdnF(|jV|I{9HYVkGaX z@nn8+`HA!DUFSq6UdJ0*i~Xw?xh6Pa+h1O@mLB01MKb1jtiNyzsaW0pBfID}MJf{U zyoJKO#5doEs>13{1SKk&-fX)YdK^`n7R-v`$`7URuzijsSm5o=s$D<#!1|j0AzhcS zvoy}j#W5oD6@xC4ZMorkk&EDpuD3tLM#@$$R~p}&lRvrZs^ou^eg3<)RlSBq5+WSl zm3N0!ZTo$@zGvd%X2gi@yFSnNHJleiRNWN$Qoh5L1-R=A9tt0PcQeps+2q(Eg_5u^ zbH{$@e#*PnaQ-top1X$xD*n!x&8?URpE?#^4mrh6u!x~v)UrVoac;_mMkGZ<-{rNT z!U_PUWyKyf-5(|=1PAu>HoMHxlr2^VhngEkfua;6PWT;c<}`56CS^e?9F*^`_%Aml z*-&8Plz&Qz_`2Rn1vp_V%z6uUYr~m6lFaFzT zGV^w)sMmAz`u}5Y9^3CsUk?mr-}-*J-83_<0=xQsMt{S-BgqQ~1v?Dqk5{Jk+T;4- zQr7-i?V3|^vj7SWK8m762`j8l7~35?Gyw)_1ENRmp1KXa&UGgnL0|r8e_v#4xc!7& zuY6^*>`tY4nftVvdMci~_;jqTk$tLk?_|7A#0(yx4ROXYaRnRo|6?wY3GJrLCvXi!hBhJ--6IPD6H24-ZBCAb7tgsmQb+7ay`z!`{mXR!?hc#t7b#%*@vTfqFUFaiCRx@3q4zvz4V1oVvPS9kw>%?}+TDMEBRFqzP z{q~in7=OQvUlX|GRCWbs-cu_4k@AiW`}^!N(=JLoG25EV*kb? zzq~t1%xp^#!LarP{=%%LiIz0&2@X_AN5?T0M+6sdGAudorjG>!jE>W&T~KzYiYl_U z(C9-P^>b2mr_eV3*Q7YyW?3HB@ofiTV zbm>APdfKA9=Fillme^vZPAlj^`Z9Tv9Z+;ThX#fg_@VJUI>$)~7~qs|eT=6Qls>K7YPR!-5bgXpEi zex3A6e3`t0zsxzr9#7J$^GOYJS@iw%dt?7Abec#czlEwuUX3!PR{2~{`Hex-$-`ZR z(xvR&L2`!sx57||#yR(T{X&BCwdv7_>FnJ?pVx(ae>P)x=r&#irul-@#(r zDIYIf6olo)%A$*-7^oucGEt%bIT`E2ulY0ekMCqNtfXlIGMZ?CdHUP`%+t?f36U%5>pQ{X5(qevrz-w) z&3*0{C<81z8F}q^^n9*aZ{cJ4f;steoUulM3Dp9p5n;Eyw#=uC`Cm|()joWm-Xt)% zd~#2YxGshs`K4Kgd5O7-O$R*NXQ1!nV3317?CSIsw^e+bkE#1zE&F%{jd(NdV6p{< z7mJS4N>V#hM_h%3@I~Y>rYT)U*tX}O4scF}iR^8D$!+c$Zb^6dCYu?uS#6Td&<$@x z>~($?ktpUdHrcvwvkg)vMQ&nYHH8w32h@C;sdK(ZL58=Tw}b^h7bSfK?)b+0b(Qb) zz1l;8hQIS}wTR8pt+y1_FY`%Vy72KzlNbVcS z3d6`ZdHIOHz%*~i$a&2xntgcsS|Hk8ijVV3O zJ9d-RGimI;QoP;c_fPONU;fTwtkX(}O_+_@{k>sUR2w<&WLh%-XZ&TXm@Kp49t`Pt zbDEjnA95!wZndR&X&Y=yPU9%oB0+H|5%SvjV#MjAk};lLnP6}( zH;H9lZ%D7LFxiH@{kuVz9;1@VFvUOI<7A#0EnkHn>8+_VB|u{yq6jW>Tn zlpWTiAq_rY1BVtk%&_eUQ@K#B_QzO;U~WFE+#S)zWvh#sijE%ZU_tBg$t{YsXQ&)n+AnvR`& z_h2Z2Pw#$x%5UUh?obk<6QlXD=1qzoryN9;Ax9eZE1u@J{Z_io#JS_2x!-^C8YZm3 zXlI0{V+m`&r^U|9yOZad@n->Yvbe(X!R^s=2aI4;+$Vn>Xg=EF{-`G?$8&kuDD z>?)NeAs@?KQthFf1;n2pcw%tlQ3LfQwBMTJ)kfs@W#B0zwN|vr!4`Rfq0o_c_e=RX z4H13w?c>@bx~a<3*5vJnqgkApzu!_;!|n$dRYWo1eTiOspFqbou(~EN2>Ba6e&(p7q(s6G@G~Q^YhML!BhmUHv|5&!sJMMfKKSAECNR=;oOJbjG ziTdZ`cuH~?YnR{K>5S!B9m;J16jGhLp;e44zv-TQ`ce8x-+Cm-JCbocNp^fi^Klcb za;a}?PUu!6;cpHUZ$}Hs@>Pzw*Gl>de154*zx9F?gQ6zPZV&Pt1zljNjvwwQg%^H< z@(%6blrxY9zx1Fa79({@;IM4);~jgP&QNuizKDifG1>dT7J|HOFObyy#Gc7&2^ zJdT|EO1<)fXZ}U<;SBU-%7YN=#-Fd=Um$lewzpzl@B;;Q>wgMN8~^XQYgP~_6Hs6? z?!a-M(O2p|js(J9Sey>1BuY9_k45zh%Jj;ZB2bm^ds$yB^L(kVaNE4i>d}_}5KV9C z5#~ZJQH{S2l?YVdy;`W|?v=<@@b9z1LCYI-O9M<$yeyg) zhj?U^Ihg}3+dI$ZOa~&Q7VaG5eSw|5hkVZ6)=qR6r<)Wpud>5-SH-Enmob~#UPU?b ztDVd{GS|Xmhl(EmyWnQT-1D4wnC0X>DjvZfW>d-)MB-@nDM@fdBUz(+fC{@^UD+eS z&k~{mlUrd@V0c{kNpLnz&`@VU*xUbo#+7?m4C|x%Eium|x0`PVlj--m^$5SMSj0|E zj8hgPk?JrBX)!HeEE}z64q$3Fc=a`H{~c81&aY_7{TwfT&Zx_!ClnR~BAu>t$tM94 zhww5r@k9^)AL1Gd8Rtz}uw(t0?^}}N56`p+f$3zUc{Dho8m&yv?mz|3DW#bjkizbG z>-JYQ+gFB!RYPVM37dvxw-!(@c!zOxasy(RxEhs=Z*R1*nqjna*qG%u-gnU}rPHpA z?sKs%y3aK>*4_8v3CBPbFS8~-YZ-^*EobpZ&bB47&W##NSG(UxE_E>E4-%=C{d&hT z^nO!UTejcC$smZUBO;9{=q^$EVegbIXW-~y@&mKi>-jkzB-(VbbOwfk7{YGq#fA$2 z6~_8M6}Cusll{N;pY6Q8J-mJRlze?Xb$zXU{d}(Xp|f?(HHo!}BpYT%s=tp^%aF>+ z-*<|8w_l1OqxIHCN1pSJfK+;+`M0jE3ik$z`EzAdF1h^0X?nXXV=j`lxaKe0vx!0u z1AWiYLpb|jMR{<8SXj~>w-;P__WsP=DG(SgWl*j?-6^`4N7r+2Ezex6dIJPVm*2%={69Fl}Jl8QT{)4QKrp4vX%p80Qm6M^=?D4c=U*thGzr+#!<}AKynUHdQ9IUCnP|@?f}gaudMx{k09MTz z59L*V!&oix!#wH}V=&fFp>i}qsTYGR?Z;MlDD?Ma(*o@D9}pyoMp=a}kX({oq%xCq zi``*c!yWEskJcfCKK)|w8G|y5l6p!}Q0S8M;%<+xxi5}fXq$GP%{P{8fu@z>ZXpeg z{hOUwIjzHr%k`R_hw1IU%%;zHe&IOVwYI)z?4oNq1C-I=rCy)Nq8i z;QZ7?zC@-5{|RT_;`4Lqz{9cviS>Czkp*_MMQN z)gV5xi_7KTA~%vbl&}O2sNI?8LqB}7`>^xdZ&U>T-Y547zm5hoSaJ2$Ks>PXz!Xan zS#7|}TmG>$#X_F~qZh7>YsUTNsgIj$Q%N(=t=+NPq+FWHxP@Iy3Qg@kllm-y8Ww!F zNLIOvJE^&J)>xLb>Wt<%obVzm`6|m^Q%gd{^=CV8MVDBANcb|8+MgP5C@JajYrsF; z&j+5;slHqvB}GaJtT=fuiBvS+NT(kAez2=>7f`bsELnAHp61C?c5HDFn|WMA+8D9B zW9UVAvo?bAYt^}Nbk3&yPn`-b=CYxo3&ABpJxXl4pL+2&@s;;|M;=fNtW>;1<2qI) z$_V%+49jyBTTyvanTp+R3nTpOyU;`_jz3rdxyj!luABRuWeN*qInx|UPDf$mJao9tF5y=9_he`KTsK02giAx_V z#!_^zQxiJ~EIA}8!jyK|v4aehtA=e4avpkxuhCpV!p3#U*ml!*u`5+$2(wf~u&k}` zNK>$-DD?bE@H}3)rvcSZK-btKdUkV91N)1w&Y~eVg%b`$Ku6&Zjsb21WWxFR9hP$7 z8Xg&!sypJfak{;MvFokvSUfnEpBZmc0EbR8wlh&AJiQNXyHG5_B7wwr$_;tNZ!*5X z{DgZj)O&h^R*y;jD@|_QuCCA%R>qhzJt6PY0!eAFDxFk^iGthbSNc zM|FrA5@=9|1R?=J4T$&6VL(Q)2E-AGfoekBk(kK8z=0;j7m0Dvf_Nc;c`b+&l37(7 z;*7*JYJ;sfbwEs-4j>RA8ATTaTy-JNSOCVnJIoao?&Sd?gCFQZl#zn&>p>nMfnq&~ z1+p2IKEwuzanpxbAu&Vx5EmpMWdN~90>uWPG7>{bFcS0J5X4*>f*uALLEN!`D47#v zZ%AKjMK=buY8!)Aw;MxTk?jRcz%XQ)K+KVta}$Us67VpExFLagQ$PnI?rLUWs}E)X zGXg_x4!YQ!Zh#HfHUnJDH-~5=n;n~j${Z~~i8B@;M$Hlugyi{b33?`A1&|OD^Q-_2 z0>HHf;(>^#r!^Rl(Z3i`8<4rw2FNCYna&nWP^>MOJCp}tVB8;oaUFdChEv)O;*XU4 z-VV$Zt38kngsymdQ0d-Zz`y}aRI>xf%;5+E$&R2IXilKbZcbpqEIL6fkpg9%!H`w| z1sGkxAiQt^OA*r*;(=rias{=|xk3W55tVaL>gHMr-!+1e!hPL^@nMAO<}O8Pm8&F|>kRarx0%ynsg7zX6$S8ui^_S=% z_KSW64ny=xk2HublGv37ddm(62aE(bSZsgbp#SFSV80ki2aS`=086Vd11tclOwjG5 zOptVv2{0qvwtWc>`U@{XIr>>()OxbO=<{cTy&yLm6iAi>>Wat#B_HR2Vah#``PzXp_(Py_P(uKC-;YQbc;)q?i2*MX9w>%is< zb)aE#^?-JSsjusS%pgofX#k_;(f~FeZUBQM-UyNk8o?mZG=XDrWD}@;r3nn1`Fqf> zruTq_2+4FGz{EcJ05Bsk8y~=KCI1n0C;uZD7R+X_Qh+Z$t{=c=o54!aZ2?KOEkINe zav-0;R(_vAQ|CT`k1|rN;Fwm>3K~z)1~&I-14-j;U=Re_AzH|2M74v4&9{Sfq16Gl zs_KA5A$deQAy1In+dF}BK$vmA3#^NlE=UX#qtXqDL^2O`gCva}$Ri|Xv=x0a-5@YxU1ZMsMmc4*d1kXw@Ktce{UqQ*cU%_E7s1L+k^?}i_?FU0Q*$?tq z4S+l=1K{N6FbLR#5V(l|5S8FH1RAzG1g6qq81fKF+8726a~}aQdm|vT=O{R!tdD|{ zoyS0)tuauk&p0@(?2Ln>nCk@C>gNO~=fNbXbY>EGm_^uQFa;|8HU$nbz=7G@RSL01!NGs}KVu z(7g)I-9l?%7sy@%M;N?yph6JL57!}9Y6* zi9`mF6=F--4ENdw*sp$pUCwe7tbm2Tfb|wwTPuG7mu)b+E8AcSEqB1MFYSP<81r4Q z=zr{jJe}jVP4?rDx2Vj*^ z9)g)kI|NdThy>{o=wreW=rzePGmwYq9OQ{Q2glLXbFlc_F8~#Yez11|Iv;uoKBk`h1$?g{ z0Z5+htLwg!>J3FAQa7R3oyY+NdfmG>QK0ci)(}+a_44rq6?#3O!EQpYpMZ{ULa#@y zFf`~hq@noe*Ye;`(4k?-=9m~z7?Ko&0bmf$U}FLpgrRYmpe`aT=yl-Iv7pyJP-6pf z5X`CApe}qI==IY^Bo6d?Nwf18V}}dXM>03#La%2=8a(Lr<696O^m?T_jR)04D&@w9 zUN4k0@Bx7cGYAQw*K1c80ra|#7YU%(3mD5QVBWSOgbE@VQwgEhi|rFa==BoNk_cq% zAc9`6x_KZ_8zl2{2=scfa0Y=IF#@ibXKy@Pr3PN$Pn89JLPH$;`JX@K`k3$*Q%pMe z#To?fn)kS?cpNxeB7oq=4W|F_Apl|*O!yy9OlG*nCnz3LlO;8j8dcOAj!pt)L?Spz z07Qs4T!937z2or^fvEO@X9Eai=cQ54BpQPc??Op$?)YKCCqgh;;U9Mad5Dm6k^N!DB!KhOxOk;}j6`9oVE~{g)8i2n4?nlIu9in}z^T!wtMk!}u?* z%BX9prLmZV@H1~PEJ!!-V&J*tP!b+3)qggO5O#N!p5P<_!Xp1im_`g-nhHt__aKKt z=@G0ifOvl-0$c?0!2B=0x8M+RC@Gvh1rq}28UfXYasz&fze1{oTUKIX!tp6U5)B1F ziu{K}05_$8LXj!+M382R{?m#O{*D4lj12Kj!SS@;z=4tYzQ-y%?d(bk%lmYpNz+b_C@#jti_Jiw)% zFL)?5*fCxsdWz~Vcr!Ir=$}$|!-D71{ht~^lqJFepem7n{%vO^7Mzh0N)G3RVqw8O zXn?>Y`b{_uApQIw5 z@c%=ig6GgeDUe#45Tr7q|Bx8q_;k?gbp^1oNsZb?g7Ajoe<~i!a(8tR&?yR-0HpN4 z{@{`#T8JP+HiHl$ONKx&z?EsR@ZeWVU~&;H{@>vUCr4OA5BH!4OE8=skn$D84$)$f z!Uqu~M3CkXq=%H(4X7A^#2~Oz3;$JSH+(g& zS?3v`Ovswj%y7P840x6bu;2L?>nCjls~nQ+zg?jC7gwk*vIgMuj8F{tD@M?d3P!-J z&VNXp$Qa==0ay(E|1^NW)tR8=NQ?hl0r|faC>p?}xuKNsY~W{Rq|0v+QW8L{s5ur9 zT!R@Tp)dm^AS%cPl`K#QoX`df18x}vR);x)ZfAfX)=1N;>y*uED*m$pXI z(^#PNNYkL&zp2WB2z3FY-oNwz<-xV2`2--{Fc(0R))gozhy{?;Z~q@lSdpUszrL;m zF3Q|#BS^3Nf)pu&2r44Q3L-_tUI4oy0``U=V#5OVuGolOJbMK!XBW`3onkqAuV+IA zyLguGN%FG0+2#N7`*CWTKpC3AVBJS892^r^VU4&_U!Fpjg9nbv?@x}mV9UCFEtNxG>b zS)a5iR`7Z5SLNf6&CuvMenrdtF@b|%WOK5ry2QkhTqNc5zJjvi1Qgz09cH6axtzgkMO4@WLAD&=Ng6=46*qFSnftDxF z;4RmhZ=~Q89es?+iqV6oZig17_!XDHtPPwsVuz76iCAi2&K#71l7nY`3`Voz_+}7s zUEaP?396zRp`c}}+U!6BAMxvlU)4{G?W!Jo|4Wwp-<9{k*2{%$Z^p1!cQ8}q{N1l_(|3E z_IK?{D*FT0`Z8(gFFCUhaH;61JL@t@sv|k$L2y;>Nx8Eq_f9h)#rT_P?!V=5aJG^&rDHNvmB`qjNhLE&!a{@;A&!aXB0dAzZU zpei7Q?tkp7L|5HZz!kMBrED7MWgME7*%x+EPs;o`jVtpk}>&J z7uKS!xYUE3wvUX+<2NS3WL!NMn|{22ethF!BXXsi6h_|ElbqPcruFf0{!4tk!=x6; zXe8N^w2>8zNL&C0@o(TJQ-&|En9?LP^u>t8he_cirlH)2i4F1b^KUA_ z79=kkxkTD5V>4nFqcAgq^cbTLABGdF`jV|)5)#FDeUrN6;%H+_l0LG6A@2ayAu#~5 zHvcptxye!kGQ6U(0Xc`xxl#!muKcz907AuK8$5$47raBNPoBu)}+*Hqs(*5Xw8IcRN#&)FS zf-H2J@wSv;Bot{F>dt~D2NYbWRb$D8WY`;9kVgY$>z!)^p`)$2&@2}dGiqX665B?y zH>R5Yccshx0-~rdRno0diA%AZYV1Jv1|cF)+nfu6fLL2)1AeT7?mxSP_rXMWLcVRH3oc5rfGTVESU%?1Lv@;zhR^7A@P$NhYv;Ob3c&jkG85t0Q{R-{d#1M$G zuT2WtOFramh~&Vec$})5R|)IqOB@|ERVjjh^{PvyL^7^NxAaH2B4)n^r#Kpq1IdU` zsSo4Q{qy5Z9XNsowq9aBF*TUV@*}-lOQs|u94@yaO?Ek>4DVK-AoioJrpuKy<)Dl( z$%plzAPha|(?$N$y!IJtI%kVZWJWX7N6e6 zHpID^?4#bzAXK+ErOOi|wV6C87E;pvzMNz=8_^?Y2=t*7jp<_=4tnMgt`AIUM*4+I z4vdseNybUaR*mS)cTz!rPEP1qF*b0c%%lW5>*OkfLTtrl*2Pj(8&aUKiSiA~b0@CTHV^>k_8j_45iYlxl zz3&&8hQs~n-bM6=AseXO+p##rMk}=q1k~9?#d;AI8_u?oec(PN{n*Y)@PVr2cCPG` ztd+MjJ48>x9D62d#-bxT>C~=I_P3RN;!0bH+ObC|$^RreqVT{6HND_wx3o(7OZ?I5rJAx6qBcsn8 z>y`uI+Of{|FRE`VCdI4+r1+eoQv3+!dnGa)pD@xqO42#Q6~cI1keCPr+ai3oF*C@I zfUO(NE9>Y)VGrLz=tb}IB8U(9gb2uc_%9_jAeSPr!^f%~(>5>g&0(NTVGD6rQuv;Z zb6ciMY$UKBK5#YJ`jS_QSav*8_RT^{AO4Lui*Yp~PEj~#qtSY1P*8Jn zDd%U4WO@`1$0&blUAq#0C^Hb=6eaLye&_tm7O@pf994^E^x2_3&x5%afZYX9iysuk zMyL_%%Ic0#mHgzQ;Ae1-mZl1lK2+A%=*}yHt?;vK_*rj3)TLiaQPs(`PO`IQb&?z_ z=n=n8n6S)k{_7+U(DQr0o_M0Vj3W-z#C58*37H&?0XI>YSdh4AdF6ll{^p_#wCt|X zOebzDh<_)fMd^oNbft$i-q}8y?f^Zs0?0!2K=cSw7~{sZ8v$v8dB^Yy%XbL7i@QEbEvk`+UF6y7>0isX6U_3; zQuDaV)StHMg)ps8Ha?NX+YYiVx(nZl*NVk?4QNk7$bw)jcoAb{@o!Vpt>1t@75ovx zcvo)3#FH|Avm_IG$P1uBu}Ovl0{(q~ItU;v_+|F3M0$q9y)M%8C29^uPng5LiJDM0 zp_6*z2$It0Qo5o&H+Rl>4E2Ma=oFo$RlQ8|ZoppaG1Se3_PTcB@-B{)EXcZa1y61a zUN5_Q3O1Xjm6@*TPUUxH;rvcC8obq;3t$O->e~v|#BYdf8h^V{rgZA+W3+;VR_n#l zk@6wyd&$8n5C70@AJ28qdSh%wTn52QnD5cegMSR@`Qz1^vYdglAKLBplvFf{IxhQ`eoGKfcl^Bkr*K&E;Nr1Ez(PS*92r^LtED?8SQHw5FjtEr%5&<<(^p6WXNY1Hd5xE3P(h+L0y zs84gQW&7SV8wRdLRygw(WSJbGKGA}W>G!_S=-yGPksK7-_LD6zv>!+ZPbihOBrjef z^inT>I=O*j5RB;!`RxSR4^MJ_IH@0NAgVv46r7@V3?Ug8O!z*PEg*kC?B-?)3Ei~9 z=*QFC?p6aNPbMXB0HmZ`;Ih*P;MjpW}~8uW>OfB3j&q zYrX1RHe>#6ea{O$Xb5)@bGjM#xWD}~P^!#YDW;-oJWy(6PFfFw15;Ow9RyOlhsrKX zWE@fO&3hpwMLg#umOx>1Wl3D$V#A}1n1AZqP4Pf#-)Jz7m_?-;V@XZr_j|r zTe&G`Q*Snmtf@(fke6W3yUCIy-zxI)1Eas9^nosvE>ALV57R2Dr0CiV?*zKP(ayZA zUAa&=H_tT-@ekcUmSdEYb!dJ~_`zhvC{c=e12um1P(eNe#4KPk z67qHhiF9i+d?Y$Refn7)>)~Ng%@?YP&h<5fTL977i;4P=irNvzKP^iOT~sl4Tngwl zTgc-?U4orMDUV^8DdzrnaalY%aSXvxjNXr1a>(-+LNq4m_vmRG8YIuw&c`-%p(pB(k%u%9#`;))F3L6E*qW4< zC1cjFRxB6|en%wJVg@mIDC0-&WP1RPjtg&dm)d=4F+p%)X$6Gu<b@?y+&PU~L)EB5*2L-=k`5E( zA&r@Uw&t!?YG^>t<|u4fkNW7nHrxR*pYSUlb);ueelHR?9jB@uxpGccYa%u^3rNm* zP*QUh{77yQKGeOjf%he2yQv%bo-2noza7Jz`XW*U;QBWNZK!^%ws8LTlO%W6tBVzP z58Z}-@4_4rUFcyBXFW6t7u9qetae@absHO~LX0^!xoSUO4=A8q7bRi!M5CYDLoa%Htfme(`X{hhv_+P@L; zL+hgJtx_4d0=?t3wt%HZ>t_r^-Ipb1I~) zy2m>M|F6M%f1ZB2;4zoI>wtoXyy?1|8~=+tn6_2463kazK+;^?r8*x}@B@yXJ`t;r zK$jcPrJ0~h{m)bve=_?|JsV;&9lF3>h{JTW8vj)}a`l-L#T3n+(-+avA1#LoQhrq+ z>la|&$4*CzmuF-q5%WW`wS(X6ZRdt&9RU;v`H}$#RcT~qPA(miPl%Fcpy{5*oD|v2 zOhL}fkg73TyrZOWGh6yBIa1bons$*c`}go$Pv~%_Gv|-22HjuJl83OAirVPHNujgl z1H#_3@#%Xv8PLqkiX1&4=b+~(sefHgvYdmnK^h7D=ipPzhWt}_yb;Mhrr>MqPD;vb ztdv!gIL?(D_nHe*dI%?>A63|x#qBcKxfgTH9v&>lN9)#{wJ^fWk{B(J)9%l6W{?ZSOs(;6|0|kEwCm|=AVuez1waTEmW>|Gvn4Z zCroq+6I~3|rb8&G8JnkcT;ZSW$6Nl(|IA4wlZoV`b*tE9A@qFCiR4k5nFU$7Q0~|^ zN{UQkI8JgNW9C9!Gi17N2I%)wlyo~X`=ji=S(Fqxijzt*%xaN{g=VIt`2-A)-y#_w zx(G~OW0Xu@^b6Q+7@c*-VC4IL#prS&>=Z3@#%-LkQD2gMLY5b|81h!6sma6FTAH(i zH0Fx$DSi12HTtYS%@ySGeR+0Q`F?B}Jz{(S3nmEd^`E5#v7XqH2g~H1x-ErJ|2ax} za}xWHOv%uuDE=r(z-M7oo_Rq_#Y!!bXu&O!=Q zYOA9&Krr`8?9XXG(ULpKDMgr89`ZP@g}guCDd{1sm0bGi#uD}^>`+xhiPq~t{_BH^ zoWD*!ez;F5UrWmAg|bIAJ4g zP(`Xr@&nD)#`p)NPYYB+>!~71zq=>eG)IQ&hMmG-p9y6xybhZu8%%-QgPg*md1EZT{d#}8GKjYwLwIlnJuoygC868RDx_=;&Q_Pk?)5+sq` zyJUICc0t~yBuZ*b%8X(}^2R`@@*MB|gib>(py)TGuA_^PV2Cm|uq?>AUFmn&YT~krq$k9L0+?q+UV>NC$?CUA`$P#$C7%^|I zQ4<$>1kdQ?ZIst~) zZn~$S`A|G1K!+GZ;;J&jf&ro}ijbxlOS6h%=4uWobiqp|)2QufNd;^n3Nztd3 zP`MK#-tQ2YwqMj_5(nPul4Y%0=xH{bslTA~w#!PSKeG%Q?&!l1I`AJgrAj|59N6O! ztp-hMf0jh-!{ZRwZYr@%HJ;ie90Atzwi4TrN&HSfHNML~#UyYhyPnER{J5ha&3~#S z*^>S_3TxKbvPFeWElJu@G-mNeje%xBY&2#p+gtrQf^7u$H{wmf>Q9{i?_*L`ra|#B zH1o=UJU)X5le5e%>`3e5^0K;Q&HA7KI6-Y>OtFG_Iva9+*Dwn_40l}4aZ3Ff3^#=L z&WHDkKHy-*`7hgAG~n+*(QGdv4^3~i;iQ~Ad4+yRKXt04{1o?BH7%@(fs;igRnk8$ zA51oOnoPy{vMTlRoId+tWb-ky!vxib+G~O)6v%f7Sp^VUx3VTZ0pDt`x<_xnv{vvz zIJ%;ej!ujqd2Ce?>7d$E96tfcM{0_6YclgsELF;lL*1R*`d5JI9=K^fX7HpIN3!9` zsbk@+vfe>yX`uY%ObIFu-&Dy)#{;7z0V<4%e zASIcxHY0~0;pu*wd+d%+?l%yu|A1Azfgh4YrG}HxF&2D#$N1eJ)T(|QBE8`~tp(8? zQYe2nrdH5dbZ+V>rN%a@{ZwYi+g0u`(>s_+T%0;gp!{vwagyaZ2)H+sN~}gA&&hX` z0|K4AUZLSQt&<@<#m`tvmRT5*-RI;-rY=({v*xIg+J+d~kw`0y0X?(|`5W{n^VH~T zmteHl{VmgXQ+m)sCEba z=Mx^H@DXfQ0r$!m@vyJeBRsmk%};iMjG+2&FTgWnF(&N={%sq$=#raQG5c({aOV%W z(}A44_HJ?#2J$*Uz5=LZvl3)WR$Y*n*_;dLz_IO|6q}1NF1{f5?H46&-@#RjyoJY_ z@1M1_Ag$lXDRJ*Y&=2k8(2PPH7*honN4i(1gEI+(<1Z+1E1R;0vVGu=g}CQ&yNP|E z>mDv3>?sbvcOSyI(eqa3J_Q%ifcaidZ~rfr;9Z9;s_~a5Xk-kz1iIy)oSt+^-c`+~ zpZ=6Tg@thFa7n&ZDWW9Z!yFLt$-+W)UmA89q?foYr$d(X7be%F%d#EjQ&L_&C*@t1 z?+>2o8i$UDp+6&TR1^Anq<~boBGqBm(5XIk?nY2=;nzdpnuU{U+Ll$Jg+vYq$v!fs zZ{lqQq@Fd@9KN*EoZmdj(u%mw#*Me~hG)a6gU_DBQ7S_fv5~juWUY@_8jz%7{O4e# zJn(`4pjV!_VW&#$zGhLCzy3k(x|)*SUE-v~2N;(LH=*S5WO-cJD*$Ky;q;`dI8ODw zD%&dLDxlI;C5b4T;m;leJ0naBU+Lg9z{B%`9Gf!4m+w_@w%^?{v&}0ME}T!p&fN zBTH9iEY`u4{2fN0Fiwf^O?RQys}(sC6T^gbxh_X!$^v%w<0Sv(f9#Doe?m1&V=V=b zuZ`&412)`)wN5-r@23VM$L`1>wC?7Zar6|dAr=bp_P|Y2He*V%9V~6x+rz9c5%1>L z_JaTHfdxe$s)NTDs1>MgWTGWP_{S=i3jS&{jo9Yr!XFd?Rbr!gt#!&tiF8%*{~jB= zc(WVc(@51k9anfN`7Oy@A4_XCWtnv_a8!Mn@Nn6S!99dwXezB$)HD| zIHz&NkSFL9n~w6_)oH%_;2#kF0KZ}*nNv7_p1k}R^5?7Q8gq}zn?IG)nf6EKz%!L^ zD)>JJU4JI0*Ir=hOwu3A(SIQ&xy<3D{PUI-$(pBFg9;zZ2jN9?Os`qPT2Zi8TcOjg z^C_qYPnn-U%FYZfW!)3m(%qBO>P!H(7N)D%mnuuil_C^R`1nLlCM=#pKndXjkiAr6 zo6f_j0b~EbE*_iCODjbc`C~puDD2cKD$JI=dn&I07NvK(#$uqNuxAq6U9^@{BgSS$8 z6_W82n;I)abA8h4jeNX2p3>WG#>>J>3wL*Mhv5N3RQfJOGS`2C4Q$Y4N=Qm zcKo5^eY^IB{Kas5Pr(PCALk&a(+E##^&~SkY-i`DUQHwmUtrkQ6mSN=LL{6;XDxZc z$yB-X{`c}OklF~r*p(ha}>l(W6qw~WVZkL5(fVMH}2_g8WVvwRKul`9--bQ@A>2@+WT3Hw+5@RU;W%{RgeYVPE=?&N%K---EVSrH}qh#AK@_Sh(jCE)@aJfP}q~w{!7t zprGTwoD}!VvfSh*pEA{b$(hRfu9j=GH2!sc7#g)Q)NJ(5YYsxTW6??4(=!bvO&4tOUyv9a0uyYVmTL67lUL+D@Y&(sQ4NuaZ2!~DL@ z9@pt!6HEKT}46Vol8!Ja*RU*guDkW$)+n6*i zks7c*RaBsa$2tyRhLF|f@Hct}-&|G#?V z@dt^&3%b)`Tlh(O5rJbNF_ApcfcSru!kO}Pd#3lQi50or!OBT^27&gP)@#(O*OXD+ zGC#>3w)})or{PoA2&+0Iw(R5K^y4MnI5UatXXV3vlL~rGX|;PXh&TB>$jU)Q>-8D5 zm^hiX`7^c|6mpDyJS<)%&XSmZkt(}UyWX#~vci7!ydta+AXuPoKN(PxWMxm%zTjPK z3h2Ju&-Fg$c@ma+aTa&zF9Qm{NOp{ObF=h>RP5kpAXJHln>JLXjTLF|6_Jl>+V(3P zpw9#{=&SrV%=7b`@1@{g>wO~>4-nMbFoA6OD%ED~xG(cLG9OD$FATjnjQy5bk=Gln z+}Q&&Y&uLHY5e3hg4(_bcneOD*kq*@8Mn>KP4#fi8QqZ=-Xd_kw$-dFG!8rbkJS6W z$uT?s8#K?oLhgT)oyKL-r;zI&NG%3yM(Q8eNbORoA=5_J_w&(1(0UD8fRWUGYW!zK zW|%1Oly})9a>q;2M1VfITZ+mMbSOL)#W;;{z-3HV&Hb*65n1#di%Z+@^7Di*H;!#e z-*a<P#XV zD&%4_lr)Eu_EhJjivbEdlIRmr&aN04d0elez^dtXcIMrq-@X zyEEoPtw&Hx%)`glQYxTNRy0=d;zCTp3O^w))`!!Bej7G$6^$^2J{N9vx((hsyWY~{Ke~Svk6`LIQX=ih_BxV@8@{t4hAINfvL8fNwV%Hl zDVD7F#oKfevKIRF4yF1)Gp<4L`1wFf$MTw(7|m3^h{9%Cp%;KJ+SCCRnrpx7s50uYsjsJF)s2@@PWY` zJvWa}Kx^v&70=f%H4|X#rkT34f)GZuwQWD!f8#|J4z&>2t_;N-P}YWEP1vq$+o~$Y zH44o{3YrzS6tMpIwhvY|f@^kH_aS|pJP#deC%_iA7GOyiOkC-EdnQC#R>GL-m^1nE zad(o|0JZR1L50wQh7`Ec>__({kY8SBBI#9qa3X}pEqH)a} zR_ZJc11;VQlqLuWcy47?WebLN-@bfX`IRkpCJI>QU~}y8N)at^!G_Jpz4LTWa;Xu9 zZRiMrxon{2Y8TY>z1>?RVJEjP1Oo1AW z<=HwY*RZ(!Dj3UB1z423aW(e97VGZ*<%vH|!Auq5L9GN2>YpaSFkA6_9xfgjEcwOA zrhCAy{oZ)i6aj|T@W?{2WX)jC4q+>DF_h-GQ^rcD_H%fu2V=Ktr4TepVVz%) zPByTKcHxbvMFPwp)k{djP~>QIP-nEiyOVzBt9B)h>qHZVOfk&ZguUCwn)KT;@xgDT zM%wi`My(RCiZIESwN|+ENY#%}QoA_E<17(DqlWT*9ELqP`~B7`zcC8+)AYp-;B1H-yIu5I)VxLBwx9$DSX6|iMfnim3L*q0qj^~x^<(rmwgMbPsk%6cG1)DIrc zKpx@W472ae5rG%3=0MU>HiR{?%KYERAgC6I1Xv8jX9@%uo3zThA*_k^2UZpmt8g?i z>8!wuadsws!)4cMn0Ro{5V%J&uJ*+y-WLk6ve3=zi!k*frycUTg-P&U3w!e)0Sj;T zR-KeFw|qJ^=I9QL)<^u-7e=ktZ2`Ntx#YpZ;K{>R=ielcnV)5zASh1{dw zA5$#KFGw=)p#Wn>8#fE@NwNS$$7M#Rl4Yr|hIU<&%1;ICo!*igtAoG{adMTn^E()# zGfwiuh0d706kyqf#+AuCTF-($+sX{_*Sj5kmtc&G@Wh6A=`ie_fc?=DN1as3E5i-1 z?PIk~^x{7YEG%Uj*GdkHpO(LwR38(Ao}6_Sw3_@yfR$w!W~xFcOtl8bJc{Yo&<;YH z2m%7W2?Cf)xvs~oq&sVSz0a3GpnxQ%EdMfQI zNHiTSOY`7TEtp#rFR!^`5J_(Xx3Ja|SRU`dT)NmsR%rBE*Uo{E91m-B7drF6NPsc7 zNbgNwPADtF!o9sy^+!`N$l66%)|dza9=1owrv+IUEN@8UwsCz+^~oa2X6YiZ!MW?GLhFg$*#?$4ZqhE%l2BC>R*ejdkQe2X z`)AKc!O4Ov_QT?{VI_?P7+WD}DHqn;xYCm~4xqQ%rCjc{5@BW)98hEd#oZz!<+XfP z@%~@*QPX%NpJ9TPf3+5{SU{?=x-YEBlcPVI?gBf#>=rMZQzHZzavT(v_>I{?pRiyv ztFhm$VY|!4&WjYVEcKxEVOW#Z-X`8Izdp>mC;`UejIvA&!_HbdwcX!nQv2=ih)x0) zzSN2#E?zr${sa)(i}Je80)l&PStS{Uop7S%<8831b|snHT?8yztIq=|4Q;POS}rWV zY>Y)O0rt%bn<830hPBpZ{rkrY(VBMkn6-Tc7+S+VpsbP%!;aRuRlEF3G8+a9*s}D& zL{;8{3Akkuw3e2D+K0d*?*BZJ1OeDcc#;Mlczv2a<;=0SedhguiT?&Z3V&5UFGdJh zwmqfAX&B7?bBXOd^p~ChH&%ptIAPnY;{f&e7iwydZP zi?x4!tn8OfqPij0PEQs1n4hjd@f#+-W37dIH=#?~Wo}ld3ovxchdANoYc?zHg$`g|yNw~xu6>g_OK7ufwc~Yg81`+__Zj8a z!MQqDz?RJ`UJi$0YaO@fTYfp5#tQ{38~*O$C{{tM;xO#9VYfe~BiQ*N*okKVR~8Fc zwChRUw!|3#eTtrC0U>A2L++79Juw#N*9y!mGSc!ntc~9jzbz`ie2(QN5k@29+H?iq zax8hXVq^JLbh>UAU}a|j_H1!@Q2WE5Yl{w}$;xofrueJ+8B-_}I@4M(@s}?GqAW!48bk~`*KtgG zJz%wK5PkX~U}5n(46&lq(dXsYBU-L&t*#%7yUBf}Dhzgcn`hf$Xh^$2(Fr2~cB!va zgIR6&y4iDwWui=?-ck#Jg9UzCxQMYe+Oeg>LB8b}VI%Od?&kNC6O?W4-ml89VzjK1 z0At}GCS8}mnaY$ucH_rGdIq5F_G9b>EFw+~R@s)#7SE-#mXu%eXsf*dV{VXNh~<~= zy;!#{7GGW!MsfzA`!!tz=6?rB9!&hMdh1Wzz&@rUu35yXb)lMoU`wsCA`ZJ4o&F5n!xGv_1)It?wMeIhpWjV{6Sc_KL3n zgY8{dRV4-sIQ!R-YEaS}^IA-}uQw22NMoz2iY+nhuq731R>QfJcCn=q0Ron3x^}Rf ztpB*R=>g3=w9747Hx^)vmMcP-Nk&=DJx8CVvc~KaZ7-Gqk2%$tk>z z07Im2z+BI!U(1@eN%}Cj-s(t!rEKjoQH$)c0Hwb468QWR@tQ=AJ<4Awlb4$F zD<;y{5ca@v#0_=bI04JHk53#;ZCN=e)|VsqSJvS`QNtEQhBBrdWrn>|NHWu`yb5(_H0GBndEfsIzhe zjuWU~o3`)0y&Wt^AG8x&OG?#*1v33M>TR7(4-rNq3keV`S9gMdVAh~TsTk}`rQRLO zFG^K+vNlXvn~E8{@y6k!h$Sjf>0O;sE-$ZB#oC!tbmwFfbV$2SmGc|{%d&*L=BR;{ zxDB<>slT>P?%FFe1w*rda1; zBTtlH(8^$mAb{=fn~#!@A2YpMO)kH<)j!Jxm};74be2n6v38G)y=Zs{ar_fj95Ep0 zuM-47aW^tFTCN|(u%W9~O#Y6s)-H$jezSnZk!b^F!uIBIF67~8*f4gdz)_Zyny}(n z%=e1Z`wY*82WelJoX!@oEQGOziMs5Y#T|pnFNF0tM}XNUqlBCCV07QRqI`Nn`~|-a z1i#JyQ-IwaD|xcszbG|1R(_qVO9uo*=r}2aA$&3~^r(QSl8m`49+3__DIhR+15}}p zYJPC`rd$@7GqM#tJ3Uf=(*42ENV}+3{51iQdlkiEksF z*2;d+**#$YiC@tW=I;a;jOfJA@@Nox{p$9cIq)Iv>Qo-Z0_@jh$(=QHY}n$C{;+le zj3M5ASbY`{e@~I`KK|&nHhCI}n+g}$_)TDezf>j>2k@RR)#d6R?ZaP?E0k}=Pl0dU z0R_L^yKt*py%%tI?MhT{^=;I*7K-0`_N*Wk(|LMOgWK+~r*>7SaD@PCGDGrah(4st zm>eL|VH`e%N$I-v00``N0fW^Suu!2$y_TbIlP@0J>1XRrN4XX$+W)fO#ioq(5Og&Fig?soF zZ*Fqk1enWF1@GI{L+cutAt7yqCn?1wCat2xH4#_!#XOQb2TcqP7T7R2Va&A> zR^)B=A%1h=TAe}#7FflFRsCZMEPV3f#z9y_yB^i6)&dNk%Y)aH-FsHkvts&HMdGNL zwG|L-)M<)=-Bx=K~i3b_lRW!eDzu39#4mB`=1cOc-YN<1PQ?e_XmTgopb1VsihH ziKCMH_8;l1{(KW=8KE_V^inyb>^`dGjag-Kh{&T5c*2^LUsULk2+J}u_h*G%n2n8= zwI98oL@kGn`^E`5YJuCQU^*Ur*E`G!QUfOwCw z0v{7kYY{Q=o~f-T=3p*p*CLuTUVuS-72>=SFQ{XkC$uh+-obQ%1A_6AEb0@n1Y*Fb zLEhaEm<=F&s4xK4Cu_r4?HyVphMjlz3RKkpoBUo4Tc8OGR#iY^y*Hn{`9v&nTZ`UDEYoIIRw!Z(8G9T5 zH4}Xqrq!2lqKS2*U((Z#>=*+!`nATe`+On*2 z1)$hRSqUj-xz0w}H_7lUgq^=PmkUrUzQkO!n!&xnM-bYg+;wz12`w(%DhPmUHsmFH z=!~U>ne@)@6*wllpq>RS(!>OR`Z)HFoycjli!{~SrwyY8n;7il?Q_>3V`H_#O)G&s zt_cfZ`Y_npgHJaYU;?LMHybT<$F*{q)$2de ziAn1}>Ak)s@&=lFvNBL?AQxXL9_0pau}69uFX+?jwkE7OE0@J!6aD=fZHA-Ki~a-w zX7)&cMYS;xBmcdYCk?~yUS8tW6gchjQSF~-V`&vB28+AWU{qZ+c^QFxxX`5MYfV^3 zR;G^mw(Fe#Zv0IyZ-&u67isc^5n67F@ojo(*FT!XZvkKATWvmN?I|{jt4`jUx&V4; z*PaS57O>3K+HIAp=`m+SF)F>N4+2Mp6m$F98tY7qTeBf?6Okus7pB^;jaDmCMH`_- zs`R#e(QL$p6|7>~Z#irBXZZ!I6ki2c!7TGYRoyCvHP{rL6^c=qg5D1nM#1<$O>8Kc z7;VnKV2QU|<#3M|z-gC@diX;d8$!nTwX#$wpF`rRs(-_vu}n%K6g zPG)3epQT?s`%}xf&FutO*}$mP&SLF`>Qx$Lj_zvL&Z_Sq2vDS%HzAjIOSUYqM0YLd za+DO~e|23n+1jh_tPfRvF!CZ|MZA?}tnhLZU}fs@qFYR}$3OBs${&cCH8io!Sp_l% z>-T;5okxhWamd=lr?~t22rxR0RMomzuiU%G9o<0OaxtUxgUV%AtKY?1qy7xjvmY@_ zzu!a<(BuFf0;8q$80`9vVne!F4MlPzW)N+fYQh4@kw46BS?MMg)z;RCZGRG2?HXUr z!!@yPyegKm)E7I(shAfKNc{I=Azj@<6A(bw?ZpKVO+ij%xg6b%u^WY_vcz-O*jAb_ z)($TW#+sPvEhUo<`_RO)2u_J20B{90kw zUA1A^`>}VR9s2jsG3VMa+)fNwe|gOKpUd5}VPZKkHfk+~SsLa-fOa{tj2@Z-0?6@= za!DkH#dmw9m0wltdbB3C4MS}7`m*r>7QKJ);&~rIU8%1oB7iJBiMYwm!w}J9$WHTT zCxHoqw&Gb;`cO@*8-azaSWz-&rn}qBX5^t=L#=jC4b#RlGbsy}F##2As+;ve!`jYm zGwOc`P!=;|J%4^bw_Ys>&@N_XF-B8B0Li$CI(D=I9`n4pGZ#J~afjh~7shJx$~~o( z&R9m7SJdbm_tL;g+Pvr)f0Ce5^(u|JLY>`MUSoxUn3JXrW5zsmOTllN6$z1@Ofpg4 zOfO-wz*`o5c$qX7eGWIcWuVV$q3L~@T`sd+IE{|*s{`GdqeMHEoVxgbFw-Jx%%DH~ z!s7oy-mP6k&3KhImK9W^c>%5Lq}OQ|;|NpV?)FbkPE6L?>&DFA9`^Jt43&ha7A6>K zCl^w-0S*Z+HqLiu)NyL&kxfeTpVq3{?_Ag#CERfBB!z z99xlM`Fl)suy$5FyC5G7^qGiofqy&amsD-BN0ofL`je<(cmtJww;t=QNh=eu4AuxMt8MPjbA)*o}3+D_XPU16wls@2f-U|s)3Z} z&BvNd^`VdP^}`bBFZAS}`)d5oY4SntrDXj-V$q4}z=#LA|2|UV7f+|VSI-?szeM34 z_J88J)s`n}pn@5Ct|T#Co*0Sk>rSCnFFgSi=hNQjYM?p$6!n;S52syDp-12}K^JqF z>o3*##RKrtGoexR>5UYC!~^i9uhl@%%trN92&_5FF3#_0p_K9PT%&2zbZXYo-U#fDsfEz5KMB8pv$E{AQC;Lh7x};C%xd zi_Y`XU5$U-e5o$8)Tr!#(jH(CFTkxuOZ}{_#;-hJwo5))oqm78I~+-ik+4Z^HGbxt zPA3%nqMdpb#-06m$$$Bu<8>IwUA2(>?=xw3!ew7qt(8S}EUK_-sjMqYIu$wJg{i8c zJ7U5!Ssk?gFFf-XmM2vtjl(SLbgTK35i#;=b$5O5`(GhpA0%`a^n6ucY_*$NDU9L|~j75PHVXR(N*S=MbSrZ&D!DAeZyxh%w2$#lVgb`W4ea zJh_>x3DQNv;&xKLigim#`$CsGD;Q#!(th+GDN!1Y$v7L;H(f9@Iu7pp&w23E3jomr z6FU7b2_^ZmEml;WQ^6O&6PPJt^QSuhFYv?y$(6Nix9oTWy6e?0io2j|`Cx0(cCq{% z%wH4ty`tCZmX$Pjm}g?j2ip+kS8}lCgVwe2n}z`G>ZJL4>dSs=5-^U9S*2SBdc5<^ z=DzS*Z!{~O5SJvXfrL503-2;`VE-#)7QFsqw!zmG~nA?Fypy h%HYJ|o$(??S>V)%rz8K@57fWgN>}H@a$Ef0{{cjNe%$~7 diff --git a/skyvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java b/skyvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java new file mode 100644 index 00000000..1649da53 --- /dev/null +++ b/skyvault/src/main/java/com/skyflow/detect/DeidentifySourceType.java @@ -0,0 +1,11 @@ +package com.skyflow.detect; + +/** + * How the input file is supplied to {@code deidentifyFile} on a skyvault vault: base64 content, the skyflow id of a file record already in the vault, or an S3 presigned URL. + * Also the {@code getOutputType()} of {@code DeidentifyFileResponse} and {@code GetRunResponse}. + */ +public enum DeidentifySourceType implements DeidentifyFileSource { + BASE64, + SKYFLOW_ID, + PRESIGNED_URL; +} diff --git a/skyvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java b/skyvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java new file mode 100644 index 00000000..df8e5bda --- /dev/null +++ b/skyvault/src/main/java/com/skyflow/detect/ReidentifySourceType.java @@ -0,0 +1,11 @@ +package com.skyflow.detect; + +/** + * How the input file is supplied to {@code reidentifyFile} on a skyvault vault: base64 content or an S3 presigned + * URL. Re-identification does not accept a skyflow id as the source. Also the {@code getOutputType()} of + * {@code ReidentifyFileResponse}. + */ +public enum ReidentifySourceType implements ReidentifyFileSource { + BASE64, + PRESIGNED_URL; +} diff --git a/skyvault/src/main/java/com/skyflow/vault/controller/DetectController.java b/skyvault/src/main/java/com/skyflow/vault/controller/DetectController.java index c78fb6ba..3c1fad5f 100644 --- a/skyvault/src/main/java/com/skyflow/vault/controller/DetectController.java +++ b/skyvault/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -2,6 +2,10 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.detect.DeidentifyFileSource; +import com.skyflow.detect.DeidentifySourceType; +import com.skyflow.detect.ReidentifyFileSource; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.errors.SkyflowException; import com.skyflow.utils.Utils; @@ -36,6 +40,16 @@ protected String resolveVaultUrl() throws SkyflowException { return Utils.getVaultURL(getVaultConfig().getClusterId(), getVaultConfig().getEnv()); } + @Override + protected DeidentifyFileSource toDeidentifySource(String wireValue) { + return enumOrNull(DeidentifySourceType.class, wireValue); + } + + @Override + protected ReidentifyFileSource toReidentifySource(String wireValue) { + return enumOrNull(ReidentifySourceType.class, wireValue); + } + @Override protected String getSdkMetrics() { return Utils.getMetrics().toString(); diff --git a/skyvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java b/skyvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java new file mode 100644 index 00000000..65ce17c0 --- /dev/null +++ b/skyvault/src/test/java/com/skyflow/detect/DetectSourceTypesTests.java @@ -0,0 +1,39 @@ +package com.skyflow.detect; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class DetectSourceTypesTests { + + private static List names(Enum[] values) { + List names = new ArrayList<>(); + for (Enum value : values) { + names.add(value.name()); + } + return names; + } + + @Test + public void deidentifySourcesOfferedOnSkyvault() { + Assert.assertEquals(Arrays.asList("BASE64", "SKYFLOW_ID", "PRESIGNED_URL"), names(DeidentifySourceType.values())); + DeidentifyFileSource asSource = DeidentifySourceType.BASE64; + Assert.assertEquals("BASE64", asSource.name()); + } + + @Test + public void reidentifySourcesNeverIncludeSkyflowId() { + Assert.assertEquals(Arrays.asList("BASE64", "PRESIGNED_URL"), names(ReidentifySourceType.values())); + try { + ReidentifySourceType.valueOf("SKYFLOW_ID"); + Assert.fail("re-identification does not accept a skyflow id"); + } catch (IllegalArgumentException expected) { + // not offered + } + ReidentifyFileSource asSource = ReidentifySourceType.PRESIGNED_URL; + Assert.assertEquals("PRESIGNED_URL", asSource.name()); + } +} diff --git a/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java index aaa97250..ce2df513 100644 --- a/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java +++ b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java @@ -1,11 +1,11 @@ package com.skyflow.vault.controller; +import com.skyflow.detect.ReidentifySourceType; import com.skyflow.Skyflow; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.detect.CheckGuardrailsRequest; import com.skyflow.detect.CheckGuardrailsResponse; -import com.skyflow.detect.ReidentifySourceType; import com.skyflow.detect.DeidentifySourceType; import com.skyflow.detect.DeidentificationType; import com.skyflow.detect.DeidentifyFileRequest; From d64bd0b6fcac5533801b7d46a810e8fcc7fff0c4 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Mon, 2 Nov 2026 12:37:30 +0000 Subject: [PATCH 08/10] [AUTOMATED] Private Release 1.3.0-dev-4cc5c0fd --- flowvault/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 406de105..83f5cb62 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -12,7 +12,7 @@ skyflow-flowvault-java - 1.3.0-dev.74ba33fa + 1.3.0-dev.4cc5c0fd jar ${project.groupId}:${project.artifactId} Skyflow FlowVault SDK for the Java programming language From 1b7228dd2149c16f590140a48feddd05b0432b52 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Tue, 3 Nov 2026 15:16:57 +0530 Subject: [PATCH 09/10] SK-3175 update options according to sdks --- .../skyflow/detect/DeidentifyFileRequest.java | 3 +- .../java/com/skyflow/detect/EntityType.java | 2 +- .../com/skyflow/detect/RedactionLevel.java | 115 ------------------ .../com/skyflow/detect/RedactionRule.java | 26 ++++ .../com/skyflow/detect/RedactionRules.java | 36 ++++++ .../skyflow/detect/ReidentifyFileRequest.java | 18 +-- .../detect/ReidentifyStringRequest.java | 12 +- .../detect/internal/DetectRequestMapper.java | 25 +--- .../skyflow/detect/TestRedactionLevel.java | 89 ++++++++++++++ .../internal/DetectRequestMapperTests.java | 8 +- .../internal/DetectValidationsTests.java | 14 +-- .../internal/ReidentifyFileMapperTests.java | 8 +- .../ReidentifyFileValidationsTests.java | 20 +-- .../controller/BaseDetectControllerTests.java | 4 +- docs/api_reference.md | 16 +-- flowvault/README.md | 2 +- .../com/skyflow/detect/RedactionLevel.java | 96 +++++++++++++++ .../skyflow/detect/RedactionLevelTests.java | 27 ++++ skyvault/README.md | 2 +- .../com/skyflow/detect/RedactionLevel.java | 99 +++++++++++++++ .../skyflow/detect/RedactionLevelTests.java | 28 +++++ .../controller/DetectControllerTests.java | 13 +- 22 files changed, 469 insertions(+), 194 deletions(-) delete mode 100644 common/src/main/java/com/skyflow/detect/RedactionLevel.java create mode 100644 common/src/main/java/com/skyflow/detect/RedactionRule.java create mode 100644 common/src/main/java/com/skyflow/detect/RedactionRules.java create mode 100644 common/src/test/java/com/skyflow/detect/TestRedactionLevel.java create mode 100644 flowvault/src/main/java/com/skyflow/detect/RedactionLevel.java create mode 100644 flowvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java create mode 100644 skyvault/src/main/java/com/skyflow/detect/RedactionLevel.java create mode 100644 skyvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java diff --git a/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java b/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java index 94393e4a..914989dc 100644 --- a/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java +++ b/common/src/main/java/com/skyflow/detect/DeidentifyFileRequest.java @@ -46,7 +46,8 @@ public static DeidentifyFileRequestBuilder builder() { } /** - * @return How {@code value} supplies the file: this SDK's {@code DeidentifySourceType}. Required with {@code value}. + * @return How {@code value} supplies the file: this SDK's {@code DeidentifySourceType} (skyvault: BASE64, SKYFLOW_ID, + * PRESIGNED_URL; flowvault: BASE64, PRESIGNED_URL). Required with {@code value}. */ public DeidentifyFileSource getDataSource() { return dataSource; diff --git a/common/src/main/java/com/skyflow/detect/EntityType.java b/common/src/main/java/com/skyflow/detect/EntityType.java index 99cbbd8a..82cae959 100644 --- a/common/src/main/java/com/skyflow/detect/EntityType.java +++ b/common/src/main/java/com/skyflow/detect/EntityType.java @@ -1,7 +1,7 @@ package com.skyflow.detect; /** - * Entity types Skyflow Detect can identify. Also used to target entities in {@link RedactionLevel}. + * Entity types Skyflow Detect can identify. Also used to target entities in {@code RedactionLevel}. */ public enum EntityType { NONE, diff --git a/common/src/main/java/com/skyflow/detect/RedactionLevel.java b/common/src/main/java/com/skyflow/detect/RedactionLevel.java deleted file mode 100644 index b10d1806..00000000 --- a/common/src/main/java/com/skyflow/detect/RedactionLevel.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.skyflow.detect; - -import com.skyflow.enums.RedactionType; - -/** - * Controls how one group of tokens is rendered when re-identifying. Supply exactly one source (entityName or tokenGroupName) and exactly one replacement (redactionType or redactionPattern). - */ -public final class RedactionLevel { - private final EntityType entityName; - private final RedactionType redactionType; - private final String tokenGroupName; - private final String redactionPattern; - - private RedactionLevel(RedactionLevelBuilder builder) { - this.entityName = builder.entityName; - this.redactionType = builder.redactionType; - this.tokenGroupName = builder.tokenGroupName; - this.redactionPattern = builder.redactionPattern; - } - - /** - * @return a new builder - */ - public static RedactionLevelBuilder builder() { - return new RedactionLevelBuilder(); - } - - /** - * @return Entity to target. skyvault vaults. - */ - public EntityType getEntityName() { - return entityName; - } - - /** - * @return Replacement rendering. skyvault vaults. - */ - public RedactionType getRedactionType() { - return redactionType; - } - - /** - * @return Token group to target. flowvault vaults. - */ - public String getTokenGroupName() { - return tokenGroupName; - } - - /** - * @return Named redaction pattern to apply. flowvault vaults. - */ - public String getRedactionPattern() { - return redactionPattern; - } - - @Override - public String toString() { - return "RedactionLevel{" + - "entityName=" + entityName + - ", redactionType=" + redactionType + - ", tokenGroupName=" + tokenGroupName + - ", redactionPattern=" + redactionPattern + - '}'; - } - - public static final class RedactionLevelBuilder { - private EntityType entityName; - private RedactionType redactionType; - private String tokenGroupName; - private String redactionPattern; - - private RedactionLevelBuilder() { - } - - /** - * @param entityName Entity to target. skyvault vaults. - * @return this builder - */ - public RedactionLevelBuilder entityName(EntityType entityName) { - this.entityName = entityName; - return this; - } - - /** - * @param redactionType Replacement rendering. skyvault vaults. - * @return this builder - */ - public RedactionLevelBuilder redactionType(RedactionType redactionType) { - this.redactionType = redactionType; - return this; - } - - /** - * @param tokenGroupName Token group to target. flowvault vaults. - * @return this builder - */ - public RedactionLevelBuilder tokenGroupName(String tokenGroupName) { - this.tokenGroupName = tokenGroupName; - return this; - } - - /** - * @param redactionPattern Named redaction pattern to apply. flowvault vaults. - * @return this builder - */ - public RedactionLevelBuilder redactionPattern(String redactionPattern) { - this.redactionPattern = redactionPattern; - return this; - } - - public RedactionLevel build() { - return new RedactionLevel(this); - } - } -} diff --git a/common/src/main/java/com/skyflow/detect/RedactionRule.java b/common/src/main/java/com/skyflow/detect/RedactionRule.java new file mode 100644 index 00000000..19d20716 --- /dev/null +++ b/common/src/main/java/com/skyflow/detect/RedactionRule.java @@ -0,0 +1,26 @@ +package com.skyflow.detect; + +/** + * One re-identification rendering rule, the element of {@code redactionLevel} on {@code ReidentifyStringRequest} + * and {@code ReidentifyFileRequest}. Each SDK ships its own {@code com.skyflow.detect.RedactionLevel} with the + * pair of fields its vault type uses: skyvault names an {@code entityName} and a {@code redactionType}; flowvault + * names a {@code tokenGroupName} and a {@code redactionPattern}. Only those classes can extend this type. + */ +public abstract class RedactionRule { + + RedactionRule() { + // subclasses live in this package, one per SDK + } + + /** @return the wire {@code entityName}, or null when this SDK's rule does not carry one */ + abstract String apiEntityName(); + + /** @return the wire {@code redactionType}, or null when this SDK's rule does not carry one */ + abstract String apiRedactionType(); + + /** @return the wire {@code tokenGroupName}, or null when this SDK's rule does not carry one */ + abstract String apiTokenGroupName(); + + /** @return the wire {@code redactionPattern}, or null when this SDK's rule does not carry one */ + abstract String apiRedactionPattern(); +} diff --git a/common/src/main/java/com/skyflow/detect/RedactionRules.java b/common/src/main/java/com/skyflow/detect/RedactionRules.java new file mode 100644 index 00000000..9a9817d6 --- /dev/null +++ b/common/src/main/java/com/skyflow/detect/RedactionRules.java @@ -0,0 +1,36 @@ +package com.skyflow.detect; + +import com.skyflow.generated.common.rest.types.RedactionLevel; +import com.skyflow.generated.common.rest.types.RedactionLevelEntityName; +import com.skyflow.generated.common.rest.types.RedactionLevelRedactionType; + +/** + * Internal: turns an SDK {@link RedactionRule} into the API's {@code RedactionLevel}, which carries all four + * fields for every vault type. Not part of the public contract. + */ +public final class RedactionRules { + + private RedactionRules() { + } + + /** + * @param rule a rule built with this SDK's {@code RedactionLevel} + * @return the wire representation with only the fields the rule carries + */ + public static RedactionLevel toApi(RedactionRule rule) { + RedactionLevel.Builder builder = RedactionLevel.builder(); + if (rule.apiEntityName() != null) { + builder.entityName(RedactionLevelEntityName.valueOf(rule.apiEntityName())); + } + if (rule.apiRedactionType() != null) { + builder.redactionType(RedactionLevelRedactionType.valueOf(rule.apiRedactionType())); + } + if (rule.apiTokenGroupName() != null) { + builder.tokenGroupName(rule.apiTokenGroupName()); + } + if (rule.apiRedactionPattern() != null) { + builder.redactionPattern(rule.apiRedactionPattern()); + } + return builder.build(); + } +} diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java b/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java index ec83adba..82b1aff4 100644 --- a/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java +++ b/common/src/main/java/com/skyflow/detect/ReidentifyFileRequest.java @@ -11,7 +11,7 @@ public final class ReidentifyFileRequest { private final ReidentifyFileSource dataSource; private final String value; private final FileDataFormat dataFormat; - private final List redactionLevel; + private final List redactionLevel; private ReidentifyFileRequest(ReidentifyFileRequestBuilder builder) { this.dataSource = builder.dataSource; @@ -28,7 +28,8 @@ public static ReidentifyFileRequestBuilder builder() { } /** - * @return How {@code value} supplies the file. Required. + * @return How {@code value} supplies the file: this SDK's {@code ReidentifySourceType} (skyvault and flowvault: + * BASE64, PRESIGNED_URL; a skyflow id is not offered for re-identification). Required. */ public ReidentifyFileSource getDataSource() { return dataSource; @@ -50,9 +51,9 @@ public FileDataFormat getDataFormat() { } /** - * @return Optional per-group rendering rules. + * @return Optional per-group rendering rules. Built with this SDK's {@code RedactionLevel}. */ - public List getRedactionLevel() { + public List getRedactionLevel() { return redactionLevel; } @@ -70,13 +71,14 @@ public static final class ReidentifyFileRequestBuilder { private ReidentifyFileSource dataSource; private String value; private FileDataFormat dataFormat; - private List redactionLevel; + private List redactionLevel; private ReidentifyFileRequestBuilder() { } /** - * @param dataSource How {@code value} supplies the file. Required. + * @param dataSource How {@code value} supplies the file: this SDK's {@code ReidentifySourceType} (skyvault and + * flowvault: BASE64, PRESIGNED_URL; a skyflow id is not offered for re-identification). Required. * @return this builder */ public ReidentifyFileRequestBuilder dataSource(ReidentifyFileSource dataSource) { @@ -103,10 +105,10 @@ public ReidentifyFileRequestBuilder dataFormat(FileDataFormat dataFormat) { } /** - * @param redactionLevel Optional per-group rendering rules. + * @param redactionLevel Optional rendering rules, built with this SDK's {@code RedactionLevel}. * @return this builder */ - public ReidentifyFileRequestBuilder redactionLevel(List redactionLevel) { + public ReidentifyFileRequestBuilder redactionLevel(List redactionLevel) { this.redactionLevel = redactionLevel; return this; } diff --git a/common/src/main/java/com/skyflow/detect/ReidentifyStringRequest.java b/common/src/main/java/com/skyflow/detect/ReidentifyStringRequest.java index 23626297..acabf2bb 100644 --- a/common/src/main/java/com/skyflow/detect/ReidentifyStringRequest.java +++ b/common/src/main/java/com/skyflow/detect/ReidentifyStringRequest.java @@ -7,7 +7,7 @@ */ public final class ReidentifyStringRequest { private final String text; - private final List redactionLevel; + private final List redactionLevel; private ReidentifyStringRequest(ReidentifyStringRequestBuilder builder) { this.text = builder.text; @@ -29,9 +29,9 @@ public String getText() { } /** - * @return Optional per-group rendering rules. + * @return Optional per-group rendering rules. Built with this SDK's {@code RedactionLevel}. */ - public List getRedactionLevel() { + public List getRedactionLevel() { return redactionLevel; } @@ -45,7 +45,7 @@ public String toString() { public static final class ReidentifyStringRequestBuilder { private String text; - private List redactionLevel; + private List redactionLevel; private ReidentifyStringRequestBuilder() { } @@ -60,10 +60,10 @@ public ReidentifyStringRequestBuilder text(String text) { } /** - * @param redactionLevel Optional per-group rendering rules. + * @param redactionLevel Optional rendering rules, built with this SDK's {@code RedactionLevel}. * @return this builder */ - public ReidentifyStringRequestBuilder redactionLevel(List redactionLevel) { + public ReidentifyStringRequestBuilder redactionLevel(List redactionLevel) { this.redactionLevel = redactionLevel; return this; } diff --git a/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java b/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java index 1039c791..9e2b42cf 100644 --- a/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java +++ b/common/src/main/java/com/skyflow/detect/internal/DetectRequestMapper.java @@ -23,7 +23,8 @@ import com.skyflow.detect.Media; import com.skyflow.detect.ObjectEntity; import com.skyflow.detect.Pdf; -import com.skyflow.detect.RedactionLevel; +import com.skyflow.detect.RedactionRule; +import com.skyflow.detect.RedactionRules; import com.skyflow.detect.ReidentifyStringRequest; import com.skyflow.detect.ShiftDates; import com.skyflow.detect.Transformation; @@ -57,8 +58,6 @@ import com.skyflow.generated.common.rest.types.EntityTransformation; import com.skyflow.generated.common.rest.types.ImageV2; import com.skyflow.generated.common.rest.types.ImageV2MaskingMethod; -import com.skyflow.generated.common.rest.types.RedactionLevelEntityName; -import com.skyflow.generated.common.rest.types.RedactionLevelRedactionType; import com.skyflow.generated.common.rest.types.TransformationShiftDates; /** @@ -410,27 +409,13 @@ static ImageV2 toImage(Image image) { return builder.build(); } - public static List toRedactionLevels(List levels) { + public static List toRedactionLevels(List levels) { List result = new ArrayList<>(); - for (RedactionLevel level : levels) { + for (RedactionRule level : levels) { if (level == null) { continue; } - com.skyflow.generated.common.rest.types.RedactionLevel.Builder builder = - com.skyflow.generated.common.rest.types.RedactionLevel.builder(); - if (level.getEntityName() != null) { - builder.entityName(RedactionLevelEntityName.valueOf(level.getEntityName().name())); - } - if (level.getRedactionType() != null) { - builder.redactionType(RedactionLevelRedactionType.valueOf(level.getRedactionType().name())); - } - if (level.getTokenGroupName() != null) { - builder.tokenGroupName(level.getTokenGroupName()); - } - if (level.getRedactionPattern() != null) { - builder.redactionPattern(level.getRedactionPattern()); - } - result.add(builder.build()); + result.add(RedactionRules.toApi(level)); } return result; } diff --git a/common/src/test/java/com/skyflow/detect/TestRedactionLevel.java b/common/src/test/java/com/skyflow/detect/TestRedactionLevel.java new file mode 100644 index 00000000..5a2cece9 --- /dev/null +++ b/common/src/test/java/com/skyflow/detect/TestRedactionLevel.java @@ -0,0 +1,89 @@ +package com.skyflow.detect; + +import com.skyflow.enums.RedactionType; + +/** Test stand-in for the per-SDK {@code RedactionLevel} classes, which common cannot see. Carries all four API fields. */ +public final class TestRedactionLevel extends RedactionRule { + private final EntityType entityName; + private final RedactionType redactionType; + private final String tokenGroupName; + private final String redactionPattern; + + private TestRedactionLevel(Builder b) { + this.entityName = b.entityName; + this.redactionType = b.redactionType; + this.tokenGroupName = b.tokenGroupName; + this.redactionPattern = b.redactionPattern; + } + + public static Builder builder() { + return new Builder(); + } + + public EntityType getEntityName() { + return entityName; + } + + public RedactionType getRedactionType() { + return redactionType; + } + + public String getTokenGroupName() { + return tokenGroupName; + } + + public String getRedactionPattern() { + return redactionPattern; + } + + @Override + String apiEntityName() { + return entityName == null ? null : entityName.name(); + } + + @Override + String apiRedactionType() { + return redactionType == null ? null : redactionType.name(); + } + + @Override + String apiTokenGroupName() { + return tokenGroupName; + } + + @Override + String apiRedactionPattern() { + return redactionPattern; + } + + public static final class Builder { + private EntityType entityName; + private RedactionType redactionType; + private String tokenGroupName; + private String redactionPattern; + + public Builder entityName(EntityType entityName) { + this.entityName = entityName; + return this; + } + + public Builder redactionType(RedactionType redactionType) { + this.redactionType = redactionType; + return this; + } + + public Builder tokenGroupName(String tokenGroupName) { + this.tokenGroupName = tokenGroupName; + return this; + } + + public Builder redactionPattern(String redactionPattern) { + this.redactionPattern = redactionPattern; + return this; + } + + public TestRedactionLevel build() { + return new TestRedactionLevel(this); + } + } +} diff --git a/common/src/test/java/com/skyflow/detect/internal/DetectRequestMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/DetectRequestMapperTests.java index 8786e0d5..f7c5db54 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DetectRequestMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DetectRequestMapperTests.java @@ -11,7 +11,7 @@ import com.skyflow.detect.Image; import com.skyflow.detect.MaskingMethod; import com.skyflow.detect.Media; -import com.skyflow.detect.RedactionLevel; +import com.skyflow.detect.TestRedactionLevel; import com.skyflow.enums.RedactionType; import com.skyflow.detect.ReidentifyStringRequest; import com.skyflow.detect.ReturnEntitiesType; @@ -117,8 +117,8 @@ public void reidentifyStringCarriesVaultIdAndRedactionLevels() throws Exception ReidentifyStringRequest.builder() .text("[NAME_1]") .redactionLevel(Arrays.asList( - RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build(), - RedactionLevel.builder().tokenGroupName("group").redactionPattern("pattern").build())) + TestRedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build(), + TestRedactionLevel.builder().tokenGroupName("group").redactionPattern("pattern").build())) .build(), "vault-1"); Assert.assertEquals("vault-1", mapped.getVaultId()); Assert.assertEquals("[NAME_1]", mapped.getText()); @@ -143,7 +143,7 @@ public void everyPublicEntityTypeMapsToAGeneratedValue() { for (EntityType type : EntityType.values()) { Entity entity = Entity.builder().entityType(type).build(); Assert.assertEquals(type.name(), DetectRequestMapper.toEntity(entity).getEntityType().get().toString()); - RedactionLevel level = RedactionLevel.builder().entityName(type).redactionType(RedactionType.DEFAULT).build(); + TestRedactionLevel level = TestRedactionLevel.builder().entityName(type).redactionType(RedactionType.DEFAULT).build(); Assert.assertEquals(type.name(), DetectRequestMapper.toRedactionLevels(Collections.singletonList(level)).get(0).getEntityName().get().toString()); } diff --git a/common/src/test/java/com/skyflow/detect/internal/DetectValidationsTests.java b/common/src/test/java/com/skyflow/detect/internal/DetectValidationsTests.java index b663f805..09fab254 100644 --- a/common/src/test/java/com/skyflow/detect/internal/DetectValidationsTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/DetectValidationsTests.java @@ -5,7 +5,7 @@ import com.skyflow.detect.DetectConfiguration; import com.skyflow.detect.EntityType; import com.skyflow.detect.GetRunRequest; -import com.skyflow.detect.RedactionLevel; +import com.skyflow.detect.TestRedactionLevel; import com.skyflow.enums.RedactionType; import com.skyflow.detect.ReidentifyStringRequest; import com.skyflow.errors.BaseErrorMessage; @@ -79,20 +79,20 @@ public void reidentifyStringAcceptsValidRedactionLevels() throws SkyflowExceptio DetectValidations.validateReidentifyStringRequest(ReidentifyStringRequest.builder() .text("[NAME_1]") .redactionLevel(Arrays.asList( - RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build(), - RedactionLevel.builder().tokenGroupName("group").redactionPattern("pattern").build())) + TestRedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build(), + TestRedactionLevel.builder().tokenGroupName("group").redactionPattern("pattern").build())) .build()); DetectValidations.validateReidentifyStringRequest(ReidentifyStringRequest.builder().text("[NAME_1]").build()); } @Test public void reidentifyStringPassesAnyRedactionLevelShapeThrough() throws SkyflowException { - // The API marks every RedactionLevel field optional; the server applies its own rules. + // The API marks every TestRedactionLevel field optional; the server applies its own rules. DetectValidations.validateReidentifyStringRequest(ReidentifyStringRequest.builder().text("[NAME_1]") .redactionLevel(Arrays.asList( - RedactionLevel.builder().build(), - RedactionLevel.builder().tokenGroupName("g").build(), - RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).redactionPattern("p").build(), + TestRedactionLevel.builder().build(), + TestRedactionLevel.builder().tokenGroupName("g").build(), + TestRedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).redactionPattern("p").build(), null)) .build()); } diff --git a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java index df55cd8b..5d34c119 100644 --- a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileMapperTests.java @@ -5,7 +5,7 @@ import com.skyflow.detect.EntityType; import com.skyflow.detect.FileDataFormat; import com.skyflow.detect.FileOutput; -import com.skyflow.detect.RedactionLevel; +import com.skyflow.detect.TestRedactionLevel; import com.skyflow.enums.RedactionType; import com.skyflow.detect.ReidentifyFileRequest; import com.skyflow.detect.ReidentifyFileResponse; @@ -82,8 +82,8 @@ public void mapsFlowvaultAndSkyvaultStyleRedactionLevels() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() .dataSource(TestReidentifySource.PRESIGNED_URL).value("https://s3/presigned") .redactionLevel(Arrays.asList( - RedactionLevel.builder().tokenGroupName("names").redactionPattern("mask-middle").build(), - RedactionLevel.builder().entityName(EntityType.EMAIL_ADDRESS).redactionType(RedactionType.MASKED).build())) + TestRedactionLevel.builder().tokenGroupName("names").redactionPattern("mask-middle").build(), + TestRedactionLevel.builder().entityName(EntityType.EMAIL_ADDRESS).redactionType(RedactionType.MASKED).build())) .build(), "v"); Assert.assertEquals(2, api.getRedactionLevel().get().size()); @@ -99,7 +99,7 @@ public void mapsFlowvaultAndSkyvaultStyleRedactionLevels() throws Exception { @Test public void emptyRedactionLevelListIsSentAsEmptyArray() throws Exception { ReidentifyFileRequestV2 api = ReidentifyFileMapper.toApiRequest(ReidentifyFileRequest.builder() - .dataSource(TestReidentifySource.BASE64).value("x").redactionLevel(Collections.emptyList()).build(), "v"); + .dataSource(TestReidentifySource.BASE64).value("x").redactionLevel(Collections.emptyList()).build(), "v"); Assert.assertTrue(api.getRedactionLevel().get().isEmpty()); Assert.assertTrue(wire(api).contains("\"redactionLevel\":[]")); } diff --git a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java index b5010e35..bcd06dd8 100644 --- a/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java +++ b/common/src/test/java/com/skyflow/detect/internal/ReidentifyFileValidationsTests.java @@ -3,7 +3,7 @@ import com.skyflow.detect.TestReidentifySource; import com.skyflow.detect.EntityType; -import com.skyflow.detect.RedactionLevel; +import com.skyflow.detect.TestRedactionLevel; import com.skyflow.enums.RedactionType; import com.skyflow.detect.ReidentifyFileRequest; import com.skyflow.errors.ErrorCode; @@ -60,27 +60,27 @@ public void acceptsMinimalAndFullValidRequests() throws SkyflowException { ReidentifyFileValidations.validateReidentifyFileRequest(valid() .dataSource(TestReidentifySource.PRESIGNED_URL).value("https://example.com/f") .redactionLevel(Arrays.asList( - RedactionLevel.builder().tokenGroupName("g").redactionPattern("p").build(), - RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.REDACTED).build(), - RedactionLevel.builder().tokenGroupName("g2").redactionType(RedactionType.PLAIN_TEXT).build(), - RedactionLevel.builder().entityName(EntityType.SSN).redactionPattern("p2").build())) + TestRedactionLevel.builder().tokenGroupName("g").redactionPattern("p").build(), + TestRedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.REDACTED).build(), + TestRedactionLevel.builder().tokenGroupName("g2").redactionType(RedactionType.PLAIN_TEXT).build(), + TestRedactionLevel.builder().entityName(EntityType.SSN).redactionPattern("p2").build())) .build()); } @Test public void nullOrEmptyRedactionLevelListIsAllowed() throws SkyflowException { ReidentifyFileValidations.validateReidentifyFileRequest(valid().redactionLevel(null).build()); - ReidentifyFileValidations.validateReidentifyFileRequest(valid().redactionLevel(Collections.emptyList()).build()); + ReidentifyFileValidations.validateReidentifyFileRequest(valid().redactionLevel(Collections.emptyList()).build()); } @Test public void anyRedactionLevelShapePassesThrough() throws SkyflowException { - // Every RedactionLevel field is optional on the API; the server applies its own rules. + // Every TestRedactionLevel field is optional on the API; the server applies its own rules. ReidentifyFileValidations.validateReidentifyFileRequest(valid().redactionLevel(Arrays.asList( null, - RedactionLevel.builder().build(), - RedactionLevel.builder().tokenGroupName("g").build(), - RedactionLevel.builder().tokenGroupName("g").entityName(EntityType.NAME) + TestRedactionLevel.builder().build(), + TestRedactionLevel.builder().tokenGroupName("g").build(), + TestRedactionLevel.builder().tokenGroupName("g").entityName(EntityType.NAME) .redactionPattern("p").redactionType(RedactionType.MASKED).build())).build()); } } diff --git a/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java b/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java index bdec1757..ef4038ed 100644 --- a/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java +++ b/common/src/test/java/com/skyflow/vault/controller/BaseDetectControllerTests.java @@ -18,7 +18,7 @@ import com.skyflow.detect.GetRunRequest; import com.skyflow.detect.GetRunResponse; import com.skyflow.detect.GuardrailsValidation; -import com.skyflow.detect.RedactionLevel; +import com.skyflow.detect.TestRedactionLevel; import com.skyflow.detect.ReidentifyStringRequest; import com.skyflow.detect.ReidentifyStringResponse; import com.skyflow.enums.Env; @@ -143,7 +143,7 @@ public void reidentifyStringSendsVaultIdInBodyAndRefreshesTokenPerCall() throws ReidentifyStringResponse second = controller.reidentifyString(ReidentifyStringRequest.builder() .text("My name is [NAME_1].") .redactionLevel(Collections.singletonList( - RedactionLevel.builder().tokenGroupName("group").redactionPattern("mask").build())) + TestRedactionLevel.builder().tokenGroupName("group").redactionPattern("mask").build())) .build()); Assert.assertEquals("My name is John Doe.", first.getProcessedText()); diff --git a/docs/api_reference.md b/docs/api_reference.md index 83c35f0b..10d9ea49 100644 --- a/docs/api_reference.md +++ b/docs/api_reference.md @@ -577,14 +577,14 @@ Each element returned by `getDetokenizedFields()` and `getErrors()`. ### `RedactionLevel` -`com.skyflow.detect` — element of `redactionLevel()` on `ReidentifyStringRequest` and `ReidentifyFileRequest`. Each rule names one source and one replacement: `entityName` plus `redactionType` on skyvault vaults, `tokenGroupName` plus `redactionPattern` on flowvault vaults. Every field is optional on the API; the server rejects invalid combinations. - -| Builder method | Description | -|----------------|-------------| -| `entityName(EntityType)` | Skyvault vaults: entity type the rule applies to. | -| `redactionType(RedactionType)` | Skyvault vaults: `PLAIN_TEXT`, `MASKED`, `REDACTED` or `DEFAULT`, the same `com.skyflow.enums.RedactionType` used by `get` and `detokenize`. See [`RedactionType`](#redactiontype). | -| `tokenGroupName(String)` | Flowvault vaults: token group the rule applies to. | -| `redactionPattern(String)` | Flowvault vaults: name of a redaction pattern configured in the vault. | +`com.skyflow.detect` — element of `redactionLevel()` on `ReidentifyStringRequest` and `ReidentifyFileRequest`. The class is defined per SDK and carries only the pair of fields its vault type uses, so the other vault's fields cannot be set. Both fields are optional on the API and are sent as given. + +| SDK | Builder method | Description | +|-----|----------------|-------------| +| skyvault | `entityName(EntityType)` | Entity type the rule applies to. | +| skyvault | `redactionType(RedactionType)` | `PLAIN_TEXT`, `MASKED`, `REDACTED` or `DEFAULT`, the same `com.skyflow.enums.RedactionType` used by `get` and `detokenize`. See [`RedactionType`](#redactiontype). | +| flowvault | `tokenGroupName(String)` | Token group the rule applies to. | +| flowvault | `redactionPattern(String)` | Name of a redaction pattern configured in the vault. | ### `DetectedEntity` diff --git a/flowvault/README.md b/flowvault/README.md index 532f2f79..d1727eb3 100644 --- a/flowvault/README.md +++ b/flowvault/README.md @@ -1887,7 +1887,7 @@ System.out.println(response.getProcessedText()); // My name is J**n D*e. ``` -A `RedactionLevel` names one source and one replacement. On flowvault vaults the source is a `tokenGroupName` and the replacement a `redactionPattern` configured in the vault. The `entityName` and `redactionType` fields are the skyvault equivalents and do not apply to flowvault vaults. Every field is optional on the API, so the SDK passes the list through as given and the server rejects invalid combinations. +A `RedactionLevel` names one source and one replacement. On flowvault vaults the source is a `tokenGroupName` and the replacement a `redactionPattern` configured in the vault. The flowvault SDK's `RedactionLevel` has only these two fields; the skyvault SDK's has `entityName` and `redactionType` instead. Both are optional on the API and are sent as given. ## Reidentify file diff --git a/flowvault/src/main/java/com/skyflow/detect/RedactionLevel.java b/flowvault/src/main/java/com/skyflow/detect/RedactionLevel.java new file mode 100644 index 00000000..031859dc --- /dev/null +++ b/flowvault/src/main/java/com/skyflow/detect/RedactionLevel.java @@ -0,0 +1,96 @@ +package com.skyflow.detect; + +/** + * Controls how one group of tokens is rendered when re-identifying on a flowvault vault: the {@code tokenGroupName} + * the rule applies to and the named {@code redactionPattern}, configured in the vault, to render its values with. + * Element of {@code redactionLevel} on {@code ReidentifyStringRequest} and {@code ReidentifyFileRequest}. Both + * fields are optional on the API and are sent as given. + */ +public final class RedactionLevel extends RedactionRule { + private final String tokenGroupName; + private final String redactionPattern; + + private RedactionLevel(RedactionLevelBuilder builder) { + this.tokenGroupName = builder.tokenGroupName; + this.redactionPattern = builder.redactionPattern; + } + + /** + * @return a new builder + */ + public static RedactionLevelBuilder builder() { + return new RedactionLevelBuilder(); + } + + /** + * @return Token group the rule applies to. + */ + public String getTokenGroupName() { + return tokenGroupName; + } + + /** + * @return Name of the redaction pattern, configured in the vault, applied to that group's values. + */ + public String getRedactionPattern() { + return redactionPattern; + } + + @Override + String apiEntityName() { + return null; + } + + @Override + String apiRedactionType() { + return null; + } + + @Override + String apiTokenGroupName() { + return tokenGroupName; + } + + @Override + String apiRedactionPattern() { + return redactionPattern; + } + + @Override + public String toString() { + return "RedactionLevel{" + + "tokenGroupName=" + tokenGroupName + + ", redactionPattern=" + redactionPattern + + '}'; + } + + public static final class RedactionLevelBuilder { + private String tokenGroupName; + private String redactionPattern; + + private RedactionLevelBuilder() { + } + + /** + * @param tokenGroupName Token group the rule applies to. + * @return this builder + */ + public RedactionLevelBuilder tokenGroupName(String tokenGroupName) { + this.tokenGroupName = tokenGroupName; + return this; + } + + /** + * @param redactionPattern Name of a redaction pattern configured in the vault. + * @return this builder + */ + public RedactionLevelBuilder redactionPattern(String redactionPattern) { + this.redactionPattern = redactionPattern; + return this; + } + + public RedactionLevel build() { + return new RedactionLevel(this); + } + } +} diff --git a/flowvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java b/flowvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java new file mode 100644 index 00000000..68c1026f --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java @@ -0,0 +1,27 @@ +package com.skyflow.detect; + +import org.junit.Assert; +import org.junit.Test; + +public class RedactionLevelTests { + + @Test + public void flowvaultRuleCarriesTokenGroupAndPatternOnly() { + RedactionLevel rule = RedactionLevel.builder().tokenGroupName("names").redactionPattern("mask").build(); + Assert.assertEquals("names", rule.getTokenGroupName()); + Assert.assertEquals("mask", rule.getRedactionPattern()); + + com.skyflow.generated.common.rest.types.RedactionLevel api = RedactionRules.toApi(rule); + Assert.assertEquals("names", api.getTokenGroupName().get()); + Assert.assertEquals("mask", api.getRedactionPattern().get()); + Assert.assertFalse(api.getEntityName().isPresent()); + Assert.assertFalse(api.getRedactionType().isPresent()); + } + + @Test + public void unsetFieldsAreNotSent() { + com.skyflow.generated.common.rest.types.RedactionLevel api = RedactionRules.toApi(RedactionLevel.builder().build()); + Assert.assertFalse(api.getTokenGroupName().isPresent()); + Assert.assertFalse(api.getRedactionPattern().isPresent()); + } +} diff --git a/skyvault/README.md b/skyvault/README.md index 513e29cc..8ed1a551 100644 --- a/skyvault/README.md +++ b/skyvault/README.md @@ -1924,7 +1924,7 @@ System.out.println(response.getProcessedText()); // My name is John Doe and my email is j*******@acme.com. ``` -A `RedactionLevel` names one source and one replacement. On skyvault vaults the source is an `entityName` and the replacement a `redactionType`, the same `com.skyflow.enums.RedactionType` that `get` and `detokenize` use. The `tokenGroupName` and `redactionPattern` fields are the flowvault equivalents and do not apply to skyvault vaults. Every field is optional on the API, so the SDK passes the list through as given and the server rejects invalid combinations. +A `RedactionLevel` names one source and one replacement. On skyvault vaults the source is an `entityName` and the replacement a `redactionType`, the same `com.skyflow.enums.RedactionType` that `get` and `detokenize` use. The skyvault SDK's `RedactionLevel` has only these two fields; the flowvault SDK's has `tokenGroupName` and `redactionPattern` instead. Both are optional on the API and are sent as given. ## Reidentify file diff --git a/skyvault/src/main/java/com/skyflow/detect/RedactionLevel.java b/skyvault/src/main/java/com/skyflow/detect/RedactionLevel.java new file mode 100644 index 00000000..184a2945 --- /dev/null +++ b/skyvault/src/main/java/com/skyflow/detect/RedactionLevel.java @@ -0,0 +1,99 @@ +package com.skyflow.detect; + +import com.skyflow.enums.RedactionType; + +/** + * Controls how one group of tokens is rendered when re-identifying on a skyvault vault: the {@code entityName} + * the rule applies to and the {@code redactionType} to render it with ({@code PLAIN_TEXT}, {@code MASKED}, + * {@code REDACTED} or {@code DEFAULT}). Element of {@code redactionLevel} on {@code ReidentifyStringRequest} and + * {@code ReidentifyFileRequest}. Both fields are optional on the API and are sent as given. + */ +public final class RedactionLevel extends RedactionRule { + private final EntityType entityName; + private final RedactionType redactionType; + + private RedactionLevel(RedactionLevelBuilder builder) { + this.entityName = builder.entityName; + this.redactionType = builder.redactionType; + } + + /** + * @return a new builder + */ + public static RedactionLevelBuilder builder() { + return new RedactionLevelBuilder(); + } + + /** + * @return Entity type the rule applies to. + */ + public EntityType getEntityName() { + return entityName; + } + + /** + * @return Rendering applied to that entity's values. + */ + public RedactionType getRedactionType() { + return redactionType; + } + + @Override + String apiEntityName() { + return entityName == null ? null : entityName.name(); + } + + @Override + String apiRedactionType() { + return redactionType == null ? null : redactionType.name(); + } + + @Override + String apiTokenGroupName() { + return null; + } + + @Override + String apiRedactionPattern() { + return null; + } + + @Override + public String toString() { + return "RedactionLevel{" + + "entityName=" + entityName + + ", redactionType=" + redactionType + + '}'; + } + + public static final class RedactionLevelBuilder { + private EntityType entityName; + private RedactionType redactionType; + + private RedactionLevelBuilder() { + } + + /** + * @param entityName Entity type the rule applies to. + * @return this builder + */ + public RedactionLevelBuilder entityName(EntityType entityName) { + this.entityName = entityName; + return this; + } + + /** + * @param redactionType Rendering applied to that entity's values, the same {@code com.skyflow.enums.RedactionType} + * used by {@code get} and {@code detokenize}. + * @return this builder + */ + public RedactionLevelBuilder redactionType(RedactionType redactionType) { + this.redactionType = redactionType; + return this; + } + + public RedactionLevel build() { + return new RedactionLevel(this); + } + } +} diff --git a/skyvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java b/skyvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java new file mode 100644 index 00000000..b32f58d5 --- /dev/null +++ b/skyvault/src/test/java/com/skyflow/detect/RedactionLevelTests.java @@ -0,0 +1,28 @@ +package com.skyflow.detect; + +import com.skyflow.enums.RedactionType; +import org.junit.Assert; +import org.junit.Test; + +public class RedactionLevelTests { + + @Test + public void skyvaultRuleCarriesEntityNameAndRedactionTypeOnly() { + RedactionLevel rule = RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build(); + Assert.assertEquals(EntityType.NAME, rule.getEntityName()); + Assert.assertEquals(RedactionType.MASKED, rule.getRedactionType()); + + com.skyflow.generated.common.rest.types.RedactionLevel api = RedactionRules.toApi(rule); + Assert.assertEquals("NAME", api.getEntityName().get().toString()); + Assert.assertEquals("MASKED", api.getRedactionType().get().toString()); + Assert.assertFalse(api.getTokenGroupName().isPresent()); + Assert.assertFalse(api.getRedactionPattern().isPresent()); + } + + @Test + public void unsetFieldsAreNotSent() { + com.skyflow.generated.common.rest.types.RedactionLevel api = RedactionRules.toApi(RedactionLevel.builder().build()); + Assert.assertFalse(api.getEntityName().isPresent()); + Assert.assertFalse(api.getRedactionType().isPresent()); + } +} diff --git a/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java index ce2df513..ddc5e7cc 100644 --- a/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java +++ b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java @@ -23,6 +23,7 @@ import com.skyflow.detect.GuardrailsValidation; import com.skyflow.detect.PollOptions; import com.skyflow.detect.RedactionLevel; +import com.skyflow.enums.RedactionType; import com.skyflow.detect.ReidentifyFileRequest; import com.skyflow.detect.ReidentifyFileResponse; import com.skyflow.detect.ReidentifyStringRequest; @@ -243,7 +244,7 @@ public void reidentifyStringRoundTrip() throws Exception { ReidentifyStringResponse response = controllerFor(server).reidentifyString(ReidentifyStringRequest.builder() .text("My name is [NAME_1].") .redactionLevel(Collections.singletonList( - RedactionLevel.builder().tokenGroupName("names").redactionPattern("mask").build())) + RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build())) .build()); Assert.assertEquals("My name is J**n D*e.", response.getProcessedText()); @@ -254,8 +255,8 @@ public void reidentifyStringRoundTrip() throws Exception { String body = recorded.getBody().readUtf8(); Assert.assertTrue(body, body.contains("\"text\":\"My name is [NAME_1].\"")); Assert.assertTrue(body, body.contains("\"vaultId\":\"vault-1\"")); - Assert.assertTrue(body, body.contains("\"tokenGroupName\":\"names\"")); - Assert.assertTrue(body, body.contains("\"redactionPattern\":\"mask\"")); + Assert.assertTrue(body, body.contains("\"entityName\":\"NAME\"")); + Assert.assertTrue(body, body.contains("\"redactionType\":\"MASKED\"")); } finally { server.shutdown(); } @@ -413,7 +414,7 @@ public void reidentifyFileSendsScopedRequestAndMapsResponse() throws Exception { .value("W05BTUVfMV0=") .dataFormat(FileDataFormat.TXT) .redactionLevel(Arrays.asList( - RedactionLevel.builder().tokenGroupName("names").redactionPattern("mask").build())) + RedactionLevel.builder().entityName(EntityType.NAME).redactionType(RedactionType.MASKED).build())) .build()); Assert.assertEquals(DetectRunStatus.SUCCESS, response.getStatus()); @@ -434,8 +435,8 @@ public void reidentifyFileSendsScopedRequestAndMapsResponse() throws Exception { Assert.assertTrue(body, body.contains("\"value\":\"W05BTUVfMV0=\"")); Assert.assertTrue(body, body.contains("\"vaultId\":\"vault-1\"")); Assert.assertTrue(body, body.contains("\"dataFormat\":\"txt\"")); - Assert.assertTrue(body, body.contains("\"tokenGroupName\":\"names\"")); - Assert.assertTrue(body, body.contains("\"redactionPattern\":\"mask\"")); + Assert.assertTrue(body, body.contains("\"entityName\":\"NAME\"")); + Assert.assertTrue(body, body.contains("\"redactionType\":\"MASKED\"")); } finally { server.shutdown(); } From 92a87cddb260dcfe44cf9c1282f13f681ab47508 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Tue, 3 Nov 2026 09:47:29 +0000 Subject: [PATCH 10/10] [AUTOMATED] Private Release 1.3.0-dev-1b7228dd --- flowvault/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 83f5cb62..a110822a 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -12,7 +12,7 @@ skyflow-flowvault-java - 1.3.0-dev.4cc5c0fd + 1.3.0-dev.1b7228dd jar ${project.groupId}:${project.artifactId} Skyflow FlowVault SDK for the Java programming language

    NvBonV-C04c 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 delta 458356 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