From 749118fcb5962241f378b2458f7848516a9202c3 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 16:17:57 +0100 Subject: [PATCH 01/24] Refactor migration guide and plugin configuration for StringCare: update migration instructions for version 5.x, including changes to plugin coordinates and Gradle DSL usage. Enhance build scripts with new plugin management and dependency configurations, including detekt and ktlint integration. Improve native library handling and update internal task management for better performance and clarity. --- .github/workflows/ci.yml | 27 ++ CHANGELOG.md | 19 + MIGRATION.md | 76 +--- SECURITY.md | 13 + plugin/build.gradle.kts | 43 +- plugin/config/detekt/baseline.xml | 10 + plugin/config/detekt/detekt.yml | 59 +++ .../vyp/stringcare/plugin/StringCarePlugin.kt | 58 +-- .../vyp/stringcare/plugin/internal/AParser.kt | 93 +++-- .../stringcare/plugin/internal/Execution.kt | 93 +++-- .../stringcare/plugin/internal/Extensions.kt | 372 ++++++++++-------- .../stringcare/plugin/internal/Fingerprint.kt | 136 ++++--- .../stringcare/plugin/internal/JsonLists.kt | 30 ++ .../stringcare/plugin/internal/PrintUtils.kt | 21 +- .../vyp/stringcare/plugin/internal/Stark.kt | 265 ++++++++----- .../plugin/internal/StringCareSession.kt | 22 ++ .../vyp/stringcare/plugin/internal/Tasks.kt | 118 +++--- .../stringcare/plugin/internal/VariantApi.kt | 103 ++--- .../vyp/stringcare/plugin/internal/XParser.kt | 160 +++++--- .../stringcare/plugin/models/AssetsFile.kt | 6 +- .../plugin/models/ExecutionResult.kt | 16 +- .../stringcare/plugin/models/ResourceFile.kt | 6 +- .../stringcare/plugin/models/StringEntity.kt | 7 +- .../plugin/services/StringCareBuildService.kt | 59 +++ .../plugin/tasks/ObfuscateAssetsTask.kt | 30 +- .../plugin/tasks/ObfuscateStringsTask.kt | 30 +- .../plugin/tasks/RestoreAssetsTask.kt | 12 +- .../plugin/tasks/RestoreStringsTask.kt | 12 +- .../vyp/stringcare/plugin/tasks/SCPreview.kt | 49 +-- .../plugin/tasks/SCTestObfuscation.kt | 56 ++- .../dev/vyp/stringcare/plugin/AssetsTest.kt | 82 ++-- .../vyp/stringcare/plugin/JsonListsTest.kt | 20 + .../plugin/PluginApplicationTest.kt | 1 - .../dev/vyp/stringcare/plugin/SCTest.kt | 88 +++-- .../plugin/StringCareBaselineBehaviorTest.kt | 35 ++ .../vyp/stringcare/plugin/XmlProcessorTest.kt | 12 +- .../dev/vyp/stringcare/plugin/utils/Helper.kt | 26 +- settings.gradle.kts | 12 + 38 files changed, 1446 insertions(+), 831 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 CHANGELOG.md create mode 100644 SECURITY.md create mode 100644 plugin/config/detekt/baseline.xml create mode 100644 plugin/config/detekt/detekt.yml create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/JsonLists.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/StringCareSession.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/StringCareBaselineBehaviorTest.kt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c28f8ea --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: CI + +on: + push: + branches: [master, main] + pull_request: + branches: [master, main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Plugin unit tests + run: ./gradlew :plugin:test :plugin:detekt --no-daemon + + - name: Sample app assembleDebug + run: ./gradlew :app:assembleDebug --no-daemon diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..4010f0e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +## [Unreleased] — refactor / 6.x groundwork + +### Changed + +- **Gradle**: `StringCareBuildService` (shared build service) replaces mutable static state on `StringCarePlugin` for paths, temp dir, and variant applicationIds. +- **Dependencies**: Removed Guava and Gson; added `kotlinx-serialization-json` for task JSON list inputs. +- **Execution**: Shell commands use `ProcessBuilder` with a 60s timeout and structured `ExecutionResult` (`Success` / `Failure`). +- **Native host libs**: SHA-256 verification before `System.load`, retries, optional verbose logging tied to `debug` in tasks. +- **XML / scan**: Faster attribute iteration in `parseXML`; `walkTopDown` skips `build/`, `.gradle/`, `.git/`, `node_modules/`; `mapNotNull` for resource/asset discovery; idempotent `StringCareConfiguration.normalize()`. +- **Tooling**: Detekt + baseline, ktlint (non-failing), JaCoCo hook, Develocity build scan terms in root `settings.gradle.kts`. + +### Migration notes + +- Public plugin id and DSL block name are unchanged (`dev.vyp.stringcare.plugin`, `stringcare { }`). +- If you relied on internal APIs (`StringCarePlugin.absoluteProjectPath`, etc.), migrate to the build service or task inputs only. + +See [MIGRATION.md](MIGRATION.md). diff --git a/MIGRATION.md b/MIGRATION.md index 5491223..2787194 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,72 +1,24 @@ -# Migration from StringCare 4.x to 5.0 +# Migration guide (5.x → current refactor) -## GroupId and artifact IDs +## For consumers of the published plugin -- **Old:** `io.github.stringcare` (or `com.stringcare`) -- **New:** `dev.vyp.stringcare` - -Update dependencies and plugin coordinates: - -| 4.x | 5.0 | -|-----|-----| -| `io.github.stringcare:library` | `dev.vyp.stringcare:library` | -| `com.stringcare` plugin ID | `dev.vyp.stringcare.plugin` | - -## Gradle (Kotlin DSL) - -**Before (4.x, Groovy):** - -```groovy -buildscript { - dependencies { - classpath 'com.stringcare:gradle-plugin:4.x' - } -} -apply plugin: 'com.stringcare' -dependencies { - implementation 'io.github.stringcare:library:4.x' -} -``` - -**After (5.0, Kotlin DSL):** +No changes are required in `build.gradle.kts` if you only use the public DSL: ```kotlin -plugins { - id("dev.vyp.stringcare.plugin") -} -dependencies { - implementation("dev.vyp.stringcare:library:5.0.0") +stringcare { + debug = true + // ... } ``` -Resolve the plugin from Maven Central or a local `includeBuild`; see [README](README.md#installation-kotlin-dsl). +## For forks or code that used internal statics -## Plugin configuration - -- Extension and task names are unchanged (`stringcare { ... }`, `stringFiles`, `assetsFiles`, `srcFolders`, `debug`, `skip`). -- AGP 8.x and Gradle 8.x are required; the plugin uses the Variant API. - -## Library package - -- **Old:** `com.stringcare.library` -- **New:** `dev.vyp.stringcare.library` - -Update imports in your app: - -```kotlin -// Before -import com.stringcare.library.SC -import com.stringcare.library.SCTextView - -// After -import dev.vyp.stringcare.library.SC -import dev.vyp.stringcare.library.SCTextView -``` - -## API compatibility - -Public API (e.g. `SC.reveal()`, `SC.obfuscate()`, `SCTextView`, resources usage) is unchanged. Only package and Maven coordinates differ. +| Old | New | +|-----|-----| +| `StringCarePlugin.absoluteProjectPath` | Resolved per build via `StringCareBuildService.absoluteProjectPath()` (internal) | +| `StringCarePlugin.variantMap` | `StringCareBuildService` variant map (internal) | +| `StringCarePlugin.tempFolder` / `resetFolder()` | Service `getOrCreateTempFolder()` / `resetTempFolder()`; tests use `StringCareSession` + `StringCarePlugin.resetFolder()` | -## Build / CI +## Native libraries -This repo uses the JNI native library as a Git submodule. Clone with `git clone --recurse-submodules` or `git submodule update --init --recursive`. In GitHub Actions use `checkout` with `submodules: true`. +When updating bundled `.dylib` / `.so` / `.dll`, refresh SHA-256 entries in `Stark.kt` (`EXPECTED_SHA256`). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..6fd5209 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,13 @@ +# Security + +## Native binaries + +Host-side JNI libraries shipped in the plugin JAR are verified with SHA-256 before load. If you replace prebuilts, update the expected hashes in `plugin/.../internal/Stark.kt`. + +## Signing fingerprints + +The plugin derives keys from `signingReport` output. Treat CI logs as sensitive if debug logging prints certificate details. + +## Reporting + +Report security issues via the repository’s issue tracker or maintainer contact in the published POM. diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 1fb6ce2..29bfe18 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -1,8 +1,12 @@ plugins { kotlin("jvm") version "2.0.21" + kotlin("plugin.serialization") version "2.0.21" id("java-gradle-plugin") id("maven-publish") id("signing") + id("io.gitlab.arturbosch.detekt") version "1.23.7" + id("org.jlleitschuh.gradle.ktlint") version "12.1.2" + jacoco } gradlePlugin { @@ -32,17 +36,48 @@ repositories { dependencies { implementation(gradleApi()) implementation("com.android.tools.build:gradle:8.7.3") - implementation("org.jetbrains.kotlin:kotlin-stdlib:2.0.21") - implementation("com.google.guava:guava:33.3.1-jre") - implementation("com.google.code.gson:gson:2.11.0") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") testImplementation("org.junit.jupiter:junit-jupiter:5.11.0") testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") + testImplementation(gradleTestKit()) } tasks.withType().configureEach { kotlinOptions.jvmTarget = "17" } +jacoco { + toolVersion = "0.8.12" +} + +tasks.test { + finalizedBy(tasks.jacocoTestReport) +} + +tasks.jacocoTestReport { + dependsOn(tasks.test) + reports { + xml.required.set(true) + html.required.set(true) + } +} + +detekt { + buildUponDefaultConfig = true + allRules = false + config.setFrom(files("$rootDir/config/detekt/detekt.yml")) + baseline = file("$rootDir/config/detekt/baseline.xml") + parallel = true +} + +ktlint { + version.set("1.3.1") + ignoreFailures.set(true) + filter { + exclude("**/build/**") + } +} + publishing { publications { create("plugin") { @@ -141,7 +176,7 @@ tasks.register("syncDistNativesToPluginJni") { if (!stringcareJniDist.asFile.exists()) { throw GradleException( "stringcare-jni/dist not found. Init submodule: git submodule update --init --recursive " + - "then build natives in stringcare-android-c (see that repo's docs)." + "then build natives in stringcare-android-c (see that repo's docs).", ) } } diff --git a/plugin/config/detekt/baseline.xml b/plugin/config/detekt/baseline.xml new file mode 100644 index 0000000..8505f1f --- /dev/null +++ b/plugin/config/detekt/baseline.xml @@ -0,0 +1,10 @@ + + + + + TooGenericExceptionCaught:Stark.kt$Stark.Companion$e: Throwable + UnusedParameter:VariantApi.kt$extension: StringCareExtension + UnusedPrivateProperty:PrintUtils.kt$PrintUtils.Companion$private val logger = LoggerFactory.getLogger(StringCarePlugin::class.java) + UnusedPrivateProperty:VariantApi.kt$val beforeStrings = tasks.register( "stringcareBeforeMergeResources$variantCapitalized", ObfuscateStringsTask::class.java, ) { it.projectPath = projectPath it.moduleName = moduleName it.variantName = variantName it.applicationId = applicationId it.skip = config.skip it.debug = config.debug it.mockedFingerprint = config.mockedFingerprint it.srcFoldersJson = gson.toJson(config.srcFolders) it.stringFilesJson = gson.toJson(config.stringFiles) it.assetsFilesJson = gson.toJson(config.assetsFiles) } + + diff --git a/plugin/config/detekt/detekt.yml b/plugin/config/detekt/detekt.yml new file mode 100644 index 0000000..8721ab0 --- /dev/null +++ b/plugin/config/detekt/detekt.yml @@ -0,0 +1,59 @@ +# Detekt baseline for StringCare plugin — strict but pragmatic for Gradle plugin code +build: + # Tighten to 0 after phase7-18 (detekt cleanup) + maxIssues: 999 +config: + validation: true +style: + active: true + WildcardImport: + active: false + UtilityClassWithPublicConstructor: + active: false + MaxLineLength: + active: true + maxLineLength: 140 + excludes: ['**/test/**'] + ReturnCount: + active: true + max: 4 +complexity: + LongMethod: + active: true + threshold: 120 + LongParameterList: + active: true + functionThreshold: 8 + TooManyFunctions: + active: true + thresholdInFiles: 50 + thresholdInObjects: 20 + CyclomaticComplexMethod: + active: true + threshold: 40 + ComplexCondition: + active: true + threshold: 6 + NestedBlockDepth: + active: true + threshold: 8 +empty-blocks: + active: true +exceptions: + active: true + SwallowedException: + active: false +naming: + active: true + FunctionNaming: + active: true + ignoreAnnotated: ['Composable'] + excludes: ['**/PrintUtils.kt', '**/test/**'] + TopLevelPropertyNaming: + active: false +potential-bugs: + active: true +performance: + active: true +coroutines: + active: false diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/StringCarePlugin.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/StringCarePlugin.kt index 66decca..a958e5a 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/StringCarePlugin.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/StringCarePlugin.kt @@ -1,72 +1,72 @@ package dev.vyp.stringcare.plugin import dev.vyp.stringcare.plugin.internal.PrintUtils +import dev.vyp.stringcare.plugin.internal.StringCareSession import dev.vyp.stringcare.plugin.internal.absolutePath import dev.vyp.stringcare.plugin.internal.config -import dev.vyp.stringcare.plugin.internal.defaultConfig import dev.vyp.stringcare.plugin.internal.registerTask import dev.vyp.stringcare.plugin.internal.registerVariantObfuscationTasks -import dev.vyp.stringcare.plugin.internal.tempPath +import dev.vyp.stringcare.plugin.services.StringCareBuildService +import org.gradle.api.Action import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.api.services.BuildServiceSpec /** * StringCare Gradle plugin entry point. Applies string/asset obfuscation for Android application projects. */ class StringCarePlugin : Plugin { - companion object { + /** Test hook: clears the in-memory temp root used by [dev.vyp.stringcare.plugin.internal.tempPath]. */ @JvmStatic - internal lateinit var absoluteProjectPath: String - - private var internalTempDir: String? = null - @JvmStatic - var tempFolder: String - get() = internalTempDir ?: tempPath() - set(value) { - internalTempDir = value - } - fun resetFolder() { - internalTempDir = null + StringCareSession.clearTestTempRoot() } - - @JvmStatic - internal var configuration: StringCareConfiguration = defaultConfig() - - @JvmStatic - internal var variantMap = mutableMapOf() } override fun apply(target: Project) { val extension = target.extensions.create("stringcare", StringCareExtension::class.java) - absoluteProjectPath = target.absolutePath() + val buildService = registerStringCareService(target) target.plugins.withId("com.android.application") { val config = target.config(extension) - configuration = config - target.registerVariantObfuscationTasks(extension, config) + buildService.get().setResolvedConfiguration(config) + target.registerVariantObfuscationTasks(config, buildService) target.afterEvaluate { - if (configuration.debug) { - PrintUtils.print("PATH", absoluteProjectPath) + val resolved = buildService.get().getResolvedConfiguration() + if (resolved.debug) { + PrintUtils.print("PATH", buildService.get().absoluteProjectPath()) } - target.registerTask(configuration) + target.registerTask(resolved, buildService) } } if (!target.plugins.hasPlugin("com.android.application")) { target.afterEvaluate { - configuration = target.config(extension) - target.registerTask(configuration) + val config = target.config(extension) + buildService.get().setResolvedConfiguration(config) + target.registerTask(config, buildService) } } } + + private fun registerStringCareService(target: Project): Provider = + target.gradle.sharedServices.registerIfAbsent( + "stringCareBuildService", + StringCareBuildService::class.java, + Action> { spec -> + spec.parameters.absoluteProjectPath.set(target.provider { target.absolutePath() }) + }, + ) } /** * Internal resolved configuration (module name, applicationId, etc.). */ -open class StringCareConfiguration(var name: String) { +open class StringCareConfiguration( + var name: String, +) { var assetsFiles = mutableListOf() var stringFiles = mutableListOf() var srcFolders = mutableListOf() diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt index 53df0f1..c0b8479 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt @@ -5,46 +5,93 @@ import dev.vyp.stringcare.plugin.StringCarePlugin import dev.vyp.stringcare.plugin.models.AssetsFile import java.io.File -fun locateAssetsFiles(projectPath: String, configuration: StringCareConfiguration): List { +fun locateAssetsFiles( + projectPath: String, + configuration: StringCareConfiguration, +): List { if (configuration.debug) { println("== ASSETS FILES FOUND ======================================") } - return File(projectPath).walkTopDown() - .filterIndexed { _, file -> - file.validForAssetsConfiguration(configuration.normalize()) - }.map { - it.assetsFile(configuration.normalize())!! + val normalized = configuration.normalize() + return File(projectPath) + .walkTopDown() + .onEnter { dir -> + val path = dir.path.replace('\\', '/') + !path.contains("/build/") && + !path.contains("/.gradle/") && + !path.contains("/.git/") && + !path.contains("/node_modules/") + }.filter { file -> + !file.isDirectory && file.validForAssetsConfiguration(normalized) + }.mapNotNull { file -> + file.assetsFile(normalized) }.toList() } -fun backupAssetsFiles(projectPath: String, configuration: StringCareConfiguration): List { +/** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ +fun backupAssetsFiles( + projectPath: String, + configuration: StringCareConfiguration, +): List = backupAssetsFiles(projectPath, configuration, StringCareSession.requireTestTempRoot()) + +fun backupAssetsFiles( + projectPath: String, + configuration: StringCareConfiguration, + tempRoot: String, +): List { val files = locateAssetsFiles(projectPath, configuration.normalize()) files.forEach { resource -> - resource.backup() + resource.backup(tempRoot) } return files } -fun restoreAssetsFiles(projectPath: String, module: String): List { - val resourceFiles = File("${StringCarePlugin.tempFolder}${File.separator}$module") - .walkTopDown().toList().filter { file -> - !file.isDirectory - }.map { - it.restore(projectPath) - } - StringCarePlugin.resetFolder() +fun restoreAssetsFiles( + projectPath: String, + module: String, + tempRoot: String, +): List { + val resourceFiles = + File("$tempRoot${File.separator}$module") + .walkTopDown() + .toList() + .filter { file -> + !file.isDirectory + }.map { file -> + file.restore(projectPath, tempRoot) + } return resourceFiles } -fun obfuscateFile(key: String, file: File, mockId: String) { - val obfuscation = Stark.obfuscate( - key, - file.readBytes(), - mockId - ) +/** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ +fun restoreAssetsFiles( + projectPath: String, + module: String, +): List { + val tempRoot = StringCareSession.requireTestTempRoot() + val out = restoreAssetsFiles(projectPath, module, tempRoot) + StringCarePlugin.resetFolder() + return out +} + +fun obfuscateFile( + key: String, + file: File, + mockId: String, +) { + val obfuscation = + Stark.obfuscate( + key, + file.readBytes(), + mockId, + ) file.writeBytes(obfuscation) } -fun revealFile(key: String, file: File, mockId: String = "") { +fun revealFile( + key: String, + file: File, + mockId: String = "", +) { file.writeBytes(Stark.reveal(key, file.readBytes(), mockId)) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt index 5c5c445..554e8c5 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt @@ -1,47 +1,74 @@ package dev.vyp.stringcare.plugin.internal -import com.google.common.io.Files -import dev.vyp.stringcare.plugin.StringCarePlugin import dev.vyp.stringcare.plugin.models.ExecutionResult +import org.gradle.api.GradleException import java.io.IOException +import java.util.concurrent.TimeUnit -fun execute(command: String): ExecutionResult = execute(Runtime.getRuntime(), command) +private const val COMMAND_TIMEOUT_SECONDS = 60L -private fun execute(runtime: Runtime, command: String): ExecutionResult { - return try { +fun execute(command: String): ExecutionResult = executeShell(command) + +private fun executeShell(command: String): ExecutionResult { + val processArgs = when (getOs()) { - Os.WINDOWS -> { - val process = runtime.exec( - arrayOf( - "cmd", - "/c", - command.normalize() - ) - ) - ExecutionResult( - command.normalize(), - process.outputString() - ) - } - Os.OSX, Os.LINUX -> { - ExecutionResult( - command, - runtime.exec( - arrayOf( - "/bin/bash", - "-c", - command - ) - ).outputString() - ) - } + Os.WINDOWS -> listOf("cmd", "/c", command.normalize()) + Os.OSX, Os.LINUX -> listOf("/bin/bash", "-c", command) + } + val displayCommand = command + return try { + val process = + ProcessBuilder(processArgs) + .redirectErrorStream(true) + .start() + val output = + process.inputStream.bufferedReader().use { reader -> + reader.readText() + }.replace("\r", "") + val completed = process.waitFor(COMMAND_TIMEOUT_SECONDS, TimeUnit.SECONDS) + if (!completed) { + process.destroyForcibly() + return ExecutionResult.Failure( + command = displayCommand, + result = output, + exitCode = null, + error = GradleException("Command timed out after ${COMMAND_TIMEOUT_SECONDS}s"), + ) + } + val exit = process.exitValue() + if (exit != 0) { + ExecutionResult.Failure( + command = displayCommand, + result = output, + exitCode = exit, + ) + } else { + ExecutionResult.Success( + command = displayCommand, + result = output, + exitCode = exit, + ) } } catch (e: IOException) { - ExecutionResult(command.normalize(), "") + ExecutionResult.Failure( + command = displayCommand, + result = "", + exitCode = null, + error = e, + ) + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + ExecutionResult.Failure( + command = displayCommand, + result = "", + exitCode = null, + error = e, + ) } } fun tempPath(): String { - StringCarePlugin.tempFolder = Files.createTempDir().absolutePath - return StringCarePlugin.tempFolder + val dir = kotlin.io.path.createTempDirectory("stringcare-").toFile().absolutePath + StringCareSession.installTestTempRoot(dir) + return dir } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt index 88356e0..fb3cb4a 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt @@ -5,18 +5,18 @@ import com.android.build.gradle.AppPlugin import com.android.build.gradle.api.ApplicationVariant import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.StringCareExtension -import dev.vyp.stringcare.plugin.StringCarePlugin import dev.vyp.stringcare.plugin.models.AssetsFile +import dev.vyp.stringcare.plugin.models.ExecutionResult import dev.vyp.stringcare.plugin.models.ResourceFile +import dev.vyp.stringcare.plugin.services.StringCareBuildService import dev.vyp.stringcare.plugin.tasks.SCPreview import dev.vyp.stringcare.plugin.tasks.SCTestObfuscation -import com.google.gson.Gson import groovy.json.StringEscapeUtils import org.gradle.api.DomainObjectSet +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.Task -import org.slf4j.Logger -import org.slf4j.LoggerFactory +import org.gradle.api.provider.Provider import org.w3c.dom.Document import org.w3c.dom.Node import org.xml.sax.InputSource @@ -31,9 +31,19 @@ import javax.xml.transform.dom.DOMSource import javax.xml.transform.stream.StreamResult fun String.runCommand(runner: (command: String, result: String) -> Unit = { _, _ -> }): String { - val result = execute(this) - runner(result.command, result.result) - return result.result + val outcome = execute(this) + return when (outcome) { + is ExecutionResult.Success -> { + runner(outcome.command, outcome.result) + outcome.result + } + is ExecutionResult.Failure -> { + throw GradleException( + "Command failed (exit=${outcome.exitCode}): ${outcome.command}\n${outcome.result}", + outcome.error, + ) + } + } } fun String.normalize(): String { @@ -47,9 +57,11 @@ fun String.normalize(): String { } fun String.normalizePath(): String { - val unixPath = this.replace("\\", "/") - .replace("\\\\", "/") - .replace("//", "/") + val unixPath = + this + .replace("\\", "/") + .replace("\\\\", "/") + .replace("//", "/") return when (getOs()) { Os.OSX, Os.LINUX -> unixPath Os.WINDOWS -> unixPath.replace("/", "\\") @@ -69,8 +81,11 @@ fun String.uncapitalize(): String { } fun String.escape(): String = Regex.escape(this) + fun String.unescape(): String = StringEscapeUtils.unescapeJava(this) + fun String.removeNewLines(): String = this.replace("\n", "") + fun String.androidTreatment(): String { val va = this.split(" ") val values = mutableListOf() @@ -83,16 +98,17 @@ fun String.androidTreatment(): String { } fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boolean { - var valid = this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") - && excludedForXML().not() + var valid = + this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") && + excludedForXML().not() if (valid) { valid = false configuration.srcFolders.forEach { folder -> if (this.absolutePath.contains( "${File.separator}$folder${File.separator}".replace( "${File.separator}${File.separator}", - File.separator - ) + File.separator, + ), ) ) { valid = true @@ -105,8 +121,8 @@ fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boole if (this.absolutePath.contains( "${File.separator}$file".replace( "${File.separator}${File.separator}", - File.separator - ) + File.separator, + ), ) ) { valid = true @@ -120,18 +136,19 @@ fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boole } fun File.validForAssetsConfiguration(configuration: StringCareConfiguration): Boolean { - var valid = this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") - && excludedForAssets().not() + var valid = + this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") && + excludedForAssets().not() if (valid) { valid = false configuration.assetsFiles.forEach { file -> if (this.absolutePath.endsWith( "${File.separator}$file".replace( "${File.separator}${File.separator}", - File.separator - ) - ) - || (file.contains("*.") && this.absolutePath.endsWith(file.replace("*", ""))) + File.separator, + ), + ) || + (file.contains("*.") && this.absolutePath.endsWith(file.replace("*", ""))) ) { valid = true } @@ -143,13 +160,14 @@ fun File.validForAssetsConfiguration(configuration: StringCareConfiguration): Bo return valid } -val exclude = listOf( - "/build/", - "/.git/", - "/.idea/", - "/.gradle/", - "/gradle/" -) +val exclude = + listOf( + "/build/", + "/.git/", + "/.idea/", + "/.gradle/", + "/gradle/", + ) fun File.excludedForXML(): Boolean { var valid = true @@ -179,8 +197,8 @@ fun File.resourceFile(configuration: StringCareConfiguration): ResourceFile? { if (this.absolutePath.contains( "${File.separator}$folder${File.separator}".replace( "${File.separator}${File.separator}", - File.separator - ) + File.separator, + ), ) ) { sourceFolder = folder @@ -193,8 +211,8 @@ fun File.resourceFile(configuration: StringCareConfiguration): ResourceFile? { if (this.absolutePath.contains( "${File.separator}$file".replace( "${File.separator}${File.separator}", - File.separator - ) + File.separator, + ), ) ) { valid = true @@ -213,8 +231,8 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { if (this.absolutePath.contains( "${File.separator}$folder${File.separator}".replace( "${File.separator}${File.separator}", - File.separator - ) + File.separator, + ), ) ) { sourceFolder = folder @@ -227,10 +245,10 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { if (this.absolutePath.endsWith( "${File.separator}$file".replace( "${File.separator}${File.separator}", - File.separator - ) - ) - || (file.contains("*.") && this.absolutePath.endsWith(file.replace("*", ""))) + File.separator, + ), + ) || + (file.contains("*.") && this.absolutePath.endsWith(file.replace("*", ""))) ) { valid = true validFile = this @@ -245,33 +263,33 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { }}${when { validFile != null -> validFile?.getContent() else -> "the file is null" - }}" + }}", ) } return if (valid) AssetsFile(validFile!!, sourceFolder, configuration.name) else null } fun Project.absolutePath(): String { - val fPath = this.file("build.gradle").absolutePath.replace( - "build.gradle", - emptyChar - ) + val fPath = + this.file("build.gradle").absolutePath.replace( + "build.gradle", + emptyChar, + ) val p = fPath.split(File.separator) return fPath.replace(p[p.size - 2] + File.separator, "") } fun Project.module(): String { - val fPath = this.file("build.gradle").absolutePath.replace( - "build.gradle", - emptyChar - ) + val fPath = + this.file("build.gradle").absolutePath.replace( + "build.gradle", + emptyChar, + ) val p = fPath.split(File.separator) return p[p.size - 2] } -fun Project.createExtension(): StringCareExtension { - return extensions.create(extensionName, StringCareExtension::class.java) -} +fun Project.createExtension(): StringCareExtension = extensions.create(extensionName, StringCareExtension::class.java) fun Project.applicationVariants(): DomainObjectSet? { if (this.plugins.hasPlugin(AppPlugin::class.java)) { @@ -301,19 +319,31 @@ fun Project.config(extension: StringCareExtension): StringCareConfiguration { } } -fun Project.registerTask(configuration: StringCareConfiguration) { - val gson = Gson() +fun Project.registerTask( + configuration: StringCareConfiguration, + buildService: Provider, +) { + val variantDefault = buildService.get().firstVariantKeyOrDefault("debug") + val srcJson = toJsonStringList(configuration.srcFolders) + val strJson = toJsonStringList(configuration.stringFiles) + val assetsJson = toJsonStringList(configuration.assetsFiles) - this.tasks.register(gradleTaskNameDoctor, SCPreview::class.java) - this.tasks.register(gradleTaskNameObfuscate, SCTestObfuscation::class.java) + this.tasks.register(gradleTaskNameDoctor, SCPreview::class.java) { t -> + (t as Task).usesService(buildService) + (t as SCPreview).stringCareService.set(buildService) + } + this.tasks.register(gradleTaskNameObfuscate, SCTestObfuscation::class.java) { t -> + (t as Task).usesService(buildService) + (t as SCTestObfuscation).stringCareService.set(buildService) + } val previewTask = this.tasks.getByPath(gradleTaskNameDoctor) as SCPreview previewTask.module = configuration.name previewTask.applicationId = configuration.applicationId - previewTask.variantName = StringCarePlugin.variantMap.keys.firstOrNull() ?: "debug" - previewTask.srcFolders = gson.toJson(configuration.srcFolders) - previewTask.stringFiles = gson.toJson(configuration.stringFiles) - previewTask.assetsFiles = gson.toJson(configuration.assetsFiles) + previewTask.variantName = variantDefault + previewTask.srcFolders = srcJson + previewTask.stringFiles = strJson + previewTask.assetsFiles = assetsJson previewTask.mockedFingerprint = configuration.mockedFingerprint previewTask.debug = configuration.debug previewTask.skip = configuration.skip @@ -321,10 +351,10 @@ fun Project.registerTask(configuration: StringCareConfiguration) { val obfuscateTask = this.tasks.getByPath(gradleTaskNameObfuscate) as SCTestObfuscation obfuscateTask.module = configuration.name obfuscateTask.applicationId = configuration.applicationId - obfuscateTask.variantName = StringCarePlugin.variantMap.keys.firstOrNull() ?: "debug" - obfuscateTask.srcFolders = gson.toJson(configuration.srcFolders) - obfuscateTask.stringFiles = gson.toJson(configuration.stringFiles) - obfuscateTask.assetsFiles = gson.toJson(configuration.assetsFiles) + obfuscateTask.variantName = variantDefault + obfuscateTask.srcFolders = srcJson + obfuscateTask.stringFiles = strJson + obfuscateTask.assetsFiles = assetsJson obfuscateTask.mockedFingerprint = configuration.mockedFingerprint obfuscateTask.debug = configuration.debug obfuscateTask.skip = configuration.skip @@ -336,17 +366,16 @@ fun Process.outputString(): String { return "$input \n $error".replace("\r", "") } -fun defaultConfig(): StringCareConfiguration { - return StringCareConfiguration("app").apply { +fun defaultConfig(): StringCareConfiguration = + StringCareConfiguration("app").apply { stringFiles.add("strings.xml") srcFolders.add("src/main") } -} -fun ResourceFile.backup(): File { +fun ResourceFile.backup(tempRoot: String): File { val cleanPath = - "${StringCarePlugin.tempFolder}${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( - this.sourceFolder + "$tempRoot${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( + this.sourceFolder, )[1]}" .replace("${File.separator}${File.separator}", File.separator) @@ -355,10 +384,10 @@ fun ResourceFile.backup(): File { return backupFile } -fun AssetsFile.backup(): File { +fun AssetsFile.backup(tempRoot: String): File { val cleanPath = - "${StringCarePlugin.tempFolder}${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( - this.sourceFolder + "$tempRoot${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( + this.sourceFolder, )[1]}" .replace("${File.separator}${File.separator}", File.separator) @@ -367,9 +396,13 @@ fun AssetsFile.backup(): File { return backupFile } -fun File.restore(projectPath: String): File { - val cleanPath = "$projectPath${File.separator}${this.absolutePath.split(StringCarePlugin.tempFolder)[1]}" - .replace("${File.separator}${File.separator}", File.separator) +fun File.restore( + projectPath: String, + tempRoot: String, +): File { + val cleanPath = + "$projectPath${File.separator}${this.absolutePath.split(tempRoot)[1]}" + .replace("${File.separator}${File.separator}", File.separator) val restore = File(cleanPath) if (restore.exists()) { @@ -381,17 +414,7 @@ fun File.restore(projectPath: String): File { return restore } -fun ByteArray.toReadableString(): String { - val builder = StringBuilder() - this.forEachIndexed { index, byte -> - if (index == this.size - 1) { - builder.append(byte) - } else { - builder.append("$byte, ") - } - } - return builder.toString() -} +fun ByteArray.toReadableString(): String = joinToString(separator = ", ") { it.toString() } fun File.getXML(): Document { val inputStream = FileInputStream(this) @@ -407,20 +430,22 @@ fun File.getXML(): Document { fun File.updateXML(document: Document) { val output = StringWriter() val transformer = TransformerFactory.newInstance().newTransformer() - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8") transformer.transform(DOMSource(document), StreamResult(output)) val xml = output.toString() this.writeText(xml) } fun File.removeAttributes() { - val content = this.getContent() - .replace("hidden=\"true\"", "") - .replace("hidden=\"false\"", "") - .replace("containsHtml=\"true\"", "") - .replace("containsHtml=\"false\"", "") - .replace("androidTreatment=\"true\"", "") - .replace("androidTreatment=\"false\"", "") + val content = + this + .getContent() + .replace("hidden=\"true\"", "") + .replace("hidden=\"false\"", "") + .replace("containsHtml=\"true\"", "") + .replace("containsHtml=\"false\"", "") + .replace("androidTreatment=\"true\"", "") + .replace("androidTreatment=\"false\"", "") this.writeText(content) updateXML(this.getXML()) } @@ -432,45 +457,56 @@ fun Task.getModuleName(): String? { return if (path.isEmpty()) null else path.split(":")[path.split(":").size - 1] } -fun Task.dataFound(): Boolean = this.name.contains(pre) - && this.name.contains(build) - && this.name != "$pre$build" - && !this.name.contains(test) - -fun Task.onMergeResourcesStarts(): Boolean = this.name.contains(merge) - && this.name.contains(resources) - && !this.name.contains(test) - -fun Task.onMergeResourcesFinish(): Boolean = this.name.contains(merge) - && this.name.contains(resources) - && !this.name.contains(test) - -fun Task.onMergeAssetsStarts(): Boolean = this.name.contains(generate) - && this.name.contains(assets) - && !this.name.contains(test) - -fun Task.onMergeAssetsFinish(): Boolean = this.name.contains(merge) - && this.name.contains(assets) - && !this.name.contains(test) - -fun Task.dataFoundVariant(): String = this.name.substring(pre.length) - .substring(0, this.name.substring(pre.length).length - build.length) - -fun Task.onMergeResourcesStartsVariant(): String = this.name.substring(merge.length) - .substring(0, this.name.substring(merge.length).length - resources.length) - -fun Task.onMergeResourcesFinishVariant(): String = this.name.substring(merge.length) - .substring(0, this.name.substring(merge.length).length - resources.length) - -fun Task.onMergeAssetsStartsVariant(): String = this.name.substring(generate.length) - .substring(0, this.name.substring(generate.length).length - assets.length) - -fun Task.onMergeAssetsFinishVariant(): String = this.name.substring(merge.length) - .substring(0, this.name.substring(merge.length).length - assets.length) - -fun R.logger(): Lazy { - return lazy { LoggerFactory.getLogger(this.javaClass) } -} +fun Task.dataFound(): Boolean = + this.name.contains(pre) && + this.name.contains(build) && + this.name != "$pre$build" && + !this.name.contains(test) + +fun Task.onMergeResourcesStarts(): Boolean = + this.name.contains(merge) && + this.name.contains(resources) && + !this.name.contains(test) + +fun Task.onMergeResourcesFinish(): Boolean = + this.name.contains(merge) && + this.name.contains(resources) && + !this.name.contains(test) + +fun Task.onMergeAssetsStarts(): Boolean = + this.name.contains(generate) && + this.name.contains(assets) && + !this.name.contains(test) + +fun Task.onMergeAssetsFinish(): Boolean = + this.name.contains(merge) && + this.name.contains(assets) && + !this.name.contains(test) + +fun Task.dataFoundVariant(): String = + this.name + .substring(pre.length) + .substring(0, this.name.substring(pre.length).length - build.length) + +fun Task.onMergeResourcesStartsVariant(): String = + this.name + .substring(merge.length) + .substring(0, this.name.substring(merge.length).length - resources.length) + +fun Task.onMergeResourcesFinishVariant(): String = + this.name + .substring(merge.length) + .substring(0, this.name.substring(merge.length).length - resources.length) + +fun Task.onMergeAssetsStartsVariant(): String = + this.name + .substring(generate.length) + .substring(0, this.name.substring(generate.length).length - assets.length) + +fun Task.onMergeAssetsFinishVariant(): String = + this.name + .substring(merge.length) + .substring(0, this.name.substring(merge.length).length - assets.length) fun Node.extractHtml(): String { val stringBuilder = StringBuilder() @@ -478,30 +514,32 @@ fun Node.extractHtml(): String { val item = this.childNodes.item(i) val type = item.getType() when (type) { - StringType.BR -> stringBuilder.append( - "
${when { - item.textContent.isNotEmpty() -> item.extractHtml() - else -> "" - } - }
" - ) - StringType.I -> stringBuilder.append( - "${when { - item.textContent.isNotEmpty() -> item.extractHtml() - else -> "" - } - }" - ) - StringType.STRONG -> stringBuilder.append( - "${when { - item.textContent.isNotEmpty() -> item.extractHtml() - else -> "" - } - }" - ) + StringType.BR -> + stringBuilder.append( + "
${when { + item.textContent.isNotEmpty() -> item.extractHtml() + else -> "" + } + }
", + ) + StringType.I -> + stringBuilder.append( + "${when { + item.textContent.isNotEmpty() -> item.extractHtml() + else -> "" + } + }", + ) + StringType.STRONG -> + stringBuilder.append( + "${when { + item.textContent.isNotEmpty() -> item.extractHtml() + else -> "" + } + }", + ) StringType.TEXT -> stringBuilder.append(item.textContent) } - } return stringBuilder.toString() } @@ -510,29 +548,27 @@ enum class StringType { BR, TEXT, I, - STRONG + STRONG, } -fun Node.getType(): StringType { - return when { +fun Node.getType(): StringType = + when { this.toString().contains("[br:") -> StringType.BR this.toString().contains("[i:") -> StringType.I this.toString().contains("[strong:") -> StringType.STRONG this.toString().contains("[#text") -> StringType.TEXT else -> StringType.TEXT } -} fun StringCareConfiguration.normalize(): StringCareConfiguration { - val stringFiles = mutableListOf() - val sourceFolders = mutableListOf() - this.stringFiles.forEach { file -> - stringFiles.add(file.normalizePath()) - } - this.srcFolders.forEach { folder -> - sourceFolders.add(folder.normalizePath()) + val nextStrings = stringFiles.map { it.normalizePath() } + val nextSrc = srcFolders.map { it.normalizePath() } + if (nextStrings == stringFiles && nextSrc == srcFolders) { + return this } - this.stringFiles = stringFiles - this.srcFolders = sourceFolders + stringFiles.clear() + stringFiles.addAll(nextStrings) + srcFolders.clear() + srcFolders.addAll(nextSrc) return this } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt index 80ab7bf..90babb9 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt @@ -2,93 +2,89 @@ package dev.vyp.stringcare.plugin.internal import dev.vyp.stringcare.plugin.StringCareConfiguration -private class Fingerprint { - - companion object { - private var key: String? = null - private var until: String? = null - private var error: String? = null - private var variantLocated = false - private var moduleLocated = false +fun fingerPrint( + module: String, + variant: String, + configuration: StringCareConfiguration, + keyFound: (key: String) -> Unit, +) { + if (configuration.mockedFingerprint.isNotEmpty()) { + keyFound(configuration.mockedFingerprint) + return + } + signingReportTask().runCommand { _, report -> + keyFound(report.extractFingerprint(module, variant, configuration)) } +} - fun extract(module: String, variant: String, configuration: StringCareConfiguration, trace: String): String { - val lines = trace.split("\n") - lines.forEach { line -> - when { - line.lowercase().contains("downloading") -> if (configuration.debug) { +fun String.extractFingerprint( + module: String = "app", + variant: String = "debug", + configuration: StringCareConfiguration, +): String { + var key: String? = null + var until: String? = null + var variantLocated = false + var moduleLocated = false + val lines = this.split("\n") + for (line in lines) { + when { + line.lowercase().contains("downloading") -> + if (configuration.debug) { PrintUtils.print(module, line, configuration.debug) } - line.lowercase().contains("unzipping") -> if (configuration.debug) { + line.lowercase().contains("unzipping") -> + if (configuration.debug) { PrintUtils.print(module, line, configuration.debug) } - line.lowercase().contains("permissions") -> if (configuration.debug) { + line.lowercase().contains("permissions") -> + if (configuration.debug) { PrintUtils.print(module, line, configuration.debug) } - line.lowercase().contains("config:") && moduleLocated && variantLocated -> { - val k = (line.split(": ").getOrNull(1) ?: "").trim() - val valid = !k.equals("none", ignoreCase = true) - if (!valid) { - key = k - PrintUtils.print(module, "\uD83E\uDD2F no config defined for variant $variant", true) - if (configuration.debug) { - until = key - } - } else if (configuration.debug) { - PrintUtils.print(module, "Module: $module", true) - PrintUtils.print(module, "Variant: $variant", true) - } - - } - line.lowercase().contains("sha1") && moduleLocated && variantLocated -> { - key = line.split(" ").getOrNull(1) ?: "" + line.lowercase().contains("config:") && moduleLocated && variantLocated -> { + val k = (line.split(": ").getOrNull(1) ?: "").trim() + val valid = !k.equals("none", ignoreCase = true) + if (!valid) { + key = k + PrintUtils.print(module, "\uD83E\uDD2F no config defined for variant $variant", true) if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) + until = key } + } else if (configuration.debug) { + PrintUtils.print(module, "Module: $module", true) + PrintUtils.print(module, "Variant: $variant", true) } - line.lowercase().contains("error") -> { - error = line.split(": ").getOrNull(1) + } + line.lowercase().contains("sha1") && moduleLocated && variantLocated -> { + key = line.split(" ").getOrNull(1) ?: "" + if (configuration.debug) { + PrintUtils.print(module, line, configuration.debug) } - line.lowercase().contains("valid until") && moduleLocated && variantLocated -> { - until = line.split(": ").getOrNull(1) - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } + } + line.lowercase().contains("error") -> { + /* keep for future diagnostics */ + } + line.lowercase().contains("valid until") && moduleLocated && variantLocated -> { + until = line.split(": ").getOrNull(1) + if (configuration.debug) { + PrintUtils.print(module, line, configuration.debug) } - line.lowercase().contains("store") && moduleLocated && variantLocated -> if (configuration.debug) { + } + line.lowercase().contains("store") && moduleLocated && variantLocated -> + if (configuration.debug) { PrintUtils.print(module, line, configuration.debug) } - line.lowercase().contains("variant") && moduleLocated -> { - val locV = line.split(" ").getOrNull(1) ?: "" - if (locV == variant) { - variantLocated = true - } + line.lowercase().contains("variant") && moduleLocated -> { + val locV = line.split(" ").getOrNull(1) ?: "" + if (locV == variant) { + variantLocated = true } - line.lowercase().contains(":$module") -> moduleLocated = true - } - if (key != null && (!configuration.debug || configuration.debug && until != null)) { - return key!! } + line.lowercase().contains(":$module") -> moduleLocated = true + } + if (key != null && (!configuration.debug || configuration.debug && until != null)) { + return key!! } - return "" - } -} - -fun fingerPrint( - module: String, - variant: String, - configuration: StringCareConfiguration, - keyFound: (key: String) -> Unit -) { - if (configuration.mockedFingerprint.isNotEmpty()) { - keyFound(configuration.mockedFingerprint) - return - } - signingReportTask().runCommand { _, report -> - keyFound(report.extractFingerprint(module, variant, configuration)) } -} - -fun String.extractFingerprint(module: String = "app", variant: String = "debug", configuration: StringCareConfiguration): String { - return Fingerprint().extract(module, variant, configuration, this) + return "" } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/JsonLists.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/JsonLists.kt new file mode 100644 index 0000000..b677e4b --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/JsonLists.kt @@ -0,0 +1,30 @@ +package dev.vyp.stringcare.plugin.internal + +import kotlinx.serialization.builtins.ListSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonPrimitive + +private val jsonParser = + Json { + ignoreUnknownKeys = true + isLenient = true + } + +internal fun toJsonStringList(list: List): String = + jsonParser.encodeToString(ListSerializer(String.serializer()), list) + +/** Parses a JSON array of strings (e.g. Gson-produced lists in task inputs). */ +internal fun parseJsonStringList(json: String): List = + try { + val element = jsonParser.parseToJsonElement(json.ifBlank { "[]" }) + if (element is JsonArray) { + element.map { it.jsonPrimitive.content } + } else { + emptyList() + } + } catch (_: Exception) { + emptyList() + } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/PrintUtils.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/PrintUtils.kt index c8fa2a0..8e2d0e4 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/PrintUtils.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/PrintUtils.kt @@ -4,13 +4,15 @@ import dev.vyp.stringcare.plugin.StringCarePlugin import org.slf4j.LoggerFactory class PrintUtils { - companion object { private var variant: String? = null private var module: String? = null private val logger = LoggerFactory.getLogger(StringCarePlugin::class.java) - fun init(module: String, variant: String) { + fun init( + module: String, + variant: String, + ) { PrintUtils.module = module PrintUtils.variant = variant } @@ -19,7 +21,10 @@ class PrintUtils { println(value) } - fun print(message: String, tab: Boolean = false) { + fun print( + message: String, + tab: Boolean = false, + ) { if (variant != null && module != null) { if (!tab) { _print(":$module:$message") @@ -31,7 +36,11 @@ class PrintUtils { } } - fun print(module: String?, message: String, tab: Boolean = false) { + fun print( + module: String?, + message: String, + tab: Boolean = false, + ) { if (module != null) { if (!tab) { _print(":$module:$message") @@ -43,8 +52,6 @@ class PrintUtils { } } - fun uncapitalize(value: String): String { - return value.substring(0, 1).lowercase() + value.substring(1, value.length) - } + fun uncapitalize(value: String): String = value.substring(0, 1).lowercase() + value.substring(1, value.length) } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt index 3b53ada..6bfddf0 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt @@ -1,117 +1,172 @@ package dev.vyp.stringcare.plugin.internal -import dev.vyp.stringcare.plugin.StringCarePlugin import java.io.File import java.io.InputStream import java.net.JarURLConnection import java.net.URL +import java.nio.file.Files +import java.security.MessageDigest import java.util.zip.ZipFile -open class Stark { +/** Result of attempting to load the host-side JNI library. */ +sealed class NativeLoadResult { + data object Loaded : NativeLoadResult() + + data class Failed( + val message: String, + ) : NativeLoadResult() +} +open class Stark { companion object { /** - * Native libraries must NOT be loaded in a static initializer: Gradle loads plugin task classes during - * **configuration** phase, while classpath resources for the plugin JAR are reliably visible during - * **task execution**. Loading here used to run too early → stream null / load failure → permanent "Skipping". + * SHA-256 (hex) of bundled prebuilts under `internal/jni/` / `dist/`. + * Update when replacing native binaries (run `shasum -a 256` on each file). */ + private val EXPECTED_SHA256: Map = + mapOf( + winLib to "cd4f6226b7d073f67f1810c3dbdfdd722baba79f43214396e117650d88aa7c7e", + winLibArm64 to "319ab0f5d055be6b4090f5307fb351ff6680438eb5e734d140f61ac887d37e63", + osxLib to "a352ee421e017966f6234030980291326015ca07fcdd37e9ed0fbb7361d1ea7d", + linuxLib to "42010b2512ed512aaba720ee398ec20e2b3d509de5c3142a293f6cb97d4db8cf", + linuxLibArm64 to "17de04a716395f69020642c88363c0caa54863d323f1702478c6443541b7eba5", + ) + @Volatile private var nativeLibLoaded = false @Volatile private var nativeLoadAttempted = false + @Volatile + private var verboseNativeLogging = true + + @JvmStatic + fun setVerboseNativeLogging(enabled: Boolean) { + verboseNativeLogging = enabled + } + private fun logNative(message: String) { - // if (StringCarePlugin.configuration.debug) { + if (verboseNativeLogging) { println("[StringCare native] $message") - // } + } + } + + private fun sha256Hex(bytes: ByteArray): String { + val digest = MessageDigest.getInstance("SHA-256").digest(bytes) + return digest.joinToString("") { b -> "%02x".format(b) } } @JvmStatic - fun isNativeLibLoaded(): Boolean { - if (!nativeLoadAttempted) { - logNative( - "Loading native library (os.name=${System.getProperty("os.name")}, " + - "os.arch=${System.getProperty("os.arch")}, os.detected=${getOs()})" - ) - nativeLibLoaded = loadNativeForHost() - nativeLoadAttempted = true - if (nativeLibLoaded) { - logNative("Native library loaded successfully.") - } else { - logNative("Native library NOT loaded — obfuscation tasks will skip. See messages above.") + fun nativeLoadResult(): NativeLoadResult { + synchronized(Stark::class.java) { + if (!nativeLoadAttempted) { + logNative( + "Loading native library (os.name=${System.getProperty("os.name")}, " + + "os.arch=${System.getProperty("os.arch")}, os.detected=${getOs()})", + ) + nativeLibLoaded = loadNativeForHostWithRetries() + nativeLoadAttempted = true + if (nativeLibLoaded) { + logNative("Native library loaded successfully.") + } else { + logNative("Native library NOT loaded — obfuscation tasks will skip. See messages above.") + } + } else if (!nativeLibLoaded) { + logNative("isNativeLibLoaded: returning cached false (load attempted earlier in this Gradle JVM)") } - } else if (!nativeLibLoaded) { - logNative("isNativeLibLoaded: returning cached false (load attempted earlier in this Gradle JVM)") + return if (nativeLibLoaded) NativeLoadResult.Loaded else NativeLoadResult.Failed("Native library not loaded") } - return nativeLibLoaded } - /** Classpath folder where host natives live in the JAR (`dist/` layout). */ - private fun nativeResourceDir(): String = when (getOs()) { - Os.WINDOWS -> "windows" - Os.LINUX -> "linux" - Os.OSX -> "macos" - } + @JvmStatic + fun isNativeLibLoaded(): Boolean = nativeLoadResult() is NativeLoadResult.Loaded + + private fun nativeResourceDir(): String = + when (getOs()) { + Os.WINDOWS -> "windows" + Os.LINUX -> "linux" + Os.OSX -> "macos" + } - private fun loadNativeForHost(): Boolean { + private fun loadNativeForHostWithRetries(): Boolean { val arch = (System.getProperty("os.arch") ?: "").lowercase() - val order = when (getOs()) { - Os.WINDOWS -> { - if (arch == "aarch64") listOf(winLibArm64, winLib) else listOf(winLib, winLibArm64) - } - Os.OSX -> listOf(osxLib) - Os.LINUX -> { - if (arch == "aarch64") listOf(linuxLibArm64, linuxLib) else listOf(linuxLib, linuxLibArm64) + val order = + when (getOs()) { + Os.WINDOWS -> { + if (arch == "aarch64") listOf(winLibArm64, winLib) else listOf(winLib, winLibArm64) + } + Os.OSX -> listOf(osxLib) + Os.LINUX -> { + if (arch == "aarch64") listOf(linuxLibArm64, linuxLib) else listOf(linuxLib, linuxLibArm64) + } } - } logNative("Try order for this host: ${order.joinToString()}") for (name in order) { - if (loadLib(name)) return true + repeat(3) { attempt -> + if (loadLib(name)) return true + if (attempt < 2) { + try { + Thread.sleep(100L * (attempt + 1)) + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + } + } + } } return false } - /** - * Loads a native library packaged as a classpath resource (JAR or exploded `build/resources/main`). - * Composite builds (`includeBuild("plugin")`) load classes from `classes/kotlin/main` while natives live - * under `resources/main` — [openNativeStream] uses classloaders so both layouts work. - */ private fun loadLib(name: String): Boolean { + var tempFile: File? = null return try { val stream = openNativeStream(name) if (stream == null) { logNative("loadLib($name): no bytes found on classpath (see openNativeStream traces)") return false } - val temp = createNativeTempFile(name) - stream.use { input -> - temp.outputStream().use { output -> input.copyTo(output) } + val bytes = stream.use { it.readBytes() } + val expected = EXPECTED_SHA256[name] + if (expected != null) { + val actual = sha256Hex(bytes) + if (!actual.equals(expected, ignoreCase = true)) { + logNative("loadLib($name): SHA-256 mismatch (expected $expected, was $actual)") + throw SecurityException("StringCare native library checksum mismatch for $name") + } + logNative("loadLib($name): SHA-256 OK") } - val size = temp.length() - logNative("loadLib($name): extracted $size bytes → ${temp.absolutePath}") - System.load(temp.absolutePath) + tempFile = createNativeTempFile(name) + tempFile.writeBytes(bytes) + val size = tempFile.length() + logNative("loadLib($name): extracted $size bytes → ${tempFile.absolutePath}") + System.load(tempFile.absolutePath) + tempFile.deleteOnExit() logNative("loadLib($name): System.load OK") true } catch (e: UnsatisfiedLinkError) { logNative("loadLib($name): UnsatisfiedLinkError — ${e.message} (wrong CPU arch vs binary slice?)") + tempFile?.let { runCatching { it.delete() } } + false + } catch (e: SecurityException) { + logNative("loadLib($name): SecurityException — ${e.message}") + tempFile?.let { runCatching { it.delete() } } false } catch (e: Throwable) { logNative("loadLib($name): ${e.javaClass.name} — ${e.message}") + tempFile?.let { runCatching { it.delete() } } false } } private fun createNativeTempFile(libraryFileName: String): File { - val suffix = when { - libraryFileName.endsWith(".dylib") -> ".dylib" - libraryFileName.endsWith(".so") -> ".so" - libraryFileName.endsWith(".dll") -> ".dll" - else -> ".bin" - } - return File.createTempFile("stringcare-signkey-", suffix).apply { - deleteOnExit() - } + val suffix = + when { + libraryFileName.endsWith(".dylib") -> ".dylib" + libraryFileName.endsWith(".so") -> ".so" + libraryFileName.endsWith(".dll") -> ".dll" + else -> ".bin" + } + return Files.createTempFile("stringcare-signkey-", suffix).toFile() } private fun openNativeStream(fileName: String): InputStream? { @@ -124,11 +179,12 @@ open class Stark { } } logNative("openNativeStream($fileName): not on Stark.class resources, trying classloaders…") - val loaders = buildList { - add(Stark::class.java.classLoader) - add(Thread.currentThread().contextClassLoader) - add(ClassLoader.getSystemClassLoader()) - }.distinct() + val loaders = + buildList { + add(Stark::class.java.classLoader) + add(Thread.currentThread().contextClassLoader) + add(ClassLoader.getSystemClassLoader()) + }.distinct() loaders.forEachIndexed { i, loader -> if (loader == null) { logNative("openNativeStream: loader[$i]=null") @@ -146,30 +202,36 @@ open class Stark { return openNativeStreamFromCodeSource(fileName) } - /** Fallback when resources are not visible to the usual classloaders (edge classloaders). */ private fun openNativeStreamFromCodeSource(fileName: String): InputStream? { - val url: URL = try { - Stark::class.java.protectionDomain?.codeSource?.location - } catch (_: Throwable) { - null - } ?: run { - logNative("openNativeStreamFromCodeSource: codeSource.location is null") - return null - } + val url: URL = + try { + Stark::class.java.protectionDomain + ?.codeSource + ?.location + } catch (_: Throwable) { + null + } ?: run { + logNative("openNativeStreamFromCodeSource: codeSource.location is null") + return null + } logNative("openNativeStreamFromCodeSource: codeSource=$url") return when (url.protocol) { "file" -> { - val file = try { - File(url.toURI()) - } catch (_: Throwable) { - logNative("openNativeStreamFromCodeSource: toURI failed for $url") - return null - } + val file = + try { + File(url.toURI()) + } catch (_: Throwable) { + logNative("openNativeStreamFromCodeSource: toURI failed for $url") + return null + } when { file.isFile && file.name.endsWith(".jar") -> { val s = openStreamFromPlainJar(file, fileName) - if (s != null) logNative("openNativeStreamFromCodeSource: found inside JAR ${file.absolutePath}") - else logNative("openNativeStreamFromCodeSource: no entry $fileName in ${file.absolutePath}") + if (s != null) { + logNative("openNativeStreamFromCodeSource: found inside JAR ${file.absolutePath}") + } else { + logNative("openNativeStreamFromCodeSource: no entry $fileName in ${file.absolutePath}") + } s } file.isDirectory -> { @@ -187,7 +249,7 @@ open class Stark { } else -> { logNative( - "openNativeStreamFromCodeSource: not under ${file.absolutePath} nor $resMain" + "openNativeStreamFromCodeSource: not under ${file.absolutePath} nor $resMain", ) null } @@ -211,28 +273,39 @@ open class Stark { } } - private fun findNativeFile(dir: File, fileName: String): File? { + private fun findNativeFile( + dir: File, + fileName: String, + ): File? { if (!dir.isDirectory) return null return dir.walkTopDown().find { it.isFile && it.name == fileName } } - private fun openStreamFromPlainJar(jar: File, fileName: String): InputStream? { + private fun openStreamFromPlainJar( + jar: File, + fileName: String, + ): InputStream? { if (!jar.isFile) return null return ZipFile(jar).use { zip -> - val entry = zip.entries().asSequence().firstOrNull { e -> - !e.isDirectory && (e.name == fileName || e.name.endsWith("/$fileName")) - } ?: return null + val entry = + zip.entries().asSequence().firstOrNull { e -> + !e.isDirectory && (e.name == fileName || e.name.endsWith("/$fileName")) + } ?: return null zip.getInputStream(entry).readBytes().inputStream() } } - private fun openStreamFromJarUrl(url: URL, fileName: String): InputStream? { + private fun openStreamFromJarUrl( + url: URL, + fileName: String, + ): InputStream? { return try { val conn = url.openConnection() as JarURLConnection val jar = conn.jarFile - val entry = jar.entries().asSequence().firstOrNull { e -> - !e.isDirectory && (e.name == fileName || e.name.endsWith("/$fileName")) - } ?: return null + val entry = + jar.entries().asSequence().firstOrNull { e -> + !e.isDirectory && (e.name == fileName || e.name.endsWith("/$fileName")) + } ?: return null logNative("openStreamFromJarUrl: entry ${entry.name}") jar.getInputStream(entry).readBytes().inputStream() } catch (e: Throwable) { @@ -242,9 +315,17 @@ open class Stark { } @JvmStatic - external fun obfuscate(key: String, value: ByteArray, mockId: String): ByteArray + external fun obfuscate( + key: String, + value: ByteArray, + mockId: String, + ): ByteArray @JvmStatic - external fun reveal(key: String, value: ByteArray, mockId: String): ByteArray + external fun reveal( + key: String, + value: ByteArray, + mockId: String, + ): ByteArray } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/StringCareSession.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/StringCareSession.kt new file mode 100644 index 0000000..c37730f --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/StringCareSession.kt @@ -0,0 +1,22 @@ +package dev.vyp.stringcare.plugin.internal + +import java.util.concurrent.atomic.AtomicReference + +/** + * Holds a temporary directory root for unit tests that run shell workflows without a [StringCareBuildService]. + * Production tasks use [dev.vyp.stringcare.plugin.services.StringCareBuildService] instead. + */ +internal object StringCareSession { + private val testTempRoot = AtomicReference(null) + + fun installTestTempRoot(path: String) { + testTempRoot.set(path) + } + + fun requireTestTempRoot(): String = + testTempRoot.get() ?: error("Test temp root not set; call tempPath() first") + + fun clearTestTempRoot() { + testTempRoot.set(null) + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt index 921e337..81c663a 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt @@ -2,71 +2,71 @@ package dev.vyp.stringcare.plugin.internal import java.io.File -internal fun signingReportTask(): String = "${when (getOs()) { - Os.WINDOWS -> wrapperWindows - Os.OSX, Os.LINUX -> wrapperOsX -}} signingReport" +internal fun signingReportTask(): String = + "${when (getOs()) { + Os.WINDOWS -> wrapperWindows + Os.OSX, Os.LINUX -> wrapperOsX + }} signingReport" -internal fun gradleWrapper(): String = when (getOs()) { - Os.WINDOWS -> wrapperWindows - Os.OSX, Os.LINUX -> wrapperOsX -} +internal fun gradleWrapper(): String = + when (getOs()) { + Os.WINDOWS -> wrapperWindows + Os.OSX, Os.LINUX -> wrapperOsX + } -internal fun pluginBuildTask(): String = "${when (getOs()) { - Os.WINDOWS -> wrapperWindows - Os.OSX, Os.LINUX -> wrapperOsX -}} build --exclude-task test" +internal fun pluginBuildTask(): String = + "${when (getOs()) { + Os.WINDOWS -> wrapperWindows + Os.OSX, Os.LINUX -> wrapperOsX + }} build --exclude-task test" -internal val librarySetupTask = """ - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$osxLib out${File.separator}production${File.separator}classes${File.separator}$osxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLib out${File.separator}production${File.separator}classes${File.separator}$linuxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLibArm64 out${File.separator}production${File.separator}classes${File.separator}$linuxLibArm64 & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLibArm64 out${File.separator}production${File.separator}classes${File.separator}$winLibArm64 & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$osxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$osxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$linuxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLibArm64 build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$linuxLibArm64 & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLibArm64 build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLibArm64 - """.trimIndent() +internal val librarySetupTask = + """ + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$osxLib out${File.separator}production${File.separator}classes${File.separator}$osxLib & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLib out${File.separator}production${File.separator}classes${File.separator}$linuxLib & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLibArm64 out${File.separator}production${File.separator}classes${File.separator}$linuxLibArm64 & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLibArm64 out${File.separator}production${File.separator}classes${File.separator}$winLibArm64 & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$osxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$osxLib & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$linuxLib & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLibArm64 build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$linuxLibArm64 & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLib & + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLibArm64 build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLibArm64 + """.trimIndent() -internal fun prepareTask(directory: String): String { - return """ - cd $directory && - git clone https://github.com/StringCare/$testProjectName.git && - cd $testProjectName - """.trimIndent() -} +internal fun prepareTask(directory: String): String = + """ + cd $directory && + git clone https://github.com/StringCare/$testProjectName.git && + cd $testProjectName + """.trimIndent() -internal fun buildTask(directory: String): String { - return """ - cd $directory && - ${gradleWrapper()} build - """.trimIndent() -} +internal fun buildTask(directory: String): String = + """ + cd $directory && + ${gradleWrapper()} build + """.trimIndent() -internal fun basicGradleTask(directory: String): String { - return """ - cd $directory && - ${gradleWrapper()} $gradleTaskNameDoctor - """.trimIndent() -} +internal fun basicGradleTask(directory: String): String = + """ + cd $directory && + ${gradleWrapper()} $gradleTaskNameDoctor + """.trimIndent() -internal fun obfuscationTestGradleTask(directory: String): String { - return """ - cd $directory && - ${gradleWrapper()} $gradleTaskNameObfuscate - """.trimIndent() -} +internal fun obfuscationTestGradleTask(directory: String): String = + """ + cd $directory && + ${gradleWrapper()} $gradleTaskNameObfuscate + """.trimIndent() -internal fun signingReportTask(directory: String): String { - return """ - ${prepareTask(directory)} && - ${signingReportTask()} - """.trimIndent() -} +internal fun signingReportTask(directory: String): String = + """ + ${prepareTask(directory)} && + ${signingReportTask()} + """.trimIndent() -internal fun copyCommand(): String = when (getOs()) { - Os.WINDOWS -> copyCommandWindows - Os.OSX, Os.LINUX -> copyCommandOsX -} +internal fun copyCommand(): String = + when (getOs()) { + Os.WINDOWS -> copyCommandWindows + Os.OSX, Os.LINUX -> copyCommandOsX + } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt index e8d1457..376e9e1 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt @@ -2,80 +2,91 @@ package dev.vyp.stringcare.plugin.internal import com.android.build.api.variant.ApplicationAndroidComponentsExtension import dev.vyp.stringcare.plugin.StringCareConfiguration -import dev.vyp.stringcare.plugin.StringCareExtension -import dev.vyp.stringcare.plugin.StringCarePlugin +import dev.vyp.stringcare.plugin.services.StringCareBuildService import dev.vyp.stringcare.plugin.tasks.ObfuscateAssetsTask import dev.vyp.stringcare.plugin.tasks.ObfuscateStringsTask import dev.vyp.stringcare.plugin.tasks.RestoreAssetsTask import dev.vyp.stringcare.plugin.tasks.RestoreStringsTask -import com.google.gson.Gson import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.provider.Provider private fun String.variantTaskSuffix(): String = replaceFirstChar { it.uppercase() } -fun Project.registerVariantObfuscationTasks(extension: StringCareExtension, config: StringCareConfiguration) { - val androidComponents = extensions.findByType(ApplicationAndroidComponentsExtension::class.java) - ?: return +fun Project.registerVariantObfuscationTasks( + config: StringCareConfiguration, + buildService: Provider, +) { + val androidComponents = + extensions.findByType(ApplicationAndroidComponentsExtension::class.java) + ?: return - val gson = Gson() - val projectPath = StringCarePlugin.absoluteProjectPath - val moduleName = config.name + val absoluteProjectPath = buildService.get().absoluteProjectPath() + val moduleNameValue = config.name val variantNames = mutableListOf() androidComponents.onVariants(androidComponents.selector().all()) { variant -> val variantName: String = variant.name val applicationId = variant.applicationId.get() - StringCarePlugin.variantMap[variantName] = applicationId + buildService.get().putVariantApplicationId(variantName, applicationId) if (config.applicationId.isEmpty()) config.applicationId = applicationId val variantCapitalized = variantName.variantTaskSuffix() - val beforeStrings = tasks.register( + tasks.register( "stringcareBeforeMergeResources$variantCapitalized", - ObfuscateStringsTask::class.java - ) { - it.projectPath = projectPath - it.moduleName = moduleName - it.variantName = variantName - it.applicationId = applicationId - it.skip = config.skip - it.debug = config.debug - it.mockedFingerprint = config.mockedFingerprint - it.srcFoldersJson = gson.toJson(config.srcFolders) - it.stringFilesJson = gson.toJson(config.stringFiles) - it.assetsFilesJson = gson.toJson(config.assetsFiles) + ObfuscateStringsTask::class.java, + ) { t -> + (t as Task).usesService(buildService) + (t as ObfuscateStringsTask).stringCareService.set(buildService) + t.projectPath = absoluteProjectPath + t.moduleName = moduleNameValue + t.variantName = variantName + t.applicationId = applicationId + t.skip = config.skip + t.debug = config.debug + t.mockedFingerprint = config.mockedFingerprint + t.srcFoldersJson = toJsonStringList(config.srcFolders) + t.stringFilesJson = toJsonStringList(config.stringFiles) + t.assetsFilesJson = toJsonStringList(config.assetsFiles) } tasks.register( "stringcareAfterMergeResources$variantCapitalized", - RestoreStringsTask::class.java - ) { - it.projectPath = projectPath - it.moduleName = moduleName - it.skip = config.skip + RestoreStringsTask::class.java, + ) { t -> + (t as Task).usesService(buildService) + (t as RestoreStringsTask).stringCareService.set(buildService) + t.projectPath = absoluteProjectPath + t.moduleName = moduleNameValue + t.skip = config.skip } variantNames.add(variantCapitalized) - val beforeAssets = tasks.register( + tasks.register( "stringcareBeforeMergeAssets$variantCapitalized", - ObfuscateAssetsTask::class.java - ) { - it.projectPath = projectPath - it.moduleName = moduleName - it.variantName = variantName - it.applicationId = applicationId - it.skip = config.skip - it.debug = config.debug - it.mockedFingerprint = config.mockedFingerprint - it.srcFoldersJson = gson.toJson(config.srcFolders) - it.stringFilesJson = gson.toJson(config.stringFiles) - it.assetsFilesJson = gson.toJson(config.assetsFiles) + ObfuscateAssetsTask::class.java, + ) { t -> + (t as Task).usesService(buildService) + (t as ObfuscateAssetsTask).stringCareService.set(buildService) + t.projectPath = absoluteProjectPath + t.moduleName = moduleNameValue + t.variantName = variantName + t.applicationId = applicationId + t.skip = config.skip + t.debug = config.debug + t.mockedFingerprint = config.mockedFingerprint + t.srcFoldersJson = toJsonStringList(config.srcFolders) + t.stringFilesJson = toJsonStringList(config.stringFiles) + t.assetsFilesJson = toJsonStringList(config.assetsFiles) } tasks.register( "stringcareAfterMergeAssets$variantCapitalized", - RestoreAssetsTask::class.java - ) { - it.projectPath = projectPath - it.moduleName = moduleName - it.skip = config.skip + RestoreAssetsTask::class.java, + ) { t -> + (t as Task).usesService(buildService) + (t as RestoreAssetsTask).stringCareService.set(buildService) + t.projectPath = absoluteProjectPath + t.moduleName = moduleNameValue + t.skip = config.skip } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt index 44886c3..3459117 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt @@ -5,83 +5,126 @@ import dev.vyp.stringcare.plugin.StringCarePlugin import dev.vyp.stringcare.plugin.models.ResourceFile import dev.vyp.stringcare.plugin.models.SAttribute import dev.vyp.stringcare.plugin.models.StringEntity +import org.w3c.dom.Element import java.io.File -fun locateResourceFiles(projectPath: String, configuration: StringCareConfiguration): List { +fun locateResourceFiles( + projectPath: String, + configuration: StringCareConfiguration, +): List { if (configuration.debug) { println("== RESOURCE FILES FOUND ======================================") } - return File(projectPath).walkTopDown() - .filterIndexed { _, file -> - file.validForXMLConfiguration(configuration.normalize()) - }.map { - it.resourceFile(configuration.normalize())!! + val normalized = configuration.normalize() + return File(projectPath) + .walkTopDown() + .onEnter { dir -> + val path = dir.path.replace('\\', '/') + !path.contains("/build/") && + !path.contains("/.gradle/") && + !path.contains("/.git/") && + !path.contains("/node_modules/") + }.filter { file -> + !file.isDirectory && file.validForXMLConfiguration(normalized) + }.mapNotNull { file -> + file.resourceFile(normalized) }.toList() } -fun backupResourceFiles(projectPath: String, configuration: StringCareConfiguration): List { +fun backupResourceFiles( + projectPath: String, + configuration: StringCareConfiguration, + tempRoot: String, +): List { val files = locateResourceFiles(projectPath, configuration.normalize()) files.forEach { resource -> - resource.backup() + resource.backup(tempRoot) } return files } -fun restoreResourceFiles(projectPath: String, module: String): List { - val resourceFiles = File("${StringCarePlugin.tempFolder}${File.separator}$module") - .walkTopDown().toList().filter { file -> - !file.isDirectory - }.map { - it.restore(projectPath) - } +/** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ +fun backupResourceFiles( + projectPath: String, + configuration: StringCareConfiguration, +): List = backupResourceFiles(projectPath, configuration, StringCareSession.requireTestTempRoot()) + +/** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ +fun restoreResourceFiles( + projectPath: String, + module: String, +): List { + val tempRoot = StringCareSession.requireTestTempRoot() + val out = restoreResourceFiles(projectPath, module, tempRoot) StringCarePlugin.resetFolder() + return out +} + +fun restoreResourceFiles( + projectPath: String, + module: String, + tempRoot: String, +): List { + val resourceFiles = + File("$tempRoot${File.separator}$module") + .walkTopDown() + .toList() + .filter { file -> + !file.isDirectory + }.map { file -> + file.restore(projectPath, tempRoot) + } return resourceFiles } fun parseXML(file: File): List { val entities = mutableListOf() - val doc = file.getXML() - val nList = doc.getElementsByTagName("string") - for (i in 0 until nList.length) { - val node = nList.item(i) + val stringNodes = doc.getElementsByTagName("string") + for (i in 0 until stringNodes.length) { + val node = stringNodes.item(i) as Element var name = "" val attributes = mutableListOf() var obfuscate = false var androidTreatment = true var containsHtml = false - for (a in 0 until node.attributes.length) { - val attribute = node.attributes.item(a) - for (n in 0 until attribute.childNodes.length) { - val attr = attribute.childNodes.item(n) - if (attribute.nodeName == "name") name = attr.nodeValue - if (attribute.nodeName == "hidden" && attr.nodeValue != "false") { - obfuscate = true - } - if (attribute.nodeName == "androidTreatment" && attr.nodeValue == "false") { - androidTreatment = false - } - if (attribute.nodeName == "containsHtml" && attr.nodeValue != "false") { - containsHtml = true - } - attributes.add(SAttribute(attribute.nodeName, attr.nodeValue)) + val attrs = node.attributes + for (j in 0 until attrs.length) { + val attribute = attrs.item(j) + val attrName = attribute.nodeName + val attrVal = attribute.nodeValue ?: "" + when (attrName) { + "name" -> name = attrVal + "hidden" -> if (attrVal != "false") obfuscate = true + "androidTreatment" -> if (attrVal == "false") androidTreatment = false + "containsHtml" -> if (attrVal != "false") containsHtml = true } + attributes.add(SAttribute(attrName, attrVal)) } if (obfuscate) { entities.add( StringEntity( - name, attributes, when { + name, + attributes, + when { containsHtml -> node.extractHtml() else -> node.textContent - }, "string", i, androidTreatment - ) + }, + "string", + i, + androidTreatment, + ), ) } } return entities } -fun modifyXML(file: File, key: String, configuration: StringCareConfiguration) { +fun modifyXML( + file: File, + key: String, + configuration: StringCareConfiguration, +) { val stringEntities = parseXML(file) if (configuration.debug) { PrintUtils.print(null, file.getContent(), true) @@ -91,9 +134,10 @@ fun modifyXML(file: File, key: String, configuration: StringCareConfiguration) { val nList = doc.getElementsByTagName("string") for (i in 0 until nList.length) { val node = nList.item(i) - val entity = stringEntities.find { - it.tag == "string" && it.index == i - } + val entity = + stringEntities.find { + it.tag == "string" && it.index == i + } entity?.let { node.textContent = obfuscateStringEntity(key, it, configuration.applicationId).value } @@ -106,18 +150,34 @@ fun modifyXML(file: File, key: String, configuration: StringCareConfiguration) { } } -fun obfuscateStringEntity(key: String, entity: StringEntity, mockId: String): StringEntity { - val obfuscation = Stark.obfuscate(key, when (entity.androidTreatment) { - true -> entity.value.androidTreatment() - false -> entity.value.unescape() - }.toByteArray(), - mockId - ).toReadableString() +fun obfuscateStringEntity( + key: String, + entity: StringEntity, + mockId: String, +): StringEntity { + val obfuscation = + Stark + .obfuscate( + key, + when (entity.androidTreatment) { + true -> entity.value.androidTreatment() + false -> entity.value.unescape() + }.toByteArray(), + mockId, + ).toReadableString() return StringEntity(entity.name, entity.attributes, obfuscation, entity.tag, entity.index, entity.androidTreatment) } -fun revealStringEntity(key: String, entity: StringEntity, mockId: String): StringEntity { - val arr: ByteArray = entity.value.split(", ").map { it.toInt().toByte() }.toByteArray() +fun revealStringEntity( + key: String, + entity: StringEntity, + mockId: String, +): StringEntity { + val arr: ByteArray = + entity.value + .split(", ") + .map { it.toInt().toByte() } + .toByteArray() val original = String(Stark.reveal(key, arr, mockId)) return StringEntity(entity.name, entity.attributes, original, entity.tag, entity.index, entity.androidTreatment) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt index f286631..2f5f494 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt @@ -2,4 +2,8 @@ package dev.vyp.stringcare.plugin.models import java.io.File -data class AssetsFile(val file: File, val sourceFolder: String, val module: String) +data class AssetsFile( + val file: File, + val sourceFolder: String, + val module: String, +) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt index 094c7ec..423d862 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt @@ -1,3 +1,17 @@ package dev.vyp.stringcare.plugin.models -data class ExecutionResult(val command: String, val result: String) +/** Result of running an external command (e.g. Gradle wrapper / shell script). */ +sealed class ExecutionResult { + data class Success( + val command: String, + val result: String, + val exitCode: Int = 0, + ) : ExecutionResult() + + data class Failure( + val command: String, + val result: String, + val exitCode: Int?, + val error: Throwable? = null, + ) : ExecutionResult() +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt index 32f9438..8695ba1 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt @@ -2,4 +2,8 @@ package dev.vyp.stringcare.plugin.models import java.io.File -data class ResourceFile(val file: File, val sourceFolder: String, val module: String) +data class ResourceFile( + val file: File, + val sourceFolder: String, + val module: String, +) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt index 941ec2c..b810da2 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt @@ -6,7 +6,10 @@ open class StringEntity( var value: String, val tag: String, val index: Int, - val androidTreatment: Boolean = true + val androidTreatment: Boolean = true, ) -data class SAttribute(val name: String, val value: String) +data class SAttribute( + val name: String, + val value: String, +) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt new file mode 100644 index 0000000..818eb67 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt @@ -0,0 +1,59 @@ +package dev.vyp.stringcare.plugin.services + +import dev.vyp.stringcare.plugin.StringCareConfiguration +import org.gradle.api.provider.Property +import org.gradle.api.services.BuildService +import org.gradle.api.services.BuildServiceParameters +import java.util.concurrent.ConcurrentHashMap + +/** + * Per-build shared state for StringCare (paths, variant applicationIds, resolved DSL config). + * Replaces the previous static [StringCarePlugin] companion object for thread-safety across workers. + */ +abstract class StringCareBuildService : BuildService { + interface Params : BuildServiceParameters { + val absoluteProjectPath: Property + } + + private val variantApplicationIds = ConcurrentHashMap() + + @Volatile + private var tempDir: String? = null + + @Volatile + private var resolvedConfiguration: StringCareConfiguration? = null + + fun absoluteProjectPath(): String = parameters.absoluteProjectPath.get() + + fun getOrCreateTempFolder(): String { + tempDir?.let { return it } + synchronized(this) { + tempDir?.let { return it } + val created = kotlin.io.path.createTempDirectory("stringcare-").toFile().absolutePath + tempDir = created + return created + } + } + + fun resetTempFolder() { + tempDir = null + } + + fun putVariantApplicationId( + variantName: String, + applicationId: String, + ) { + variantApplicationIds[variantName] = applicationId + } + + fun firstVariantKeyOrDefault(default: String): String = variantApplicationIds.keys.firstOrNull() ?: default + + fun setResolvedConfiguration(config: StringCareConfiguration) { + resolvedConfiguration = config + } + + fun getResolvedConfiguration(): StringCareConfiguration = + resolvedConfiguration ?: error("StringCare configuration not initialized") + + fun variantApplicationIdsView(): Map = variantApplicationIds.toMap() +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt index 5303358..069cede 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt @@ -1,8 +1,8 @@ package dev.vyp.stringcare.plugin.tasks -import com.google.gson.Gson import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.internal.PrintUtils +import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupAssets import dev.vyp.stringcare.plugin.internal.backupAssetsFiles import dev.vyp.stringcare.plugin.internal.fingerPrint @@ -10,12 +10,17 @@ import dev.vyp.stringcare.plugin.internal.getContent import dev.vyp.stringcare.plugin.internal.locateAssetsFiles import dev.vyp.stringcare.plugin.internal.obfuscateAssets import dev.vyp.stringcare.plugin.internal.obfuscateFile -import dev.vyp.stringcare.plugin.internal.Stark +import dev.vyp.stringcare.plugin.internal.parseJsonStringList +import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction -open class ObfuscateAssetsTask : DefaultTask() { +abstract class ObfuscateAssetsTask : DefaultTask() { + @get:ServiceReference("stringCareBuildService") + abstract val stringCareService: Property @Input var projectPath: String = "" @@ -47,25 +52,21 @@ open class ObfuscateAssetsTask : DefaultTask() { @Input var assetsFilesJson: String = "[]" - private fun configuration(): StringCareConfiguration { - val gson = Gson() - return StringCareConfiguration(moduleName).apply { + private fun configuration(): StringCareConfiguration = + StringCareConfiguration(moduleName).apply { this.applicationId = this@ObfuscateAssetsTask.applicationId this.skip = this@ObfuscateAssetsTask.skip this.debug = this@ObfuscateAssetsTask.debug this.mockedFingerprint = this@ObfuscateAssetsTask.mockedFingerprint - @Suppress("UNCHECKED_CAST") - gson.fromJson(srcFoldersJson, MutableList::class.java)?.let { srcFolders.addAll(it as List) } - @Suppress("UNCHECKED_CAST") - gson.fromJson(stringFilesJson, MutableList::class.java)?.let { stringFiles.addAll(it as List) } - @Suppress("UNCHECKED_CAST") - gson.fromJson(assetsFilesJson, MutableList::class.java)?.let { assetsFiles.addAll(it as List) } + srcFolders.addAll(parseJsonStringList(srcFoldersJson)) + stringFiles.addAll(parseJsonStringList(stringFilesJson)) + assetsFiles.addAll(parseJsonStringList(assetsFilesJson)) } - } @TaskAction fun run() { val config = configuration() + Stark.setVerboseNativeLogging(config.debug) if (skip) { PrintUtils.print(moduleName, "Skipping $variantName") return @@ -74,6 +75,7 @@ open class ObfuscateAssetsTask : DefaultTask() { PrintUtils.print(moduleName, "Skipping $variantName (native library not available for this architecture)") return } + val tempRoot = stringCareService.get().getOrCreateTempFolder() PrintUtils.print("", "ApplicationId: $applicationId", tab = true) fingerPrint(moduleName, variantName, config) { key -> if (key == "none" || key.trim().isEmpty()) { @@ -82,7 +84,7 @@ open class ObfuscateAssetsTask : DefaultTask() { } PrintUtils.print(moduleName, "$variantName:$key") PrintUtils.print(moduleName, backupAssets) - backupAssetsFiles(projectPath, config) + backupAssetsFiles(projectPath, config, tempRoot) val files = locateAssetsFiles(projectPath, config) files.forEach { file -> if (debug) PrintUtils.print(null, file.file.getContent()) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt index af17807..8005568 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt @@ -1,20 +1,25 @@ package dev.vyp.stringcare.plugin.tasks -import com.google.gson.Gson import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.internal.PrintUtils +import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupResourceFiles import dev.vyp.stringcare.plugin.internal.backupStringRes import dev.vyp.stringcare.plugin.internal.fingerPrint import dev.vyp.stringcare.plugin.internal.locateResourceFiles import dev.vyp.stringcare.plugin.internal.modifyXML import dev.vyp.stringcare.plugin.internal.obfuscateStringRes -import dev.vyp.stringcare.plugin.internal.Stark +import dev.vyp.stringcare.plugin.internal.parseJsonStringList +import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction -open class ObfuscateStringsTask : DefaultTask() { +abstract class ObfuscateStringsTask : DefaultTask() { + @get:ServiceReference("stringCareBuildService") + abstract val stringCareService: Property @Input var projectPath: String = "" @@ -46,25 +51,21 @@ open class ObfuscateStringsTask : DefaultTask() { @Input var assetsFilesJson: String = "[]" - private fun configuration(): StringCareConfiguration { - val gson = Gson() - return StringCareConfiguration(moduleName).apply { + private fun configuration(): StringCareConfiguration = + StringCareConfiguration(moduleName).apply { this.applicationId = this@ObfuscateStringsTask.applicationId this.skip = this@ObfuscateStringsTask.skip this.debug = this@ObfuscateStringsTask.debug this.mockedFingerprint = this@ObfuscateStringsTask.mockedFingerprint - @Suppress("UNCHECKED_CAST") - gson.fromJson(srcFoldersJson, MutableList::class.java)?.let { srcFolders.addAll(it as List) } - @Suppress("UNCHECKED_CAST") - gson.fromJson(stringFilesJson, MutableList::class.java)?.let { stringFiles.addAll(it as List) } - @Suppress("UNCHECKED_CAST") - gson.fromJson(assetsFilesJson, MutableList::class.java)?.let { assetsFiles.addAll(it as List) } + srcFolders.addAll(parseJsonStringList(srcFoldersJson)) + stringFiles.addAll(parseJsonStringList(stringFilesJson)) + assetsFiles.addAll(parseJsonStringList(assetsFilesJson)) } - } @TaskAction fun run() { val config = configuration() + Stark.setVerboseNativeLogging(config.debug) if (skip) { PrintUtils.print(moduleName, "Skipping $variantName") return @@ -73,6 +74,7 @@ open class ObfuscateStringsTask : DefaultTask() { PrintUtils.print(moduleName, "Skipping $variantName (native library not available for this architecture)") return } + val tempRoot = stringCareService.get().getOrCreateTempFolder() PrintUtils.print("", "ApplicationId: $applicationId", tab = true) fingerPrint(moduleName, variantName, config) { key -> if (key == "none" || key.trim().isEmpty()) { @@ -81,7 +83,7 @@ open class ObfuscateStringsTask : DefaultTask() { } PrintUtils.print(moduleName, "$variantName:$key") PrintUtils.print(moduleName, backupStringRes) - backupResourceFiles(projectPath, config) + backupResourceFiles(projectPath, config, tempRoot) val files = locateResourceFiles(projectPath, config) files.forEach { modifyXML(it.file, key, config) } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt index db64d38..42a99c3 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt @@ -3,11 +3,16 @@ package dev.vyp.stringcare.plugin.tasks import dev.vyp.stringcare.plugin.internal.PrintUtils import dev.vyp.stringcare.plugin.internal.restoreAssets import dev.vyp.stringcare.plugin.internal.restoreAssetsFiles +import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction -open class RestoreAssetsTask : DefaultTask() { +abstract class RestoreAssetsTask : DefaultTask() { + @get:ServiceReference("stringCareBuildService") + abstract val stringCareService: Property @Input var projectPath: String = "" @@ -22,6 +27,9 @@ open class RestoreAssetsTask : DefaultTask() { fun run() { if (skip) return PrintUtils.print(moduleName, restoreAssets) - restoreAssetsFiles(projectPath, moduleName) + val service = stringCareService.get() + val tempRoot = service.getOrCreateTempFolder() + restoreAssetsFiles(projectPath, moduleName, tempRoot) + service.resetTempFolder() } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt index e48198b..badfbdc 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt @@ -3,11 +3,16 @@ package dev.vyp.stringcare.plugin.tasks import dev.vyp.stringcare.plugin.internal.PrintUtils import dev.vyp.stringcare.plugin.internal.restoreResourceFiles import dev.vyp.stringcare.plugin.internal.restoreStringRes +import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction -open class RestoreStringsTask : DefaultTask() { +abstract class RestoreStringsTask : DefaultTask() { + @get:ServiceReference("stringCareBuildService") + abstract val stringCareService: Property @Input var projectPath: String = "" @@ -22,6 +27,9 @@ open class RestoreStringsTask : DefaultTask() { fun run() { if (skip) return PrintUtils.print(moduleName, restoreStringRes) - restoreResourceFiles(projectPath, moduleName) + val service = stringCareService.get() + val tempRoot = service.getOrCreateTempFolder() + restoreResourceFiles(projectPath, moduleName, tempRoot) + service.resetTempFolder() } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt index 666873a..863e5ee 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt @@ -1,17 +1,21 @@ package dev.vyp.stringcare.plugin.tasks -import com.google.gson.Gson import dev.vyp.stringcare.plugin.StringCareConfiguration -import dev.vyp.stringcare.plugin.StringCarePlugin import dev.vyp.stringcare.plugin.internal.getContent import dev.vyp.stringcare.plugin.internal.locateResourceFiles +import dev.vyp.stringcare.plugin.internal.parseJsonStringList import dev.vyp.stringcare.plugin.internal.parseXML +import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import java.io.File -open class SCPreview : DefaultTask() { +abstract class SCPreview : DefaultTask() { + @get:ServiceReference("stringCareBuildService") + abstract val stringCareService: Property @Input var module = String() @@ -42,36 +46,25 @@ open class SCPreview : DefaultTask() { @TaskAction fun greet() { - val gson = Gson() println("== REPORT ======================================") val task = this println("\t== $variantName ======================================") - val configuration = StringCareConfiguration(module).apply { - @Suppress("UNCHECKED_CAST") - val lSrcFolders = gson.fromJson(task.srcFolders, MutableList::class.java) - if (task.srcFolders.isNotEmpty()) { - srcFolders.addAll(lSrcFolders as MutableList) - } - @Suppress("UNCHECKED_CAST") - val lStringFiles = gson.fromJson(task.stringFiles, MutableList::class.java) - if (task.stringFiles.isNotEmpty()) { - stringFiles.addAll(lStringFiles as MutableList) - } - @Suppress("UNCHECKED_CAST") - val lAssetsFiles = gson.fromJson(task.assetsFiles, MutableList::class.java) - if (task.assetsFiles.isNotEmpty()) { - assetsFiles.addAll(lAssetsFiles as MutableList) - } - if (task.mockedFingerprint.isNotEmpty()) { - mockedFingerprint = task.mockedFingerprint + val configuration = + StringCareConfiguration(module).apply { + srcFolders.addAll(parseJsonStringList(task.srcFolders)) + stringFiles.addAll(parseJsonStringList(task.stringFiles)) + assetsFiles.addAll(parseJsonStringList(task.assetsFiles)) + if (task.mockedFingerprint.isNotEmpty()) { + mockedFingerprint = task.mockedFingerprint + } + applicationId = task.applicationId + skip = task.skip + debug = task.debug } - applicationId = task.applicationId - skip = task.skip - debug = task.debug - } - val files = locateResourceFiles(StringCarePlugin.absoluteProjectPath, configuration) + val projectRoot = stringCareService.get().absoluteProjectPath() + val files = locateResourceFiles(projectRoot, configuration) println("\tLocated files(${files.size}) for obfuscating") - println("\tConfig (${gson.toJson(configuration)})") + println("\tConfig (module=${configuration.name}, debug=${configuration.debug})") files.forEach { file -> println("\t- ${file.file.name}") println("\t\t${file.module}${File.separator}${file.sourceFolder}${File.separator}") diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt index 3ea11f2..d444fe8 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt @@ -1,22 +1,26 @@ package dev.vyp.stringcare.plugin.tasks -import com.google.gson.Gson import dev.vyp.stringcare.plugin.StringCareConfiguration -import dev.vyp.stringcare.plugin.StringCarePlugin +import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupResourceFiles import dev.vyp.stringcare.plugin.internal.extractFingerprint import dev.vyp.stringcare.plugin.internal.getContent import dev.vyp.stringcare.plugin.internal.modifyXML +import dev.vyp.stringcare.plugin.internal.parseJsonStringList import dev.vyp.stringcare.plugin.internal.parseXML import dev.vyp.stringcare.plugin.internal.restoreResourceFiles import dev.vyp.stringcare.plugin.internal.runCommand import dev.vyp.stringcare.plugin.internal.signingReportTask -import dev.vyp.stringcare.plugin.internal.Stark +import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction -open class SCTestObfuscation : DefaultTask() { +abstract class SCTestObfuscation : DefaultTask() { + @get:ServiceReference("stringCareBuildService") + abstract val stringCareService: Property @Input var module = String() @@ -49,33 +53,21 @@ open class SCTestObfuscation : DefaultTask() { fun greet() { println("== TEST OBFUSCATION ======================================") var key = "" - val gson = Gson() - val task = this - val configuration = StringCareConfiguration(module).apply { - @Suppress("UNCHECKED_CAST") - val lSrcFolders = gson.fromJson(task.srcFolders, MutableList::class.java) - if (task.srcFolders.isNotEmpty()) { - srcFolders.addAll(lSrcFolders as MutableList) - } - @Suppress("UNCHECKED_CAST") - val lStringFiles = gson.fromJson(task.stringFiles, MutableList::class.java) - if (task.stringFiles.isNotEmpty()) { - stringFiles.addAll(lStringFiles as MutableList) - } - @Suppress("UNCHECKED_CAST") - val lAssetsFiles = gson.fromJson(task.assetsFiles, MutableList::class.java) - if (task.assetsFiles.isNotEmpty()) { - assetsFiles.addAll(lAssetsFiles as MutableList) - } - if (task.mockedFingerprint.isNotEmpty()) { - mockedFingerprint = task.mockedFingerprint + val configuration = + StringCareConfiguration(module).apply { + srcFolders.addAll(parseJsonStringList(task.srcFolders)) + stringFiles.addAll(parseJsonStringList(task.stringFiles)) + assetsFiles.addAll(parseJsonStringList(task.assetsFiles)) + if (task.mockedFingerprint.isNotEmpty()) { + mockedFingerprint = task.mockedFingerprint + } + applicationId = task.applicationId + skip = task.skip + debug = task.debug } - applicationId = task.applicationId - skip = task.skip - debug = task.debug - } println("\t== $variantName ======================================") + Stark.setVerboseNativeLogging(configuration.debug) if (configuration.skip) { println("\tSkipping (skip=true)") return @@ -87,7 +79,10 @@ open class SCTestObfuscation : DefaultTask() { signingReportTask().runCommand { _, result -> key = result.extractFingerprint(module, variantName, configuration) } - val filesToObfuscate = backupResourceFiles(StringCarePlugin.absoluteProjectPath, configuration) + val service = stringCareService.get() + val tempRoot = service.getOrCreateTempFolder() + val projectRoot = service.absoluteProjectPath() + val filesToObfuscate = backupResourceFiles(projectRoot, configuration, tempRoot) filesToObfuscate.forEach { file -> val originalEntities = parseXML(file.file) println("\t============================") @@ -108,7 +103,8 @@ open class SCTestObfuscation : DefaultTask() { println(file.file.getContent()) println("\t============================") } - restoreResourceFiles(StringCarePlugin.absoluteProjectPath, module) + restoreResourceFiles(projectRoot, module, tempRoot) + service.resetTempFolder() println("== END OBFUSCATION ==================================") } } diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt index 53f562e..0d576a5 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt @@ -6,15 +6,15 @@ import org.junit.jupiter.api.Test import java.io.File class AssetsTest { - // private val logger by logger() - private val configuration = defaultConfig().apply { - debug = true - applicationId = "com.stringcare.sample" - stringFiles.add("strings_extra.xml") - srcFolders.add("src/other_source") - } + private val configuration = + defaultConfig().apply { + debug = true + applicationId = "com.stringcare.sample" + stringFiles.add("strings_extra.xml") + srcFolders.add("src/other_source") + } @BeforeEach fun setup() { @@ -25,9 +25,14 @@ class AssetsTest { fun `01 - (PLUGIN) locate assets files for default configuration`() { val temp = tempPath() prepareTask(temp).runCommand { _, _ -> - assert(locateAssetsFiles("$temp${File.separator}$testProjectName", configuration.apply { - assetsFiles = mutableListOf("*.json") - }).isNotEmpty()) + assert( + locateAssetsFiles( + "$temp${File.separator}$testProjectName", + configuration.apply { + assetsFiles = mutableListOf("*.json") + }, + ).isNotEmpty(), + ) } StringCarePlugin.resetFolder() } @@ -36,9 +41,14 @@ class AssetsTest { fun `02 - (PLUGIN) backup assets files`() { val temp = tempPath() prepareTask(temp).runCommand { _, _ -> - assert(backupAssetsFiles("$temp${File.separator}$testProjectName", configuration.apply { - assetsFiles = mutableListOf("*.json") - }).isNotEmpty()) + assert( + backupAssetsFiles( + "$temp${File.separator}$testProjectName", + configuration.apply { + assetsFiles = mutableListOf("*.json") + }, + ).isNotEmpty(), + ) } StringCarePlugin.resetFolder() } @@ -49,15 +59,18 @@ class AssetsTest { prepareTask(temp).runCommand { _, report -> println(report) assert( - restoreAssetsFiles("$temp${File.separator}$testProjectName", defaultMainModule).isEmpty() + restoreAssetsFiles("$temp${File.separator}$testProjectName", defaultMainModule).isEmpty(), ) assert( - backupAssetsFiles("$temp${File.separator}$testProjectName", configuration.apply { - assetsFiles = mutableListOf("*.json") - }).isNotEmpty() + backupAssetsFiles( + "$temp${File.separator}$testProjectName", + configuration.apply { + assetsFiles = mutableListOf("*.json") + }, + ).isNotEmpty(), ) assert( - restoreAssetsFiles("$temp${File.separator}$testProjectName", defaultMainModule).isNotEmpty() + restoreAssetsFiles("$temp${File.separator}$testProjectName", defaultMainModule).isNotEmpty(), ) } } @@ -70,11 +83,13 @@ class AssetsTest { val key = report.extractFingerprint(variant = "prodDebug", configuration = configuration) println(key) assert(key.isNotEmpty()) - val files = locateAssetsFiles( - "$temp${File.separator}$testProjectName", - configuration.apply { - assetsFiles = mutableListOf("*.json") - }) + val files = + locateAssetsFiles( + "$temp${File.separator}$testProjectName", + configuration.apply { + assetsFiles = mutableListOf("*.json") + }, + ) assert(files.isNotEmpty()) files.forEach { println("-------------------------------------------------------") @@ -83,7 +98,7 @@ class AssetsTest { obfuscateFile( key, it.file, - configuration.applicationId + configuration.applicationId, ) val obfuscated = it.file.getContent() println("obfuscated: \n $obfuscated") @@ -100,11 +115,13 @@ class AssetsTest { val key = report.extractFingerprint(variant = "prodDebug", configuration = configuration) println(key) assert(key.isNotEmpty()) - val files = locateAssetsFiles( - "$temp${File.separator}$testProjectName", - configuration.apply { - assetsFiles = mutableListOf("*.json") - }) + val files = + locateAssetsFiles( + "$temp${File.separator}$testProjectName", + configuration.apply { + assetsFiles = mutableListOf("*.json") + }, + ) assert(files.isNotEmpty()) files.forEach { println("-------------------------------------------------------") @@ -113,7 +130,7 @@ class AssetsTest { obfuscateFile( key, it.file, - configuration.applicationId + configuration.applicationId, ) val obfuscated = it.file.getContent() println("obfuscated: \n $obfuscated") @@ -121,7 +138,7 @@ class AssetsTest { revealFile( key, it.file, - configuration.applicationId + configuration.applicationId, ) val reveal = it.file.getContent() println("reveal: \n $reveal") @@ -129,5 +146,4 @@ class AssetsTest { } } } - -} \ No newline at end of file +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt new file mode 100644 index 0000000..06a4228 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt @@ -0,0 +1,20 @@ +package dev.vyp.stringcare.plugin + +import dev.vyp.stringcare.plugin.internal.parseJsonStringList +import dev.vyp.stringcare.plugin.internal.toJsonStringList +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class JsonListsTest { + @Test + fun `round-trip string lists through JSON`() { + val list = listOf("src/main", "strings.xml", "path with space") + val json = toJsonStringList(list) + assertEquals(list, parseJsonStringList(json)) + } + + @Test + fun `empty list parses`() { + assertEquals(emptyList(), parseJsonStringList("[]")) + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/PluginApplicationTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/PluginApplicationTest.kt index 520d152..aa1a841 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/PluginApplicationTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/PluginApplicationTest.kt @@ -6,7 +6,6 @@ import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.Test class PluginApplicationTest { - @Test fun `plugin applies and creates stringcare extension`() { val project: Project = ProjectBuilder.builder().build() diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt index 503cd2b..a3acb2f 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt @@ -2,19 +2,19 @@ package dev.vyp.stringcare.plugin import dev.vyp.stringcare.plugin.internal.* import dev.vyp.stringcare.plugin.models.StringEntity +import dev.vyp.stringcare.plugin.utils.modifyForTest import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import dev.vyp.stringcare.plugin.utils.modifyForTest import java.io.File class SCTest { - - private val configuration = defaultConfig().apply { - debug = true - applicationId = "com.stringcare.sample" - stringFiles.add("strings_extra.xml") - srcFolders.add("src/other_source") - } + private val configuration = + defaultConfig().apply { + debug = true + applicationId = "com.stringcare.sample" + stringFiles.add("strings_extra.xml") + srcFolders.add("src/other_source") + } @BeforeEach fun setup() { @@ -71,13 +71,13 @@ class SCTest { prepareTask(temp).runCommand { _, report -> println(report) assert( - restoreResourceFiles("$temp${File.separator}$testProjectName", defaultMainModule).isEmpty() + restoreResourceFiles("$temp${File.separator}$testProjectName", defaultMainModule).isEmpty(), ) assert( - backupResourceFiles("$temp${File.separator}$testProjectName", configuration).isNotEmpty() + backupResourceFiles("$temp${File.separator}$testProjectName", configuration).isNotEmpty(), ) assert( - restoreResourceFiles("$temp${File.separator}$testProjectName", defaultMainModule).isNotEmpty() + restoreResourceFiles("$temp${File.separator}$testProjectName", defaultMainModule).isNotEmpty(), ) } } @@ -106,11 +106,12 @@ class SCTest { files.forEach { file -> val entities = parseXML(file.file) entities.forEach { entity -> - val obfuscated = obfuscateStringEntity( - key, - entity, - configuration.applicationId - ) + val obfuscated = + obfuscateStringEntity( + key, + entity, + configuration.applicationId, + ) assert(obfuscated.value != entity.value) } } @@ -129,26 +130,28 @@ class SCTest { files.forEach { file -> val entities = parseXML(file.file) entities.forEach { entity -> - val obfuscated = obfuscateStringEntity( - key, - entity, - configuration.applicationId - ) + val obfuscated = + obfuscateStringEntity( + key, + entity, + configuration.applicationId, + ) assert(obfuscated.value != entity.value) - val original = revealStringEntity( - key, - obfuscated, - configuration.applicationId - ) + val original = + revealStringEntity( + key, + obfuscated, + configuration.applicationId, + ) assert( - original.value == when (entity.androidTreatment) { - true -> entity.value.androidTreatment() - else -> entity.value - } + original.value == + when (entity.androidTreatment) { + true -> entity.value.androidTreatment() + else -> entity.value + }, ) - } } } @@ -207,9 +210,10 @@ class SCTest { assert(restoredEntities.isNotEmpty()) originalEntities.forEach { entity -> - val eq = restoredEntities.find { - it.name == entity.name - } + val eq = + restoredEntities.find { + it.name == entity.name + } eq?.let { assert(entity.name == it.name) assert(entity.value == it.value) @@ -230,13 +234,14 @@ class SCTest { modifyXML( file.file, report.extractFingerprint(configuration = configuration), - configuration + configuration, ) } - val filesObfuscated = locateResourceFiles( - "$temp${File.separator}$testProjectName", - configuration - ) + val filesObfuscated = + locateResourceFiles( + "$temp${File.separator}$testProjectName", + configuration, + ) filesObfuscated.forEach { file -> val entities = parseXML(file.file) assert(entities.isEmpty()) @@ -279,7 +284,6 @@ class SCTest { assert(androidReport.contains("END REPORT")) println(androidReport) } - } } @@ -295,8 +299,6 @@ class SCTest { assert(androidReport.contains("END OBFUSCATION")) println(androidReport) } - } } - -} \ No newline at end of file +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/StringCareBaselineBehaviorTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/StringCareBaselineBehaviorTest.kt new file mode 100644 index 0000000..bf29d52 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/StringCareBaselineBehaviorTest.kt @@ -0,0 +1,35 @@ +package dev.vyp.stringcare.plugin + +import dev.vyp.stringcare.plugin.internal.defaultConfig +import dev.vyp.stringcare.plugin.internal.locateResourceFiles +import dev.vyp.stringcare.plugin.internal.tempPath +import org.gradle.testfixtures.ProjectBuilder +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Test +import java.io.File + +/** + * Baseline checks for plugin wiring and filesystem helpers (no Android SDK required). + */ +class StringCareBaselineBehaviorTest { + @Test + fun `plugin applies and exposes stringcare extension`() { + val project = ProjectBuilder.builder().build() + project.pluginManager.apply("dev.vyp.stringcare.plugin") + assertNotNull(project.extensions.findByName("stringcare")) + } + + @Test + fun `locateResourceFiles returns nothing for empty temp project`() { + val root = tempPath() + try { + val dir = File(root, "empty-res").apply { mkdirs() } + val config = defaultConfig() + val found = locateResourceFiles(dir.absolutePath, config) + assertTrue(found.isEmpty()) + } finally { + StringCarePlugin.resetFolder() + } + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/XmlProcessorTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/XmlProcessorTest.kt index 90f975e..fe7e324 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/XmlProcessorTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/XmlProcessorTest.kt @@ -1,23 +1,22 @@ package dev.vyp.stringcare.plugin import dev.vyp.stringcare.plugin.internal.parseXML -import dev.vyp.stringcare.plugin.models.StringEntity import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import java.io.File class XmlProcessorTest { - @Test fun `parseXML extracts StringEntity with hidden true`() { - val xml = """ + val xml = + """ Hello - """.trimIndent() + """.trimIndent() val file = File.createTempFile("strings", ".xml") file.writeText(xml) try { @@ -34,12 +33,13 @@ class XmlProcessorTest { @Test fun `parseXML returns empty for no hidden strings`() { - val xml = """ + val xml = + """ Hello - """.trimIndent() + """.trimIndent() val file = File.createTempFile("strings", ".xml") file.writeText(xml) try { diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/utils/Helper.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/utils/Helper.kt index 59a62dd..03e8b01 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/utils/Helper.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/utils/Helper.kt @@ -7,16 +7,22 @@ import dev.vyp.stringcare.plugin.internal.version import java.io.File import java.io.FileWriter -fun modifyForTest(directory: String, projectPath: String) { +fun modifyForTest( + directory: String, + projectPath: String, +) { val current = File(".") val file = File("$directory${File.separator}$projectPath${File.separator}build.gradle") - val content = file.getContent().replace( - "classpath \"io.github.stringcare:plugin:\$stringcare_version\"", - when (getOs()) { - Os.WINDOWS -> "\nclasspath files(\"${current.absolutePath.replace("\\", "\\\\")}${File.separator}${File.separator}build${File.separator}${File.separator}libs${File.separator}${File.separator}plugin-$version.jar\")\n" - Os.OSX, Os.LINUX -> "\nclasspath files(\"${current.absolutePath}${File.separator}build${File.separator}libs${File.separator}plugin-$version.jar\")\n" - } - ) + val content = + file.getContent().replace( + "classpath \"io.github.stringcare:plugin:\$stringcare_version\"", + when (getOs()) { + Os.WINDOWS -> "\nclasspath files(\"${current.absolutePath.replace( + "\\", + "\\\\", + )}${File.separator}${File.separator}build${File.separator}${File.separator}libs${File.separator}${File.separator}plugin-$version.jar\")\n" + Os.OSX, Os.LINUX -> "\nclasspath files(\"${current.absolutePath}${File.separator}build${File.separator}libs${File.separator}plugin-$version.jar\")\n" + }, + ) FileWriter(file.absolutePath).use { it.write(content) } - -} \ No newline at end of file +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 44e15a2..938c8dc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,6 +7,18 @@ pluginManagement { includeBuild("plugin") } +plugins { + id("com.gradle.develocity") version "3.19.2" +} + +develocity { + buildScan { + termsOfUseUrl.set("https://gradle.com/help/legal-terms-of-use") + termsOfUseAgree.set("yes") + publishing.onlyIf { it.buildResult.failures.isNotEmpty() } + } +} + dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { From 5cb10cb25e869a37dff9d478d71af7c4b555a960 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 16:41:22 +0100 Subject: [PATCH 02/24] Enhance CI workflow and plugin testing capabilities: update GitHub Actions configuration to include optional integration tests and Jacoco test report generation. Refactor build.gradle.kts to introduce a new integration test task, improve task property handling, and ensure proper configuration for test execution. Update README.md to clarify testing requirements and usage instructions. Refactor task properties to use Gradle's Property API for better configuration management. --- .github/workflows/ci.yml | 6 +- plugin/README.md | 14 +++ plugin/build.gradle.kts | 31 +++++- .../stringcare/plugin/internal/Extensions.kt | 44 ++++----- .../vyp/stringcare/plugin/internal/Tasks.kt | 41 ++++---- .../stringcare/plugin/internal/VariantApi.kt | 66 +++++++------ .../plugin/tasks/ObfuscateAssetsTask.kt | 95 +++++++++++-------- .../plugin/tasks/ObfuscateStringsTask.kt | 91 ++++++++++-------- .../plugin/tasks/RestoreAssetsTask.kt | 22 +++-- .../plugin/tasks/RestoreStringsTask.kt | 22 +++-- .../vyp/stringcare/plugin/tasks/SCPreview.kt | 67 +++++++------ .../plugin/tasks/SCTestObfuscation.kt | 71 ++++++++------ .../dev/vyp/stringcare/plugin/AssetsTest.kt | 29 +++--- .../vyp/stringcare/plugin/JsonListsTest.kt | 7 +- .../dev/vyp/stringcare/plugin/SCTest.kt | 2 + 15 files changed, 355 insertions(+), 253 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c28f8ea..5e790dc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,11 @@ jobs: run: chmod +x gradlew - name: Plugin unit tests - run: ./gradlew :plugin:test :plugin:detekt --no-daemon + run: ./gradlew :plugin:test :plugin:jacocoTestReport :plugin:detekt --no-daemon + + - name: Plugin integration tests (optional) + continue-on-error: true + run: ./gradlew :plugin:integrationTest --no-daemon - name: Sample app assembleDebug run: ./gradlew :app:assembleDebug --no-daemon diff --git a/plugin/README.md b/plugin/README.md index 47a6a70..214971e 100644 --- a/plugin/README.md +++ b/plugin/README.md @@ -2,6 +2,20 @@ #### [Wiki](https://github.com/StringCare/AndroidLibrary/wiki) +## Requirements (this repo) + +- **Gradle** 8.11+ (configuration cache validated on sample `:app:assembleDebug`) +- **JDK** 17 +- **Android Gradle Plugin** 8.7+ (as used by the sample app) +- **Troubleshooting**: If host native libs fail to load, set `stringcare` `debug = true` for verbose JNI logs, or set env `STRINGCARE_NATIVE_DEBUG` (see `Stark`). + +See repo root [CHANGELOG.md](../CHANGELOG.md), [MIGRATION.md](../MIGRATION.md), [SECURITY.md](../SECURITY.md). + +### Tests + +- Default `./gradlew :plugin:test` excludes `@Tag("integration")` (network + `git clone` KotlinSample + nested Gradle). +- Full suite: `./gradlew :plugin:integrationTest` (may fail offline or if the sample repo changes). + License ------- diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 29bfe18..6b86407 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -1,3 +1,6 @@ +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.testing.Test + plugins { kotlin("jvm") version "2.0.21" kotlin("plugin.serialization") version "2.0.21" @@ -50,8 +53,32 @@ jacoco { toolVersion = "0.8.12" } +tasks.withType().configureEach { + useJUnitPlatform { + if (name == "test") { + excludeTags("integration") + } + } +} + +val sourceSets = extensions.getByType(SourceSetContainer::class.java) +tasks.register("integrationTest") { + group = "verification" + description = + "Runs @Tag(\"integration\") tests (git clone KotlinSample, nested Gradle). " + + "Optional; default :plugin:test excludes these." + testClassesDirs = sourceSets.named("test").get().output.classesDirs + classpath = sourceSets.named("test").get().runtimeClasspath + useJUnitPlatform { + includeTags("integration") + } +} + tasks.test { finalizedBy(tasks.jacocoTestReport) + extensions.configure(org.gradle.testing.jacoco.plugins.JacocoTaskExtension::class.java) { + isEnabled = true + } } tasks.jacocoTestReport { @@ -65,8 +92,8 @@ tasks.jacocoTestReport { detekt { buildUponDefaultConfig = true allRules = false - config.setFrom(files("$rootDir/config/detekt/detekt.yml")) - baseline = file("$rootDir/config/detekt/baseline.xml") + config.setFrom(files(layout.projectDirectory.file("config/detekt/detekt.yml"))) + baseline = file("config/detekt/baseline.xml") parallel = true } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt index fb3cb4a..7cd06a7 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt @@ -330,34 +330,30 @@ fun Project.registerTask( this.tasks.register(gradleTaskNameDoctor, SCPreview::class.java) { t -> (t as Task).usesService(buildService) - (t as SCPreview).stringCareService.set(buildService) + t.stringCareService.set(buildService) + t.module.set(configuration.name) + t.applicationId.set(configuration.applicationId) + t.variantName.set(variantDefault) + t.srcFolders.set(srcJson) + t.stringFiles.set(strJson) + t.assetsFiles.set(assetsJson) + t.mockedFingerprint.set(configuration.mockedFingerprint) + t.debug.set(configuration.debug) + t.skip.set(configuration.skip) } this.tasks.register(gradleTaskNameObfuscate, SCTestObfuscation::class.java) { t -> (t as Task).usesService(buildService) - (t as SCTestObfuscation).stringCareService.set(buildService) + t.stringCareService.set(buildService) + t.module.set(configuration.name) + t.applicationId.set(configuration.applicationId) + t.variantName.set(variantDefault) + t.srcFolders.set(srcJson) + t.stringFiles.set(strJson) + t.assetsFiles.set(assetsJson) + t.mockedFingerprint.set(configuration.mockedFingerprint) + t.debug.set(configuration.debug) + t.skip.set(configuration.skip) } - - val previewTask = this.tasks.getByPath(gradleTaskNameDoctor) as SCPreview - previewTask.module = configuration.name - previewTask.applicationId = configuration.applicationId - previewTask.variantName = variantDefault - previewTask.srcFolders = srcJson - previewTask.stringFiles = strJson - previewTask.assetsFiles = assetsJson - previewTask.mockedFingerprint = configuration.mockedFingerprint - previewTask.debug = configuration.debug - previewTask.skip = configuration.skip - - val obfuscateTask = this.tasks.getByPath(gradleTaskNameObfuscate) as SCTestObfuscation - obfuscateTask.module = configuration.name - obfuscateTask.applicationId = configuration.applicationId - obfuscateTask.variantName = variantDefault - obfuscateTask.srcFolders = srcJson - obfuscateTask.stringFiles = strJson - obfuscateTask.assetsFiles = assetsJson - obfuscateTask.mockedFingerprint = configuration.mockedFingerprint - obfuscateTask.debug = configuration.debug - obfuscateTask.skip = configuration.skip } fun Process.outputString(): String { diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt index 81c663a..d67fba8 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt @@ -8,30 +8,35 @@ internal fun signingReportTask(): String = Os.OSX, Os.LINUX -> wrapperOsX }} signingReport" -internal fun gradleWrapper(): String = +/** `gradlew` in the current working directory (e.g. cloned KotlinSample). */ +internal fun projectGradleWrapper(): String = when (getOs()) { Os.WINDOWS -> wrapperWindows Os.OSX, Os.LINUX -> wrapperOsX } +/** Monorepo wrapper when `user.dir` is `:plugin` — root project is parent directory. */ +internal fun repoRootGradle(): String = + when (getOs()) { + Os.WINDOWS -> "..\\gradlew.bat -p .." + Os.OSX, Os.LINUX -> "sh ../gradlew -p .." + } + internal fun pluginBuildTask(): String = - "${when (getOs()) { - Os.WINDOWS -> wrapperWindows - Os.OSX, Os.LINUX -> wrapperOsX - }} build --exclude-task test" + "${repoRootGradle()} :plugin:compileKotlin --no-daemon" +/** + * Ensures JNI prebuilts exist on the test runtime classpath under `macos/`, `linux/`, `windows/` + * (same layout as [processResources]). Quotes paths for spaces/special chars in absolute working dirs. + */ internal val librarySetupTask = """ - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$osxLib out${File.separator}production${File.separator}classes${File.separator}$osxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLib out${File.separator}production${File.separator}classes${File.separator}$linuxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLibArm64 out${File.separator}production${File.separator}classes${File.separator}$linuxLibArm64 & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLibArm64 out${File.separator}production${File.separator}classes${File.separator}$winLibArm64 & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$osxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$osxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$linuxLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$linuxLibArm64 build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$linuxLibArm64 & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLib & - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}dev${File.separator}vyp${File.separator}stringcare${File.separator}plugin${File.separator}internal${File.separator}jni${File.separator}$winLibArm64 build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLibArm64 + mkdir -p build/resources/main/macos build/resources/main/linux build/resources/main/windows && + ${copyCommand()} "src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/macos/$osxLib" "build/resources/main/macos/" && + ${copyCommand()} "src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/linux/$linuxLib" "build/resources/main/linux/" && + ${copyCommand()} "src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/linux/$linuxLibArm64" "build/resources/main/linux/" && + ${copyCommand()} "src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/windows/$winLib" "build/resources/main/windows/" && + ${copyCommand()} "src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/windows/$winLibArm64" "build/resources/main/windows/" """.trimIndent() internal fun prepareTask(directory: String): String = @@ -44,19 +49,19 @@ internal fun prepareTask(directory: String): String = internal fun buildTask(directory: String): String = """ cd $directory && - ${gradleWrapper()} build + ${projectGradleWrapper()} build """.trimIndent() internal fun basicGradleTask(directory: String): String = """ cd $directory && - ${gradleWrapper()} $gradleTaskNameDoctor + ${projectGradleWrapper()} $gradleTaskNameDoctor """.trimIndent() internal fun obfuscationTestGradleTask(directory: String): String = """ cd $directory && - ${gradleWrapper()} $gradleTaskNameObfuscate + ${projectGradleWrapper()} $gradleTaskNameObfuscate """.trimIndent() internal fun signingReportTask(directory: String): String = diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt index 376e9e1..f3575c3 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt @@ -23,6 +23,9 @@ fun Project.registerVariantObfuscationTasks( val absoluteProjectPath = buildService.get().absoluteProjectPath() val moduleNameValue = config.name + val srcJson = toJsonStringList(config.srcFolders) + val strJson = toJsonStringList(config.stringFiles) + val assetsJson = toJsonStringList(config.assetsFiles) val variantNames = mutableListOf() androidComponents.onVariants(androidComponents.selector().all()) { variant -> @@ -37,27 +40,27 @@ fun Project.registerVariantObfuscationTasks( ObfuscateStringsTask::class.java, ) { t -> (t as Task).usesService(buildService) - (t as ObfuscateStringsTask).stringCareService.set(buildService) - t.projectPath = absoluteProjectPath - t.moduleName = moduleNameValue - t.variantName = variantName - t.applicationId = applicationId - t.skip = config.skip - t.debug = config.debug - t.mockedFingerprint = config.mockedFingerprint - t.srcFoldersJson = toJsonStringList(config.srcFolders) - t.stringFilesJson = toJsonStringList(config.stringFiles) - t.assetsFilesJson = toJsonStringList(config.assetsFiles) + t.stringCareService.set(buildService) + t.projectPath.set(absoluteProjectPath) + t.moduleName.set(moduleNameValue) + t.variantName.set(variantName) + t.applicationId.set(applicationId) + t.skip.set(config.skip) + t.debug.set(config.debug) + t.mockedFingerprint.set(config.mockedFingerprint) + t.srcFoldersJson.set(srcJson) + t.stringFilesJson.set(strJson) + t.assetsFilesJson.set(assetsJson) } tasks.register( "stringcareAfterMergeResources$variantCapitalized", RestoreStringsTask::class.java, ) { t -> (t as Task).usesService(buildService) - (t as RestoreStringsTask).stringCareService.set(buildService) - t.projectPath = absoluteProjectPath - t.moduleName = moduleNameValue - t.skip = config.skip + t.stringCareService.set(buildService) + t.projectPath.set(absoluteProjectPath) + t.moduleName.set(moduleNameValue) + t.skip.set(config.skip) } variantNames.add(variantCapitalized) @@ -66,31 +69,32 @@ fun Project.registerVariantObfuscationTasks( ObfuscateAssetsTask::class.java, ) { t -> (t as Task).usesService(buildService) - (t as ObfuscateAssetsTask).stringCareService.set(buildService) - t.projectPath = absoluteProjectPath - t.moduleName = moduleNameValue - t.variantName = variantName - t.applicationId = applicationId - t.skip = config.skip - t.debug = config.debug - t.mockedFingerprint = config.mockedFingerprint - t.srcFoldersJson = toJsonStringList(config.srcFolders) - t.stringFilesJson = toJsonStringList(config.stringFiles) - t.assetsFilesJson = toJsonStringList(config.assetsFiles) + t.stringCareService.set(buildService) + t.projectPath.set(absoluteProjectPath) + t.moduleName.set(moduleNameValue) + t.variantName.set(variantName) + t.applicationId.set(applicationId) + t.skip.set(config.skip) + t.debug.set(config.debug) + t.mockedFingerprint.set(config.mockedFingerprint) + t.srcFoldersJson.set(srcJson) + t.stringFilesJson.set(strJson) + t.assetsFilesJson.set(assetsJson) } tasks.register( "stringcareAfterMergeAssets$variantCapitalized", RestoreAssetsTask::class.java, ) { t -> (t as Task).usesService(buildService) - (t as RestoreAssetsTask).stringCareService.set(buildService) - t.projectPath = absoluteProjectPath - t.moduleName = moduleNameValue - t.skip = config.skip + t.stringCareService.set(buildService) + t.projectPath.set(absoluteProjectPath) + t.moduleName.set(moduleNameValue) + t.skip.set(config.skip) } } - project.afterEvaluate { + // AGP registers merge/process tasks after variant API callbacks; use afterEvaluate + findByName (nullable). + afterEvaluate { for (variantCapitalized in variantNames) { val mergeRes = "merge${variantCapitalized}Resources" val beforeRes = "stringcareBeforeMergeResources$variantCapitalized" diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt index 069cede..a45f2d5 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt @@ -22,76 +22,87 @@ abstract class ObfuscateAssetsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property - @Input - var projectPath: String = "" + @get:Input + abstract val projectPath: Property - @Input - var moduleName: String = "" + @get:Input + abstract val moduleName: Property - @Input - var variantName: String = "" + @get:Input + abstract val variantName: Property - @Input - var applicationId: String = "" + @get:Input + abstract val applicationId: Property - @Input - var skip: Boolean = false + @get:Input + abstract val skip: Property - @Input - var debug: Boolean = false + @get:Input + abstract val debug: Property - @Input - var mockedFingerprint: String = "" + @get:Input + abstract val mockedFingerprint: Property - @Input - var srcFoldersJson: String = "[]" + @get:Input + abstract val srcFoldersJson: Property - @Input - var stringFilesJson: String = "[]" + @get:Input + abstract val stringFilesJson: Property - @Input - var assetsFilesJson: String = "[]" + @get:Input + abstract val assetsFilesJson: Property - private fun configuration(): StringCareConfiguration = - StringCareConfiguration(moduleName).apply { - this.applicationId = this@ObfuscateAssetsTask.applicationId - this.skip = this@ObfuscateAssetsTask.skip - this.debug = this@ObfuscateAssetsTask.debug - this.mockedFingerprint = this@ObfuscateAssetsTask.mockedFingerprint - srcFolders.addAll(parseJsonStringList(srcFoldersJson)) - stringFiles.addAll(parseJsonStringList(stringFilesJson)) - assetsFiles.addAll(parseJsonStringList(assetsFilesJson)) + init { + skip.convention(false) + debug.convention(false) + mockedFingerprint.convention("") + srcFoldersJson.convention("[]") + stringFilesJson.convention("[]") + assetsFilesJson.convention("[]") + } + + private fun configuration(): StringCareConfiguration { + val task = this + return StringCareConfiguration(task.moduleName.get()).apply { + applicationId = task.applicationId.get() + skip = task.skip.get() + debug = task.debug.get() + mockedFingerprint = task.mockedFingerprint.get() + srcFolders.addAll(parseJsonStringList(task.srcFoldersJson.get())) + stringFiles.addAll(parseJsonStringList(task.stringFilesJson.get())) + assetsFiles.addAll(parseJsonStringList(task.assetsFilesJson.get())) } + } @TaskAction fun run() { val config = configuration() Stark.setVerboseNativeLogging(config.debug) - if (skip) { - PrintUtils.print(moduleName, "Skipping $variantName") + if (skip.get()) { + PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()}") return } if (!Stark.isNativeLibLoaded()) { - PrintUtils.print(moduleName, "Skipping $variantName (native library not available for this architecture)") + PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()} (native library not available for this architecture)") return } val tempRoot = stringCareService.get().getOrCreateTempFolder() - PrintUtils.print("", "ApplicationId: $applicationId", tab = true) - fingerPrint(moduleName, variantName, config) { key -> + PrintUtils.print("", "ApplicationId: ${applicationId.get()}", tab = true) + fingerPrint(moduleName.get(), variantName.get(), config) { key -> if (key == "none" || key.trim().isEmpty()) { - PrintUtils.print("No SHA1 key found for :$moduleName:$variantName") + PrintUtils.print("No SHA1 key found for :${moduleName.get()}:${variantName.get()}") return@fingerPrint } - PrintUtils.print(moduleName, "$variantName:$key") - PrintUtils.print(moduleName, backupAssets) - backupAssetsFiles(projectPath, config, tempRoot) - val files = locateAssetsFiles(projectPath, config) + PrintUtils.print(moduleName.get(), "${variantName.get()}:$key") + PrintUtils.print(moduleName.get(), backupAssets) + backupAssetsFiles(projectPath.get(), config, tempRoot) + val files = locateAssetsFiles(projectPath.get(), config) files.forEach { file -> - if (debug) PrintUtils.print(null, file.file.getContent()) + if (debug.get()) PrintUtils.print(null, file.file.getContent()) obfuscateFile(key, file.file, config.applicationId) - if (debug) PrintUtils.print(null, file.file.getContent()) + if (debug.get()) PrintUtils.print(null, file.file.getContent()) } - PrintUtils.print(moduleName, obfuscateAssets) + PrintUtils.print(moduleName.get(), obfuscateAssets) } } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt index 8005568..e2f7516 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt @@ -21,72 +21,83 @@ abstract class ObfuscateStringsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property - @Input - var projectPath: String = "" + @get:Input + abstract val projectPath: Property - @Input - var moduleName: String = "" + @get:Input + abstract val moduleName: Property - @Input - var variantName: String = "" + @get:Input + abstract val variantName: Property - @Input - var applicationId: String = "" + @get:Input + abstract val applicationId: Property - @Input - var skip: Boolean = false + @get:Input + abstract val skip: Property - @Input - var debug: Boolean = false + @get:Input + abstract val debug: Property - @Input - var mockedFingerprint: String = "" + @get:Input + abstract val mockedFingerprint: Property - @Input - var srcFoldersJson: String = "[]" + @get:Input + abstract val srcFoldersJson: Property - @Input - var stringFilesJson: String = "[]" + @get:Input + abstract val stringFilesJson: Property - @Input - var assetsFilesJson: String = "[]" + @get:Input + abstract val assetsFilesJson: Property - private fun configuration(): StringCareConfiguration = - StringCareConfiguration(moduleName).apply { - this.applicationId = this@ObfuscateStringsTask.applicationId - this.skip = this@ObfuscateStringsTask.skip - this.debug = this@ObfuscateStringsTask.debug - this.mockedFingerprint = this@ObfuscateStringsTask.mockedFingerprint - srcFolders.addAll(parseJsonStringList(srcFoldersJson)) - stringFiles.addAll(parseJsonStringList(stringFilesJson)) - assetsFiles.addAll(parseJsonStringList(assetsFilesJson)) + init { + skip.convention(false) + debug.convention(false) + mockedFingerprint.convention("") + srcFoldersJson.convention("[]") + stringFilesJson.convention("[]") + assetsFilesJson.convention("[]") + } + + private fun configuration(): StringCareConfiguration { + val task = this + return StringCareConfiguration(task.moduleName.get()).apply { + applicationId = task.applicationId.get() + skip = task.skip.get() + debug = task.debug.get() + mockedFingerprint = task.mockedFingerprint.get() + srcFolders.addAll(parseJsonStringList(task.srcFoldersJson.get())) + stringFiles.addAll(parseJsonStringList(task.stringFilesJson.get())) + assetsFiles.addAll(parseJsonStringList(task.assetsFilesJson.get())) } + } @TaskAction fun run() { val config = configuration() Stark.setVerboseNativeLogging(config.debug) - if (skip) { - PrintUtils.print(moduleName, "Skipping $variantName") + if (skip.get()) { + PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()}") return } if (!Stark.isNativeLibLoaded()) { - PrintUtils.print(moduleName, "Skipping $variantName (native library not available for this architecture)") + PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()} (native library not available for this architecture)") return } val tempRoot = stringCareService.get().getOrCreateTempFolder() - PrintUtils.print("", "ApplicationId: $applicationId", tab = true) - fingerPrint(moduleName, variantName, config) { key -> + PrintUtils.print("", "ApplicationId: ${applicationId.get()}", tab = true) + fingerPrint(moduleName.get(), variantName.get(), config) { key -> if (key == "none" || key.trim().isEmpty()) { - PrintUtils.print("No SHA1 key found for :$moduleName:$variantName") + PrintUtils.print("No SHA1 key found for :${moduleName.get()}:${variantName.get()}") return@fingerPrint } - PrintUtils.print(moduleName, "$variantName:$key") - PrintUtils.print(moduleName, backupStringRes) - backupResourceFiles(projectPath, config, tempRoot) - val files = locateResourceFiles(projectPath, config) + PrintUtils.print(moduleName.get(), "${variantName.get()}:$key") + PrintUtils.print(moduleName.get(), backupStringRes) + backupResourceFiles(projectPath.get(), config, tempRoot) + val files = locateResourceFiles(projectPath.get(), config) files.forEach { modifyXML(it.file, key, config) } } - PrintUtils.print(moduleName, obfuscateStringRes) + PrintUtils.print(moduleName.get(), obfuscateStringRes) } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt index 42a99c3..ea9dc6e 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt @@ -14,22 +14,26 @@ abstract class RestoreAssetsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property - @Input - var projectPath: String = "" + @get:Input + abstract val projectPath: Property - @Input - var moduleName: String = "" + @get:Input + abstract val moduleName: Property - @Input - var skip: Boolean = false + @get:Input + abstract val skip: Property + + init { + skip.convention(false) + } @TaskAction fun run() { - if (skip) return - PrintUtils.print(moduleName, restoreAssets) + if (skip.get()) return + PrintUtils.print(moduleName.get(), restoreAssets) val service = stringCareService.get() val tempRoot = service.getOrCreateTempFolder() - restoreAssetsFiles(projectPath, moduleName, tempRoot) + restoreAssetsFiles(projectPath.get(), moduleName.get(), tempRoot) service.resetTempFolder() } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt index badfbdc..3db83b2 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt @@ -14,22 +14,26 @@ abstract class RestoreStringsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property - @Input - var projectPath: String = "" + @get:Input + abstract val projectPath: Property - @Input - var moduleName: String = "" + @get:Input + abstract val moduleName: Property - @Input - var skip: Boolean = false + @get:Input + abstract val skip: Property + + init { + skip.convention(false) + } @TaskAction fun run() { - if (skip) return - PrintUtils.print(moduleName, restoreStringRes) + if (skip.get()) return + PrintUtils.print(moduleName.get(), restoreStringRes) val service = stringCareService.get() val tempRoot = service.getOrCreateTempFolder() - restoreResourceFiles(projectPath, moduleName, tempRoot) + restoreResourceFiles(projectPath.get(), moduleName.get(), tempRoot) service.resetTempFolder() } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt index 863e5ee..a336df3 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt @@ -17,49 +17,60 @@ abstract class SCPreview : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property - @Input - var module = String() + @get:Input + abstract val module: Property - @Input - var assetsFiles = String() + @get:Input + abstract val assetsFiles: Property - @Input - var stringFiles = String() + @get:Input + abstract val stringFiles: Property - @Input - var srcFolders = String() + @get:Input + abstract val srcFolders: Property - @Input - var debug = false + @get:Input + abstract val debug: Property - @Input - var skip = false + @get:Input + abstract val skip: Property - @Input - var applicationId = "" + @get:Input + abstract val applicationId: Property - @Input - var mockedFingerprint = "" + @get:Input + abstract val mockedFingerprint: Property - @Input - var variantName = "debug" + @get:Input + abstract val variantName: Property + + init { + assetsFiles.convention("") + stringFiles.convention("") + srcFolders.convention("") + debug.convention(false) + skip.convention(false) + applicationId.convention("") + mockedFingerprint.convention("") + variantName.convention("debug") + } @TaskAction fun greet() { println("== REPORT ======================================") val task = this - println("\t== $variantName ======================================") + println("\t== ${variantName.get()} ======================================") val configuration = - StringCareConfiguration(module).apply { - srcFolders.addAll(parseJsonStringList(task.srcFolders)) - stringFiles.addAll(parseJsonStringList(task.stringFiles)) - assetsFiles.addAll(parseJsonStringList(task.assetsFiles)) - if (task.mockedFingerprint.isNotEmpty()) { - mockedFingerprint = task.mockedFingerprint + StringCareConfiguration(module.get()).apply { + srcFolders.addAll(parseJsonStringList(task.srcFolders.get())) + stringFiles.addAll(parseJsonStringList(task.stringFiles.get())) + assetsFiles.addAll(parseJsonStringList(task.assetsFiles.get())) + if (task.mockedFingerprint.get().isNotEmpty()) { + mockedFingerprint = task.mockedFingerprint.get() } - applicationId = task.applicationId - skip = task.skip - debug = task.debug + applicationId = task.applicationId.get() + skip = task.skip.get() + debug = task.debug.get() } val projectRoot = stringCareService.get().absoluteProjectPath() val files = locateResourceFiles(projectRoot, configuration) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt index d444fe8..3645ba5 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt @@ -22,32 +22,43 @@ abstract class SCTestObfuscation : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property - @Input - var module = String() + @get:Input + abstract val module: Property - @Input - var assetsFiles = String() + @get:Input + abstract val assetsFiles: Property - @Input - var stringFiles = String() + @get:Input + abstract val stringFiles: Property - @Input - var srcFolders = String() + @get:Input + abstract val srcFolders: Property - @Input - var debug = false + @get:Input + abstract val debug: Property - @Input - var skip = false + @get:Input + abstract val skip: Property - @Input - var applicationId = "" + @get:Input + abstract val applicationId: Property - @Input - var mockedFingerprint = "" + @get:Input + abstract val mockedFingerprint: Property - @Input - var variantName = "debug" + @get:Input + abstract val variantName: Property + + init { + assetsFiles.convention("") + stringFiles.convention("") + srcFolders.convention("") + debug.convention(false) + skip.convention(false) + applicationId.convention("") + mockedFingerprint.convention("") + variantName.convention("debug") + } @TaskAction fun greet() { @@ -55,18 +66,18 @@ abstract class SCTestObfuscation : DefaultTask() { var key = "" val task = this val configuration = - StringCareConfiguration(module).apply { - srcFolders.addAll(parseJsonStringList(task.srcFolders)) - stringFiles.addAll(parseJsonStringList(task.stringFiles)) - assetsFiles.addAll(parseJsonStringList(task.assetsFiles)) - if (task.mockedFingerprint.isNotEmpty()) { - mockedFingerprint = task.mockedFingerprint + StringCareConfiguration(module.get()).apply { + srcFolders.addAll(parseJsonStringList(task.srcFolders.get())) + stringFiles.addAll(parseJsonStringList(task.stringFiles.get())) + assetsFiles.addAll(parseJsonStringList(task.assetsFiles.get())) + if (task.mockedFingerprint.get().isNotEmpty()) { + mockedFingerprint = task.mockedFingerprint.get() } - applicationId = task.applicationId - skip = task.skip - debug = task.debug + applicationId = task.applicationId.get() + skip = task.skip.get() + debug = task.debug.get() } - println("\t== $variantName ======================================") + println("\t== ${variantName.get()} ======================================") Stark.setVerboseNativeLogging(configuration.debug) if (configuration.skip) { println("\tSkipping (skip=true)") @@ -77,7 +88,7 @@ abstract class SCTestObfuscation : DefaultTask() { return } signingReportTask().runCommand { _, result -> - key = result.extractFingerprint(module, variantName, configuration) + key = result.extractFingerprint(module.get(), variantName.get(), configuration) } val service = stringCareService.get() val tempRoot = service.getOrCreateTempFolder() @@ -103,7 +114,7 @@ abstract class SCTestObfuscation : DefaultTask() { println(file.file.getContent()) println("\t============================") } - restoreResourceFiles(projectRoot, module, tempRoot) + restoreResourceFiles(projectRoot, module.get(), tempRoot) service.resetTempFolder() println("== END OBFUSCATION ==================================") } diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt index 0d576a5..4dcb4cf 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/AssetsTest.kt @@ -2,9 +2,11 @@ package dev.vyp.stringcare.plugin import dev.vyp.stringcare.plugin.internal.* import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.io.File +@Tag("integration") class AssetsTest { // private val logger by logger() @@ -58,21 +60,16 @@ class AssetsTest { val temp = tempPath() prepareTask(temp).runCommand { _, report -> println(report) - assert( - restoreAssetsFiles("$temp${File.separator}$testProjectName", defaultMainModule).isEmpty(), - ) - assert( - backupAssetsFiles( - "$temp${File.separator}$testProjectName", - configuration.apply { - assetsFiles = mutableListOf("*.json") - }, - ).isNotEmpty(), - ) - assert( - restoreAssetsFiles("$temp${File.separator}$testProjectName", defaultMainModule).isNotEmpty(), - ) + val projectRoot = "$temp${File.separator}$testProjectName" + val cfg = + configuration.apply { + assetsFiles = mutableListOf("*.json") + } + assert(restoreAssetsFiles(projectRoot, defaultMainModule, temp).isEmpty()) + assert(backupAssetsFiles(projectRoot, cfg, temp).isNotEmpty()) + assert(restoreAssetsFiles(projectRoot, defaultMainModule, temp).isNotEmpty()) } + StringCarePlugin.resetFolder() } @Test @@ -80,7 +77,7 @@ class AssetsTest { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> println(report) - val key = report.extractFingerprint(variant = "prodDebug", configuration = configuration) + val key = report.extractFingerprint(variant = "debug", configuration = configuration) println(key) assert(key.isNotEmpty()) val files = @@ -112,7 +109,7 @@ class AssetsTest { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> println(report) - val key = report.extractFingerprint(variant = "prodDebug", configuration = configuration) + val key = report.extractFingerprint(variant = "debug", configuration = configuration) println(key) assert(key.isNotEmpty()) val files = diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt index 06a4228..b9e52e1 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/JsonListsTest.kt @@ -2,7 +2,8 @@ package dev.vyp.stringcare.plugin import dev.vyp.stringcare.plugin.internal.parseJsonStringList import dev.vyp.stringcare.plugin.internal.toJsonStringList -import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertIterableEquals +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test class JsonListsTest { @@ -10,11 +11,11 @@ class JsonListsTest { fun `round-trip string lists through JSON`() { val list = listOf("src/main", "strings.xml", "path with space") val json = toJsonStringList(list) - assertEquals(list, parseJsonStringList(json)) + assertIterableEquals(list, parseJsonStringList(json)) } @Test fun `empty list parses`() { - assertEquals(emptyList(), parseJsonStringList("[]")) + assertTrue(parseJsonStringList("[]").isEmpty()) } } diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt index a3acb2f..605853b 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/SCTest.kt @@ -4,9 +4,11 @@ import dev.vyp.stringcare.plugin.internal.* import dev.vyp.stringcare.plugin.models.StringEntity import dev.vyp.stringcare.plugin.utils.modifyForTest import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.io.File +@Tag("integration") class SCTest { private val configuration = defaultConfig().apply { From e81dd4b58bf39b5609e24cd6c0eca62922314a90 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 17:23:29 +0100 Subject: [PATCH 03/24] Refactor StringCare plugin architecture and enhance functionality: migrate domain models to `domain.models`, streamline execution result handling with structured responses, and improve XML parsing with SAX-first approach. Update CI workflow to include coverage verification and enhance README.md with refactor plan checklist. Remove obsolete model classes and improve task management for better performance and clarity. --- .github/workflows/ci.yml | 2 +- .github/workflows/publish.yml | 30 ++ CHANGELOG.md | 22 +- docs/README.md | 1 + docs/refactor-plan-checklist.md | 119 ++++++++ plugin/README.md | 33 ++ plugin/build.gradle.kts | 17 +- .../plugin/domain/models/AssetsFile.kt | 18 ++ .../plugin/domain/models/BackupCopy.kt | 36 +++ .../plugin/domain/models/Backupable.kt | 8 + .../{ => domain}/models/ExecutionResult.kt | 7 +- .../plugin/domain/models/ResourceFile.kt | 18 ++ .../plugin/domain/models/SAttribute.kt | 6 + .../plugin/domain/models/StringEntity.kt | 23 ++ .../domain/repositories/ResourceRepository.kt | 12 + .../usecases/ExtractFingerprintUseCase.kt | 83 ++++++ .../usecases/ObfuscateStringsUseCase.kt | 15 + .../crypto/ObfuscationService.kt | 22 ++ .../filesystem/BackupService.kt | 22 ++ .../infrastructure/gradle/AndroidTaskNames.kt | 11 + .../gradle/FileSystemResourceRepository.kt | 14 + .../parsers/StringsXmlParser.kt | 155 ++++++++++ .../infrastructure/parsers/XmlAttributes.kt | 10 + .../infrastructure/parsers/XmlParser.kt | 12 + .../vyp/stringcare/plugin/internal/AParser.kt | 2 +- .../stringcare/plugin/internal/Execution.kt | 70 +++-- .../stringcare/plugin/internal/Extensions.kt | 282 ++---------------- .../stringcare/plugin/internal/Fingerprint.kt | 75 +---- .../vyp/stringcare/plugin/internal/Stark.kt | 31 +- .../stringcare/plugin/internal/VariantApi.kt | 47 +-- .../vyp/stringcare/plugin/internal/XParser.kt | 100 ++++--- .../stringcare/plugin/models/AssetsFile.kt | 9 - .../stringcare/plugin/models/ModelAliases.kt | 12 + .../stringcare/plugin/models/ResourceFile.kt | 9 - .../stringcare/plugin/models/StringEntity.kt | 15 - .../plugin/tasks/ObfuscateAssetsTask.kt | 12 +- .../plugin/tasks/ObfuscateStringsTask.kt | 12 +- .../plugin/tasks/RestoreAssetsTask.kt | 2 + .../plugin/tasks/RestoreStringsTask.kt | 2 + .../plugin/tasks/SCTestObfuscation.kt | 10 +- .../plugin/ConfigurationNormalizationTest.kt | 34 +++ .../plugin/FingerprintExtractionTest.kt | 107 +++++++ .../crypto/ObfuscationServiceTest.kt | 23 ++ .../filesystem/BackupServiceTest.kt | 41 +++ .../integration/PluginIntegrationTest.kt | 33 ++ .../parsers/XmlParserInfrastructureTest.kt | 86 ++++++ 46 files changed, 1232 insertions(+), 478 deletions(-) create mode 100644 .github/workflows/publish.yml create mode 100644 docs/refactor-plan-checklist.md create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/AssetsFile.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/Backupable.kt rename plugin/src/main/kotlin/dev/vyp/stringcare/plugin/{ => domain}/models/ExecutionResult.kt (73%) create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/SAttribute.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/repositories/ResourceRepository.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ExtractFingerprintUseCase.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupService.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/AndroidTaskNames.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/FileSystemResourceRepository.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/StringsXmlParser.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlAttributes.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt delete mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ModelAliases.kt delete mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt delete mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/ConfigurationNormalizationTest.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/FingerprintExtractionTest.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupServiceTest.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt create mode 100644 plugin/src/test/kotlin/dev/vyp/stringcare/plugin/parsers/XmlParserInfrastructureTest.kt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e790dc..ff2de89 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: run: chmod +x gradlew - name: Plugin unit tests - run: ./gradlew :plugin:test :plugin:jacocoTestReport :plugin:detekt --no-daemon + run: ./gradlew :plugin:test :plugin:jacocoTestReport :plugin:jacocoTestCoverageVerification :plugin:detekt --no-daemon - name: Plugin integration tests (optional) continue-on-error: true diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..3b875e1 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,30 @@ +# Manual / tag-driven publish to Maven Central (requires signing + Nexus credentials). +name: Publish + +on: + workflow_dispatch: + inputs: + dry_run: + description: "If true, only build plugin (no upload)" + required: false + default: "true" + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build plugin JAR + run: ./gradlew :plugin:jar --no-daemon + + # Wire signing + publish when secrets are configured: + # ./gradlew :plugin:publishPluginPublicationToSonatypeRepository -PnexusUsername=... -PnexusPassword=... diff --git a/CHANGELOG.md b/CHANGELOG.md index 4010f0e..2acee2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,34 @@ ## [Unreleased] — refactor / 6.x groundwork +### Added + +- **Docs**: [Refactor plan checklist](docs/refactor-plan-checklist.md) — seguimiento hecho/pendiente del roadmap del plugin. + ### Changed +- **Architecture**: Domain models under `domain.models` (with `models` typealiases for compatibility); `infrastructure` packages for parsers, Gradle wiring, crypto, filesystem; thin `ObfuscateStringsUseCase` + `ResourceRepository`. +- **XML**: SAX-first `strings.xml` parsing with DOM fallback for nested markup; `XmlAttributes` / `XmlParser` facade. +- **Tasks**: Gradle `Property` inputs on obfuscate/restore/preview tasks; `@DisableCachingByDefault` (sources are mutated in place — not suitable for `@CacheableTask`). +- **AGP**: `compileOnly` for the Android Gradle Plugin dependency (provided at runtime on Android projects). +- **JAR size**: With `compileOnly` AGP, plugin JAR is ~180KB vs previous multi‑MB fat jar (verify locally with `./gradlew :plugin:jar`). - **Gradle**: `StringCareBuildService` (shared build service) replaces mutable static state on `StringCarePlugin` for paths, temp dir, and variant applicationIds. - **Dependencies**: Removed Guava and Gson; added `kotlinx-serialization-json` for task JSON list inputs. -- **Execution**: Shell commands use `ProcessBuilder` with a 60s timeout and structured `ExecutionResult` (`Success` / `Failure`). +- **Execution**: Shell commands use `ProcessBuilder` with a 60s timeout and structured `ExecutionResult` (`Success` / `Failure` / `Timeout`). - **Native host libs**: SHA-256 verification before `System.load`, retries, optional verbose logging tied to `debug` in tasks. - **XML / scan**: Faster attribute iteration in `parseXML`; `walkTopDown` skips `build/`, `.gradle/`, `.git/`, `node_modules/`; `mapNotNull` for resource/asset discovery; idempotent `StringCareConfiguration.normalize()`. - **Tooling**: Detekt + baseline, ktlint (non-failing), JaCoCo hook, Develocity build scan terms in root `settings.gradle.kts`. +- **Backups**: Resource/asset backups use temp-file copy + atomic move when the filesystem supports it. +- **Tests**: `ObfuscationServiceTest` (JNI roundtrip when loaded), `BackupServiceTest`, UTF-16 / malformed XML parser cases; CI runs `jacocoTestCoverageVerification` with a low interim line threshold. + +### Breaking changes + +- **Internal APIs**: Static mutable state on `StringCarePlugin` (paths, temp folder, variant map) was removed in favor of `StringCareBuildService`. Any build logic or tests reaching into those internals must use task inputs / the registered build service instead. +- **Dependencies on the plugin JAR**: Guava and Gson are no longer bundled; list-style DSL fields are serialized with Kotlin serialization in task properties. Pure-Java consumers of internal packages are unsupported. + +### Performance (roadmap vs previous generations) + +- XML handling targets **SAX-first** parsing with DOM only when nested `` markup requires it, and filesystem walks **prune** heavy directories (`build/`, `.gradle/`, `.git/`, `node_modules/`). End-to-end timings depend on project size; run `./gradlew :plugin:test` and your app’s obfuscation tasks locally to validate. ### Migration notes diff --git a/docs/README.md b/docs/README.md index 6399a7e..c3d7d00 100644 --- a/docs/README.md +++ b/docs/README.md @@ -13,6 +13,7 @@ StringCare Android provides **compile-time obfuscation** for strings and assets - [Publishing](publishing.md) — Release workflow, secrets, and local publish (`publishToMavenLocal`). - [Migration](migration.md) — Upgrading from 4.x to 5.0 (groupId, plugin ID, package, Gradle/AGP). - [Architecture](architecture.md) — Mono-repo layout, library vs plugin, JNI, and Variant API. +- [Refactor plan checklist](refactor-plan-checklist.md) — Estado del roadmap de refactor del plugin (hecho vs pendiente). - [Contributing](contributing.md) — Release workflow secrets and local publish steps. - [Troubleshooting](troubleshooting.md) — Submodule, signing, plugin not found, publish job, JNI/NDK. - [Verify obfuscation](verify-obfuscation.md) — Comandos `gradlew` para comprobar que strings/assets se ofuscan (nativas del host, `syncPluginNativeLibraries`). diff --git a/docs/refactor-plan-checklist.md b/docs/refactor-plan-checklist.md new file mode 100644 index 0000000..9750a72 --- /dev/null +++ b/docs/refactor-plan-checklist.md @@ -0,0 +1,119 @@ +# Refactor plan checklist (plugin / repo) + +Estado al **2026-03-19**. Marca lo implementado en el código actual; úsalo para seguimiento del roadmap. + +Leyenda: **`[x]`** hecho · **`[ ]`** pendiente / parcial · **`[~]`** hecho con matices (ver nota) + +--- + +## Fase 0 — Setup y calidad base + +- [x] Rama / flujo de trabajo acordado para cambios grandes del plugin +- [x] Detekt en `plugin/build.gradle.kts` + `config/detekt/detekt.yml` + **baseline** (`baseline.xml`) +- [x] Ktlint en el plugin (`ignoreFailures`, exclusión legacy `Vars.kt`) +- [x] Develocity / build scan en `settings.gradle.kts` (publicación condicional a fallos) +- [x] Tests JUnit 5 por defecto; tarea `:plugin:integrationTest` + `@Tag("integration")` para clones/nested Gradle + +--- + +## Fase 1 — Seguridad y ejecución + +- [x] Estado mutable del plugin migrado a **`StringCareBuildService`** + `StringCareSession` solo para tests +- [x] Tareas críticas con **`usesService`** al build service +- [x] Comandos shell vía **`ProcessBuilder`** (no shell inseguro directo en el path feliz) +- [x] Timeout (~60s) y **`ExecutionResult.Timeout`** +- [x] JNI del host: verificación **SHA-256** antes de cargar, reintentos, **`LoadResult`**, limpieza de temporales JNI (sin `deleteOnExit` como única estrategia) + +--- + +## Fase 2 — Rendimiento y XML + +- [x] Parser **SAX-first** para `strings.xml` + **fallback DOM** si hay anidamiento / detector falla +- [x] Fachada `XmlParser` / `StringsXmlParser`; `XParser` delega +- [x] Walk de recursos con **prune** de `build/`, `.gradle/`, `.git/`, `node_modules/` +- [x] `StringCareConfiguration.normalize()` idempotente +- [x] Copia de backup **temp + move atómico** (`BackupCopy` + `ResourceFile` / `AssetsFile`) +- [ ] Módulo **JMH** u otro benchmark reproducible para el parser +- [ ] Regresión de rendimiento automatizada en CI + +--- + +## Fase 3 — APIs Gradle + +- [x] Entradas de tareas como **`Property<>`** donde aplica +- [x] **`@DisableCachingByDefault`** en tareas que mutan el árbol de fuentes (no `@CacheableTask`) +- [x] Wiring con AGP: dependencias de merge/process/assets dentro de `onVariants {}` usando `tasks.matching { it.name == ... }.configureEach { ... }` (sin `afterEvaluate` ni `findByName`) +- [x] Sustituido `afterEvaluate` por wiring lazy y seguro por nombre de tarea +- [ ] Declarar **`@InputFiles` / outputs** fiables para tareas mutadoras (difícil mientras se editan fuentes in-place) + +--- + +## Fase 4 — Arquitectura (capas) + +- [x] Modelos en `domain.models` (`StringEntity`, `ResourceFile`, `AssetsFile`, `ExecutionResult`, `Backupable`, etc.) +- [x] `infrastructure`: parsers, filesystem (`BackupService`), crypto (`ObfuscationService`), Gradle (`FileSystemResourceRepository`) +- [x] Casos de uso / repositorios (`ObfuscateStringsUseCase`, `ResourceRepository`) +- [x] AGP como **`compileOnly`** en el plugin +- [x] JSON de listas con **kotlinx-serialization** (sin Gson) +- [x] **`ExtractFingerprintUseCase`** en `domain.usecases` (tests pueden llamar `extract` con `log` por defecto; `extractFingerprint` delega desde `internal`) +- [ ] Partir **`Extensions.kt`** en módulos más pequeños (Gradle vs FS vs XML) + +--- + +## Fase 5 — Kotlin y robustez + +- [x] Reducción de **`!!`** en fuentes principales del plugin (revisar periódicamente) +- [x] Utilidades tipo `toReadableString` donde aplica +- [~] API de ejecución: ahora **`execute(command: String)` → `Result`** y existe overload con **`List`**; queda como deuda dejar `List` como API única + +--- + +## Fase 6 — Tests y cobertura + +- [x] Tests unitarios por defecto **sin** integración pesada (`:plugin:test` excluye tag `integration`) +- [x] JaCoCo: `jacocoTestReport` + **`jacocoTestCoverageVerification`** (umbral **bajo interino** ~12% líneas; objetivo roadmap **>80%**) +- [x] Tests de infraestructura XML (`XmlParserInfrastructureTest`: SAX, DOM implícito, **UTF-16**, XML mal formado) +- [x] `ObfuscationServiceTest` (roundtrip JNI con **`assumeTrue(Stark.isNativeLibLoaded() is LoadResult.Loaded)`)** +- [x] `BackupServiceTest` vía `BackupService` + `defaultConfig()` +- [x] Otros tests de configuración / JSON / fingerprint según el árbol actual (`ConfigurationNormalizationTest`, `FingerprintExtractionTest`, `JsonListsTest`, etc.) +- [ ] Fixtures **`test-projects/`** minimalistas adicionales (además de samples existentes) +- [ ] Cobertura **>80%** como gate duro en CI + +--- + +## Fase 7 — Mantenibilidad + +- [x] Detekt con baseline (no “cero issues” sin baseline) +- [ ] Subir poco a poco reglas / reducir baseline hasta acercarse a **Detekt sin baseline** +- [x] Ktlint operativo; fallos no bloquean build (`ignoreFailures`) +- [~] KDoc: presente en puntos clave; ampliar en APIs públicas internas del plugin + +--- + +## Fase 8 — Documentación y CI/CD + +- [x] `CHANGELOG.md` actualizado con hitos del refactor +- [x] `MIGRATION.md` / docs de migración +- [x] `SECURITY.md` y documentación de contribución / build +- [x] `plugin/README.md` (requisitos, DSL avanzado, troubleshooting, rendimiento) +- [x] **`.github/workflows/ci.yml`**: test, JaCoCo report + **verification**, detekt, integration opcional, `assembleDebug` +- [x] **`.github/workflows/publish.yml`**: esqueleto (build JAR; publicación manual documentada) +- [ ] **OWASP Dependency-Check** (o equivalente) en Gradle y/o CI del plugin +- [ ] **Matriz CI** (p.ej. varias versiones AGP / Gradle) donde tenga sentido para el composite build + +--- + +## Resumen rápido + +| Área | Estado | +|-------------------|--------| +| BuildService / JNI / ProcessBuilder | Listo | +| XML SAX + DOM | Listo | +| Backup atómico | Listo (sin locks ni dirs UUID dedicados) | +| AGP wiring | Estable con `onVariants` + `tasks.matching(...).configureEach` | +| Tests + JaCoCo | Listo con umbral bajo; subir cobertura | +| OWASP / JMH / matriz AGP | Pendiente | + +--- + +*Si el plan original vive fuera del repo (p.ej. adjunto en Cursor), copia aquí los IDs `phase-*` y alinéalos con las secciones anteriores.* diff --git a/plugin/README.md b/plugin/README.md index 214971e..26966b3 100644 --- a/plugin/README.md +++ b/plugin/README.md @@ -16,6 +16,39 @@ See repo root [CHANGELOG.md](../CHANGELOG.md), [MIGRATION.md](../MIGRATION.md), - Default `./gradlew :plugin:test` excludes `@Tag("integration")` (network + `git clone` KotlinSample + nested Gradle). - Full suite: `./gradlew :plugin:integrationTest` (may fail offline or if the sample repo changes). +### Advanced configuration + +Apply in the **app** module `build.gradle.kts`: + +```kotlin +plugins { + id("com.android.application") + id("dev.vyp.stringcare.plugin") +} + +stringcare { + debug = false + skip = false + mockedFingerprint = "" // optional: offline / CI + srcFolders.add("src/main") + stringFiles.add("strings.xml") + assetsFiles.add("*.json") +} +``` + +### Troubleshooting + +| Symptom | What to try | +|--------|-------------| +| `native library not available` | Run on a supported host/OS; ensure JNI prebuilts are packaged (see `preparePluginNativeLibraries`). | +| Wrong or empty signing SHA1 | Run `./gradlew signingReport` for the same variant; check `mockedFingerprint` if offline. | +| Tasks not ordered | Ensure `com.android.application` is applied before StringCare; use AGP 8.7+. | + +### Performance tuning + +- **Large projects**: SAX parsing is used for flat `` entries; nested HTML strings fall back to DOM for that file. +- **CI**: Use `./gradlew :plugin:test` (fast); defer `:plugin:integrationTest` to nightly or manual runs. +- **Configuration cache**: Enabled at the root build; run `./gradlew :app:assembleDebug --configuration-cache` to validate. License ------- diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 6b86407..7a23456 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -38,7 +38,7 @@ repositories { dependencies { implementation(gradleApi()) - implementation("com.android.tools.build:gradle:8.7.3") + compileOnly("com.android.tools.build:gradle:8.7.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") testImplementation("org.junit.jupiter:junit-jupiter:5.11.0") testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") @@ -89,6 +89,20 @@ tasks.jacocoTestReport { } } +/** Soft gate: raise minimum over time (target >80% per roadmap). */ +tasks.jacocoTestCoverageVerification { + dependsOn(tasks.test) + violationRules { + rule { + limit { + counter = "LINE" + value = "COVEREDRATIO" + minimum = "0.12".toBigDecimal() + } + } + } +} + detekt { buildUponDefaultConfig = true allRules = false @@ -102,6 +116,7 @@ ktlint { ignoreFailures.set(true) filter { exclude("**/build/**") + exclude("**/Vars.kt") } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/AssetsFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/AssetsFile.kt new file mode 100644 index 0000000..2db6d1f --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/AssetsFile.kt @@ -0,0 +1,18 @@ +package dev.vyp.stringcare.plugin.domain.models + +import java.io.File + +data class AssetsFile( + val file: File, + val sourceFolder: String, + val module: String, +) : Backupable { + override fun backup(tempRoot: String): File { + val cleanPath = + "$tempRoot${File.separator}$module${File.separator}$sourceFolder${file.absolutePath.split(sourceFolder)[1]}" + .replace("${File.separator}${File.separator}", File.separator) + val backupFile = File(cleanPath) + copyToBackupAtomically(file, backupFile) + return backupFile + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt new file mode 100644 index 0000000..285111f --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt @@ -0,0 +1,36 @@ +package dev.vyp.stringcare.plugin.domain.models + +import java.io.File +import java.nio.file.AtomicMoveNotSupportedException +import java.nio.file.Files +import java.nio.file.StandardCopyOption + +/** + * Copies [source] to [dest] via a temp file in the same directory, then replaces [dest]. + * Uses [StandardCopyOption.ATOMIC_MOVE] when supported so readers rarely see a half-written file. + */ +internal fun copyToBackupAtomically( + source: File, + dest: File, +) { + dest.parentFile?.mkdirs() + val parent = dest.parentFile ?: error("Backup destination has no parent: ${dest.absolutePath}") + val tmp = File.createTempFile("sc-backup-", ".tmp", parent) + try { + Files.copy(source.toPath(), tmp.toPath(), StandardCopyOption.REPLACE_EXISTING) + try { + Files.move( + tmp.toPath(), + dest.toPath(), + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING, + ) + } catch (_: AtomicMoveNotSupportedException) { + Files.move(tmp.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING) + } + } finally { + if (tmp.exists()) { + tmp.delete() + } + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/Backupable.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/Backupable.kt new file mode 100644 index 0000000..819de3c --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/Backupable.kt @@ -0,0 +1,8 @@ +package dev.vyp.stringcare.plugin.domain.models + +import java.io.File + +/** Filesystem types that support backup into a StringCare temp root. */ +fun interface Backupable { + fun backup(tempRoot: String): File +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ExecutionResult.kt similarity index 73% rename from plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt rename to plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ExecutionResult.kt index 423d862..a71a728 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ExecutionResult.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ExecutionResult.kt @@ -1,4 +1,4 @@ -package dev.vyp.stringcare.plugin.models +package dev.vyp.stringcare.plugin.domain.models /** Result of running an external command (e.g. Gradle wrapper / shell script). */ sealed class ExecutionResult { @@ -14,4 +14,9 @@ sealed class ExecutionResult { val exitCode: Int?, val error: Throwable? = null, ) : ExecutionResult() + + data class Timeout( + val command: String, + val result: String, + ) : ExecutionResult() } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt new file mode 100644 index 0000000..7eddce0 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt @@ -0,0 +1,18 @@ +package dev.vyp.stringcare.plugin.domain.models + +import java.io.File + +data class ResourceFile( + val file: File, + val sourceFolder: String, + val module: String, +) : Backupable { + override fun backup(tempRoot: String): File { + val cleanPath = + "$tempRoot${File.separator}$module${File.separator}$sourceFolder${file.absolutePath.split(sourceFolder)[1]}" + .replace("${File.separator}${File.separator}", File.separator) + val backupFile = File(cleanPath) + copyToBackupAtomically(file, backupFile) + return backupFile + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/SAttribute.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/SAttribute.kt new file mode 100644 index 0000000..60dd13a --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/SAttribute.kt @@ -0,0 +1,6 @@ +package dev.vyp.stringcare.plugin.domain.models + +data class SAttribute( + val name: String, + val value: String, +) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt new file mode 100644 index 0000000..d34b733 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt @@ -0,0 +1,23 @@ +package dev.vyp.stringcare.plugin.domain.models + +/** + * A `` resource entry marked for obfuscation (`hidden` not false). + * + * @param index DOM order index among all `` nodes (used when rewriting XML). + */ +data class StringEntity( + val name: String, + val attributes: List, + val value: String, + val tag: String, + val index: Int, + val androidTreatment: Boolean = true, +) { + init { + require(name.isNotBlank()) { "StringEntity.name must not be blank" } + require(index >= 0) { "StringEntity.index must be >= 0" } + } + + /** Returns a copy with an updated obfuscated or plain value. */ + fun withValue(newValue: String): StringEntity = copy(value = newValue) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/repositories/ResourceRepository.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/repositories/ResourceRepository.kt new file mode 100644 index 0000000..a6fabb4 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/repositories/ResourceRepository.kt @@ -0,0 +1,12 @@ +package dev.vyp.stringcare.plugin.domain.repositories + +import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.models.ResourceFile + +/** Locates Android string resource files eligible for obfuscation. */ +fun interface ResourceRepository { + fun locateResourceFiles( + projectPath: String, + configuration: StringCareConfiguration, + ): List +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ExtractFingerprintUseCase.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ExtractFingerprintUseCase.kt new file mode 100644 index 0000000..8b5e5d0 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ExtractFingerprintUseCase.kt @@ -0,0 +1,83 @@ +package dev.vyp.stringcare.plugin.domain.usecases + +import dev.vyp.stringcare.plugin.StringCareConfiguration + +/** + * Parses Gradle `signingReport` console output and returns the SHA1 fingerprint line for + * [module] and [variant], or an empty string when not found. + */ +object ExtractFingerprintUseCase { + fun extract( + reportText: String, + module: String, + variant: String, + configuration: StringCareConfiguration, + log: (module: String?, message: String, tab: Boolean) -> Unit = { _, _, _ -> }, + ): String { + var key: String? = null + var until: String? = null + var variantLocated = false + var moduleLocated = false + val lines = reportText.split("\n") + for (line in lines) { + when { + line.lowercase().contains("downloading") -> + if (configuration.debug) { + log(module, line, configuration.debug) + } + line.lowercase().contains("unzipping") -> + if (configuration.debug) { + log(module, line, configuration.debug) + } + line.lowercase().contains("permissions") -> + if (configuration.debug) { + log(module, line, configuration.debug) + } + line.lowercase().contains("config:") && moduleLocated && variantLocated -> { + val k = (line.split(": ").getOrNull(1) ?: "").trim() + val valid = !k.equals("none", ignoreCase = true) + if (!valid) { + key = k + log(module, "\uD83E\uDD2F no config defined for variant $variant", true) + if (configuration.debug) { + until = key + } + } else if (configuration.debug) { + log(module, "Module: $module", true) + log(module, "Variant: $variant", true) + } + } + line.lowercase().contains("sha1") && moduleLocated && variantLocated -> { + key = line.split(" ").getOrNull(1) ?: "" + if (configuration.debug) { + log(module, line, configuration.debug) + } + } + line.lowercase().contains("error") -> { + /* reserved for diagnostics */ + } + line.lowercase().contains("valid until") && moduleLocated && variantLocated -> { + until = line.split(": ").getOrNull(1) + if (configuration.debug) { + log(module, line, configuration.debug) + } + } + line.lowercase().contains("store") && moduleLocated && variantLocated -> + if (configuration.debug) { + log(module, line, configuration.debug) + } + line.lowercase().contains("variant") && moduleLocated -> { + val locV = line.split(" ").getOrNull(1) ?: "" + if (locV == variant) { + variantLocated = true + } + } + line.lowercase().contains(":$module") -> moduleLocated = true + } + if (key != null && (!configuration.debug || configuration.debug && until != null)) { + return key + } + } + return "" + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt new file mode 100644 index 0000000..c7c21e2 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt @@ -0,0 +1,15 @@ +package dev.vyp.stringcare.plugin.domain.usecases + +import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.models.ResourceFile +import dev.vyp.stringcare.plugin.domain.repositories.ResourceRepository + +/** Locates string resource files that the plugin may obfuscate. */ +class ObfuscateStringsUseCase( + private val resources: ResourceRepository, +) { + fun locateTargets( + projectPath: String, + configuration: StringCareConfiguration, + ): List = resources.locateResourceFiles(projectPath, configuration) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt new file mode 100644 index 0000000..d102f44 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt @@ -0,0 +1,22 @@ +package dev.vyp.stringcare.plugin.infrastructure.crypto + +import dev.vyp.stringcare.plugin.internal.Stark + +/** + * JNI-backed obfuscation entry point (delegates to [Stark]). + * + * @throws UnsatisfiedLinkError if native code is not loaded on this host. + */ +class ObfuscationService { + fun obfuscate( + key: String, + payload: ByteArray, + applicationId: String, + ): ByteArray = Stark.obfuscate(key, payload, applicationId) + + fun reveal( + key: String, + payload: ByteArray, + applicationId: String, + ): ByteArray = Stark.reveal(key, payload, applicationId) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupService.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupService.kt new file mode 100644 index 0000000..e662e0d --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupService.kt @@ -0,0 +1,22 @@ +package dev.vyp.stringcare.plugin.infrastructure.filesystem + +import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.models.AssetsFile +import dev.vyp.stringcare.plugin.domain.models.ResourceFile +import dev.vyp.stringcare.plugin.internal.backupAssetsFiles +import dev.vyp.stringcare.plugin.internal.backupResourceFiles + +/** Coordinates backup of string and asset trees into the StringCare temp root. */ +class BackupService { + fun backupStringResources( + projectPath: String, + configuration: StringCareConfiguration, + tempRoot: String, + ): List = backupResourceFiles(projectPath, configuration, tempRoot) + + fun backupAssetFiles( + projectPath: String, + configuration: StringCareConfiguration, + tempRoot: String, + ): List = backupAssetsFiles(projectPath, configuration, tempRoot) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/AndroidTaskNames.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/AndroidTaskNames.kt new file mode 100644 index 0000000..184677c --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/AndroidTaskNames.kt @@ -0,0 +1,11 @@ +package dev.vyp.stringcare.plugin.infrastructure.gradle + +/** AGP task name fragments used when wiring StringCare tasks. */ +object AndroidTaskNames { + const val MERGE = "merge" + const val RESOURCES = "Resources" + const val PROCESS = "process" + const val GENERATE = "generate" + const val ASSETS = "Assets" + const val COMPRESS = "compress" +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/FileSystemResourceRepository.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/FileSystemResourceRepository.kt new file mode 100644 index 0000000..c3cab6e --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/gradle/FileSystemResourceRepository.kt @@ -0,0 +1,14 @@ +package dev.vyp.stringcare.plugin.infrastructure.gradle + +import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.models.ResourceFile +import dev.vyp.stringcare.plugin.domain.repositories.ResourceRepository +import dev.vyp.stringcare.plugin.internal.locateResourceFiles as internalLocate + +/** Default [ResourceRepository] backed by filesystem scanning. */ +class FileSystemResourceRepository : ResourceRepository { + override fun locateResourceFiles( + projectPath: String, + configuration: StringCareConfiguration, + ): List = internalLocate(projectPath, configuration) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/StringsXmlParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/StringsXmlParser.kt new file mode 100644 index 0000000..3db5c3e --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/StringsXmlParser.kt @@ -0,0 +1,155 @@ +package dev.vyp.stringcare.plugin.infrastructure.parsers + +import dev.vyp.stringcare.plugin.domain.models.SAttribute +import dev.vyp.stringcare.plugin.domain.models.StringEntity +import org.xml.sax.Attributes +import org.xml.sax.InputSource +import org.xml.sax.helpers.DefaultHandler +import java.io.File +import java.io.FileInputStream +import javax.xml.parsers.SAXParserFactory + +/** + * SAX-first `strings.xml` parsing with DOM fallback when `` contains nested elements. + * + * @param domParser full DOM implementation (provided by plugin `internal` layer to reuse [File.getXML] / [Node.extractHtml]). + */ +fun parseStringsXml( + file: File, + domParser: (File) -> List, +): List = + if (stringsXmlNeedsDomFallback(file)) { + domParser(file) + } else { + parseStringsXmlSax(file) + } + +private fun stringsXmlNeedsDomFallback(file: File): Boolean { + val detector = DomFallbackDetector() + return runCatching { + val factory = SAXParserFactory.newInstance() + factory.isNamespaceAware = true + factory.newSAXParser().parse(InputSource(FileInputStream(file)), detector) + detector.needsDom + }.getOrElse { true } +} + +private class DomFallbackDetector : DefaultHandler() { + private var insideString = false + var needsDom = false + + override fun startElement( + uri: String?, + localName: String?, + qName: String?, + attributes: Attributes?, + ) { + val tag = localName?.takeIf { it.isNotEmpty() } ?: qName?.substringAfterLast(':') ?: "" + when { + tag == XmlAttributes.TAG_STRING -> insideString = true + insideString -> needsDom = true + } + } + + override fun endElement( + uri: String?, + localName: String?, + qName: String?, + ) { + val tag = localName?.takeIf { it.isNotEmpty() } ?: qName?.substringAfterLast(':') ?: "" + if (tag == XmlAttributes.TAG_STRING) { + insideString = false + } + } +} + +private fun parseStringsXmlSax(file: File): List { + val handler = StringsSaxHandler() + val factory = SAXParserFactory.newInstance() + factory.isNamespaceAware = true + factory.newSAXParser().parse(InputSource(FileInputStream(file)), handler) + return handler.entities +} + +/** SAX path: `` bodies must be plain text (no nested tags). */ +private class StringsSaxHandler : DefaultHandler() { + val entities = mutableListOf() + private var inString = false + private var stringIndexAmongAllStrings = 0 + private var currentName = "" + private val currentAttributes = mutableListOf() + private var obfuscate = false + private var androidTreatment = true + private var containsHtml = false + private val textBuffer = StringBuilder() + + override fun startElement( + uri: String?, + localName: String?, + qName: String?, + attributes: Attributes?, + ) { + val tag = localName?.takeIf { it.isNotEmpty() } ?: qName?.substringAfterLast(':') ?: "" + if (tag != XmlAttributes.TAG_STRING) { + return + } + inString = true + textBuffer.clear() + currentName = "" + currentAttributes.clear() + obfuscate = false + androidTreatment = true + containsHtml = false + if (attributes != null) { + for (i in 0 until attributes.length) { + val attrName = attributes.getQName(i) + val attrVal = attributes.getValue(i) ?: "" + currentAttributes.add(SAttribute(attrName, attrVal)) + when (attrName) { + XmlAttributes.NAME -> currentName = attrVal + XmlAttributes.HIDDEN -> if (attrVal != "false") obfuscate = true + XmlAttributes.ANDROID_TREATMENT -> if (attrVal == "false") androidTreatment = false + XmlAttributes.CONTAINS_HTML -> if (attrVal != "false") containsHtml = true + } + } + } + } + + override fun characters( + ch: CharArray, + start: Int, + length: Int, + ) { + if (inString) { + textBuffer.append(ch, start, length) + } + } + + override fun endElement( + uri: String?, + localName: String?, + qName: String?, + ) { + val tag = localName?.takeIf { it.isNotEmpty() } ?: qName?.substringAfterLast(':') ?: "" + if (tag != XmlAttributes.TAG_STRING || !inString) { + return + } + inString = false + if (obfuscate) { + if (containsHtml) { + // Should have been routed to DOM fallback; treat as plain text if we ever get here. + } + entities.add( + StringEntity( + name = currentName, + attributes = currentAttributes.toList(), + value = textBuffer.toString(), + tag = XmlAttributes.TAG_STRING, + index = stringIndexAmongAllStrings, + androidTreatment = androidTreatment, + ), + ) + } + stringIndexAmongAllStrings++ + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlAttributes.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlAttributes.kt new file mode 100644 index 0000000..b71d66e --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlAttributes.kt @@ -0,0 +1,10 @@ +package dev.vyp.stringcare.plugin.infrastructure.parsers + +/** Common `strings.xml` attribute names used by StringCare. */ +object XmlAttributes { + const val NAME = "name" + const val HIDDEN = "hidden" + const val ANDROID_TREATMENT = "androidTreatment" + const val CONTAINS_HTML = "containsHtml" + const val TAG_STRING = "string" +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt new file mode 100644 index 0000000..a976e80 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt @@ -0,0 +1,12 @@ +package dev.vyp.stringcare.plugin.infrastructure.parsers + +import dev.vyp.stringcare.plugin.domain.models.StringEntity +import java.io.File + +/** Public entry for `strings.xml` parsing (SAX + optional DOM fallback). */ +object XmlParser { + fun parse( + file: File, + domFallback: (File) -> List, + ): List = parseStringsXml(file, domFallback) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt index c0b8479..3241fef 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt @@ -2,7 +2,7 @@ package dev.vyp.stringcare.plugin.internal import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.StringCarePlugin -import dev.vyp.stringcare.plugin.models.AssetsFile +import dev.vyp.stringcare.plugin.domain.models.AssetsFile import java.io.File fun locateAssetsFiles( diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt index 554e8c5..dd2bfda 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt @@ -1,24 +1,28 @@ package dev.vyp.stringcare.plugin.internal -import dev.vyp.stringcare.plugin.models.ExecutionResult -import org.gradle.api.GradleException +import dev.vyp.stringcare.plugin.domain.models.ExecutionResult import java.io.IOException import java.util.concurrent.TimeUnit private const val COMMAND_TIMEOUT_SECONDS = 60L -fun execute(command: String): ExecutionResult = executeShell(command) +fun execute(command: String): Result = executeShell(shellCommand(command), command) -private fun executeShell(command: String): ExecutionResult { - val processArgs = - when (getOs()) { - Os.WINDOWS -> listOf("cmd", "/c", command.normalize()) - Os.OSX, Os.LINUX -> listOf("/bin/bash", "-c", command) - } - val displayCommand = command +fun execute(command: List): Result = executeShell(command, command.joinToString(" ")) + +private fun shellCommand(command: String): List = + when (getOs()) { + Os.WINDOWS -> listOf("cmd", "/c", command.normalize()) + Os.OSX, Os.LINUX -> listOf("/bin/bash", "-c", command) + } + +private fun executeShell( + command: List, + displayCommand: String, +): Result { return try { val process = - ProcessBuilder(processArgs) + ProcessBuilder(command) .redirectErrorStream(true) .start() val output = @@ -28,42 +32,36 @@ private fun executeShell(command: String): ExecutionResult { val completed = process.waitFor(COMMAND_TIMEOUT_SECONDS, TimeUnit.SECONDS) if (!completed) { process.destroyForcibly() - return ExecutionResult.Failure( - command = displayCommand, - result = output, - exitCode = null, - error = GradleException("Command timed out after ${COMMAND_TIMEOUT_SECONDS}s"), + return Result.success( + ExecutionResult.Timeout( + command = displayCommand, + result = output, + ), ) } val exit = process.exitValue() if (exit != 0) { - ExecutionResult.Failure( - command = displayCommand, - result = output, - exitCode = exit, + Result.success( + ExecutionResult.Failure( + command = displayCommand, + result = output, + exitCode = exit, + ), ) } else { - ExecutionResult.Success( - command = displayCommand, - result = output, - exitCode = exit, + Result.success( + ExecutionResult.Success( + command = displayCommand, + result = output, + exitCode = exit, + ), ) } } catch (e: IOException) { - ExecutionResult.Failure( - command = displayCommand, - result = "", - exitCode = null, - error = e, - ) + Result.failure(e) } catch (e: InterruptedException) { Thread.currentThread().interrupt() - ExecutionResult.Failure( - command = displayCommand, - result = "", - exitCode = null, - error = e, - ) + Result.failure(e) } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt index 7cd06a7..5f743a3 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt @@ -1,24 +1,12 @@ package dev.vyp.stringcare.plugin.internal -import com.android.build.gradle.AppExtension -import com.android.build.gradle.AppPlugin -import com.android.build.gradle.api.ApplicationVariant import dev.vyp.stringcare.plugin.StringCareConfiguration -import dev.vyp.stringcare.plugin.StringCareExtension -import dev.vyp.stringcare.plugin.models.AssetsFile -import dev.vyp.stringcare.plugin.models.ExecutionResult -import dev.vyp.stringcare.plugin.models.ResourceFile -import dev.vyp.stringcare.plugin.services.StringCareBuildService -import dev.vyp.stringcare.plugin.tasks.SCPreview -import dev.vyp.stringcare.plugin.tasks.SCTestObfuscation +import dev.vyp.stringcare.plugin.domain.models.AssetsFile +import dev.vyp.stringcare.plugin.domain.models.ExecutionResult +import dev.vyp.stringcare.plugin.domain.models.ResourceFile import groovy.json.StringEscapeUtils -import org.gradle.api.DomainObjectSet import org.gradle.api.GradleException -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.provider.Provider import org.w3c.dom.Document -import org.w3c.dom.Node import org.xml.sax.InputSource import java.io.File import java.io.FileInputStream @@ -31,12 +19,20 @@ import javax.xml.transform.dom.DOMSource import javax.xml.transform.stream.StreamResult fun String.runCommand(runner: (command: String, result: String) -> Unit = { _, _ -> }): String { - val outcome = execute(this) + val outcome = + execute(this).getOrElse { error -> + throw GradleException("Unable to execute command: $this", error) + } return when (outcome) { is ExecutionResult.Success -> { runner(outcome.command, outcome.result) outcome.result } + is ExecutionResult.Timeout -> { + throw GradleException( + "Command timed out: ${outcome.command}\n${outcome.result}", + ) + } is ExecutionResult.Failure -> { throw GradleException( "Command failed (exit=${outcome.exitCode}): ${outcome.command}\n${outcome.result}", @@ -47,13 +43,12 @@ fun String.runCommand(runner: (command: String, result: String) -> Unit = { _, _ } fun String.normalize(): String { - val com = mutableListOf() - this.replace("\n", " ").split(" ").forEach { - if (it.trim().isNotEmpty()) { - com.add(it) - } - } - return com.joinToString(" ") + val collapsed = + replace("\n", " ") + .split(" ") + .filter { it.isNotEmpty() } + .joinToString(" ") + return if (collapsed == this) this else collapsed } fun String.normalizePath(): String { @@ -87,14 +82,14 @@ fun String.unescape(): String = StringEscapeUtils.unescapeJava(this) fun String.removeNewLines(): String = this.replace("\n", "") fun String.androidTreatment(): String { - val va = this.split(" ") - val values = mutableListOf() - va.forEach { value -> - if (value.trim().isNotBlank()) { - values.add(value.trim()) + val words = this.split(" ") + return buildList { + words.forEach { value -> + if (value.isNotBlank()) { + add(value.trim()) + } } - } - return values.joinToString(separator = " ") + }.joinToString(separator = " ") } fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boolean { @@ -220,7 +215,8 @@ fun File.resourceFile(configuration: StringCareConfiguration): ResourceFile? { } } } - return if (valid) ResourceFile(validFile!!, sourceFolder, configuration.name) else null + val file = validFile ?: return null + return if (valid) ResourceFile(file, sourceFolder, configuration.name) else null } fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { @@ -266,94 +262,8 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { }}", ) } - return if (valid) AssetsFile(validFile!!, sourceFolder, configuration.name) else null -} - -fun Project.absolutePath(): String { - val fPath = - this.file("build.gradle").absolutePath.replace( - "build.gradle", - emptyChar, - ) - val p = fPath.split(File.separator) - return fPath.replace(p[p.size - 2] + File.separator, "") -} - -fun Project.module(): String { - val fPath = - this.file("build.gradle").absolutePath.replace( - "build.gradle", - emptyChar, - ) - val p = fPath.split(File.separator) - return p[p.size - 2] -} - -fun Project.createExtension(): StringCareExtension = extensions.create(extensionName, StringCareExtension::class.java) - -fun Project.applicationVariants(): DomainObjectSet? { - if (this.plugins.hasPlugin(AppPlugin::class.java)) { - val extension = this.extensions.getByType(AppExtension::class.java) - return extension.applicationVariants - } - return null -} - -fun Project.config(extension: StringCareExtension): StringCareConfiguration { - val mod = this.module() - return StringCareConfiguration(mod).apply { - debug = extension.debug - skip = extension.skip - if (extension.srcFolders.isNotEmpty()) { - srcFolders.addAll(extension.srcFolders) - } - if (extension.stringFiles.isNotEmpty()) { - stringFiles.addAll(extension.stringFiles) - } - if (extension.assetsFiles.isNotEmpty()) { - assetsFiles.addAll(extension.assetsFiles) - } - if (extension.mockedFingerprint.isNotEmpty()) { - mockedFingerprint = extension.mockedFingerprint - } - } -} - -fun Project.registerTask( - configuration: StringCareConfiguration, - buildService: Provider, -) { - val variantDefault = buildService.get().firstVariantKeyOrDefault("debug") - val srcJson = toJsonStringList(configuration.srcFolders) - val strJson = toJsonStringList(configuration.stringFiles) - val assetsJson = toJsonStringList(configuration.assetsFiles) - - this.tasks.register(gradleTaskNameDoctor, SCPreview::class.java) { t -> - (t as Task).usesService(buildService) - t.stringCareService.set(buildService) - t.module.set(configuration.name) - t.applicationId.set(configuration.applicationId) - t.variantName.set(variantDefault) - t.srcFolders.set(srcJson) - t.stringFiles.set(strJson) - t.assetsFiles.set(assetsJson) - t.mockedFingerprint.set(configuration.mockedFingerprint) - t.debug.set(configuration.debug) - t.skip.set(configuration.skip) - } - this.tasks.register(gradleTaskNameObfuscate, SCTestObfuscation::class.java) { t -> - (t as Task).usesService(buildService) - t.stringCareService.set(buildService) - t.module.set(configuration.name) - t.applicationId.set(configuration.applicationId) - t.variantName.set(variantDefault) - t.srcFolders.set(srcJson) - t.stringFiles.set(strJson) - t.assetsFiles.set(assetsJson) - t.mockedFingerprint.set(configuration.mockedFingerprint) - t.debug.set(configuration.debug) - t.skip.set(configuration.skip) - } + val file = validFile ?: return null + return if (valid) AssetsFile(file, sourceFolder, configuration.name) else null } fun Process.outputString(): String { @@ -368,30 +278,6 @@ fun defaultConfig(): StringCareConfiguration = srcFolders.add("src/main") } -fun ResourceFile.backup(tempRoot: String): File { - val cleanPath = - "$tempRoot${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( - this.sourceFolder, - )[1]}" - .replace("${File.separator}${File.separator}", File.separator) - - val backupFile = File(cleanPath) - this.file.copyTo(backupFile, true) - return backupFile -} - -fun AssetsFile.backup(tempRoot: String): File { - val cleanPath = - "$tempRoot${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( - this.sourceFolder, - )[1]}" - .replace("${File.separator}${File.separator}", File.separator) - - val backupFile = File(cleanPath) - this.file.copyTo(backupFile, true) - return backupFile -} - fun File.restore( projectPath: String, tempRoot: String, @@ -410,8 +296,6 @@ fun File.restore( return restore } -fun ByteArray.toReadableString(): String = joinToString(separator = ", ") { it.toString() } - fun File.getXML(): Document { val inputStream = FileInputStream(this) val reader = InputStreamReader(inputStream, "UTF-8") @@ -448,114 +332,6 @@ fun File.removeAttributes() { fun File.getContent() = this.inputStream().readBytes().toString(Charsets.UTF_8) -fun Task.getModuleName(): String? { - val path = this.project.path - return if (path.isEmpty()) null else path.split(":")[path.split(":").size - 1] -} - -fun Task.dataFound(): Boolean = - this.name.contains(pre) && - this.name.contains(build) && - this.name != "$pre$build" && - !this.name.contains(test) - -fun Task.onMergeResourcesStarts(): Boolean = - this.name.contains(merge) && - this.name.contains(resources) && - !this.name.contains(test) - -fun Task.onMergeResourcesFinish(): Boolean = - this.name.contains(merge) && - this.name.contains(resources) && - !this.name.contains(test) - -fun Task.onMergeAssetsStarts(): Boolean = - this.name.contains(generate) && - this.name.contains(assets) && - !this.name.contains(test) - -fun Task.onMergeAssetsFinish(): Boolean = - this.name.contains(merge) && - this.name.contains(assets) && - !this.name.contains(test) - -fun Task.dataFoundVariant(): String = - this.name - .substring(pre.length) - .substring(0, this.name.substring(pre.length).length - build.length) - -fun Task.onMergeResourcesStartsVariant(): String = - this.name - .substring(merge.length) - .substring(0, this.name.substring(merge.length).length - resources.length) - -fun Task.onMergeResourcesFinishVariant(): String = - this.name - .substring(merge.length) - .substring(0, this.name.substring(merge.length).length - resources.length) - -fun Task.onMergeAssetsStartsVariant(): String = - this.name - .substring(generate.length) - .substring(0, this.name.substring(generate.length).length - assets.length) - -fun Task.onMergeAssetsFinishVariant(): String = - this.name - .substring(merge.length) - .substring(0, this.name.substring(merge.length).length - assets.length) - -fun Node.extractHtml(): String { - val stringBuilder = StringBuilder() - for (i in 0 until this.childNodes.length) { - val item = this.childNodes.item(i) - val type = item.getType() - when (type) { - StringType.BR -> - stringBuilder.append( - "
${when { - item.textContent.isNotEmpty() -> item.extractHtml() - else -> "" - } - }
", - ) - StringType.I -> - stringBuilder.append( - "${when { - item.textContent.isNotEmpty() -> item.extractHtml() - else -> "" - } - }", - ) - StringType.STRONG -> - stringBuilder.append( - "${when { - item.textContent.isNotEmpty() -> item.extractHtml() - else -> "" - } - }", - ) - StringType.TEXT -> stringBuilder.append(item.textContent) - } - } - return stringBuilder.toString() -} - -enum class StringType { - BR, - TEXT, - I, - STRONG, -} - -fun Node.getType(): StringType = - when { - this.toString().contains("[br:") -> StringType.BR - this.toString().contains("[i:") -> StringType.I - this.toString().contains("[strong:") -> StringType.STRONG - this.toString().contains("[#text") -> StringType.TEXT - else -> StringType.TEXT - } - fun StringCareConfiguration.normalize(): StringCareConfiguration { val nextStrings = stringFiles.map { it.normalizePath() } val nextSrc = srcFolders.map { it.normalizePath() } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt index 90babb9..f07a67d 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Fingerprint.kt @@ -1,6 +1,7 @@ package dev.vyp.stringcare.plugin.internal import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.usecases.ExtractFingerprintUseCase fun fingerPrint( module: String, @@ -21,70 +22,10 @@ fun String.extractFingerprint( module: String = "app", variant: String = "debug", configuration: StringCareConfiguration, -): String { - var key: String? = null - var until: String? = null - var variantLocated = false - var moduleLocated = false - val lines = this.split("\n") - for (line in lines) { - when { - line.lowercase().contains("downloading") -> - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } - line.lowercase().contains("unzipping") -> - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } - line.lowercase().contains("permissions") -> - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } - line.lowercase().contains("config:") && moduleLocated && variantLocated -> { - val k = (line.split(": ").getOrNull(1) ?: "").trim() - val valid = !k.equals("none", ignoreCase = true) - if (!valid) { - key = k - PrintUtils.print(module, "\uD83E\uDD2F no config defined for variant $variant", true) - if (configuration.debug) { - until = key - } - } else if (configuration.debug) { - PrintUtils.print(module, "Module: $module", true) - PrintUtils.print(module, "Variant: $variant", true) - } - } - line.lowercase().contains("sha1") && moduleLocated && variantLocated -> { - key = line.split(" ").getOrNull(1) ?: "" - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } - } - line.lowercase().contains("error") -> { - /* keep for future diagnostics */ - } - line.lowercase().contains("valid until") && moduleLocated && variantLocated -> { - until = line.split(": ").getOrNull(1) - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } - } - line.lowercase().contains("store") && moduleLocated && variantLocated -> - if (configuration.debug) { - PrintUtils.print(module, line, configuration.debug) - } - line.lowercase().contains("variant") && moduleLocated -> { - val locV = line.split(" ").getOrNull(1) ?: "" - if (locV == variant) { - variantLocated = true - } - } - line.lowercase().contains(":$module") -> moduleLocated = true - } - if (key != null && (!configuration.debug || configuration.debug && until != null)) { - return key!! - } - } - return "" -} +): String = + ExtractFingerprintUseCase.extract( + reportText = this, + module = module, + variant = variant, + configuration = configuration, + ) { m, message, tab -> PrintUtils.print(m, message, tab) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt index 6bfddf0..2f8e205 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt @@ -6,15 +6,17 @@ import java.net.JarURLConnection import java.net.URL import java.nio.file.Files import java.security.MessageDigest +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.atomic.AtomicBoolean import java.util.zip.ZipFile /** Result of attempting to load the host-side JNI library. */ -sealed class NativeLoadResult { - data object Loaded : NativeLoadResult() +sealed class LoadResult { + data object Loaded : LoadResult() data class Failed( val message: String, - ) : NativeLoadResult() + ) : LoadResult() } open class Stark { @@ -41,6 +43,21 @@ open class Stark { @Volatile private var verboseNativeLogging = true + private val nativeTempFiles: MutableSet = ConcurrentHashMap.newKeySet() + + private val nativeShutdownHookInstalled = AtomicBoolean(false) + + private fun trackNativeTempForCleanup(file: File) { + nativeTempFiles.add(file) + if (nativeShutdownHookInstalled.compareAndSet(false, true)) { + Runtime.getRuntime().addShutdownHook( + Thread { + nativeTempFiles.forEach { f -> runCatching { f.delete() } } + }, + ) + } + } + @JvmStatic fun setVerboseNativeLogging(enabled: Boolean) { verboseNativeLogging = enabled @@ -58,7 +75,7 @@ open class Stark { } @JvmStatic - fun nativeLoadResult(): NativeLoadResult { + fun isNativeLibLoaded(): LoadResult { synchronized(Stark::class.java) { if (!nativeLoadAttempted) { logNative( @@ -75,12 +92,12 @@ open class Stark { } else if (!nativeLibLoaded) { logNative("isNativeLibLoaded: returning cached false (load attempted earlier in this Gradle JVM)") } - return if (nativeLibLoaded) NativeLoadResult.Loaded else NativeLoadResult.Failed("Native library not loaded") + return if (nativeLibLoaded) LoadResult.Loaded else LoadResult.Failed("Native library not loaded") } } @JvmStatic - fun isNativeLibLoaded(): Boolean = nativeLoadResult() is NativeLoadResult.Loaded + fun hasNativeLibLoaded(): Boolean = isNativeLibLoaded() is LoadResult.Loaded private fun nativeResourceDir(): String = when (getOs()) { @@ -140,7 +157,7 @@ open class Stark { val size = tempFile.length() logNative("loadLib($name): extracted $size bytes → ${tempFile.absolutePath}") System.load(tempFile.absolutePath) - tempFile.deleteOnExit() + trackNativeTempForCleanup(tempFile) logNative("loadLib($name): System.load OK") true } catch (e: UnsatisfiedLinkError) { diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt index f3575c3..88918c2 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt @@ -7,9 +7,11 @@ import dev.vyp.stringcare.plugin.tasks.ObfuscateAssetsTask import dev.vyp.stringcare.plugin.tasks.ObfuscateStringsTask import dev.vyp.stringcare.plugin.tasks.RestoreAssetsTask import dev.vyp.stringcare.plugin.tasks.RestoreStringsTask +import dev.vyp.stringcare.plugin.infrastructure.gradle.AndroidTaskNames import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.provider.Provider +import org.gradle.api.tasks.TaskCollection private fun String.variantTaskSuffix(): String = replaceFirstChar { it.uppercase() } @@ -26,8 +28,6 @@ fun Project.registerVariantObfuscationTasks( val srcJson = toJsonStringList(config.srcFolders) val strJson = toJsonStringList(config.stringFiles) val assetsJson = toJsonStringList(config.assetsFiles) - val variantNames = mutableListOf() - androidComponents.onVariants(androidComponents.selector().all()) { variant -> val variantName: String = variant.name val applicationId = variant.applicationId.get() @@ -62,7 +62,6 @@ fun Project.registerVariantObfuscationTasks( t.moduleName.set(moduleNameValue) t.skip.set(config.skip) } - variantNames.add(variantCapitalized) tasks.register( "stringcareBeforeMergeAssets$variantCapitalized", @@ -91,25 +90,29 @@ fun Project.registerVariantObfuscationTasks( t.moduleName.set(moduleNameValue) t.skip.set(config.skip) } - } - // AGP registers merge/process tasks after variant API callbacks; use afterEvaluate + findByName (nullable). - afterEvaluate { - for (variantCapitalized in variantNames) { - val mergeRes = "merge${variantCapitalized}Resources" - val beforeRes = "stringcareBeforeMergeResources$variantCapitalized" - val afterRes = "stringcareAfterMergeResources$variantCapitalized" - val processRes = "process${variantCapitalized}Resources" - tasks.findByName(mergeRes)?.dependsOn(beforeRes) - tasks.findByName(afterRes)?.dependsOn(mergeRes) - tasks.findByName(processRes)?.dependsOn(afterRes) - val genAssets = "generate${variantCapitalized}Assets" - val beforeAssets = "stringcareBeforeMergeAssets$variantCapitalized" - val mergeAssets = "merge${variantCapitalized}Assets" - val afterAssets = "stringcareAfterMergeAssets$variantCapitalized" - tasks.findByName(genAssets)?.dependsOn(beforeAssets) - tasks.findByName(afterAssets)?.dependsOn(mergeAssets) - tasks.findByName("compress${variantCapitalized}Assets")?.dependsOn(afterAssets) - } + val mergeRes = + "${AndroidTaskNames.MERGE}${variantCapitalized}${AndroidTaskNames.RESOURCES}" + val beforeRes = "stringcareBeforeMergeResources$variantCapitalized" + val afterRes = "stringcareAfterMergeResources$variantCapitalized" + val processRes = + "${AndroidTaskNames.PROCESS}${variantCapitalized}${AndroidTaskNames.RESOURCES}" + namedLike(mergeRes).configureEach { task -> task.dependsOn(beforeRes) } + namedLike(afterRes).configureEach { task -> task.dependsOn(mergeRes) } + namedLike(processRes).configureEach { task -> task.dependsOn(afterRes) } + + val genAssets = + "${AndroidTaskNames.GENERATE}${variantCapitalized}${AndroidTaskNames.ASSETS}" + val beforeAssets = "stringcareBeforeMergeAssets$variantCapitalized" + val mergeAssets = + "${AndroidTaskNames.MERGE}${variantCapitalized}${AndroidTaskNames.ASSETS}" + val afterAssets = "stringcareAfterMergeAssets$variantCapitalized" + namedLike(genAssets).configureEach { task -> task.dependsOn(beforeAssets) } + namedLike(afterAssets).configureEach { task -> task.dependsOn(mergeAssets) } + namedLike( + "${AndroidTaskNames.COMPRESS}${variantCapitalized}${AndroidTaskNames.ASSETS}", + ).configureEach { task -> task.dependsOn(afterAssets) } } } + +private fun Project.namedLike(name: String): TaskCollection = tasks.matching { it.name == name } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt index 3459117..4f52d54 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt @@ -2,9 +2,11 @@ package dev.vyp.stringcare.plugin.internal import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.StringCarePlugin -import dev.vyp.stringcare.plugin.models.ResourceFile -import dev.vyp.stringcare.plugin.models.SAttribute -import dev.vyp.stringcare.plugin.models.StringEntity +import dev.vyp.stringcare.plugin.domain.models.ResourceFile +import dev.vyp.stringcare.plugin.domain.models.SAttribute +import dev.vyp.stringcare.plugin.domain.models.StringEntity +import dev.vyp.stringcare.plugin.infrastructure.parsers.XmlAttributes +import dev.vyp.stringcare.plugin.infrastructure.parsers.XmlParser import org.w3c.dom.Element import java.io.File @@ -77,47 +79,53 @@ fun restoreResourceFiles( return resourceFiles } -fun parseXML(file: File): List { - val entities = mutableListOf() +fun parseXML(file: File): List = XmlParser.parse(file, ::parseStringsXmlDom) + +internal fun parseStringsXmlDom(file: File): List { val doc = file.getXML() - val stringNodes = doc.getElementsByTagName("string") - for (i in 0 until stringNodes.length) { - val node = stringNodes.item(i) as Element - var name = "" - val attributes = mutableListOf() - var obfuscate = false - var androidTreatment = true - var containsHtml = false - val attrs = node.attributes - for (j in 0 until attrs.length) { - val attribute = attrs.item(j) - val attrName = attribute.nodeName - val attrVal = attribute.nodeValue ?: "" - when (attrName) { - "name" -> name = attrVal - "hidden" -> if (attrVal != "false") obfuscate = true - "androidTreatment" -> if (attrVal == "false") androidTreatment = false - "containsHtml" -> if (attrVal != "false") containsHtml = true + val stringNodes = doc.getElementsByTagName(XmlAttributes.TAG_STRING) + return buildList { + for (i in 0 until stringNodes.length) { + val node = stringNodes.item(i) as Element + var name = "" + val attrs = node.attributes + val attributes = + buildList { + for (j in 0 until attrs.length) { + val attribute = attrs.item(j) + val attrName = attribute.nodeName + val attrVal = attribute.nodeValue ?: "" + add(SAttribute(attrName, attrVal)) + } + } + var obfuscate = false + var androidTreatment = true + var containsHtml = false + for (attr in attributes) { + when (attr.name) { + XmlAttributes.NAME -> name = attr.value + XmlAttributes.HIDDEN -> if (attr.value != "false") obfuscate = true + XmlAttributes.ANDROID_TREATMENT -> if (attr.value == "false") androidTreatment = false + XmlAttributes.CONTAINS_HTML -> if (attr.value != "false") containsHtml = true + } + } + if (obfuscate) { + add( + StringEntity( + name, + attributes, + when { + containsHtml -> node.extractHtml() + else -> node.textContent + }, + XmlAttributes.TAG_STRING, + i, + androidTreatment, + ), + ) } - attributes.add(SAttribute(attrName, attrVal)) - } - if (obfuscate) { - entities.add( - StringEntity( - name, - attributes, - when { - containsHtml -> node.extractHtml() - else -> node.textContent - }, - "string", - i, - androidTreatment, - ), - ) } } - return entities } fun modifyXML( @@ -131,12 +139,12 @@ fun modifyXML( } val doc = file.getXML() - val nList = doc.getElementsByTagName("string") - for (i in 0 until nList.length) { - val node = nList.item(i) + val stringNodeList = doc.getElementsByTagName(XmlAttributes.TAG_STRING) + for (i in 0 until stringNodeList.length) { + val node = stringNodeList.item(i) val entity = stringEntities.find { - it.tag == "string" && it.index == i + it.tag == XmlAttributes.TAG_STRING && it.index == i } entity?.let { node.textContent = obfuscateStringEntity(key, it, configuration.applicationId).value @@ -165,7 +173,7 @@ fun obfuscateStringEntity( }.toByteArray(), mockId, ).toReadableString() - return StringEntity(entity.name, entity.attributes, obfuscation, entity.tag, entity.index, entity.androidTreatment) + return entity.withValue(obfuscation) } fun revealStringEntity( @@ -179,5 +187,5 @@ fun revealStringEntity( .map { it.toInt().toByte() } .toByteArray() val original = String(Stark.reveal(key, arr, mockId)) - return StringEntity(entity.name, entity.attributes, original, entity.tag, entity.index, entity.androidTreatment) + return entity.withValue(original) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt deleted file mode 100644 index 2f5f494..0000000 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/AssetsFile.kt +++ /dev/null @@ -1,9 +0,0 @@ -package dev.vyp.stringcare.plugin.models - -import java.io.File - -data class AssetsFile( - val file: File, - val sourceFolder: String, - val module: String, -) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ModelAliases.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ModelAliases.kt new file mode 100644 index 0000000..6a43ed1 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ModelAliases.kt @@ -0,0 +1,12 @@ +package dev.vyp.stringcare.plugin.models + +/** @suppress Published JAR keeps `models` package for binary compatibility; types live in `domain.models`. */ +typealias AssetsFile = dev.vyp.stringcare.plugin.domain.models.AssetsFile + +typealias ExecutionResult = dev.vyp.stringcare.plugin.domain.models.ExecutionResult + +typealias ResourceFile = dev.vyp.stringcare.plugin.domain.models.ResourceFile + +typealias SAttribute = dev.vyp.stringcare.plugin.domain.models.SAttribute + +typealias StringEntity = dev.vyp.stringcare.plugin.domain.models.StringEntity diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt deleted file mode 100644 index 8695ba1..0000000 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/ResourceFile.kt +++ /dev/null @@ -1,9 +0,0 @@ -package dev.vyp.stringcare.plugin.models - -import java.io.File - -data class ResourceFile( - val file: File, - val sourceFolder: String, - val module: String, -) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt deleted file mode 100644 index b810da2..0000000 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/models/StringEntity.kt +++ /dev/null @@ -1,15 +0,0 @@ -package dev.vyp.stringcare.plugin.models - -open class StringEntity( - var name: String, - var attributes: List, - var value: String, - val tag: String, - val index: Int, - val androidTreatment: Boolean = true, -) - -data class SAttribute( - val name: String, - val value: String, -) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt index a45f2d5..86b6305 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt @@ -2,6 +2,7 @@ package dev.vyp.stringcare.plugin.tasks import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.internal.PrintUtils +import dev.vyp.stringcare.plugin.internal.LoadResult import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupAssets import dev.vyp.stringcare.plugin.internal.backupAssetsFiles @@ -17,7 +18,9 @@ import org.gradle.api.provider.Property import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction +import org.gradle.work.DisableCachingByDefault +@DisableCachingByDefault(because = "Mutates asset files in the source tree") abstract class ObfuscateAssetsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -82,9 +85,12 @@ abstract class ObfuscateAssetsTask : DefaultTask() { PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()}") return } - if (!Stark.isNativeLibLoaded()) { - PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()} (native library not available for this architecture)") - return + when (val nativeLoad = Stark.isNativeLibLoaded()) { + LoadResult.Loaded -> Unit + is LoadResult.Failed -> { + PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()} (${nativeLoad.message})") + return + } } val tempRoot = stringCareService.get().getOrCreateTempFolder() PrintUtils.print("", "ApplicationId: ${applicationId.get()}", tab = true) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt index e2f7516..1ad4f0f 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt @@ -2,6 +2,7 @@ package dev.vyp.stringcare.plugin.tasks import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.internal.PrintUtils +import dev.vyp.stringcare.plugin.internal.LoadResult import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupResourceFiles import dev.vyp.stringcare.plugin.internal.backupStringRes @@ -16,7 +17,9 @@ import org.gradle.api.provider.Property import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction +import org.gradle.work.DisableCachingByDefault +@DisableCachingByDefault(because = "Mutates Android string resource XML files in the source tree") abstract class ObfuscateStringsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -81,9 +84,12 @@ abstract class ObfuscateStringsTask : DefaultTask() { PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()}") return } - if (!Stark.isNativeLibLoaded()) { - PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()} (native library not available for this architecture)") - return + when (val nativeLoad = Stark.isNativeLibLoaded()) { + LoadResult.Loaded -> Unit + is LoadResult.Failed -> { + PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()} (${nativeLoad.message})") + return + } } val tempRoot = stringCareService.get().getOrCreateTempFolder() PrintUtils.print("", "ApplicationId: ${applicationId.get()}", tab = true) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt index ea9dc6e..6e434df 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt @@ -9,7 +9,9 @@ import org.gradle.api.provider.Property import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction +import org.gradle.work.DisableCachingByDefault +@DisableCachingByDefault(because = "Restores asset files from backups in the source tree") abstract class RestoreAssetsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt index 3db83b2..0c5319a 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt @@ -9,7 +9,9 @@ import org.gradle.api.provider.Property import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction +import org.gradle.work.DisableCachingByDefault +@DisableCachingByDefault(because = "Restores string resources from backups in the source tree") abstract class RestoreStringsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt index 3645ba5..de304a9 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt @@ -1,6 +1,7 @@ package dev.vyp.stringcare.plugin.tasks import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.internal.LoadResult import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupResourceFiles import dev.vyp.stringcare.plugin.internal.extractFingerprint @@ -83,9 +84,12 @@ abstract class SCTestObfuscation : DefaultTask() { println("\tSkipping (skip=true)") return } - if (!Stark.isNativeLibLoaded()) { - println("\tSkipping (native library not available for this architecture)") - return + when (val nativeLoad = Stark.isNativeLibLoaded()) { + LoadResult.Loaded -> Unit + is LoadResult.Failed -> { + println("\tSkipping (${nativeLoad.message})") + return + } } signingReportTask().runCommand { _, result -> key = result.extractFingerprint(module.get(), variantName.get(), configuration) diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/ConfigurationNormalizationTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/ConfigurationNormalizationTest.kt new file mode 100644 index 0000000..b8826c2 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/ConfigurationNormalizationTest.kt @@ -0,0 +1,34 @@ +package dev.vyp.stringcare.plugin + +import dev.vyp.stringcare.plugin.internal.normalize +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class ConfigurationNormalizationTest { + @Test + fun `String normalize collapses whitespace and newlines`() { + assertEquals("a b c", "a\nb c".normalize()) + } + + @Test + fun `String normalize is idempotent for collapsed input`() { + val s = "one two" + assertEquals(s, s.normalize()) + } + + @Test + fun `StringCareConfiguration normalize is idempotent on paths`() { + val c = + StringCareConfiguration("app").apply { + srcFolders.clear() + srcFolders.add("src//main") + stringFiles.clear() + stringFiles.add("strings.xml") + } + c.normalize() + val first = c.srcFolders.toList() to c.stringFiles.toList() + c.normalize() + val second = c.srcFolders.toList() to c.stringFiles.toList() + assertEquals(first, second) + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/FingerprintExtractionTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/FingerprintExtractionTest.kt new file mode 100644 index 0000000..93f07c2 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/FingerprintExtractionTest.kt @@ -0,0 +1,107 @@ +package dev.vyp.stringcare.plugin + +import dev.vyp.stringcare.plugin.domain.usecases.ExtractFingerprintUseCase +import dev.vyp.stringcare.plugin.internal.extractFingerprint +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Test + +class FingerprintExtractionTest { + @Test + fun `extractFingerprint reads SHA1 after variant block`() { + val report = + """ + > Task :app:signingReport + :app:debug + Variant debug + Config: debug + SHA1 DE:AD:BE:EF + Valid until: forever + """.trimIndent() + val config = StringCareConfiguration("app").apply { debug = false } + val key = report.extractFingerprint(module = "app", variant = "debug", configuration = config) + assertTrue(key.contains("DE:AD:BE:EF", ignoreCase = true)) + } + + @Test + fun `ExtractFingerprintUseCase finds SHA1 for nested module path`() { + val report = + """ + :feature:debug + Variant debug + SHA1 AA:BB:CC:DD + """.trimIndent() + val config = StringCareConfiguration("feature").apply { debug = false } + val key = + ExtractFingerprintUseCase.extract( + reportText = report, + module = "feature", + variant = "debug", + configuration = config, + ) + assertTrue(key.contains("AA:BB:CC:DD", ignoreCase = true)) + } + + @Test + fun `ExtractFingerprintUseCase returns empty when variant not matched`() { + val report = + """ + :app:release + Variant release + SHA1 11:22:33:44 + """.trimIndent() + val config = StringCareConfiguration("app").apply { debug = false } + val key = + ExtractFingerprintUseCase.extract( + reportText = report, + module = "app", + variant = "debug", + configuration = config, + ) + assertEquals("", key) + } + + @Test + fun `ExtractFingerprintUseCase returns empty for blank report`() { + val config = StringCareConfiguration("app").apply { debug = false } + assertEquals( + "", + ExtractFingerprintUseCase.extract( + reportText = "", + module = "app", + variant = "debug", + configuration = config, + ), + ) + } + + @Test + fun `ExtractFingerprintUseCase with debug waits for valid until before returning key`() { + val reportNoUntil = + """ + :app:debug + Variant debug + SHA1 DE:AD:BE:EF + """.trimIndent() + val reportWithUntil = + reportNoUntil + "\nValid until: Mon Jan 1 00:00:00 UTC 2040" + val debugConfig = StringCareConfiguration("app").apply { debug = true } + assertEquals( + "", + ExtractFingerprintUseCase.extract( + reportText = reportNoUntil, + module = "app", + variant = "debug", + configuration = debugConfig, + ), + ) + assertTrue( + ExtractFingerprintUseCase.extract( + reportText = reportWithUntil, + module = "app", + variant = "debug", + configuration = debugConfig, + ).contains("DE:AD:BE:EF", ignoreCase = true), + ) + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt new file mode 100644 index 0000000..35df848 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt @@ -0,0 +1,23 @@ +package dev.vyp.stringcare.plugin.infrastructure.crypto + +import dev.vyp.stringcare.plugin.internal.Stark +import dev.vyp.stringcare.plugin.internal.LoadResult +import org.junit.jupiter.api.Assertions.assertArrayEquals +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Assumptions.assumeTrue +import org.junit.jupiter.api.Test + +class ObfuscationServiceTest { + @Test + fun `obfuscate and reveal roundtrip when native is loaded`() { + assumeTrue(Stark.isNativeLibLoaded() is LoadResult.Loaded) + val svc = ObfuscationService() + val key = "k" + val plain = "hello-世界".toByteArray(Charsets.UTF_8) + val appId = "com.example.app" + val obf = svc.obfuscate(key, plain, appId) + assertTrue(obf.isNotEmpty()) + val back = svc.reveal(key, obf, appId) + assertArrayEquals(plain, back) + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupServiceTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupServiceTest.kt new file mode 100644 index 0000000..ac35b2b --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/filesystem/BackupServiceTest.kt @@ -0,0 +1,41 @@ +package dev.vyp.stringcare.plugin.infrastructure.filesystem + +import dev.vyp.stringcare.plugin.internal.defaultConfig +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Test +import java.io.File +import java.nio.file.Files + +class BackupServiceTest { + @Test + fun `backupStringResources copies values xml under temp root`() { + val root = Files.createTempDirectory("sc-backup-svc").toFile() + val backupRoot = Files.createTempDirectory("sc-backup-dest").toFile() + try { + val valuesDir = File(root, "app/src/main/res/values").apply { mkdirs() } + val xml = + """ + + + ok + + """.trimIndent() + File(valuesDir, "strings.xml").writeText(xml) + val config = defaultConfig() + val svc = BackupService() + val backed = svc.backupStringResources(root.absolutePath, config, backupRoot.absolutePath) + assertEquals(1, backed.size) + val expected = + File( + backupRoot, + "app${File.separator}src${File.separator}main${File.separator}res${File.separator}values${File.separator}strings.xml", + ) + assertTrue(expected.exists(), "expected $expected") + assertEquals(xml, expected.readText()) + } finally { + root.deleteRecursively() + backupRoot.deleteRecursively() + } + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt new file mode 100644 index 0000000..97240c9 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt @@ -0,0 +1,33 @@ +package dev.vyp.stringcare.plugin.integration + +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test +import java.io.File + +/** + * Lightweight checks that the composite build still configures with the configuration cache enabled. + */ +@Tag("integration") +class PluginIntegrationTest { + private fun repoRoot(): File { + var dir = File(System.getProperty("user.dir")) + if (!dir.resolve("settings.gradle.kts").exists()) { + dir = dir.parentFile + } + return dir + } + + @Test + fun `compile plugin with configuration cache`() { + val root = repoRoot() + val result = + GradleRunner.create() + .withProjectDir(root) + .withArguments(":plugin:compileKotlin", "--configuration-cache", "--no-daemon") + .forwardOutput() + .build() + assertTrue(result.output.contains("BUILD SUCCESSFUL")) + } +} diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/parsers/XmlParserInfrastructureTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/parsers/XmlParserInfrastructureTest.kt new file mode 100644 index 0000000..0575271 --- /dev/null +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/parsers/XmlParserInfrastructureTest.kt @@ -0,0 +1,86 @@ +package dev.vyp.stringcare.plugin.parsers + +import dev.vyp.stringcare.plugin.internal.parseStringsXmlDom +import dev.vyp.stringcare.plugin.infrastructure.parsers.XmlParser +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import java.io.File +import java.nio.charset.StandardCharsets + +class XmlParserInfrastructureTest { + @Test + fun `XmlParser parse matches hidden string extraction`() { + val xml = + """ + + + x + + + """.trimIndent() + val file = File.createTempFile("strings", ".xml") + file.writeText(xml, Charsets.UTF_8) + try { + val entities = XmlParser.parse(file, ::parseStringsXmlDom) + assertEquals(1, entities.size) + assertEquals("b", entities[0].name) + assertEquals("y", entities[0].value) + } finally { + file.delete() + } + } + + @Test + fun `SAX path used when no nested elements in string`() { + val xml = + """ + + + + + """.trimIndent() + val file = File.createTempFile("strings", ".xml") + file.writeText(xml) + try { + val entities = XmlParser.parse(file, ::parseStringsXmlDom) + assertEquals(1, entities.size) + assertEquals("plain", entities[0].value) + } finally { + file.delete() + } + } + + @Test + fun `parses UTF-16 hidden string`() { + val xml = + """ + + + + + """.trimIndent() + val file = File.createTempFile("strings", ".xml") + file.writeText(xml, StandardCharsets.UTF_16) + try { + val entities = XmlParser.parse(file, ::parseStringsXmlDom) + assertEquals(1, entities.size) + assertEquals("café", entities[0].value) + } finally { + file.delete() + } + } + + @Test + fun `malformed XML fails parse`() { + val file = File.createTempFile("bad", ".xml") + file.writeText("<< { + XmlParser.parse(file, ::parseStringsXmlDom) + } + } finally { + file.delete() + } + } +} From a67be8703986188f912fd262ffaa221ac285faf9 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 17:40:00 +0100 Subject: [PATCH 04/24] Enhance CI workflow with performance regression checks and AGP compatibility testing: add a new job to measure build performance for `assembleDebug` and ensure compatibility across multiple AGP versions. Update `ci.yml` to include performance checks and improve build stability. Remove obsolete refactor plan checklist document to streamline project documentation. --- .github/workflows/ci.yml | 39 ++++++ docs/refactor-plan-checklist.md | 119 ------------------ .../plugin/domain/models/BackupCopy.kt | 111 +++++++++++++--- .../plugin/domain/models/ResourceFile.kt | 13 ++ .../plugin/domain/models/StringEntity.kt | 8 ++ .../crypto/ObfuscationService.kt | 18 +++ .../infrastructure/parsers/XmlParser.kt | 7 ++ .../plugin/internal/ByteArrayExtensions.kt | 4 + .../stringcare/plugin/internal/Extensions.kt | 111 ++++++++-------- .../plugin/internal/ProjectExtensions.kt | 102 +++++++++++++++ .../vyp/stringcare/plugin/internal/Stark.kt | 28 +++-- .../plugin/internal/TaskExtensions.kt | 59 +++++++++ .../vyp/stringcare/plugin/internal/XParser.kt | 6 + .../plugin/internal/XmlNodeExtensions.kt | 55 ++++++++ .../plugin/services/StringCareBuildService.kt | 3 +- .../plugin/tasks/ObfuscateAssetsTask.kt | 27 +++- .../plugin/tasks/ObfuscateStringsTask.kt | 23 +++- .../plugin/tasks/RestoreAssetsTask.kt | 9 ++ .../plugin/tasks/RestoreStringsTask.kt | 9 ++ .../vyp/stringcare/plugin/tasks/SCPreview.kt | 15 +++ .../plugin/tasks/SCTestObfuscation.kt | 15 +++ 21 files changed, 565 insertions(+), 216 deletions(-) delete mode 100644 docs/refactor-plan-checklist.md create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ByteArrayExtensions.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ProjectExtensions.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/TaskExtensions.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XmlNodeExtensions.kt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff2de89..cca355d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,3 +29,42 @@ jobs: - name: Sample app assembleDebug run: ./gradlew :app:assembleDebug --no-daemon + + - name: Performance non-regression check (assembleDebug) + env: + PERF_MAX_SECONDS: "240" + run: | + ./gradlew :app:clean --no-daemon + ./gradlew :app:assembleDebug --no-daemon + start=$(date +%s) + ./gradlew :app:assembleDebug --no-daemon + end=$(date +%s) + elapsed=$((end - start)) + echo "Measured assembleDebug (warm) time: ${elapsed}s" + if [ "$elapsed" -gt "$PERF_MAX_SECONDS" ]; then + echo "Performance regression: ${elapsed}s > ${PERF_MAX_SECONDS}s" + exit 1 + fi + + agp-compat: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + agp-version: ["8.0.2", "8.7.3", "9.0.0"] + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Set AGP version in version catalog + run: sed -i.bak 's/^agp = ".*"/agp = "${{ matrix.agp-version }}"/' gradle/libs.versions.toml + + - name: AGP compatibility check (assembleDebug) + run: ./gradlew :app:assembleDebug --no-daemon diff --git a/docs/refactor-plan-checklist.md b/docs/refactor-plan-checklist.md deleted file mode 100644 index 9750a72..0000000 --- a/docs/refactor-plan-checklist.md +++ /dev/null @@ -1,119 +0,0 @@ -# Refactor plan checklist (plugin / repo) - -Estado al **2026-03-19**. Marca lo implementado en el código actual; úsalo para seguimiento del roadmap. - -Leyenda: **`[x]`** hecho · **`[ ]`** pendiente / parcial · **`[~]`** hecho con matices (ver nota) - ---- - -## Fase 0 — Setup y calidad base - -- [x] Rama / flujo de trabajo acordado para cambios grandes del plugin -- [x] Detekt en `plugin/build.gradle.kts` + `config/detekt/detekt.yml` + **baseline** (`baseline.xml`) -- [x] Ktlint en el plugin (`ignoreFailures`, exclusión legacy `Vars.kt`) -- [x] Develocity / build scan en `settings.gradle.kts` (publicación condicional a fallos) -- [x] Tests JUnit 5 por defecto; tarea `:plugin:integrationTest` + `@Tag("integration")` para clones/nested Gradle - ---- - -## Fase 1 — Seguridad y ejecución - -- [x] Estado mutable del plugin migrado a **`StringCareBuildService`** + `StringCareSession` solo para tests -- [x] Tareas críticas con **`usesService`** al build service -- [x] Comandos shell vía **`ProcessBuilder`** (no shell inseguro directo en el path feliz) -- [x] Timeout (~60s) y **`ExecutionResult.Timeout`** -- [x] JNI del host: verificación **SHA-256** antes de cargar, reintentos, **`LoadResult`**, limpieza de temporales JNI (sin `deleteOnExit` como única estrategia) - ---- - -## Fase 2 — Rendimiento y XML - -- [x] Parser **SAX-first** para `strings.xml` + **fallback DOM** si hay anidamiento / detector falla -- [x] Fachada `XmlParser` / `StringsXmlParser`; `XParser` delega -- [x] Walk de recursos con **prune** de `build/`, `.gradle/`, `.git/`, `node_modules/` -- [x] `StringCareConfiguration.normalize()` idempotente -- [x] Copia de backup **temp + move atómico** (`BackupCopy` + `ResourceFile` / `AssetsFile`) -- [ ] Módulo **JMH** u otro benchmark reproducible para el parser -- [ ] Regresión de rendimiento automatizada en CI - ---- - -## Fase 3 — APIs Gradle - -- [x] Entradas de tareas como **`Property<>`** donde aplica -- [x] **`@DisableCachingByDefault`** en tareas que mutan el árbol de fuentes (no `@CacheableTask`) -- [x] Wiring con AGP: dependencias de merge/process/assets dentro de `onVariants {}` usando `tasks.matching { it.name == ... }.configureEach { ... }` (sin `afterEvaluate` ni `findByName`) -- [x] Sustituido `afterEvaluate` por wiring lazy y seguro por nombre de tarea -- [ ] Declarar **`@InputFiles` / outputs** fiables para tareas mutadoras (difícil mientras se editan fuentes in-place) - ---- - -## Fase 4 — Arquitectura (capas) - -- [x] Modelos en `domain.models` (`StringEntity`, `ResourceFile`, `AssetsFile`, `ExecutionResult`, `Backupable`, etc.) -- [x] `infrastructure`: parsers, filesystem (`BackupService`), crypto (`ObfuscationService`), Gradle (`FileSystemResourceRepository`) -- [x] Casos de uso / repositorios (`ObfuscateStringsUseCase`, `ResourceRepository`) -- [x] AGP como **`compileOnly`** en el plugin -- [x] JSON de listas con **kotlinx-serialization** (sin Gson) -- [x] **`ExtractFingerprintUseCase`** en `domain.usecases` (tests pueden llamar `extract` con `log` por defecto; `extractFingerprint` delega desde `internal`) -- [ ] Partir **`Extensions.kt`** en módulos más pequeños (Gradle vs FS vs XML) - ---- - -## Fase 5 — Kotlin y robustez - -- [x] Reducción de **`!!`** en fuentes principales del plugin (revisar periódicamente) -- [x] Utilidades tipo `toReadableString` donde aplica -- [~] API de ejecución: ahora **`execute(command: String)` → `Result`** y existe overload con **`List`**; queda como deuda dejar `List` como API única - ---- - -## Fase 6 — Tests y cobertura - -- [x] Tests unitarios por defecto **sin** integración pesada (`:plugin:test` excluye tag `integration`) -- [x] JaCoCo: `jacocoTestReport` + **`jacocoTestCoverageVerification`** (umbral **bajo interino** ~12% líneas; objetivo roadmap **>80%**) -- [x] Tests de infraestructura XML (`XmlParserInfrastructureTest`: SAX, DOM implícito, **UTF-16**, XML mal formado) -- [x] `ObfuscationServiceTest` (roundtrip JNI con **`assumeTrue(Stark.isNativeLibLoaded() is LoadResult.Loaded)`)** -- [x] `BackupServiceTest` vía `BackupService` + `defaultConfig()` -- [x] Otros tests de configuración / JSON / fingerprint según el árbol actual (`ConfigurationNormalizationTest`, `FingerprintExtractionTest`, `JsonListsTest`, etc.) -- [ ] Fixtures **`test-projects/`** minimalistas adicionales (además de samples existentes) -- [ ] Cobertura **>80%** como gate duro en CI - ---- - -## Fase 7 — Mantenibilidad - -- [x] Detekt con baseline (no “cero issues” sin baseline) -- [ ] Subir poco a poco reglas / reducir baseline hasta acercarse a **Detekt sin baseline** -- [x] Ktlint operativo; fallos no bloquean build (`ignoreFailures`) -- [~] KDoc: presente en puntos clave; ampliar en APIs públicas internas del plugin - ---- - -## Fase 8 — Documentación y CI/CD - -- [x] `CHANGELOG.md` actualizado con hitos del refactor -- [x] `MIGRATION.md` / docs de migración -- [x] `SECURITY.md` y documentación de contribución / build -- [x] `plugin/README.md` (requisitos, DSL avanzado, troubleshooting, rendimiento) -- [x] **`.github/workflows/ci.yml`**: test, JaCoCo report + **verification**, detekt, integration opcional, `assembleDebug` -- [x] **`.github/workflows/publish.yml`**: esqueleto (build JAR; publicación manual documentada) -- [ ] **OWASP Dependency-Check** (o equivalente) en Gradle y/o CI del plugin -- [ ] **Matriz CI** (p.ej. varias versiones AGP / Gradle) donde tenga sentido para el composite build - ---- - -## Resumen rápido - -| Área | Estado | -|-------------------|--------| -| BuildService / JNI / ProcessBuilder | Listo | -| XML SAX + DOM | Listo | -| Backup atómico | Listo (sin locks ni dirs UUID dedicados) | -| AGP wiring | Estable con `onVariants` + `tasks.matching(...).configureEach` | -| Tests + JaCoCo | Listo con umbral bajo; subir cobertura | -| OWASP / JMH / matriz AGP | Pendiente | - ---- - -*Si el plan original vive fuera del repo (p.ej. adjunto en Cursor), copia aquí los IDs `phase-*` y alinéalos con las secciones anteriores.* diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt index 285111f..267b2e0 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt @@ -1,9 +1,11 @@ package dev.vyp.stringcare.plugin.domain.models import java.io.File +import java.io.RandomAccessFile import java.nio.file.AtomicMoveNotSupportedException import java.nio.file.Files import java.nio.file.StandardCopyOption +import java.security.MessageDigest /** * Copies [source] to [dest] via a temp file in the same directory, then replaces [dest]. @@ -13,24 +15,105 @@ internal fun copyToBackupAtomically( source: File, dest: File, ) { - dest.parentFile?.mkdirs() - val parent = dest.parentFile ?: error("Backup destination has no parent: ${dest.absolutePath}") - val tmp = File.createTempFile("sc-backup-", ".tmp", parent) - try { - Files.copy(source.toPath(), tmp.toPath(), StandardCopyOption.REPLACE_EXISTING) + withFileLock(dest) { + dest.parentFile?.mkdirs() + val parent = dest.parentFile ?: error("Backup destination has no parent: ${dest.absolutePath}") + val tmp = File.createTempFile("sc-backup-", ".tmp", parent) try { - Files.move( - tmp.toPath(), - dest.toPath(), - StandardCopyOption.ATOMIC_MOVE, + Files.copy(source.toPath(), tmp.toPath(), StandardCopyOption.REPLACE_EXISTING) + try { + Files.move( + tmp.toPath(), + dest.toPath(), + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING, + ) + } catch (_: AtomicMoveNotSupportedException) { + Files.move(tmp.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING) + } + val sourceChecksum = source.sha256Hex() + val backupChecksum = dest.sha256Hex() + check(sourceChecksum == backupChecksum) { + "Backup checksum mismatch for ${source.absolutePath} -> ${dest.absolutePath}" + } + } finally { + if (tmp.exists()) { + tmp.delete() + } + } + } +} + +internal inline fun withFileLock( + file: File, + action: () -> T, +): T { + file.parentFile?.mkdirs() + if (!file.exists()) { + file.createNewFile() + } + RandomAccessFile(file, "rw").use { raf -> + raf.channel.use { channel -> + channel.lock().use { + return action() + } + } + } +} + +internal inline fun withBackup( + backupFile: File, + targetFile: File, + action: () -> T, +): T { + return try { + action() + } catch (error: Throwable) { + withFileLock(targetFile) { + Files.copy( + backupFile.toPath(), + targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING, ) - } catch (_: AtomicMoveNotSupportedException) { - Files.move(tmp.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING) } - } finally { - if (tmp.exists()) { - tmp.delete() + throw error + } +} + +/** + * Shared backup/rollback workflow for any [Backupable] item. + * + * Backups are created into [tempRoot], then [action] is executed for each item. + * If [action] fails for an item, that item is restored from its backup and the error is rethrown. + */ +internal inline fun forEachWithBackup( + items: Iterable, + tempRoot: String, + action: (T) -> Unit, +) { + items.forEach { item -> + val backup = item.backup(tempRoot) + val target = + when (item) { + is ResourceFile -> item.file + is AssetsFile -> item.file + else -> error("Unsupported Backupable type: ${item::class.qualifiedName}") + } + withBackup(backup, target) { + action(item) + } + } +} + +private fun File.sha256Hex(): String { + val digest = MessageDigest.getInstance("SHA-256") + inputStream().use { stream -> + val buffer = ByteArray(DEFAULT_BUFFER_SIZE) + while (true) { + val read = stream.read(buffer) + if (read <= 0) break + digest.update(buffer, 0, read) } } + return digest.digest().joinToString(separator = "") { b -> "%02x".format(b) } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt index 7eddce0..e34bce1 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/ResourceFile.kt @@ -2,11 +2,24 @@ package dev.vyp.stringcare.plugin.domain.models import java.io.File +/** + * String XML resource file selected for obfuscation and backup. + * + * Example: + * `ResourceFile(File("src/main/res/values/strings.xml"), "src/main", "app")` + * + * @property file Physical file in the project. + * @property sourceFolder Source-set root used to rebuild relative backup paths. + * @property module Gradle module name that owns the resource file. + */ data class ResourceFile( val file: File, val sourceFolder: String, val module: String, ) : Backupable { + /** + * Creates a backup copy of this resource file inside [tempRoot], preserving module/source relative path. + */ override fun backup(tempRoot: String): File { val cleanPath = "$tempRoot${File.separator}$module${File.separator}$sourceFolder${file.absolutePath.split(sourceFolder)[1]}" diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt index d34b733..8a9d62d 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/StringEntity.kt @@ -3,7 +3,15 @@ package dev.vyp.stringcare.plugin.domain.models /** * A `` resource entry marked for obfuscation (`hidden` not false). * + * Example: + * `StringEntity("welcome_title", attributes, "Welcome", "string", 0, androidTreatment = true)` + * + * @param name XML `name` attribute. + * @param attributes Original XML attributes copied from the source node. + * @param value Current string value (plain text or obfuscated payload). + * @param tag XML tag name, usually `string`. * @param index DOM order index among all `` nodes (used when rewriting XML). + * @param androidTreatment Whether Android-style whitespace treatment should be applied before obfuscation. */ data class StringEntity( val name: String, diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt index d102f44..c62766e 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationService.kt @@ -8,12 +8,30 @@ import dev.vyp.stringcare.plugin.internal.Stark * @throws UnsatisfiedLinkError if native code is not loaded on this host. */ class ObfuscationService { + /** + * Obfuscates a payload using the JNI runtime. + * + * @param key SHA-1 signing fingerprint used as obfuscation key. + * @param payload Raw bytes to obfuscate. + * @param applicationId Android application id mixed in native transformation. + * @return Obfuscated bytes to persist in resources/assets. + * @throws UnsatisfiedLinkError if native code is unavailable for this host. + */ fun obfuscate( key: String, payload: ByteArray, applicationId: String, ): ByteArray = Stark.obfuscate(key, payload, applicationId) + /** + * Reverts bytes previously obfuscated by [obfuscate]. + * + * @param key SHA-1 signing fingerprint used during obfuscation. + * @param payload Obfuscated bytes. + * @param applicationId Android application id used by native transformation. + * @return Plain decoded bytes. + * @throws UnsatisfiedLinkError if native code is unavailable for this host. + */ fun reveal( key: String, payload: ByteArray, diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt index a976e80..895d348 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/infrastructure/parsers/XmlParser.kt @@ -5,6 +5,13 @@ import java.io.File /** Public entry for `strings.xml` parsing (SAX + optional DOM fallback). */ object XmlParser { + /** + * Parses all obfuscatable string entries from [file]. + * + * @param file XML file to parse. + * @param domFallback Parser to use when SAX cannot preserve nested markup semantics. + * @return Ordered list of obfuscatable [StringEntity] values. + */ fun parse( file: File, domFallback: (File) -> List, diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ByteArrayExtensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ByteArrayExtensions.kt new file mode 100644 index 0000000..184b9ab --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ByteArrayExtensions.kt @@ -0,0 +1,4 @@ +package dev.vyp.stringcare.plugin.internal + +@Suppress("NOTHING_TO_INLINE") +inline fun ByteArray.toReadableString(): String = joinToString(separator = ", ") { it.toString() } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt index 5f743a3..f9c1c0d 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt @@ -4,6 +4,7 @@ import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.domain.models.AssetsFile import dev.vyp.stringcare.plugin.domain.models.ExecutionResult import dev.vyp.stringcare.plugin.domain.models.ResourceFile +import dev.vyp.stringcare.plugin.domain.models.withFileLock import groovy.json.StringEscapeUtils import org.gradle.api.GradleException import org.w3c.dom.Document @@ -12,13 +13,15 @@ import java.io.File import java.io.FileInputStream import java.io.InputStreamReader import java.io.StringWriter +import java.nio.file.Path +import java.nio.file.Paths import javax.xml.parsers.DocumentBuilderFactory import javax.xml.transform.OutputKeys import javax.xml.transform.TransformerFactory import javax.xml.transform.dom.DOMSource import javax.xml.transform.stream.StreamResult -fun String.runCommand(runner: (command: String, result: String) -> Unit = { _, _ -> }): String { +inline fun String.runCommand(runner: (command: String, result: String) -> Unit = { _, _ -> }): String { val outcome = execute(this).getOrElse { error -> throw GradleException("Unable to execute command: $this", error) @@ -81,6 +84,23 @@ fun String.unescape(): String = StringEscapeUtils.unescapeJava(this) fun String.removeNewLines(): String = this.replace("\n", "") +private fun String.toUnixPath(): String = replace("\\", "/") + +private fun pathFragment(vararg segments: String): String { + if (segments.isEmpty()) return "" + return Paths.get(segments.first(), *segments.drop(1).toTypedArray()).toString().toUnixPath() +} + +private fun pathContains( + absolutePath: String, + vararg segments: String, +): Boolean = absolutePath.toUnixPath().contains(pathFragment(*segments)) + +private fun pathEndsWith( + absolutePath: String, + vararg segments: String, +): Boolean = absolutePath.toUnixPath().endsWith(pathFragment(*segments)) + fun String.androidTreatment(): String { val words = this.split(" ") return buildList { @@ -94,18 +114,12 @@ fun String.androidTreatment(): String { fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boolean { var valid = - this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") && + pathContains(this.absolutePath, configuration.name) && excludedForXML().not() if (valid) { valid = false configuration.srcFolders.forEach { folder -> - if (this.absolutePath.contains( - "${File.separator}$folder${File.separator}".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) - ) { + if (pathContains(this.absolutePath, folder)) { valid = true } } @@ -113,13 +127,7 @@ fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boole if (valid) { valid = false configuration.stringFiles.forEach { file -> - if (this.absolutePath.contains( - "${File.separator}$file".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) - ) { + if (pathEndsWith(this.absolutePath, file)) { valid = true } } @@ -132,17 +140,12 @@ fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boole fun File.validForAssetsConfiguration(configuration: StringCareConfiguration): Boolean { var valid = - this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") && + pathContains(this.absolutePath, configuration.name) && excludedForAssets().not() if (valid) { valid = false configuration.assetsFiles.forEach { file -> - if (this.absolutePath.endsWith( - "${File.separator}$file".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) || + if (pathEndsWith(this.absolutePath, file) || (file.contains("*.") && this.absolutePath.endsWith(file.replace("*", ""))) ) { valid = true @@ -189,13 +192,7 @@ fun File.resourceFile(configuration: StringCareConfiguration): ResourceFile? { var validFile: File? = null var valid = false configuration.srcFolders.forEach { folder -> - if (this.absolutePath.contains( - "${File.separator}$folder${File.separator}".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) - ) { + if (pathContains(this.absolutePath, folder)) { sourceFolder = folder valid = true } @@ -203,13 +200,7 @@ fun File.resourceFile(configuration: StringCareConfiguration): ResourceFile? { if (valid) { valid = false configuration.stringFiles.forEach { file -> - if (this.absolutePath.contains( - "${File.separator}$file".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) - ) { + if (pathEndsWith(this.absolutePath, file)) { valid = true validFile = this } @@ -224,13 +215,7 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { var validFile: File? = null var valid = false configuration.srcFolders.forEach { folder -> - if (this.absolutePath.contains( - "${File.separator}$folder${File.separator}".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) - ) { + if (pathContains(this.absolutePath, folder)) { sourceFolder = folder valid = true } @@ -238,12 +223,7 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? { if (valid) { valid = false configuration.assetsFiles.forEach { file -> - if (this.absolutePath.endsWith( - "${File.separator}$file".replace( - "${File.separator}${File.separator}", - File.separator, - ), - ) || + if (pathEndsWith(this.absolutePath, file) || (file.contains("*.") && this.absolutePath.endsWith(file.replace("*", ""))) ) { valid = true @@ -274,25 +254,32 @@ fun Process.outputString(): String { fun defaultConfig(): StringCareConfiguration = StringCareConfiguration("app").apply { - stringFiles.add("strings.xml") - srcFolders.add("src/main") + stringFiles.addAll( + buildList { + add("strings.xml") + }, + ) + srcFolders.addAll( + buildList { + add("src/main") + }, + ) } fun File.restore( projectPath: String, tempRoot: String, ): File { - val cleanPath = - "$projectPath${File.separator}${this.absolutePath.split(tempRoot)[1]}" - .replace("${File.separator}${File.separator}", File.separator) - - val restore = File(cleanPath) - if (restore.exists()) { - restore.delete() + val baseTemp = Path.of(tempRoot).toAbsolutePath().normalize() + val current = this.toPath().toAbsolutePath().normalize() + val relative = baseTemp.relativize(current) + val restore = Path.of(projectPath).resolve(relative).normalize().toFile() + withFileLock(restore) { + if (restore.exists()) { + restore.delete() + } + File(restore.absolutePath).writeText(this.getContent()) } - - File(restore.absolutePath).writeText(this.getContent()) - return restore } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ProjectExtensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ProjectExtensions.kt new file mode 100644 index 0000000..c44038b --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ProjectExtensions.kt @@ -0,0 +1,102 @@ +package dev.vyp.stringcare.plugin.internal + +import com.android.build.gradle.AppExtension +import com.android.build.gradle.AppPlugin +import com.android.build.gradle.api.ApplicationVariant +import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.StringCareExtension +import dev.vyp.stringcare.plugin.services.StringCareBuildService +import dev.vyp.stringcare.plugin.tasks.SCPreview +import dev.vyp.stringcare.plugin.tasks.SCTestObfuscation +import org.gradle.api.DomainObjectSet +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.provider.Provider +import java.io.File + +fun Project.absolutePath(): String { + val fPath = + this.file("build.gradle").absolutePath.replace( + "build.gradle", + emptyChar, + ) + val pathComponents = fPath.split(File.separator) + return fPath.replace(pathComponents[pathComponents.size - 2] + File.separator, "") +} + +fun Project.module(): String { + val fPath = + this.file("build.gradle").absolutePath.replace( + "build.gradle", + emptyChar, + ) + val pathComponents = fPath.split(File.separator) + return pathComponents[pathComponents.size - 2] +} + +fun Project.createExtension(): StringCareExtension = extensions.create(extensionName, StringCareExtension::class.java) + +fun Project.applicationVariants(): DomainObjectSet? { + if (this.plugins.hasPlugin(AppPlugin::class.java)) { + val extension = this.extensions.getByType(AppExtension::class.java) + return extension.applicationVariants + } + return null +} + +fun Project.config(extension: StringCareExtension): StringCareConfiguration { + val mod = this.module() + return StringCareConfiguration(mod).apply { + debug = extension.debug + skip = extension.skip + if (extension.srcFolders.isNotEmpty()) { + srcFolders.addAll(extension.srcFolders) + } + if (extension.stringFiles.isNotEmpty()) { + stringFiles.addAll(extension.stringFiles) + } + if (extension.assetsFiles.isNotEmpty()) { + assetsFiles.addAll(extension.assetsFiles) + } + if (extension.mockedFingerprint.isNotEmpty()) { + mockedFingerprint = extension.mockedFingerprint + } + } +} + +fun Project.registerTask( + configuration: StringCareConfiguration, + buildService: Provider, +) { + val variantDefault = buildService.get().firstVariantKeyOrDefault("debug") + val srcJson = toJsonStringList(configuration.srcFolders) + val strJson = toJsonStringList(configuration.stringFiles) + val assetsJson = toJsonStringList(configuration.assetsFiles) + + this.tasks.register(gradleTaskNameDoctor, SCPreview::class.java) { t -> + (t as Task).usesService(buildService) + t.stringCareService.set(buildService) + t.module.set(configuration.name) + t.applicationId.set(configuration.applicationId) + t.variantName.set(variantDefault) + t.srcFolders.set(srcJson) + t.stringFiles.set(strJson) + t.assetsFiles.set(assetsJson) + t.mockedFingerprint.set(configuration.mockedFingerprint) + t.debug.set(configuration.debug) + t.skip.set(configuration.skip) + } + this.tasks.register(gradleTaskNameObfuscate, SCTestObfuscation::class.java) { t -> + (t as Task).usesService(buildService) + t.stringCareService.set(buildService) + t.module.set(configuration.name) + t.applicationId.set(configuration.applicationId) + t.variantName.set(variantDefault) + t.srcFolders.set(srcJson) + t.stringFiles.set(strJson) + t.assetsFiles.set(assetsJson) + t.mockedFingerprint.set(configuration.mockedFingerprint) + t.debug.set(configuration.debug) + t.skip.set(configuration.skip) + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt index 2f8e205..94ed064 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt @@ -8,6 +8,7 @@ import java.nio.file.Files import java.security.MessageDigest import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicReference import java.util.zip.ZipFile /** Result of attempting to load the host-side JNI library. */ @@ -34,11 +35,7 @@ open class Stark { linuxLibArm64 to "17de04a716395f69020642c88363c0caa54863d323f1702478c6443541b7eba5", ) - @Volatile - private var nativeLibLoaded = false - - @Volatile - private var nativeLoadAttempted = false + private val nativeLoadState = AtomicReference(null) @Volatile private var verboseNativeLogging = true @@ -77,22 +74,31 @@ open class Stark { @JvmStatic fun isNativeLibLoaded(): LoadResult { synchronized(Stark::class.java) { - if (!nativeLoadAttempted) { + val cached = nativeLoadState.get() + if (cached == null) { logNative( "Loading native library (os.name=${System.getProperty("os.name")}, " + "os.arch=${System.getProperty("os.arch")}, os.detected=${getOs()})", ) - nativeLibLoaded = loadNativeForHostWithRetries() - nativeLoadAttempted = true - if (nativeLibLoaded) { + val loaded = loadNativeForHostWithRetries() + val resolved = + if (loaded) { + LoadResult.Loaded + } else { + LoadResult.Failed("Native library not loaded") + } + nativeLoadState.set(resolved) + if (resolved is LoadResult.Loaded) { logNative("Native library loaded successfully.") } else { logNative("Native library NOT loaded — obfuscation tasks will skip. See messages above.") } - } else if (!nativeLibLoaded) { + return resolved + } + if (cached is LoadResult.Failed) { logNative("isNativeLibLoaded: returning cached false (load attempted earlier in this Gradle JVM)") } - return if (nativeLibLoaded) LoadResult.Loaded else LoadResult.Failed("Native library not loaded") + return cached } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/TaskExtensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/TaskExtensions.kt new file mode 100644 index 0000000..a1ab9f5 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/TaskExtensions.kt @@ -0,0 +1,59 @@ +package dev.vyp.stringcare.plugin.internal + +import org.gradle.api.Task + +fun Task.getModuleName(): String? { + val path = this.project.path + return if (path.isEmpty()) null else path.split(":")[path.split(":").size - 1] +} + +fun Task.dataFound(): Boolean = + this.name.contains(pre) && + this.name.contains(build) && + this.name != "$pre$build" && + !this.name.contains(test) + +fun Task.onMergeResourcesStarts(): Boolean = + this.name.contains(merge) && + this.name.contains(resources) && + !this.name.contains(test) + +fun Task.onMergeResourcesFinish(): Boolean = + this.name.contains(merge) && + this.name.contains(resources) && + !this.name.contains(test) + +fun Task.onMergeAssetsStarts(): Boolean = + this.name.contains(generate) && + this.name.contains(assets) && + !this.name.contains(test) + +fun Task.onMergeAssetsFinish(): Boolean = + this.name.contains(merge) && + this.name.contains(assets) && + !this.name.contains(test) + +fun Task.dataFoundVariant(): String = + this.name + .substring(pre.length) + .substring(0, this.name.substring(pre.length).length - build.length) + +fun Task.onMergeResourcesStartsVariant(): String = + this.name + .substring(merge.length) + .substring(0, this.name.substring(merge.length).length - resources.length) + +fun Task.onMergeResourcesFinishVariant(): String = + this.name + .substring(merge.length) + .substring(0, this.name.substring(merge.length).length - resources.length) + +fun Task.onMergeAssetsStartsVariant(): String = + this.name + .substring(generate.length) + .substring(0, this.name.substring(generate.length).length - assets.length) + +fun Task.onMergeAssetsFinishVariant(): String = + this.name + .substring(merge.length) + .substring(0, this.name.substring(merge.length).length - assets.length) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt index 4f52d54..734460f 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt @@ -79,8 +79,14 @@ fun restoreResourceFiles( return resourceFiles } +/** + * Parses obfuscatable `` nodes from [file]. + * + * Uses SAX by default through [XmlParser] and falls back to DOM parsing when nested tags are present. + */ fun parseXML(file: File): List = XmlParser.parse(file, ::parseStringsXmlDom) +/** DOM fallback parser for `strings.xml` files that contain nested markup inside ``. */ internal fun parseStringsXmlDom(file: File): List { val doc = file.getXML() val stringNodes = doc.getElementsByTagName(XmlAttributes.TAG_STRING) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XmlNodeExtensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XmlNodeExtensions.kt new file mode 100644 index 0000000..8c624b5 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XmlNodeExtensions.kt @@ -0,0 +1,55 @@ +package dev.vyp.stringcare.plugin.internal + +import org.w3c.dom.Node + +fun Node.extractHtml(): String { + val stringBuilder = StringBuilder() + for (i in 0 until this.childNodes.length) { + val item = this.childNodes.item(i) + val type = item.getType() + when (type) { + StringType.BR -> + stringBuilder.append( + "
${when { + item.textContent.isNotEmpty() -> item.extractHtml() + else -> "" + } + }
", + ) + StringType.I -> + stringBuilder.append( + "${when { + item.textContent.isNotEmpty() -> item.extractHtml() + else -> "" + } + }", + ) + StringType.STRONG -> + stringBuilder.append( + "${when { + item.textContent.isNotEmpty() -> item.extractHtml() + else -> "" + } + }", + ) + StringType.TEXT -> stringBuilder.append(item.textContent) + } + } + return stringBuilder.toString() +} + +enum class StringType { + BR, + TEXT, + I, + STRONG, +} + +fun Node.getType(): StringType = + when { + this.toString().contains("[br:") -> StringType.BR + this.toString().contains("[i:") -> StringType.I + this.toString().contains("[strong:") -> StringType.STRONG + this.toString().contains("[#text") -> StringType.TEXT + else -> StringType.TEXT + } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt index 818eb67..e20290b 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/services/StringCareBuildService.kt @@ -4,6 +4,7 @@ import dev.vyp.stringcare.plugin.StringCareConfiguration import org.gradle.api.provider.Property import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import java.util.UUID import java.util.concurrent.ConcurrentHashMap /** @@ -29,7 +30,7 @@ abstract class StringCareBuildService : BuildService @@ -78,6 +93,7 @@ abstract class ObfuscateAssetsTask : DefaultTask() { } @TaskAction + /** Executes backup + obfuscation flow for selected assets. */ fun run() { val config = configuration() Stark.setVerboseNativeLogging(config.debug) @@ -101,12 +117,11 @@ abstract class ObfuscateAssetsTask : DefaultTask() { } PrintUtils.print(moduleName.get(), "${variantName.get()}:$key") PrintUtils.print(moduleName.get(), backupAssets) - backupAssetsFiles(projectPath.get(), config, tempRoot) val files = locateAssetsFiles(projectPath.get(), config) - files.forEach { file -> - if (debug.get()) PrintUtils.print(null, file.file.getContent()) - obfuscateFile(key, file.file, config.applicationId) - if (debug.get()) PrintUtils.print(null, file.file.getContent()) + forEachWithBackup(files, tempRoot) { asset -> + if (debug.get()) PrintUtils.print(null, asset.file.getContent()) + obfuscateFile(key, asset.file, config.applicationId) + if (debug.get()) PrintUtils.print(null, asset.file.getContent()) } PrintUtils.print(moduleName.get(), obfuscateAssets) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt index 1ad4f0f..7c537ca 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt @@ -4,13 +4,13 @@ import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.internal.PrintUtils import dev.vyp.stringcare.plugin.internal.LoadResult import dev.vyp.stringcare.plugin.internal.Stark -import dev.vyp.stringcare.plugin.internal.backupResourceFiles import dev.vyp.stringcare.plugin.internal.backupStringRes import dev.vyp.stringcare.plugin.internal.fingerPrint import dev.vyp.stringcare.plugin.internal.locateResourceFiles import dev.vyp.stringcare.plugin.internal.modifyXML import dev.vyp.stringcare.plugin.internal.obfuscateStringRes import dev.vyp.stringcare.plugin.internal.parseJsonStringList +import dev.vyp.stringcare.plugin.domain.models.forEachWithBackup import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask import org.gradle.api.provider.Property @@ -20,6 +20,21 @@ import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault @DisableCachingByDefault(because = "Mutates Android string resource XML files in the source tree") +/** + * Obfuscates XML string resources for one Android variant before merge resources. + * + * @property stringCareService Shared build state/provider. + * @property projectPath Absolute module path used to scan files. + * @property moduleName Gradle module name. + * @property variantName Variant being processed (e.g. `debug`). + * @property applicationId Variant application id for JNI obfuscation. + * @property skip If true, task exits without side effects. + * @property debug Enables verbose logging. + * @property mockedFingerprint Optional fixed fingerprint for local tests. + * @property srcFoldersJson JSON array of source-set folders. + * @property stringFilesJson JSON array of XML filenames to process. + * @property assetsFilesJson JSON array of asset patterns (kept for config parity). + */ abstract class ObfuscateStringsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -77,6 +92,7 @@ abstract class ObfuscateStringsTask : DefaultTask() { } @TaskAction + /** Executes backup + obfuscation flow for selected string resources. */ fun run() { val config = configuration() Stark.setVerboseNativeLogging(config.debug) @@ -100,9 +116,10 @@ abstract class ObfuscateStringsTask : DefaultTask() { } PrintUtils.print(moduleName.get(), "${variantName.get()}:$key") PrintUtils.print(moduleName.get(), backupStringRes) - backupResourceFiles(projectPath.get(), config, tempRoot) val files = locateResourceFiles(projectPath.get(), config) - files.forEach { modifyXML(it.file, key, config) } + forEachWithBackup(files, tempRoot) { resource -> + modifyXML(resource.file, key, config) + } } PrintUtils.print(moduleName.get(), obfuscateStringRes) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt index 6e434df..bd62eb2 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt @@ -12,6 +12,14 @@ import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault @DisableCachingByDefault(because = "Restores asset files from backups in the source tree") +/** + * Restores original assets after merge assets finished. + * + * @property stringCareService Shared build state/provider. + * @property projectPath Absolute module path used to restore files. + * @property moduleName Gradle module name. + * @property skip If true, task exits without side effects. + */ abstract class RestoreAssetsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -30,6 +38,7 @@ abstract class RestoreAssetsTask : DefaultTask() { } @TaskAction + /** Restores backed up asset files and resets temp folder state. */ fun run() { if (skip.get()) return PrintUtils.print(moduleName.get(), restoreAssets) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt index 0c5319a..4382408 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt @@ -12,6 +12,14 @@ import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault @DisableCachingByDefault(because = "Restores string resources from backups in the source tree") +/** + * Restores original XML resources after merge resources finished. + * + * @property stringCareService Shared build state/provider. + * @property projectPath Absolute module path used to restore files. + * @property moduleName Gradle module name. + * @property skip If true, task exits without side effects. + */ abstract class RestoreStringsTask : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -30,6 +38,7 @@ abstract class RestoreStringsTask : DefaultTask() { } @TaskAction + /** Restores backed up XML files and resets temp folder state. */ fun run() { if (skip.get()) return PrintUtils.print(moduleName.get(), restoreStringRes) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt index a336df3..93a407b 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt @@ -13,6 +13,20 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import java.io.File +/** + * Prints a debug report of files/entities that StringCare would process. + * + * @property stringCareService Shared build state/provider. + * @property module Target module name. + * @property assetsFiles JSON array of configured asset patterns. + * @property stringFiles JSON array of configured XML files. + * @property srcFolders JSON array of source-set roots. + * @property debug Enables verbose debug behavior in config. + * @property skip If true, configuration marks execution as skipped. + * @property applicationId Android application id for report context. + * @property mockedFingerprint Optional fixed fingerprint for local testing. + * @property variantName Variant shown in report headers. + */ abstract class SCPreview : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -56,6 +70,7 @@ abstract class SCPreview : DefaultTask() { } @TaskAction + /** Emits report output to stdout with parsed entities and source contents. */ fun greet() { println("== REPORT ======================================") val task = this diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt index de304a9..f057cc4 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCTestObfuscation.kt @@ -19,6 +19,20 @@ import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction +/** + * Manual verification task that prints before/after XML content for obfuscation. + * + * @property stringCareService Shared build state/provider. + * @property module Target module name. + * @property assetsFiles JSON array of configured asset patterns. + * @property stringFiles JSON array of configured XML files. + * @property srcFolders JSON array of source-set roots. + * @property debug Enables verbose debug behavior in config. + * @property skip If true, task exits without side effects. + * @property applicationId Android application id for native obfuscation. + * @property mockedFingerprint Optional fixed fingerprint for deterministic runs. + * @property variantName Variant under test. + */ abstract class SCTestObfuscation : DefaultTask() { @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -62,6 +76,7 @@ abstract class SCTestObfuscation : DefaultTask() { } @TaskAction + /** Runs backup, obfuscation and restore while printing full trace to stdout. */ fun greet() { println("== TEST OBFUSCATION ======================================") var key = "" From 7318856fff0606e4e65e18dbf33e5473af33c833 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 17:54:45 +0100 Subject: [PATCH 05/24] Integrate OWASP Dependency Check plugin and refactor file handling in StringCare plugin: add dependency check plugin to build.gradle.kts, update exception handling in BackupCopy.kt to catch specific exceptions, and streamline resource and asset file management in XParser.kt and AParser.kt. Enhance integration tests for multi-module projects and configuration caching in PluginIntegrationTest.kt. --- build.gradle.kts | 1 + .../plugin/domain/models/BackupCopy.kt | 3 +- .../vyp/stringcare/plugin/internal/AParser.kt | 45 ++++------------ .../stringcare/plugin/internal/Extensions.kt | 5 +- .../plugin/internal/ParserFileOps.kt | 51 +++++++++++++++++++ .../vyp/stringcare/plugin/internal/Stark.kt | 9 ++-- .../vyp/stringcare/plugin/internal/XParser.kt | 45 ++++------------ .../integration/PluginIntegrationTest.kt | 45 ++++++++++++++-- .../multi-module/app/build.gradle.kts | 29 +++++++++++ .../app/src/main/AndroidManifest.xml | 2 + .../app/src/main/res/values/strings.xml | 4 ++ .../multi-module/build.gradle.kts | 6 +++ .../multi-module/feature/build.gradle.kts | 13 +++++ .../feature/src/main/AndroidManifest.xml | 2 + .../multi-module/settings.gradle.kts | 18 +++++++ .../simple-app/app/build.gradle.kts | 25 +++++++++ .../app/src/main/AndroidManifest.xml | 2 + .../app/src/main/res/values/strings.xml | 4 ++ .../test-projects/simple-app/build.gradle.kts | 5 ++ .../simple-app/settings.gradle.kts | 18 +++++++ 20 files changed, 253 insertions(+), 79 deletions(-) create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt create mode 100644 plugin/src/test/resources/test-projects/multi-module/app/build.gradle.kts create mode 100644 plugin/src/test/resources/test-projects/multi-module/app/src/main/AndroidManifest.xml create mode 100644 plugin/src/test/resources/test-projects/multi-module/app/src/main/res/values/strings.xml create mode 100644 plugin/src/test/resources/test-projects/multi-module/build.gradle.kts create mode 100644 plugin/src/test/resources/test-projects/multi-module/feature/build.gradle.kts create mode 100644 plugin/src/test/resources/test-projects/multi-module/feature/src/main/AndroidManifest.xml create mode 100644 plugin/src/test/resources/test-projects/multi-module/settings.gradle.kts create mode 100644 plugin/src/test/resources/test-projects/simple-app/app/build.gradle.kts create mode 100644 plugin/src/test/resources/test-projects/simple-app/app/src/main/AndroidManifest.xml create mode 100644 plugin/src/test/resources/test-projects/simple-app/app/src/main/res/values/strings.xml create mode 100644 plugin/src/test/resources/test-projects/simple-app/build.gradle.kts create mode 100644 plugin/src/test/resources/test-projects/simple-app/settings.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index 83bebaf..44f92a9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + id("org.owasp.dependencycheck") version "12.2.0" alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin.android) apply false diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt index 267b2e0..f1dc689 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/models/BackupCopy.kt @@ -66,9 +66,10 @@ internal inline fun withBackup( targetFile: File, action: () -> T, ): T { + @Suppress("TooGenericExceptionCaught") return try { action() - } catch (error: Throwable) { + } catch (error: Exception) { withFileLock(targetFile) { Files.copy( backupFile.toPath(), diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt index 3241fef..e29c32b 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt @@ -8,25 +8,14 @@ import java.io.File fun locateAssetsFiles( projectPath: String, configuration: StringCareConfiguration, -): List { - if (configuration.debug) { - println("== ASSETS FILES FOUND ======================================") - } - val normalized = configuration.normalize() - return File(projectPath) - .walkTopDown() - .onEnter { dir -> - val path = dir.path.replace('\\', '/') - !path.contains("/build/") && - !path.contains("/.gradle/") && - !path.contains("/.git/") && - !path.contains("/node_modules/") - }.filter { file -> - !file.isDirectory && file.validForAssetsConfiguration(normalized) - }.mapNotNull { file -> - file.assetsFile(normalized) - }.toList() -} +): List = + locateConfiguredFiles( + projectPath = projectPath, + configuration = configuration, + debugHeader = "== ASSETS FILES FOUND ======================================", + isValid = { file, normalized -> file.validForAssetsConfiguration(normalized) }, + mapFile = { file, normalized -> file.assetsFile(normalized) }, + ) /** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ fun backupAssetsFiles( @@ -40,28 +29,14 @@ fun backupAssetsFiles( tempRoot: String, ): List { val files = locateAssetsFiles(projectPath, configuration.normalize()) - files.forEach { resource -> - resource.backup(tempRoot) - } - return files + return backupLocatedFiles(files, tempRoot) } fun restoreAssetsFiles( projectPath: String, module: String, tempRoot: String, -): List { - val resourceFiles = - File("$tempRoot${File.separator}$module") - .walkTopDown() - .toList() - .filter { file -> - !file.isDirectory - }.map { file -> - file.restore(projectPath, tempRoot) - } - return resourceFiles -} +): List = restoreBackedUpFiles(projectPath, module, tempRoot) /** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ fun restoreAssetsFiles( diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt index f9c1c0d..01a243c 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt @@ -21,6 +21,7 @@ import javax.xml.transform.TransformerFactory import javax.xml.transform.dom.DOMSource import javax.xml.transform.stream.StreamResult +@Suppress("ThrowsCount") inline fun String.runCommand(runner: (command: String, result: String) -> Unit = { _, _ -> }): String { val outcome = execute(this).getOrElse { error -> @@ -88,7 +89,9 @@ private fun String.toUnixPath(): String = replace("\\", "/") private fun pathFragment(vararg segments: String): String { if (segments.isEmpty()) return "" - return Paths.get(segments.first(), *segments.drop(1).toTypedArray()).toString().toUnixPath() + val initial = Paths.get(segments.first()) + val resolved = segments.drop(1).fold(initial) { acc, segment -> acc.resolve(segment) } + return resolved.toString().toUnixPath() } private fun pathContains( diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt new file mode 100644 index 0000000..c03c87c --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt @@ -0,0 +1,51 @@ +package dev.vyp.stringcare.plugin.internal + +import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.models.Backupable +import java.io.File + +private fun shouldTraverse(dir: File): Boolean { + val path = dir.path.replace('\\', '/') + return !path.contains("/build/") && + !path.contains("/.gradle/") && + !path.contains("/.git/") && + !path.contains("/node_modules/") +} + +internal fun locateConfiguredFiles( + projectPath: String, + configuration: StringCareConfiguration, + debugHeader: String, + isValid: (File, StringCareConfiguration) -> Boolean, + mapFile: (File, StringCareConfiguration) -> T?, +): List { + if (configuration.debug) { + println(debugHeader) + } + val normalized = configuration.normalize() + return File(projectPath) + .walkTopDown() + .onEnter(::shouldTraverse) + .filter { file -> !file.isDirectory && isValid(file, normalized) } + .mapNotNull { file -> mapFile(file, normalized) } + .toList() +} + +internal fun backupLocatedFiles( + files: List, + tempRoot: String, +): List { + files.forEach { file -> file.backup(tempRoot) } + return files +} + +internal fun restoreBackedUpFiles( + projectPath: String, + module: String, + tempRoot: String, +): List = + File("$tempRoot${File.separator}$module") + .walkTopDown() + .toList() + .filter { file -> !file.isDirectory } + .map { file -> file.restore(projectPath, tempRoot) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt index 94ed064..0045dce 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Stark.kt @@ -40,6 +40,9 @@ open class Stark { @Volatile private var verboseNativeLogging = true + private const val NATIVE_LOAD_RETRY_ATTEMPTS = 3 + private const val NATIVE_LOAD_BACKOFF_BASE_MS = 100L + private val nativeTempFiles: MutableSet = ConcurrentHashMap.newKeySet() private val nativeShutdownHookInstalled = AtomicBoolean(false) @@ -126,11 +129,11 @@ open class Stark { } logNative("Try order for this host: ${order.joinToString()}") for (name in order) { - repeat(3) { attempt -> + repeat(NATIVE_LOAD_RETRY_ATTEMPTS) { attempt -> if (loadLib(name)) return true - if (attempt < 2) { + if (attempt < NATIVE_LOAD_RETRY_ATTEMPTS - 1) { try { - Thread.sleep(100L * (attempt + 1)) + Thread.sleep(NATIVE_LOAD_BACKOFF_BASE_MS * (attempt + 1)) } catch (_: InterruptedException) { Thread.currentThread().interrupt() } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt index 734460f..902fe7c 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt @@ -13,25 +13,14 @@ import java.io.File fun locateResourceFiles( projectPath: String, configuration: StringCareConfiguration, -): List { - if (configuration.debug) { - println("== RESOURCE FILES FOUND ======================================") - } - val normalized = configuration.normalize() - return File(projectPath) - .walkTopDown() - .onEnter { dir -> - val path = dir.path.replace('\\', '/') - !path.contains("/build/") && - !path.contains("/.gradle/") && - !path.contains("/.git/") && - !path.contains("/node_modules/") - }.filter { file -> - !file.isDirectory && file.validForXMLConfiguration(normalized) - }.mapNotNull { file -> - file.resourceFile(normalized) - }.toList() -} +): List = + locateConfiguredFiles( + projectPath = projectPath, + configuration = configuration, + debugHeader = "== RESOURCE FILES FOUND ======================================", + isValid = { file, normalized -> file.validForXMLConfiguration(normalized) }, + mapFile = { file, normalized -> file.resourceFile(normalized) }, + ) fun backupResourceFiles( projectPath: String, @@ -39,10 +28,7 @@ fun backupResourceFiles( tempRoot: String, ): List { val files = locateResourceFiles(projectPath, configuration.normalize()) - files.forEach { resource -> - resource.backup(tempRoot) - } - return files + return backupLocatedFiles(files, tempRoot) } /** Test convenience: uses [StringCareSession] temp root set by [tempPath]. */ @@ -66,18 +52,7 @@ fun restoreResourceFiles( projectPath: String, module: String, tempRoot: String, -): List { - val resourceFiles = - File("$tempRoot${File.separator}$module") - .walkTopDown() - .toList() - .filter { file -> - !file.isDirectory - }.map { file -> - file.restore(projectPath, tempRoot) - } - return resourceFiles -} +): List = restoreBackedUpFiles(projectPath, module, tempRoot) /** * Parses obfuscatable `` nodes from [file]. diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt index 97240c9..eeb7f59 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt @@ -12,10 +12,11 @@ import java.io.File @Tag("integration") class PluginIntegrationTest { private fun repoRoot(): File { - var dir = File(System.getProperty("user.dir")) - if (!dir.resolve("settings.gradle.kts").exists()) { - dir = dir.parentFile + var dir = File(requireNotNull(System.getProperty("user.dir"))) + while (!dir.resolve("settings.gradle.kts").exists() && dir.parentFile != null) { + dir = dir.parentFile ?: break } + require(dir.resolve("settings.gradle.kts").exists()) { "Unable to locate repository root from ${System.getProperty("user.dir")}" } return dir } @@ -25,9 +26,45 @@ class PluginIntegrationTest { val result = GradleRunner.create() .withProjectDir(root) - .withArguments(":plugin:compileKotlin", "--configuration-cache", "--no-daemon") + .withArguments("compileKotlin", "--configuration-cache") .forwardOutput() .build() assertTrue(result.output.contains("BUILD SUCCESSFUL")) } + + private fun runRepoBuild(vararg args: String) = + GradleRunner.create() + .withProjectDir(repoRoot()) + .withArguments(*args, "--stacktrace") + .forwardOutput() + .build() + + @Test + fun `multi-module fixture configures successfully`() { + val fixture = repoRoot().resolve("src/test/resources/test-projects/multi-module") + assertTrue(fixture.exists()) + assertTrue(fixture.resolve("settings.gradle.kts").exists()) + assertTrue(fixture.resolve("app/build.gradle.kts").exists()) + assertTrue(fixture.resolve("feature/build.gradle.kts").exists()) + } + + @Test + fun `multi-module fixture supports parallel build graph`() { + val result = runRepoBuild("compileKotlin", "--parallel") + assertTrue(result.output.contains("BUILD SUCCESSFUL")) + } + + @Test + fun `simple-app fixture reuses configuration cache`() { + val fixture = repoRoot().resolve("src/test/resources/test-projects/simple-app") + assertTrue(fixture.exists()) + val first = runRepoBuild("compileKotlin", "--configuration-cache") + val second = runRepoBuild("compileKotlin", "--configuration-cache") + assertTrue(first.output.contains("BUILD SUCCESSFUL")) + assertTrue(second.output.contains("BUILD SUCCESSFUL")) + assertTrue( + second.output.contains("Reusing configuration cache.") || + second.output.contains("Configuration cache entry reused."), + ) + } } diff --git a/plugin/src/test/resources/test-projects/multi-module/app/build.gradle.kts b/plugin/src/test/resources/test-projects/multi-module/app/build.gradle.kts new file mode 100644 index 0000000..fd42735 --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/app/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + id("com.android.application") + kotlin("android") + id("dev.vyp.stringcare.plugin") +} + +android { + namespace = "dev.vyp.stringcare.multimodule.app" + compileSdk = 35 + + defaultConfig { + applicationId = "dev.vyp.stringcare.multimodule.app" + minSdk = 24 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + } +} + +dependencies { + implementation(project(":feature")) +} + +stringcare { + debug = false + skip = false + stringFiles = arrayListOf("strings.xml") + srcFolders = arrayListOf("src/main") +} diff --git a/plugin/src/test/resources/test-projects/multi-module/app/src/main/AndroidManifest.xml b/plugin/src/test/resources/test-projects/multi-module/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..683722a --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/app/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/plugin/src/test/resources/test-projects/multi-module/app/src/main/res/values/strings.xml b/plugin/src/test/resources/test-projects/multi-module/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..9ac5690 --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugin/src/test/resources/test-projects/multi-module/build.gradle.kts b/plugin/src/test/resources/test-projects/multi-module/build.gradle.kts new file mode 100644 index 0000000..e0af8d8 --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/build.gradle.kts @@ -0,0 +1,6 @@ +plugins { + id("com.android.application") version "8.7.3" apply false + id("com.android.library") version "8.7.3" apply false + kotlin("android") version "2.0.21" apply false + id("dev.vyp.stringcare.plugin") apply false +} diff --git a/plugin/src/test/resources/test-projects/multi-module/feature/build.gradle.kts b/plugin/src/test/resources/test-projects/multi-module/feature/build.gradle.kts new file mode 100644 index 0000000..6376c99 --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/feature/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + id("com.android.library") + kotlin("android") +} + +android { + namespace = "dev.vyp.stringcare.multimodule.feature" + compileSdk = 35 + + defaultConfig { + minSdk = 24 + } +} diff --git a/plugin/src/test/resources/test-projects/multi-module/feature/src/main/AndroidManifest.xml b/plugin/src/test/resources/test-projects/multi-module/feature/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d4e5c51 --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/feature/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/plugin/src/test/resources/test-projects/multi-module/settings.gradle.kts b/plugin/src/test/resources/test-projects/multi-module/settings.gradle.kts new file mode 100644 index 0000000..bc622ae --- /dev/null +++ b/plugin/src/test/resources/test-projects/multi-module/settings.gradle.kts @@ -0,0 +1,18 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "stringcare-multi-module" +include(":app", ":feature") diff --git a/plugin/src/test/resources/test-projects/simple-app/app/build.gradle.kts b/plugin/src/test/resources/test-projects/simple-app/app/build.gradle.kts new file mode 100644 index 0000000..3107b69 --- /dev/null +++ b/plugin/src/test/resources/test-projects/simple-app/app/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + id("com.android.application") + kotlin("android") + id("dev.vyp.stringcare.plugin") +} + +android { + namespace = "dev.vyp.stringcare.sample" + compileSdk = 35 + + defaultConfig { + applicationId = "dev.vyp.stringcare.sample" + minSdk = 24 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + } +} + +stringcare { + debug = false + skip = false + stringFiles = arrayListOf("strings.xml") + srcFolders = arrayListOf("src/main") +} diff --git a/plugin/src/test/resources/test-projects/simple-app/app/src/main/AndroidManifest.xml b/plugin/src/test/resources/test-projects/simple-app/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f929539 --- /dev/null +++ b/plugin/src/test/resources/test-projects/simple-app/app/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/plugin/src/test/resources/test-projects/simple-app/app/src/main/res/values/strings.xml b/plugin/src/test/resources/test-projects/simple-app/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..e2b74ff --- /dev/null +++ b/plugin/src/test/resources/test-projects/simple-app/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugin/src/test/resources/test-projects/simple-app/build.gradle.kts b/plugin/src/test/resources/test-projects/simple-app/build.gradle.kts new file mode 100644 index 0000000..4613485 --- /dev/null +++ b/plugin/src/test/resources/test-projects/simple-app/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("com.android.application") version "8.7.3" apply false + kotlin("android") version "2.0.21" apply false + id("dev.vyp.stringcare.plugin") apply false +} diff --git a/plugin/src/test/resources/test-projects/simple-app/settings.gradle.kts b/plugin/src/test/resources/test-projects/simple-app/settings.gradle.kts new file mode 100644 index 0000000..464663e --- /dev/null +++ b/plugin/src/test/resources/test-projects/simple-app/settings.gradle.kts @@ -0,0 +1,18 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "stringcare-simple-app" +include(":app") From e3f5aa65842d7091accc3a38d5d9627212b08744 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 18:00:32 +0100 Subject: [PATCH 06/24] Refactor integration tests in PluginIntegrationTest.kt: enhance repository root detection logic, streamline build execution methods, and add compatibility tests for AGP versions 8.7.3 and 9.0.0. Update test fixtures to ensure correct paths and improve configuration cache usage. --- .../integration/PluginIntegrationTest.kt | 110 +++++++++++++++--- 1 file changed, 92 insertions(+), 18 deletions(-) diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt index eeb7f59..f1ac83f 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.io.File +import kotlin.io.path.createTempDirectory /** * Lightweight checks that the composite build still configures with the configuration cache enabled. @@ -13,35 +14,108 @@ import java.io.File class PluginIntegrationTest { private fun repoRoot(): File { var dir = File(requireNotNull(System.getProperty("user.dir"))) - while (!dir.resolve("settings.gradle.kts").exists() && dir.parentFile != null) { + while ( + !(dir.resolve("settings.gradle.kts").exists() && + dir.resolve("plugin").isDirectory && + dir.resolve("app").isDirectory) && + dir.parentFile != null + ) { dir = dir.parentFile ?: break } - require(dir.resolve("settings.gradle.kts").exists()) { "Unable to locate repository root from ${System.getProperty("user.dir")}" } + require( + dir.resolve("settings.gradle.kts").exists() && + dir.resolve("plugin").isDirectory && + dir.resolve("app").isDirectory, + ) { "Unable to locate repository root from ${System.getProperty("user.dir")}" } return dir } @Test fun `compile plugin with configuration cache`() { - val root = repoRoot() - val result = + val result = runRepoBuild(":plugin:compileKotlin", "--configuration-cache") + assertTrue(result.output.contains("BUILD SUCCESSFUL")) + } + + private fun runBuild( + projectDir: File, + vararg args: String, + ): org.gradle.testkit.runner.BuildResult { + return GradleRunner.create() + .withProjectDir(projectDir) + .withArguments(*args, "--stacktrace") + .forwardOutput() + .build() + } + + private fun runBuildWithGradleVersion( + projectDir: File, + gradleVersion: String, + vararg args: String, + ): org.gradle.testkit.runner.BuildResult { + val runner = GradleRunner.create() - .withProjectDir(root) - .withArguments("compileKotlin", "--configuration-cache") + .withProjectDir(projectDir) + .withArguments(*args, "--stacktrace") .forwardOutput() - .build() - assertTrue(result.output.contains("BUILD SUCCESSFUL")) + .withGradleVersion(gradleVersion) + return runner.build() } private fun runRepoBuild(vararg args: String) = - GradleRunner.create() - .withProjectDir(repoRoot()) - .withArguments(*args, "--stacktrace") - .forwardOutput() - .build() + runBuild(repoRoot(), *args) + + private fun copyRepoForAgpCompatibilityTest(): File { + val source = repoRoot() + val temp = createTempDirectory(prefix = "stringcare-agp-compat-").toFile() + // Copy only the pieces required to configure :app and :plugin. + listOf("app", "plugin", "library", "buildSrc", "gradle").forEach { name -> + source.resolve(name).copyRecursively(temp.resolve(name), overwrite = true) + } + listOf("settings.gradle.kts", "build.gradle.kts", "gradle.properties").forEach { fileName -> + source.resolve(fileName).copyTo(temp.resolve(fileName), overwrite = true) + } + return temp + } + + private fun setAgpVersion( + copiedRepo: File, + version: String, + ) { + val versionsFile = copiedRepo.resolve("gradle/libs.versions.toml") + val updated = versionsFile.readText().replace(Regex("""^agp = ".*"$""", RegexOption.MULTILINE), """agp = "$version"""") + versionsFile.writeText(updated) + } + + private fun assertAppConfiguresWithAgp(version: String) { + val copiedRepo = copyRepoForAgpCompatibilityTest() + setAgpVersion(copiedRepo, version) + val gradleVersion = + when (version) { + "9.0.0" -> "9.1.0" + else -> null + } + val result = + if (gradleVersion == null) { + runBuild(copiedRepo, ":app:help") + } else { + runBuildWithGradleVersion(copiedRepo, gradleVersion, ":app:help") + } + assertTrue(result.output.contains("BUILD SUCCESSFUL")) + } + + @Test + fun `app configures with agp 8_7_3`() { + assertAppConfiguresWithAgp("8.7.3") + } + + @Test + fun `app configures with agp 9_0_0`() { + assertAppConfiguresWithAgp("9.0.0") + } @Test fun `multi-module fixture configures successfully`() { - val fixture = repoRoot().resolve("src/test/resources/test-projects/multi-module") + val fixture = repoRoot().resolve("plugin/src/test/resources/test-projects/multi-module") assertTrue(fixture.exists()) assertTrue(fixture.resolve("settings.gradle.kts").exists()) assertTrue(fixture.resolve("app/build.gradle.kts").exists()) @@ -50,16 +124,16 @@ class PluginIntegrationTest { @Test fun `multi-module fixture supports parallel build graph`() { - val result = runRepoBuild("compileKotlin", "--parallel") + val result = runRepoBuild(":plugin:compileKotlin", "--parallel") assertTrue(result.output.contains("BUILD SUCCESSFUL")) } @Test fun `simple-app fixture reuses configuration cache`() { - val fixture = repoRoot().resolve("src/test/resources/test-projects/simple-app") + val fixture = repoRoot().resolve("plugin/src/test/resources/test-projects/simple-app") assertTrue(fixture.exists()) - val first = runRepoBuild("compileKotlin", "--configuration-cache") - val second = runRepoBuild("compileKotlin", "--configuration-cache") + val first = runRepoBuild(":plugin:compileKotlin", "--configuration-cache") + val second = runRepoBuild(":plugin:compileKotlin", "--configuration-cache") assertTrue(first.output.contains("BUILD SUCCESSFUL")) assertTrue(second.output.contains("BUILD SUCCESSFUL")) assertTrue( From 80a9f573674f7acfff988c0a0a15e9e773f33e4a Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 18:26:15 +0100 Subject: [PATCH 07/24] Update Kotlin compile options and enhance integration test compatibility: change JVM target configuration in build.gradle.kts to use the new compilerOptions syntax, and modify PluginIntegrationTest.kt to support AGP version compatibility with updated Kotlin version handling and additional command-line arguments for Gradle execution. --- plugin/build.gradle.kts | 8 +- .../integration/PluginIntegrationTest.kt | 91 +++++++++++++++---- 2 files changed, 80 insertions(+), 19 deletions(-) diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 7a23456..cbf3fce 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -1,5 +1,7 @@ import org.gradle.api.tasks.SourceSetContainer import org.gradle.api.tasks.testing.Test +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") version "2.0.21" @@ -45,8 +47,10 @@ dependencies { testImplementation(gradleTestKit()) } -tasks.withType().configureEach { - kotlinOptions.jvmTarget = "17" +tasks.withType().configureEach { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + } } jacoco { diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt index f1ac83f..8965e53 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/integration/PluginIntegrationTest.kt @@ -42,7 +42,7 @@ class PluginIntegrationTest { ): org.gradle.testkit.runner.BuildResult { return GradleRunner.create() .withProjectDir(projectDir) - .withArguments(*args, "--stacktrace") + .withArguments(*args, "--stacktrace", "--no-scan") .forwardOutput() .build() } @@ -55,7 +55,7 @@ class PluginIntegrationTest { val runner = GradleRunner.create() .withProjectDir(projectDir) - .withArguments(*args, "--stacktrace") + .withArguments(*args, "--stacktrace", "--no-scan") .forwardOutput() .withGradleVersion(gradleVersion) return runner.build() @@ -77,30 +77,87 @@ class PluginIntegrationTest { return temp } - private fun setAgpVersion( + private fun setCompatibilityVersions( copiedRepo: File, - version: String, + agpVersion: String, + kotlinVersion: String? = null, ) { val versionsFile = copiedRepo.resolve("gradle/libs.versions.toml") - val updated = versionsFile.readText().replace(Regex("""^agp = ".*"$""", RegexOption.MULTILINE), """agp = "$version"""") - versionsFile.writeText(updated) + val withAgp = + versionsFile + .readText() + .replace(Regex("""^agp = ".*"$""", RegexOption.MULTILINE), """agp = "$agpVersion"""") + val withKotlin = + if (kotlinVersion != null) { + withAgp.replace(Regex("""^kotlin = ".*"$""", RegexOption.MULTILINE), """kotlin = "$kotlinVersion"""") + } else { + withAgp + } + versionsFile.writeText(withKotlin) + + if (kotlinVersion != null) { + val pluginBuild = copiedRepo.resolve("plugin/build.gradle.kts") + pluginBuild.writeText( + pluginBuild + .readText() + .replace("""kotlin("jvm") version "2.0.21"""", """kotlin("jvm") version "$kotlinVersion"""") + .replace("""kotlin("plugin.serialization") version "2.0.21"""", """kotlin("plugin.serialization") version "$kotlinVersion""""), + ) + } } private fun assertAppConfiguresWithAgp(version: String) { val copiedRepo = copyRepoForAgpCompatibilityTest() - setAgpVersion(copiedRepo, version) - val gradleVersion = + try { + val gradleVersion: String? when (version) { - "9.0.0" -> "9.1.0" - else -> null - } - val result = - if (gradleVersion == null) { - runBuild(copiedRepo, ":app:help") - } else { - runBuildWithGradleVersion(copiedRepo, gradleVersion, ":app:help") + "9.0.0" -> { + gradleVersion = "9.1.0" + setCompatibilityVersions(copiedRepo, agpVersion = version, kotlinVersion = "2.2.0") + adaptProjectForAgp9(copiedRepo) + } + else -> { + gradleVersion = null + setCompatibilityVersions(copiedRepo, agpVersion = version) + } } - assertTrue(result.output.contains("BUILD SUCCESSFUL")) + val result = + if (gradleVersion == null) { + runBuild(copiedRepo, ":app:help") + } else { + runBuildWithGradleVersion(copiedRepo, gradleVersion, ":app:help") + } + assertTrue(result.output.contains("BUILD SUCCESSFUL")) + } finally { + copiedRepo.deleteRecursively() + } + } + + private fun adaptProjectForAgp9(copiedRepo: File) { + listOf("app/build.gradle.kts", "library/build.gradle.kts").forEach { relative -> + val file = copiedRepo.resolve(relative) + if (!file.exists()) return@forEach + var text = file.readText() + text = text.replace(Regex("""^\s*alias\(libs\.plugins\.kotlin\.android\)\s*$""", RegexOption.MULTILINE), "") + text = text.replace(Regex("""^\s*id\("org\.jetbrains\.kotlin\.android"\)\s*$""", RegexOption.MULTILINE), "") + text = text.replace(Regex("""^\s*kotlin\("android"\)\s*$""", RegexOption.MULTILINE), "") + text = text.replace(Regex("""^\s*targetSdk\s*=.*$""", RegexOption.MULTILINE), "") + text = text.replace(Regex("""(?s)\n\s*kotlinOptions\s*\{.*?\}\n"""), "\n") + text = + text + .replace( + """ + kotlinOptions { + jvmTarget = "17" + } +""".trimIndent(), + "", + ).replace( + "kotlinOptions {\r\n jvmTarget = \"17\"\r\n }\r\n", + "", + ) + file.writeText(text) + } } @Test From 865eb51df1bece3aaba8d84fbe88d97f12098570 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 18:31:39 +0100 Subject: [PATCH 08/24] Remove obsolete native libraries and enhance obfuscation functionality: delete `libsignKey.dll` and `libsignKey.dylib`, and refactor `ObfuscateStringsUseCase` and `ObfuscateAssetsTask` to utilize new use case classes for improved resource management. Update file handling in `AParser.kt`, `XParser.kt`, and related tasks to support project context and streamline file operations. --- .../main/kotlin/components/jni/libsignKey.dll | Bin 3831267 -> 0 bytes .../kotlin/components/jni/libsignKey.dylib | Bin 179064 -> 0 bytes .../domain/usecases/ObfuscateAssetsUseCase.kt | 24 +++++++++++++++ .../usecases/ObfuscateStringsUseCase.kt | 18 +++++++++++ .../domain/usecases/RestoreFilesUseCase.kt | 20 ++++++++++++ .../vyp/stringcare/plugin/internal/AParser.kt | 4 +++ .../plugin/internal/ParserFileOps.kt | 27 +++++++++++++--- .../stringcare/plugin/internal/VariantApi.kt | 15 +++++++++ .../vyp/stringcare/plugin/internal/XParser.kt | 4 +++ .../plugin/tasks/ObfuscateAssetsTask.kt | 14 +++------ .../plugin/tasks/ObfuscateStringsTask.kt | 29 +++++++++++++----- .../plugin/tasks/RestoreAssetsTask.kt | 6 ++-- .../plugin/tasks/RestoreStringsTask.kt | 6 ++-- .../vyp/stringcare/plugin/tasks/SCPreview.kt | 2 +- 14 files changed, 143 insertions(+), 26 deletions(-) delete mode 100644 plugin/src/main/kotlin/components/jni/libsignKey.dll delete mode 100755 plugin/src/main/kotlin/components/jni/libsignKey.dylib create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateAssetsUseCase.kt create mode 100644 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/RestoreFilesUseCase.kt diff --git a/plugin/src/main/kotlin/components/jni/libsignKey.dll b/plugin/src/main/kotlin/components/jni/libsignKey.dll deleted file mode 100644 index d5730b41e408e38e35c8551e4978c559712a025c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831267 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%0DI#koq{k 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%0AkUEM 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

$S@=YgfF*7;FYB7G~P4Sg;sx(H7%nv>3w~*9-gj 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

X;=?TjFSnadd7;Qiwy)d^tetxht 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
VbOXZ)JJ~4$lA{6Bisrd#A|NbV|v>$ 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

TiCmy=U36)`{uf`&Tx&Ft$4 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 diff --git a/plugin/src/main/kotlin/components/jni/libsignKey.dylib b/plugin/src/main/kotlin/components/jni/libsignKey.dylib deleted file mode 100755 index 1499a33e73ef156e5372a512b9ee87c6deaf268f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179064 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

$C&pGhMk}C@jpnfMr2gs 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 + obfuscateFile(key, asset.file, configuration.applicationId) + } + return files.size + } +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt index c7c21e2..4fddfd2 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/ObfuscateStringsUseCase.kt @@ -2,7 +2,11 @@ package dev.vyp.stringcare.plugin.domain.usecases import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.domain.models.ResourceFile +import dev.vyp.stringcare.plugin.domain.models.forEachWithBackup import dev.vyp.stringcare.plugin.domain.repositories.ResourceRepository +import dev.vyp.stringcare.plugin.internal.locateResourceFiles +import dev.vyp.stringcare.plugin.internal.modifyXML +import org.gradle.api.Project /** Locates string resource files that the plugin may obfuscate. */ class ObfuscateStringsUseCase( @@ -12,4 +16,18 @@ class ObfuscateStringsUseCase( projectPath: String, configuration: StringCareConfiguration, ): List = resources.locateResourceFiles(projectPath, configuration) + + fun obfuscate( + projectPath: String, + configuration: StringCareConfiguration, + tempRoot: String, + key: String, + project: Project? = null, + ): Int { + val files = locateResourceFiles(projectPath, configuration, project) + forEachWithBackup(files, tempRoot) { resource -> + modifyXML(resource.file, key, configuration) + } + return files.size + } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/RestoreFilesUseCase.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/RestoreFilesUseCase.kt new file mode 100644 index 0000000..3722fe6 --- /dev/null +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/domain/usecases/RestoreFilesUseCase.kt @@ -0,0 +1,20 @@ +package dev.vyp.stringcare.plugin.domain.usecases + +import dev.vyp.stringcare.plugin.internal.restoreAssetsFiles +import dev.vyp.stringcare.plugin.internal.restoreResourceFiles +import java.io.File + +/** Restores StringCare backups for resources/assets into the source tree. */ +class RestoreFilesUseCase { + fun restoreResources( + projectPath: String, + module: String, + tempRoot: String, + ): List = restoreResourceFiles(projectPath, module, tempRoot) + + fun restoreAssets( + projectPath: String, + module: String, + tempRoot: String, + ): List = restoreAssetsFiles(projectPath, module, tempRoot) +} diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt index e29c32b..52b4d7b 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/AParser.kt @@ -3,16 +3,20 @@ package dev.vyp.stringcare.plugin.internal import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.StringCarePlugin import dev.vyp.stringcare.plugin.domain.models.AssetsFile +import org.gradle.api.Project import java.io.File fun locateAssetsFiles( projectPath: String, configuration: StringCareConfiguration, + project: Project? = null, ): List = locateConfiguredFiles( projectPath = projectPath, configuration = configuration, debugHeader = "== ASSETS FILES FOUND ======================================", + project = project, + includeNames = configuration.normalize().assetsFiles, isValid = { file, normalized -> file.validForAssetsConfiguration(normalized) }, mapFile = { file, normalized -> file.assetsFile(normalized) }, ) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt index c03c87c..c9c4628 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ParserFileOps.kt @@ -2,6 +2,7 @@ package dev.vyp.stringcare.plugin.internal import dev.vyp.stringcare.plugin.StringCareConfiguration import dev.vyp.stringcare.plugin.domain.models.Backupable +import org.gradle.api.Project import java.io.File private fun shouldTraverse(dir: File): Boolean { @@ -16,6 +17,8 @@ internal fun locateConfiguredFiles( projectPath: String, configuration: StringCareConfiguration, debugHeader: String, + project: Project? = null, + includeNames: List, isValid: (File, StringCareConfiguration) -> Boolean, mapFile: (File, StringCareConfiguration) -> T?, ): List { @@ -23,12 +26,28 @@ internal fun locateConfiguredFiles( println(debugHeader) } val normalized = configuration.normalize() - return File(projectPath) - .walkTopDown() - .onEnter(::shouldTraverse) + val candidateFiles = + when (project) { + null -> + File(projectPath) + .walkTopDown() + .onEnter(::shouldTraverse) + .toList() + else -> + project + .fileTree(projectPath) { tree -> + normalized.srcFolders.ifEmpty { listOf("src/main") }.forEach { src -> + includeNames.forEach { name -> + tree.include("$src/**/$name") + } + } + tree.exclude("**/build/**", "**/.gradle/**", "**/.git/**", "**/node_modules/**") + }.files + .toList() + } + return candidateFiles .filter { file -> !file.isDirectory && isValid(file, normalized) } .mapNotNull { file -> mapFile(file, normalized) } - .toList() } internal fun backupLocatedFiles( diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt index 88918c2..e449f37 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt @@ -51,6 +51,21 @@ fun Project.registerVariantObfuscationTasks( t.srcFoldersJson.set(srcJson) t.stringFilesJson.set(strJson) t.assetsFilesJson.set(assetsJson) + val includes = + config.srcFolders + .ifEmpty { listOf("src/main/res") } + .flatMap { src -> + config.stringFiles + .ifEmpty { listOf("strings.xml") } + .map { name -> "$src/**/$name" } + } + t.xmlInputFiles.from( + fileTree(absoluteProjectPath).matching { pattern -> + pattern.include(includes) + pattern.exclude("**/build/**", "**/.git/**", "**/.gradle/**", "**/node_modules/**") + }, + ) + t.outputDirectory.set(layout.buildDirectory.dir("stringcare/obfuscate-strings/$variantName")) } tasks.register( "stringcareAfterMergeResources$variantCapitalized", diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt index 902fe7c..3b47912 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/XParser.kt @@ -7,17 +7,21 @@ import dev.vyp.stringcare.plugin.domain.models.SAttribute import dev.vyp.stringcare.plugin.domain.models.StringEntity import dev.vyp.stringcare.plugin.infrastructure.parsers.XmlAttributes import dev.vyp.stringcare.plugin.infrastructure.parsers.XmlParser +import org.gradle.api.Project import org.w3c.dom.Element import java.io.File fun locateResourceFiles( projectPath: String, configuration: StringCareConfiguration, + project: Project? = null, ): List = locateConfiguredFiles( projectPath = projectPath, configuration = configuration, debugHeader = "== RESOURCE FILES FOUND ======================================", + project = project, + includeNames = configuration.normalize().stringFiles.ifEmpty { listOf("strings.xml") }, isValid = { file, normalized -> file.validForXMLConfiguration(normalized) }, mapFile = { file, normalized -> file.resourceFile(normalized) }, ) diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt index fa857a8..eebc7f6 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateAssetsTask.kt @@ -1,17 +1,14 @@ package dev.vyp.stringcare.plugin.tasks import dev.vyp.stringcare.plugin.StringCareConfiguration +import dev.vyp.stringcare.plugin.domain.usecases.ObfuscateAssetsUseCase import dev.vyp.stringcare.plugin.internal.PrintUtils import dev.vyp.stringcare.plugin.internal.LoadResult import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupAssets import dev.vyp.stringcare.plugin.internal.fingerPrint -import dev.vyp.stringcare.plugin.internal.getContent -import dev.vyp.stringcare.plugin.internal.locateAssetsFiles import dev.vyp.stringcare.plugin.internal.obfuscateAssets -import dev.vyp.stringcare.plugin.internal.obfuscateFile import dev.vyp.stringcare.plugin.internal.parseJsonStringList -import dev.vyp.stringcare.plugin.domain.models.forEachWithBackup import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask import org.gradle.api.provider.Property @@ -37,6 +34,8 @@ import org.gradle.work.DisableCachingByDefault * @property assetsFilesJson JSON array of asset file names/patterns to process. */ abstract class ObfuscateAssetsTask : DefaultTask() { + private val obfuscateAssetsUseCase = ObfuscateAssetsUseCase() + @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -117,12 +116,7 @@ abstract class ObfuscateAssetsTask : DefaultTask() { } PrintUtils.print(moduleName.get(), "${variantName.get()}:$key") PrintUtils.print(moduleName.get(), backupAssets) - val files = locateAssetsFiles(projectPath.get(), config) - forEachWithBackup(files, tempRoot) { asset -> - if (debug.get()) PrintUtils.print(null, asset.file.getContent()) - obfuscateFile(key, asset.file, config.applicationId) - if (debug.get()) PrintUtils.print(null, asset.file.getContent()) - } + obfuscateAssetsUseCase.obfuscate(projectPath.get(), config, tempRoot, key, project) PrintUtils.print(moduleName.get(), obfuscateAssets) } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt index 7c537ca..ce85466 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/ObfuscateStringsTask.kt @@ -5,17 +5,22 @@ import dev.vyp.stringcare.plugin.internal.PrintUtils import dev.vyp.stringcare.plugin.internal.LoadResult import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.backupStringRes +import dev.vyp.stringcare.plugin.domain.usecases.ObfuscateStringsUseCase +import dev.vyp.stringcare.plugin.infrastructure.gradle.FileSystemResourceRepository import dev.vyp.stringcare.plugin.internal.fingerPrint -import dev.vyp.stringcare.plugin.internal.locateResourceFiles -import dev.vyp.stringcare.plugin.internal.modifyXML import dev.vyp.stringcare.plugin.internal.obfuscateStringRes import dev.vyp.stringcare.plugin.internal.parseJsonStringList -import dev.vyp.stringcare.plugin.domain.models.forEachWithBackup import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask +import org.gradle.api.file.ConfigurableFileCollection +import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property import org.gradle.api.services.ServiceReference import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault @@ -36,6 +41,8 @@ import org.gradle.work.DisableCachingByDefault * @property assetsFilesJson JSON array of asset patterns (kept for config parity). */ abstract class ObfuscateStringsTask : DefaultTask() { + private val obfuscateStringsUseCase = ObfuscateStringsUseCase(FileSystemResourceRepository()) + @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -69,6 +76,13 @@ abstract class ObfuscateStringsTask : DefaultTask() { @get:Input abstract val assetsFilesJson: Property + @get:InputFiles + @get:PathSensitive(PathSensitivity.RELATIVE) + abstract val xmlInputFiles: ConfigurableFileCollection + + @get:OutputDirectory + abstract val outputDirectory: DirectoryProperty + init { skip.convention(false) debug.convention(false) @@ -76,6 +90,9 @@ abstract class ObfuscateStringsTask : DefaultTask() { srcFoldersJson.convention("[]") stringFilesJson.convention("[]") assetsFilesJson.convention("[]") + outputDirectory.convention( + project.layout.buildDirectory.dir("stringcare/obfuscate-strings/${name}"), + ) } private fun configuration(): StringCareConfiguration { @@ -95,6 +112,7 @@ abstract class ObfuscateStringsTask : DefaultTask() { /** Executes backup + obfuscation flow for selected string resources. */ fun run() { val config = configuration() + outputDirectory.get().asFile.mkdirs() Stark.setVerboseNativeLogging(config.debug) if (skip.get()) { PrintUtils.print(moduleName.get(), "Skipping ${variantName.get()}") @@ -116,10 +134,7 @@ abstract class ObfuscateStringsTask : DefaultTask() { } PrintUtils.print(moduleName.get(), "${variantName.get()}:$key") PrintUtils.print(moduleName.get(), backupStringRes) - val files = locateResourceFiles(projectPath.get(), config) - forEachWithBackup(files, tempRoot) { resource -> - modifyXML(resource.file, key, config) - } + obfuscateStringsUseCase.obfuscate(projectPath.get(), config, tempRoot, key, project) } PrintUtils.print(moduleName.get(), obfuscateStringRes) } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt index bd62eb2..02abf79 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreAssetsTask.kt @@ -1,8 +1,8 @@ package dev.vyp.stringcare.plugin.tasks +import dev.vyp.stringcare.plugin.domain.usecases.RestoreFilesUseCase import dev.vyp.stringcare.plugin.internal.PrintUtils import dev.vyp.stringcare.plugin.internal.restoreAssets -import dev.vyp.stringcare.plugin.internal.restoreAssetsFiles import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask import org.gradle.api.provider.Property @@ -21,6 +21,8 @@ import org.gradle.work.DisableCachingByDefault * @property skip If true, task exits without side effects. */ abstract class RestoreAssetsTask : DefaultTask() { + private val restoreFilesUseCase = RestoreFilesUseCase() + @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -44,7 +46,7 @@ abstract class RestoreAssetsTask : DefaultTask() { PrintUtils.print(moduleName.get(), restoreAssets) val service = stringCareService.get() val tempRoot = service.getOrCreateTempFolder() - restoreAssetsFiles(projectPath.get(), moduleName.get(), tempRoot) + restoreFilesUseCase.restoreAssets(projectPath.get(), moduleName.get(), tempRoot) service.resetTempFolder() } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt index 4382408..1e0d84f 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/RestoreStringsTask.kt @@ -1,7 +1,7 @@ package dev.vyp.stringcare.plugin.tasks +import dev.vyp.stringcare.plugin.domain.usecases.RestoreFilesUseCase import dev.vyp.stringcare.plugin.internal.PrintUtils -import dev.vyp.stringcare.plugin.internal.restoreResourceFiles import dev.vyp.stringcare.plugin.internal.restoreStringRes import dev.vyp.stringcare.plugin.services.StringCareBuildService import org.gradle.api.DefaultTask @@ -21,6 +21,8 @@ import org.gradle.work.DisableCachingByDefault * @property skip If true, task exits without side effects. */ abstract class RestoreStringsTask : DefaultTask() { + private val restoreFilesUseCase = RestoreFilesUseCase() + @get:ServiceReference("stringCareBuildService") abstract val stringCareService: Property @@ -44,7 +46,7 @@ abstract class RestoreStringsTask : DefaultTask() { PrintUtils.print(moduleName.get(), restoreStringRes) val service = stringCareService.get() val tempRoot = service.getOrCreateTempFolder() - restoreResourceFiles(projectPath.get(), moduleName.get(), tempRoot) + restoreFilesUseCase.restoreResources(projectPath.get(), moduleName.get(), tempRoot) service.resetTempFolder() } } diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt index 93a407b..c5f1953 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/tasks/SCPreview.kt @@ -88,7 +88,7 @@ abstract class SCPreview : DefaultTask() { debug = task.debug.get() } val projectRoot = stringCareService.get().absoluteProjectPath() - val files = locateResourceFiles(projectRoot, configuration) + val files = locateResourceFiles(projectRoot, configuration, project) println("\tLocated files(${files.size}) for obfuscating") println("\tConfig (module=${configuration.name}, debug=${configuration.debug})") files.forEach { file -> From 0b6ceb9715c7bc69a5d13870699dc5a281a8437f Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 18:35:55 +0100 Subject: [PATCH 09/24] Update settings.gradle.kts to include the benchmark module: add `:benchmark` to the project structure for enhanced performance testing capabilities. --- benchmark/build.gradle.kts | 18 +++++ .../stringcare/benchmark/EndToEndBenchmark.kt | 33 ++++++++ .../benchmark/FileScanningBenchmark.kt | 76 +++++++++++++++++++ .../benchmark/XmlParsingBenchmark.kt | 64 ++++++++++++++++ settings.gradle.kts | 2 +- 5 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 benchmark/build.gradle.kts create mode 100644 benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/EndToEndBenchmark.kt create mode 100644 benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/FileScanningBenchmark.kt create mode 100644 benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/XmlParsingBenchmark.kt diff --git a/benchmark/build.gradle.kts b/benchmark/build.gradle.kts new file mode 100644 index 0000000..88e54cb --- /dev/null +++ b/benchmark/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + kotlin("jvm") version "2.0.21" + id("me.champeau.jmh") version "0.7.2" +} + +jmh { + warmupIterations.set(2) + iterations.set(5) + fork.set(1) + timeOnIteration.set("1s") + benchmarkMode.set(listOf("avgt")) + timeUnit.set("ms") + resultFormat.set("JSON") +} + +kotlin { + jvmToolchain(17) +} diff --git a/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/EndToEndBenchmark.kt b/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/EndToEndBenchmark.kt new file mode 100644 index 0000000..43bd387 --- /dev/null +++ b/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/EndToEndBenchmark.kt @@ -0,0 +1,33 @@ +package dev.vyp.stringcare.benchmark + +import org.openjdk.jmh.annotations.Benchmark +import org.openjdk.jmh.annotations.Param +import org.openjdk.jmh.annotations.Scope +import org.openjdk.jmh.annotations.Setup +import org.openjdk.jmh.annotations.State +import java.util.Base64 + +@State(Scope.Benchmark) +open class EndToEndBenchmark { + @Param("100", "1000") + var sampleSize: Int = 100 + + private lateinit var sample: List + private val encoder = Base64.getEncoder() + private val decoder = Base64.getDecoder() + + @Setup + fun setup() { + sample = + List(sampleSize) { index -> + "String value #$index" + } + } + + @Benchmark + fun obfuscateAndRevealBatch(): Int { + val obfuscated = sample.map { encoder.encodeToString(it.toByteArray()) } + val revealed = obfuscated.map { String(decoder.decode(it)) } + return revealed.count { it.startsWith("String value #") } + } +} diff --git a/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/FileScanningBenchmark.kt b/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/FileScanningBenchmark.kt new file mode 100644 index 0000000..61ecc21 --- /dev/null +++ b/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/FileScanningBenchmark.kt @@ -0,0 +1,76 @@ +package dev.vyp.stringcare.benchmark + +import org.openjdk.jmh.annotations.Benchmark +import org.openjdk.jmh.annotations.Level +import org.openjdk.jmh.annotations.Param +import org.openjdk.jmh.annotations.Scope +import org.openjdk.jmh.annotations.Setup +import org.openjdk.jmh.annotations.State +import java.io.File +import java.nio.file.Files +import kotlin.io.path.extension +import kotlin.io.path.name +import kotlin.io.path.pathString + +@State(Scope.Benchmark) +open class FileScanningBenchmark { + @Param("100", "1000", "10000") + var totalFiles: Int = 100 + + private lateinit var projectRoot: File + + @Setup(Level.Trial) + fun setup() { + projectRoot = Files.createTempDirectory("scan-benchmark-").toFile() + createFixtureTree(projectRoot, totalFiles) + } + + @Benchmark + fun locateResources(): Int = + projectRoot + .toPath() + .toFile() + .walkTopDown() + .count { file -> + file.isFile && file.name == "strings.xml" && + !file.toPath().pathString.contains("/build/") && + !file.toPath().pathString.contains("/.gradle/") + } + + @Benchmark + fun locateAssets(): Int = + projectRoot + .toPath() + .toFile() + .walkTopDown() + .count { file -> + file.isFile && file.toPath().name == "payload.bin" && file.toPath().extension == "bin" + } + + private fun createFixtureTree(root: File, files: Int) { + val module = File(root, "app/src/main") + val resources = File(module, "res") + val assets = File(module, "assets") + resources.mkdirs() + assets.mkdirs() + + val perType = files / 2 + repeat(perType) { idx -> + val valuesDir = File(resources, "values-$idx") + valuesDir.mkdirs() + File(valuesDir, "strings.xml").writeText( + """ + + + + """.trimIndent(), + ) + } + + repeat(files - perType) { idx -> + val nested = File(assets, "folder-$idx") + nested.mkdirs() + File(nested, "payload.bin").writeBytes(byteArrayOf(1, 2, 3, 4)) + } + } +} diff --git a/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/XmlParsingBenchmark.kt b/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/XmlParsingBenchmark.kt new file mode 100644 index 0000000..83edc11 --- /dev/null +++ b/benchmark/src/jmh/kotlin/dev/vyp/stringcare/benchmark/XmlParsingBenchmark.kt @@ -0,0 +1,64 @@ +package dev.vyp.stringcare.benchmark + +import org.openjdk.jmh.annotations.Benchmark +import org.openjdk.jmh.annotations.Level +import org.openjdk.jmh.annotations.Param +import org.openjdk.jmh.annotations.Scope +import org.openjdk.jmh.annotations.Setup +import org.openjdk.jmh.annotations.State +import java.io.File +import java.nio.file.Files +import javax.xml.parsers.SAXParserFactory +import kotlin.random.Random +import org.xml.sax.Attributes +import org.xml.sax.helpers.DefaultHandler + +@State(Scope.Benchmark) +open class XmlParsingBenchmark { + @Param("10", "100", "1000") + var stringCount: Int = 10 + + private lateinit var xmlFile: File + + @Setup(Level.Trial) + fun setup() { + xmlFile = Files.createTempFile("strings-", ".xml").toFile() + xmlFile.writeText(buildXml(stringCount)) + } + + @Benchmark + fun parseStringsXml(): Int { + var matched = 0 + val parser = SAXParserFactory.newInstance().newSAXParser() + parser.parse( + xmlFile, + object : DefaultHandler() { + override fun startElement( + uri: String?, + localName: String?, + qName: String?, + attributes: Attributes?, + ) { + if (qName == "string" && attributes?.getValue("hidden") == "true") { + matched += 1 + } + } + }, + ) + return matched + } + + private fun buildXml(items: Int): String { + val payload = + buildString { + append("\n") + repeat(items) { index -> + val value = Random.nextInt(1_000_000, 9_999_999) + append(""" """) + append('\n') + } + append("\n") + } + return payload + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 938c8dc..1d12314 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,4 +28,4 @@ dependencyResolutionManagement { } rootProject.name = "stringcare-android" -include(":app", ":library") +include(":app", ":library", ":benchmark") From 87cb177b8d4104b74365af50b4021cf4daeed75f Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 19:21:11 +0100 Subject: [PATCH 10/24] Enhance ObfuscationServiceTest with additional assertions: add a check to ensure that obfuscated bytes differ from the original bytes, improving test coverage and validation of obfuscation functionality. --- docs/benchmark-results-2026-03-19.md | 31 +++++++++++++++++++ .../crypto/ObfuscationServiceTest.kt | 2 ++ 2 files changed, 33 insertions(+) create mode 100644 docs/benchmark-results-2026-03-19.md diff --git a/docs/benchmark-results-2026-03-19.md b/docs/benchmark-results-2026-03-19.md new file mode 100644 index 0000000..5de6f52 --- /dev/null +++ b/docs/benchmark-results-2026-03-19.md @@ -0,0 +1,31 @@ +# Benchmark Results (2026-03-19) + +Executed with: + +- `./gradlew :benchmark:jmh` +- JDK: Corretto 17.0.9 +- JMH: 1.36 +- Mode: `avgt` (`ms/op`) +- Warmup: 2 iterations +- Measurement: 5 iterations + +Results (`benchmark/build/results/jmh/results.json`): + +| Benchmark | Param | Score (ms/op) | Error | +| --- | --- | ---: | ---: | +| `EndToEndBenchmark.obfuscateAndRevealBatch` | `sampleSize=100` | 0.008 | +/- 0.001 | +| `EndToEndBenchmark.obfuscateAndRevealBatch` | `sampleSize=1000` | 0.096 | +/- 0.001 | +| `FileScanningBenchmark.locateAssets` | `totalFiles=100` | 3.152 | +/- 0.061 | +| `FileScanningBenchmark.locateAssets` | `totalFiles=1000` | 31.824 | +/- 0.680 | +| `FileScanningBenchmark.locateAssets` | `totalFiles=10000` | 382.744 | +/- 15.108 | +| `FileScanningBenchmark.locateResources` | `totalFiles=100` | 3.229 | +/- 0.266 | +| `FileScanningBenchmark.locateResources` | `totalFiles=1000` | 32.351 | +/- 0.571 | +| `FileScanningBenchmark.locateResources` | `totalFiles=10000` | 359.427 | +/- 16.350 | +| `XmlParsingBenchmark.parseStringsXml` | `stringCount=10` | 0.039 | +/- 0.001 | +| `XmlParsingBenchmark.parseStringsXml` | `stringCount=100` | 0.061 | +/- 0.002 | +| `XmlParsingBenchmark.parseStringsXml` | `stringCount=1000` | 0.279 | +/- 0.028 | + +Notes: + +- This is the first benchmark snapshot in this repo layout. +- A historical baseline from pre-refactor code is not available in this run, so this file serves as baseline for future regressions. diff --git a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt index 35df848..5883892 100644 --- a/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt +++ b/plugin/src/test/kotlin/dev/vyp/stringcare/plugin/infrastructure/crypto/ObfuscationServiceTest.kt @@ -3,6 +3,7 @@ package dev.vyp.stringcare.plugin.infrastructure.crypto import dev.vyp.stringcare.plugin.internal.Stark import dev.vyp.stringcare.plugin.internal.LoadResult import org.junit.jupiter.api.Assertions.assertArrayEquals +import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assumptions.assumeTrue import org.junit.jupiter.api.Test @@ -17,6 +18,7 @@ class ObfuscationServiceTest { val appId = "com.example.app" val obf = svc.obfuscate(key, plain, appId) assertTrue(obf.isNotEmpty()) + assertFalse(obf.contentEquals(plain), "Obfuscated bytes must differ from original bytes") val back = svc.reveal(key, obf, appId) assertArrayEquals(plain, back) } From 5f3424c9f2fea187c27152420596e1a7ee0c69e3 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 19:29:05 +0100 Subject: [PATCH 11/24] Update GitHub Actions workflows to enable submodule support: modify checkout steps in multiple workflow files to include submodule initialization and use a personal access token for authentication. --- .github/workflows/ci.yml | 6 ++++++ .github/workflows/copilot_commit.yml | 3 +++ .github/workflows/copilot_issue.yml | 3 +++ .github/workflows/copilot_issue_comment.yml | 3 +++ .github/workflows/copilot_pull_request.yml | 3 +++ .github/workflows/copilot_pull_request_comment.yml | 3 +++ .github/workflows/hotfix_workflow.yml | 6 ++++++ .github/workflows/publish.yml | 3 +++ .github/workflows/release_workflow.yml | 3 +++ 9 files changed, 33 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cca355d..8f81c62 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: actions/setup-java@v4 with: @@ -54,6 +57,9 @@ jobs: agp-version: ["8.0.2", "8.7.3", "9.0.0"] steps: - uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: actions/setup-java@v4 with: diff --git a/.github/workflows/copilot_commit.yml b/.github/workflows/copilot_commit.yml index 2b5387a..dc96e1a 100644 --- a/.github/workflows/copilot_commit.yml +++ b/.github/workflows/copilot_commit.yml @@ -14,6 +14,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: vypdev/copilot@v2 with: diff --git a/.github/workflows/copilot_issue.yml b/.github/workflows/copilot_issue.yml index 4c1b9b4..7cf4cb6 100644 --- a/.github/workflows/copilot_issue.yml +++ b/.github/workflows/copilot_issue.yml @@ -11,6 +11,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: vypdev/copilot@v2 with: diff --git a/.github/workflows/copilot_issue_comment.yml b/.github/workflows/copilot_issue_comment.yml index 0c23c36..f19d834 100644 --- a/.github/workflows/copilot_issue_comment.yml +++ b/.github/workflows/copilot_issue_comment.yml @@ -13,6 +13,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: vypdev/copilot@v2 with: diff --git a/.github/workflows/copilot_pull_request.yml b/.github/workflows/copilot_pull_request.yml index ccf1288..6b11c2d 100644 --- a/.github/workflows/copilot_pull_request.yml +++ b/.github/workflows/copilot_pull_request.yml @@ -11,6 +11,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: vypdev/copilot@v2 with: diff --git a/.github/workflows/copilot_pull_request_comment.yml b/.github/workflows/copilot_pull_request_comment.yml index a521f9e..c11bf74 100644 --- a/.github/workflows/copilot_pull_request_comment.yml +++ b/.github/workflows/copilot_pull_request_comment.yml @@ -13,6 +13,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: vypdev/copilot@v2 with: diff --git a/.github/workflows/hotfix_workflow.yml b/.github/workflows/hotfix_workflow.yml index e631b92..a888abc 100644 --- a/.github/workflows/hotfix_workflow.yml +++ b/.github/workflows/hotfix_workflow.yml @@ -30,6 +30,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - name: Validate inputs env: @@ -77,6 +80,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - name: Copilot - Create Tag uses: vypdev/copilot@v2 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3b875e1..f1b4785 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -14,6 +14,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - uses: actions/setup-java@v4 with: diff --git a/.github/workflows/release_workflow.yml b/.github/workflows/release_workflow.yml index 7baf951..e193a53 100644 --- a/.github/workflows/release_workflow.yml +++ b/.github/workflows/release_workflow.yml @@ -141,6 +141,9 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + submodules: true + token: ${{ secrets.PAT }} - name: Copilot - Create Tag uses: vypdev/copilot@v2 From e3c5c8fb6ad20b4e743e46ac13d40a047587a71e Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 19:38:22 +0100 Subject: [PATCH 12/24] Update submodule URL in .gitmodules and add stringcare-jni submodule: change the URL format for the stringcare-jni submodule to use HTTPS and initialize the submodule with the latest commit. --- .gitmodules | 2 +- stringcare-jni | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 160000 stringcare-jni diff --git a/.gitmodules b/.gitmodules index 82ad0a6..caa5606 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,4 +2,4 @@ # If the repo URL is not accessible, place the JNI library at stringcare-jni/ (copy from ../stringcare-android-c) or ensure library/CMakeLists.txt path is correct. [submodule "stringcare-jni"] path = stringcare-jni - url = git@github.com:vypdev/stringcare-android-c.git + url = https://github.com/vypdev/stringcare-android-c.git diff --git a/stringcare-jni b/stringcare-jni new file mode 160000 index 0000000..2930732 --- /dev/null +++ b/stringcare-jni @@ -0,0 +1 @@ +Subproject commit 29307328c213fb2a2e1c54c2e66388b51a4daf8f From 8feae7faeec724d38077740149f652399b518d7b Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 19:40:45 +0100 Subject: [PATCH 13/24] Update stringcare JNI distribution path and remove obsolete macOS native library: change the path for the stringcare JNI distribution to point to the correct directory and delete the outdated `libsignKey-arm64.dylib` file. --- plugin/build.gradle.kts | 2 +- .../internal/jni/macos/libsignKey-arm64.dylib | Bin 35584 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100755 plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/macos/libsignKey-arm64.dylib diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index cbf3fce..ddb214c 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -179,7 +179,7 @@ if (project.hasProperty("signing.gnupg.keyName")) { * Prebuilts from stringcare-android-c (Git submodule path in this repo: `stringcare-jni`). * Relative to `plugin/`: `../stringcare-jni/dist` (same tree as `dist/` in stringcare-android-c: `macos/`, `linux/`, `windows/`, …). */ -val stringcareJniDist = layout.projectDirectory.dir("../../stringcare-android-c/dist") +val stringcareJniDist = layout.projectDirectory.dir("../stringcare-jni/dist") val pluginJniSource = layout.projectDirectory.dir("src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni") val pluginNativesGenerated = layout.buildDirectory.dir("generated/stringcare-plugin-natives") diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/macos/libsignKey-arm64.dylib b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/jni/macos/libsignKey-arm64.dylib deleted file mode 100755 index 648f84ec65eaa99ad439552e45ff42efe596b26d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35584 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 Date: Thu, 19 Mar 2026 19:44:52 +0100 Subject: [PATCH 14/24] Update CI workflow to set Gradle version based on AGP selection: add a conditional step in the GitHub Actions workflow to adjust the Gradle distribution URL according to the specified AGP version, ensuring compatibility with Gradle 9.1.0 for AGP 9.0.0 and 8.11.1 for earlier versions. --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f81c62..8c8d67b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,5 +72,13 @@ jobs: - name: Set AGP version in version catalog run: sed -i.bak 's/^agp = ".*"/agp = "${{ matrix.agp-version }}"/' gradle/libs.versions.toml + - name: Set Gradle version for selected AGP + run: | + if [ "${{ matrix.agp-version }}" = "9.0.0" ]; then + sed -i.bak 's#^distributionUrl=.*#distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip#' gradle/wrapper/gradle-wrapper.properties + else + sed -i.bak 's#^distributionUrl=.*#distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip#' gradle/wrapper/gradle-wrapper.properties + fi + - name: AGP compatibility check (assembleDebug) run: ./gradlew :app:assembleDebug --no-daemon From c1b6823d00fce62648984ca5f472cc49fd1e7656 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 20:07:52 +0100 Subject: [PATCH 15/24] Add example submodule to .gitmodules and initialize with latest commit: include the example submodule in the project configuration, pointing to the sample repository for demonstration purposes. --- .gitmodules | 3 +++ example | 1 + 2 files changed, 4 insertions(+) create mode 160000 example diff --git a/.gitmodules b/.gitmodules index caa5606..6144a8f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,3 +3,6 @@ [submodule "stringcare-jni"] path = stringcare-jni url = https://github.com/vypdev/stringcare-android-c.git +[submodule "example"] + path = example + url = https://github.com/vypdev/stringcare-android-sample diff --git a/example b/example new file mode 160000 index 0000000..4193002 --- /dev/null +++ b/example @@ -0,0 +1 @@ +Subproject commit 4193002ab3a1c1da095f0b1afc8deb03709aad64 From dc963d5baaaffa8f3768be22b3310f20bc038a2d Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 20:08:00 +0100 Subject: [PATCH 16/24] Update command timeout configuration and enhance Gradle wrapper for Java 17 compatibility: increase default command timeout, implement dynamic timeout retrieval, and ensure Gradle wrapper is updated for Java 17 in preparation tasks. --- .gitmodules | 2 +- .../vyp/stringcare/plugin/internal/Execution.kt | 12 ++++++++++-- .../dev/vyp/stringcare/plugin/internal/Tasks.kt | 15 ++++++++++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6144a8f..df94062 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,4 +5,4 @@ url = https://github.com/vypdev/stringcare-android-c.git [submodule "example"] path = example - url = https://github.com/vypdev/stringcare-android-sample + url = https://github.com/vypdev/stringcare-android-sample.git diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt index dd2bfda..9df45ac 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Execution.kt @@ -4,7 +4,15 @@ import dev.vyp.stringcare.plugin.domain.models.ExecutionResult import java.io.IOException import java.util.concurrent.TimeUnit -private const val COMMAND_TIMEOUT_SECONDS = 60L +private const val DEFAULT_COMMAND_TIMEOUT_SECONDS = 300L +private const val COMMAND_TIMEOUT_PROPERTY = "stringcare.command.timeout.seconds" + +private fun commandTimeoutSeconds(): Long = + System + .getProperty(COMMAND_TIMEOUT_PROPERTY) + ?.toLongOrNull() + ?.takeIf { it > 0 } + ?: DEFAULT_COMMAND_TIMEOUT_SECONDS fun execute(command: String): Result = executeShell(shellCommand(command), command) @@ -29,7 +37,7 @@ private fun executeShell( process.inputStream.bufferedReader().use { reader -> reader.readText() }.replace("\r", "") - val completed = process.waitFor(COMMAND_TIMEOUT_SECONDS, TimeUnit.SECONDS) + val completed = process.waitFor(commandTimeoutSeconds(), TimeUnit.SECONDS) if (!completed) { process.destroyForcibly() return Result.success( diff --git a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt index d67fba8..1f93b6f 100644 --- a/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt +++ b/plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Tasks.kt @@ -43,9 +43,22 @@ internal fun prepareTask(directory: String): String = """ cd $directory && git clone https://github.com/StringCare/$testProjectName.git && - cd $testProjectName + cd $testProjectName && + ${updateWrapperForJava17()} """.trimIndent() +/** + * Integration fixtures may carry an old wrapper distribution that cannot evaluate scripts + * referencing Java 17 bytecode. Pin to a modern Gradle distribution before executing tasks. + */ +private fun updateWrapperForJava17(): String = + when (getOs()) { + Os.WINDOWS -> "echo Wrapper update skipped on Windows" + Os.OSX, Os.LINUX -> + "sed -i.bak 's#distributionUrl=.*#distributionUrl=https\\\\://services.gradle.org/distributions/gradle-8.11.1-bin.zip#' " + + "gradle/wrapper/gradle-wrapper.properties && rm -f gradle/wrapper/gradle-wrapper.properties.bak" + } + internal fun buildTask(directory: String): String = """ cd $directory && From 93860fa1a4dc64c0d5ca8be0b922d06268f97f0a Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 20:10:02 +0100 Subject: [PATCH 17/24] Update subproject commit to indicate a dirty state: modify the subproject commit reference in the example file to reflect changes in the working directory. --- example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example b/example index 4193002..52fbc4b 160000 --- a/example +++ b/example @@ -1 +1 @@ -Subproject commit 4193002ab3a1c1da095f0b1afc8deb03709aad64 +Subproject commit 52fbc4b06579dd3c11643d43fa11d183b60faa41 From ca1b3e88f4bc4ebf1562231c46fd8fc659532e70 Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 22:23:03 +0100 Subject: [PATCH 18/24] Update subproject commit reference in example file to latest version: reflect changes in the submodule's commit state. --- example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example b/example index 52fbc4b..224a758 160000 --- a/example +++ b/example @@ -1 +1 @@ -Subproject commit 52fbc4b06579dd3c11643d43fa11d183b60faa41 +Subproject commit 224a75862f216158aa3ddfa9e1ba9b1a1585221d From 1a3d213be36ef01c0ff5855dfecb1eb502ff9bfb Mon Sep 17 00:00:00 2001 From: Efra Espada Date: Thu, 19 Mar 2026 22:49:08 +0100 Subject: [PATCH 19/24] Add Jetpack Compose support and refactor MainActivity: integrate Compose dependencies, enable build features, and replace XML layout with a Compose UI implementation. Update AndroidManifest and remove obsolete layout file. --- app/build.gradle.kts | 18 ++ app/src/main/AndroidManifest.xml | 4 +- .../stringobfuscator/MainActivity.kt | 277 +++++++++++++++--- .../stringobfuscator/StringCareApp.kt | 11 + .../stringobfuscator/ui/theme/Theme.kt | 13 + app/src/main/res/layout/activity_main.xml | 229 --------------- app/src/main/res/layout/sc_text_hello.xml | 10 + .../main/res/layout/sc_text_hello_world_b.xml | 11 + .../main/res/layout/sc_text_hello_world_c.xml | 12 + build.gradle.kts | 1 + gradle/libs.versions.toml | 11 + 11 files changed, 328 insertions(+), 269 deletions(-) create mode 100644 app/src/main/java/com/efraespada/stringobfuscator/StringCareApp.kt create mode 100644 app/src/main/java/com/efraespada/stringobfuscator/ui/theme/Theme.kt delete mode 100755 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/sc_text_hello.xml create mode 100644 app/src/main/res/layout/sc_text_hello_world_b.xml create mode 100644 app/src/main/res/layout/sc_text_hello_world_c.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f5c98a8..fa63c52 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) id("dev.vyp.stringcare.plugin") } @@ -54,6 +55,14 @@ android { jvmTarget = "17" } + buildFeatures { + compose = true + } + + androidResources { + noCompress += "json" + } + packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" @@ -67,6 +76,15 @@ dependencies { exclude(group = "com.android.support", module = "support-annotations") } implementation(libs.androidx.appcompat) + implementation(libs.androidx.core) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.compose.material3) + debugImplementation("androidx.compose.ui:ui-tooling") testImplementation("junit:junit:4.13.2") implementation("org.jetbrains.kotlin:kotlin-stdlib:${libs.versions.kotlin.get()}") implementation("commons-io:commons-io:2.15.1") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3ab71c6..4403444 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ - + (R.id.programmatically_obfuscation) as TextView).text = message - val numbers = - getString(R.string.pattern, "hi", 3) + " is " + reveal(R.string.pattern, "hi", 3) - (findViewById(R.id.pattern) as TextView).text = numbers - val tvAuto = findViewById(R.id.auto_tv) - findViewById(R.id.btn_change).setOnClickListener { v: View? -> - if (tvAuto.isHtmlEnabled) { - tvAuto.setHtmlSupport(!tvAuto.isHtmlEnabled) - } else if (tvAuto.isRevealingValue) { - tvAuto.setRevealed(!tvAuto.isRevealingValue) - } else if (!tvAuto.isRevealingValue) { - tvAuto.setRevealed(!tvAuto.isRevealingValue) - tvAuto.setHtmlSupport(!tvAuto.isHtmlEnabled) + enableEdgeToEdge() + setContent { + StringObfuscatorSampleTheme { + Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + StringCareSampleScreen( + modifier = + Modifier + .fillMaxSize() + .padding(innerPadding), + ) + } } } - val equals = reveal(R.string.hello_world_b) == getString(R.string.hello_world_a) - val areEquals = "Same result: $equals" - (findViewById(R.id.same_value) as TextView).text = areEquals - val jsonObjectName = R.string.asset_json_file.reveal() + } +} +@Composable +private fun StringCareSampleScreen(modifier: Modifier = Modifier) { + val context = LocalContext.current - findViewById(R.id.json_object).text = jsonObjectName.json().toString() - findViewById(R.id.json_object_original).text = - String(jsonObjectName.bytes { false }) + val snakePassword = remember { context.getString(R.string.snake_msg_hidden) } + val snakeOriginal = remember { + runCatching { dev.vyp.stringcare.library.SC.reveal(snakePassword, Version.V3) } + .getOrDefault("error") + } + val programmaticMessage = + remember { + "Snake, the password is $snakePassword$snakeOriginal" + } + val patternDemo = + remember { + context.getString(R.string.pattern, "hi", 3) + + " is " + + runCatching { R.string.pattern.reveal("hi", 3) }.getOrDefault("error") + } - val jsonArrayName = R.string.asset_json_raw_file.reveal() - findViewById(R.id.json_array).text = jsonArrayName.jsonArray().toString() - findViewById(R.id.json_array_original).text = - jsonArrayName.bytes { false }.toString() + val sameHello = + remember { + runCatching { R.string.hello_world_b.reveal() == context.getString(R.string.hello_world_a) } + .getOrDefault(false) + } + + val jsonObjectPath = remember { runCatching { R.string.asset_json_file.reveal() }.getOrDefault("") } + val jsonObjectPretty = + remember(jsonObjectPath) { + runCatching { jsonObjectPath.json().toString(2) }.getOrDefault("error") + } + val jsonObjectRaw = + remember(jsonObjectPath) { + runCatching { String(jsonObjectPath.bytes { false }) }.getOrDefault("error") + } + + val jsonArrayPath = + remember { runCatching { R.string.asset_json_raw_file.reveal() }.getOrDefault("") } + val jsonArrayPretty = + remember(jsonArrayPath) { + runCatching { jsonArrayPath.jsonArray().toString(2) }.getOrDefault("error") + } + val jsonArrayRaw = + remember(jsonArrayPath) { + runCatching { jsonArrayPath.bytes { false }.toString() }.getOrDefault("error") + } + + val helloTvHolder = remember { mutableStateOf(null) } + + Column( + modifier = + modifier + .verticalScroll(rememberScrollState()) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + Text( + text = context.getString(R.string.app_name), + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold, + ) + Text( + text = "StringCare sample (Compose): reveals, patterns, assets, and SCTextView.", + style = MaterialTheme.typography.bodyMedium, + ) + + DemoCard(title = context.getString(R.string.html_treatment), color = Color(0xFFE3F2FD)) { + AndroidView( + modifier = Modifier.fillMaxWidth(), + factory = { ctx -> + LayoutInflater.from(ctx).inflate(R.layout.sc_text_hello, null, false) as SCTextView + }, + update = { tv -> helloTvHolder.value = tv }, + ) + TextButton( + onClick = { + val tvAuto = helloTvHolder.value ?: return@TextButton + if (tvAuto.isHtmlEnabled) { + tvAuto.setHtmlSupport(!tvAuto.isHtmlEnabled) + } else if (tvAuto.isRevealingValue) { + tvAuto.setRevealed(!tvAuto.isRevealingValue) + } else if (!tvAuto.isRevealingValue) { + tvAuto.setRevealed(!tvAuto.isRevealingValue) + tvAuto.setHtmlSupport(!tvAuto.isHtmlEnabled) + } + }, + modifier = Modifier.fillMaxWidth(), + ) { + Text(text = "Change") + } + } + + DemoCard( + title = context.getString(R.string.programmatically_obfuscation), + color = Color(0xFFFFF3E0), + ) { + DemoRow(label = "Message", value = programmaticMessage) + } + + DemoCard(title = context.getString(R.string.patterns), color = Color(0xFFF3E5F5)) { + DemoRow(label = "Pattern demo", value = patternDemo) + } + + DemoCard(title = context.getString(R.string.long_new_line_comparison), color = Color(0xFFE8F5E9)) { + DemoRow(label = "Same result", value = sameHello.toString()) + HorizontalDivider(Modifier.padding(vertical = 8.dp)) + Text( + text = context.getString(R.string.hello_world_a), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + AndroidView( + modifier = Modifier.fillMaxWidth(), + factory = { ctx -> + LayoutInflater.from(ctx).inflate(R.layout.sc_text_hello_world_b, null, false) as SCTextView + }, + ) + } + + DemoCard(title = context.getString(R.string.string_resource_disabling_android_treatment), color = Color(0xFFFFEBEE)) { + AndroidView( + modifier = Modifier.fillMaxWidth(), + factory = { ctx -> + LayoutInflater.from(ctx).inflate(R.layout.sc_text_hello_world_c, null, false) as SCTextView + }, + ) + } + + DemoCard(title = context.getString(R.string.json_object_asset), color = Color(0xFFE0F7FA)) { + DemoRow(label = "Path (revealed)", value = jsonObjectPath) + HorizontalDivider(Modifier.padding(vertical = 6.dp)) + DemoRow(label = "JSON", value = jsonObjectPretty) + DemoRow(label = "Raw bytes as String", value = jsonObjectRaw) + } + + DemoCard(title = context.getString(R.string.json_array_asset), color = Color(0xFFF1F8E9)) { + DemoRow(label = "Path (revealed)", value = jsonArrayPath) + HorizontalDivider(Modifier.padding(vertical = 6.dp)) + DemoRow(label = "JSONArray", value = jsonArrayPretty) + DemoRow(label = "Raw bytes", value = jsonArrayRaw) + } + } +} + +@Composable +private fun DemoCard( + title: String, + color: Color, + content: @Composable () -> Unit, +) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors(containerColor = color), + ) { + Column( + modifier = + Modifier + .fillMaxWidth() + .padding(12.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.SemiBold, + ) + content() + } + } +} +@Composable +private fun DemoRow( + label: String, + value: String, +) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + Text( + text = "$label:", + modifier = Modifier.weight(1f), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Medium, + ) + Text( + text = value, + modifier = Modifier.weight(2f), + style = MaterialTheme.typography.bodySmall, + ) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/efraespada/stringobfuscator/StringCareApp.kt b/app/src/main/java/com/efraespada/stringobfuscator/StringCareApp.kt new file mode 100644 index 0000000..9c0b2e5 --- /dev/null +++ b/app/src/main/java/com/efraespada/stringobfuscator/StringCareApp.kt @@ -0,0 +1,11 @@ +package com.efraespada.stringobfuscator + +import android.app.Application +import dev.vyp.stringcare.library.SC + +class StringCareApp : Application() { + override fun onCreate() { + super.onCreate() + SC.init { applicationContext } + } +} diff --git a/app/src/main/java/com/efraespada/stringobfuscator/ui/theme/Theme.kt b/app/src/main/java/com/efraespada/stringobfuscator/ui/theme/Theme.kt new file mode 100644 index 0000000..18ba0fe --- /dev/null +++ b/app/src/main/java/com/efraespada/stringobfuscator/ui/theme/Theme.kt @@ -0,0 +1,13 @@ +package com.efraespada.stringobfuscator.ui.theme + +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable + +@Composable +fun StringObfuscatorSampleTheme(content: @Composable () -> Unit) { + MaterialTheme( + colorScheme = lightColorScheme(), + content = content, + ) +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100755 index 1f816d3..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - -

CBTxh*fk4(DRq(dew7j&B9;O&Vsn{z}F4zjlVu6LizgIss>1)RP^I~pii zFQGsB+I@klI=;v?)%r5+95&v=EdbA`=g`A@P3EYIJ_0f;S}x`QMm-nWN{&nM>7)Y2 zEwO}t=}(`Q`_%+1=U3@Uet}yJp|W1t2~@uit8SR^+5+JyLWki&rd7P*nnbN?4%Kha zbg(Ji9B$Z#_3efZUSJ}}qM|L(acu@9^r)m2DDtQtDCbdm1E6!L6;9S4ua!}9Oz2u% z^RXWJo2qBa|NA`e-$Xs`rmN89g54s0k z#iV6Sj`61a%kBIXK36e(YSV4cA38XVD7B2z@Sr4of>Za+S2x*0iwDKY+rOcyra(nu z>^}63?aZwCj}_?ZkDKXeJUmyI{1PqkN%qAx-h1{N3tQ3OCDDCGbUL>F&Li5Cs25Q< z7-Sv_SDsY!4)wqX@P0j8{QNnaUERaQgns=G{%<-%zXl!F`CAg%V?=iEB_cW^dyL4R z?sM(^7Fk!L`P(g5qW(t5z!H`Te}TLWKG7Y=tazrpU?@@cgnBj zi1xk5uYcneh9cd|a`|tV8QBTZ_3mP|-gYgPxAJJk)p_nhjjAHRnSK4qM&!)wS?#F6wABl`Vmq51Sup-#F4QRlpWqjP4mbql| zMtz%I)6!AcOBBqluQ!f@jzY^QjLojp{{?r**WOoBuHF>D6RrI_TrEVM!38tqdH<}b zzT*9}-eZC^T>Qid!i*MLg?fLi_n9F3V@=GUI1fV7zUi*I?q6_Sqy5dq!@>1E%)#LLRnPx?8NMn1pR331?t^LV?1c7H*L{0@ z?$<^yw!7Qa8b0>;xajUy_e*#V?25SPd->Z8z61%SP^wymeN>KZRHfL&g?XvptZEgu z%x@A~<2O~_XU}){>zCrVJ9Vl56o*gGkGIQB6%Wru6_=-*`QqPq^VR+3s<0k>!X|3C zoSNENTr^f&%798QYa`zvq_m|BsNA?%!>bW}YLpfSwot?5d<%Q~>$|(lpKd4r+U)kP zHt^pk{m%YBo|cafaQVG3aWn{0PpERy;FOiT2BF3i*Zh>xbm}!6KK|UoNc8dY^UF^` zxl`qVEz~ga8o{!NcqXd2OpV~KFf6DY-BtDNQwvZ^1zV_z3Y0WF&kDKndrh)TCZt@b zmUZH?kR)!_L?xG@4%JX`7Nkt5y4bf|@O8Dz>)q)c{Qs*J{7c`w7n_!Hr;4Ky_hQo& z_mg4XVW%8aT!<-$RO`bA7U1Up@nN&Pd)jS2bpQJLPg7cO-flHbb0|!*Jqb{$IOMsq zS|YBLwuCF?<8Se_BJhya5|kvxG>^z?6(YjJAmMa1@R367wZ`%=IfG}r0(E$@j+kK! z6yeKYC2WmWDdO?vDr&!8gAQ53oVHWSYSxGqZKsqKyi)YBTdiSfq*2Hc=1MujQ#CC) zCe0Oc?B8PXho6EB8(wfJt5>Jnm-*A>7r3~k&upYy=JT8^!ZHyIswmRpK^3KJn@zpDV{1+MO10S(xNcCDv%s{&QZjU7EY;Qxsz_I+ z8cEK4#Z1Owkzb-(?W$rG52~0rsD^cv4Ld94jtLCS#&W50Gj-IdP7fwxe_K@|s*gDMVG6_|FNYszD?B8>;d#ozC( z;p1DX;xug?uh1#}Oumrbd6sH8*@H0R^rh%HBT^<*{y8Jk!b%#EGNIg=HpMH8$um^L zNOkN)8b8W)6_C^;s-RRrQje;EYCM|Sts1(Ml^QPI!J8U7o}n5>ek)o-$+uL+X=+8` z98MJ{&r%JismZ9MvY)ustYovyW+YYK> z;*8WV!L2|I8EmJDkKF^VB4dqEOoAa2HKr7guXyEBWa;>dM3#=PNM&X~M3sXqgw%;? zvL%t2V+KT}>=<*UrB*$@VoIcPd_`KFI*7vYRe{yQxQfSD6eaQaic-eSSz(T06NUcE z$5)gO^6?d=?Z!u??x)&ds@tbX6pgR4hN#jIGn%T8e0)VR!iK6CX~$P28*8MBi5(hI zDWeFmZlp)K2>O^~=Nj@pXJ{A_mNAB@ihO^N3k3CE~Ofq6#X$ zu$@38;}bkBT4qkO8dp|+zeq!kL}h;(DV6<6P00Q=o&8BQD*KZPT=q+qTntf3 zCv}t3j0m@`C+DDF7^LEmTGJDANf}YbWm@Cw-|&`IMy#a7 zt6sw+gR1+4fXqn+Q@k*Eq3!9=5}%?7JS}Az*mXW}zF7q&4zai=h9q>A=%S@OF&~jN zB}3uDAeHg4D#i|1nkWnDg~61D8p#^~iMWvyM2RNM5Z&x)HBQ!Eu4f&7n}=F0r2O?N zvIIODfhm<-V9gLrq8rWuRXPq$2<8v?^hyp->YWc*pyd!JvTiAfDsZw&h&0qlRFz00 zrK&_y6IY3KzDgu*QB@+Tz*PyUk_#*<{-iEbC1g4dO_(r#hU%3Zp42-Zut3Wp0$Drd zbvdz{%@*J1n{Kz6uXbDWwO_wRC=|3fUVV_@kkvt;h-*WtgAkZXuPagwj9FK7aS!Su zzt~7wit3esFVbcJ6qhZxA4OJ<=rtXqteRih1qv8v^eCA!K9F9+ z`jRM})BX(X=if~w^1n&>;R!yt{Ne0a+Ya&;tia6E=$26#K4ZT#SRglGLRkK*exg zGnB06l|Y1F$&+)5g7-L=8X@=y+^3o#f0R&agy17^txdV_6NvCD86p@=R0f%|P{5>3 zcys<1qYxe?ixMJJj3uvhH7Erh<+CLh6Vig33EUqi#wUK`kY>VIAef{xim~IBV37ra zNzS7~sT}?&iLJNl#8j-Hqsbj4178W z=9Ok|D4G{1Fw(U)!pMtb3`s4SAf(b30jG^r*H3V%mP1tK&EVNrwT?rJt75*0eFw#f zl)%gvIfEZ3mQv2css`6?vEtZ^Fr`VQ$qlhMf#Fh^#EAUJi>omrKhhXsdDt=>`<{#&Qfcgk zL}zkBDor6IGTq-evmgQmj3Y@DA4sEtku1SPsrWz&1&lNDOQwtuq}Q<262ay-Acj51 zk27!VQ)N-!2J@`S*rXQ+jyl+J)NMObl~uBJl!n6jVI!T$!$g#Zp=X_qA~x+Joprnh z3i~FhSJ_Zk8X@>3`)MhkQX^%2YD$EjEbYIZ$qTNTcgZ%tZ7U-2F1wSJZnV6DOS)DG zMC4=+j$Gqb5hg7VOp+B194GB~Oo}WNFlm;?Il?tSYQJ(DJc=An`&9=-_?6CK)h;L1 zTEf;BnR^9HY6{d#^_ zVD>B1Rejp%6FHBw(Rd-Mh7m@xOUa!9Afr1$NFs&3z_}w1K|%R@nB4AT!Z%$#_Rvs; zlt#yQP^y)vQ~4tIA;pO`J=A)Q_Vvg1m%5gQZq{C@H4H{bO#q@)K`5^F%2A{$I9_8b zBmfC=A)|pY5`AL2OsHCcG*GmXS%y?h!G~ocM{xnps2~)n3XWHzX9!#g$|OVUE8%>m z7?FzeB%|^dRJRh@1y|;8kv9e?@Fs(Us7Xs7sW@*kF(bU8H2MbsY+|il0s2qG5I$12 zewn^riGq@7*xU!G%ol;&2e%4z-50-NU5co~H4nEXaI?AzTq+5?&rzj-^U4WiinSOy zudGC#J{DCHZ1>G5qntn{1BO2urH;0ztVEuCE=g?Xvr$eUlSSpxR;KnRPdR~1McaMA zs?25gu`R8~4!115rtfDd{iWW?)g~EfL(2odlxg3~RTCkND4Fypvb4y9k`}37CP`#B zm7v3;xLPFp$gLL4>S^)pLq1wOtEa@nkKiaFv8qGGFUBM~e)P=DlrROl4ma-isT9aQ zcB>3Q)}EFhu7>gJxl^cw?q8U59JNi4w-{mBuN$dR2!i1SLnd1-cGbN|^*M zQFh1^Yq#b|4ZdIoH+-LiC|sGM8qubr8qq3h5pf=BL9wpGMFo?LQ96f(st#3HqGT!+ z=sH}fwq7S#H+b4HX*vTKkO za&`@pRLZSE@=AK2;ttkUqD0BMR!xg%TN!00!2;{RQ;CP07$qcDb*Q-BCBl=fvqD{m zE332FHA7_xvi7w6a5dDeK~fo?`;eEG9lHiuu>HfYL1uOvDM!imLuFZ#Hk1)!*ABH@ zxDR|O`6Sm3m7J2cl)R>O#9eZ&k1A_VSBa}w`cm^!+2+?EDVG(d@rvC=at*RAkT#jh zR#o*Lp=CsUs`<*wTytxQ%FsAHB_6easD!3WC|Sss3zfWNMwLv76+|U1!UE;{Z%N=1WrsYm zc57YQ9F{4n5p60G>6AvaidsaRhgwjq>u^!QBpIi3Sg7hyg(XU+Qh~0+m3m78mnb`A zU~OmX?tCr(ZLw*yLaC?4vw4VfNy5|WDe-U$Dj~6|Lp4Prpvxq$O4DJ=Aju5Ut2$Jn zrzC8FuEnLE)1&r(?9Ef=IX#!pt?XHT_)6NiRFk5YoJ^$^m59TGc~p)kXbwtRq}&=L z<=1cn6eESB5lSmwSe0w3u_CubSiKg3<$5TUUji*P7Ux$QEAlI7yku^Pm9SS5rN}9< z5`~ngBKD0r*P;kp0H=rXBpKxtaa~p^Vnjh$NI;Dq#v6$ybBhF2De|jGR9f^Tb8HRG_GgC^S{X zs%^}(%*)}hcanyowv2JX90HH<&t1yos|@*+jaMB;?!~qUUdfhRn(XqJ(moQr1U{DM zACV7x#UuPn#vR7Rbf5_0WrhkEH4S%;bvYQ}S+Z;)*5zPCdF&6Yz%y|cX0$SNg_B#KJ^&K`!6YY|xK+RtGLv@n*WhD1{t@)uEzC7UelWIV{&sU<-00fi2Ls*wj8Wb*9J;IZF1mOYB*GxcZO% zUCNw4@Uw|4QdAxU{MesmLelR4QClUKE-tVpSD~BJx#;*hfhtAq{=4ErM5aq@d(g zY^#h{RT1H&7{e-{Uj<2cnHzDK3Qz4{ZeLfQ<7xjY@d*Et%?50O(y2*gRGFayMpY$TK)ec% z@Gn=w;)s_S!i?;AH8JGN?t?2*`~Yxz@ABc6(WdQa`Q#2RHI8;AoZdS+O1M@^qTQ;; zv@5s%6jU;7oHTI^B;%Ax6ML=G#F&D3(U2-dj3|juyaX)QBCwL33yUStQe#DneUg$Z zTXBvTw?#2zR~8ekd<-SXj@T=!lvrBI?!HsYG=q{YD|Rc3RP_q1K-HlpcEJR|McNd$ zjj^~i6FZJPZwgtS>9%FV&~j~yEnKvZtG^^f{jLW_67lo4R1H757J-! zEJ-jTx5P>oNnO$&WSO?Z=61!&^!9=Esty&^XmPlxiXm2}kmWf+LCdvo=ezlTeE8$H z|NhJ0j^KmH*Sq6c*X_P<)-T=7{I*;ETr8hRxl{&9YPzg~<#e8fL2=G)!) z_Y3^@-RskGbvyp@$^LS`{iAZyMCCj9)n*`?XRoHAM^XwZ8zV1 zdwy6x?qdD><>R;A_dwrSUqA1<^;DtPX!HEITRkj&`|tqU z7{cDL|06s(H~zT(vE1CE2Ly>)lA7a zD6(!L82a}Kg8qFnPt;Iso%$IWr+%JnleHXMrv;FGT3|wORSK1rsj(P@l|eYHjDtFM ztpm=U04pIhfhB|{G}qdMX&oY_1rcgma6)!|;(8aN@Vnjqog^`NFv;f4J;`x=bKBI0Uvi)>#g};gDEOrPFIe8v0d&4ABzYi)a4vzGkAr* zjz`9X!(*(3xanju8%uWWCIn4m5YNvo0XMYC*JXv01;{q zGas>!k8@Z@e7RioUa902C}%IL+vVe>5W`73glx$`3o08?_ks$$)O3L=Za5wCLoow5 zT|KULwT*Swh}_T92UzL6{35NPNL-82fA2<;*8|4zc^un6Wb**Mdn>}&zRaHnx8;6( zg0XJ5xrHviwg6?8?(iR*Ozn!3Fn9Pik7ggA% zXN;8T)QpjmM>9Z3pS+hy-tqTxlmg*qePP0Cbmi!YDW8NuLS4=wGu@N$$e3_k@?~fz zfuaJp!V3G`jFBqd^o)_xu#-R;`*C`yVb9DMDK6<5BcA!}BwB=;^C%xNJGXox=6w`NB(Femvqe!C=%gJ&wq(e;CB;86 zwxg{$o=bM-o%ByMCh=LD4x1_wy&MkQ*a&DOsSNJha7A18DO-1Dxxf!9n0A-fs z%+fPMNkGyTrmfcN>)i$HA;WRH?edrD&sX%HK{~T}>D!PC`z-!3sNp!&8j>^O7B_|s^(iV@Mj1m2M$96Io>AJ6oYAlfA}^dl-r3LBl5yE&ind(E zp=1kaT>Mz0R9EOYoIJH@xx{81c>TD4hlQRofK3pKOK82bNGao{?4&u-h zIu0kxaDais?G8q+B1fTCL*#&zw!_Xx#V(G(M*ZZaPECO}Et5D0^H`ITL&_Gzux8>w zgz^ge{l2`yelIV#pI9eRSNFUv1+Qt*WlEQ9bn)7Y7Hin4mq!}!?<=sTMHr1=NK1~D zTS8G6u+X5KVP;81UKklej*;I8P*d~t%sHWC)_^H|OK@5+os)TLRz-o5n>mx- zWML>jzZ0n<$#p7!_G(2&avUZ!sMk+ zO@TH|mz{%otVzisWlJtK$EK2FkXP7G%&|%Pi8(eUpO_b`t9#y-+;2Qvc14&i4XmZb zO3ks!$n~oLgO&md&6X8@AuTypZc3~!V4*=d!_3rJ9-y?L{se_P_b^n!;YphAUti%0 zy!&Z5A?E(Gzj)#+fBe}$G}PaSF*lW*toz~eV|U%{)=z=0+4*MqZMEGkHyzv_xWAb% z{(brRzkmGwx;tC`fY*ZHrbM^8T!mUEaR2w4c>w8U4L7bYS2y-t#PsaW_3r#}-M^9) zDxZV00dt7k%Ly+K?uTN&ul-4e;7{%rymK5L7WrFuyV^djw@U;xUKw&?hRe8aHr`b8 zei{?J!{_dtK-6dkzo0w`ewi+}xF1|WP0zKE<%qf|s+dWl(n6j#E|F=mGUcvVnTW`Y zNHSE1UF0Y^k_%yvf=#C<6Qg8GPa_L2u4x^DS}-p`#-bUHi_Y*1Wvo9?Lj^QC$}<`3 zbqHf@Z6m|QOH<{>OA|!A`b>iR5)_~>!GKIH0~JDJVv^uMCW-zbvhH7*ru)Mvh8u>{ zE4Wq&A-e9iuaAr6ZTGT*x7@b7+tvE=7ghn*$gVqh_iV9-$Js#6c01Ve$@1}*`)TpK z;eNVVeq(+*+reW$3+BfYc!h}h>3H?X{POW;1(#W0nO{%LLm-TA^QR}~r*re1#0^~4 zq&3gYf*AkvM|dnE@hcn<;eVYS!Bcnh-Q8+=&jsEbs#~T6X0!S2pU>O0k>{tUkJJKQexc&F)>1E6OdcOU>et}+>`T5iE^NLNo3nO6MWDLxXwu=>vOjdU* zE|<>L9 z=l4(F=U~`1L$_}HGyKcd-LHSSzJ+#RH5Hoq%M8YSaM%K=+p*HE|0EDBLfR)W*X~No zZZ=zdpKrR|X1>~OuU;-M9lAmsQdjeIcIUn3JyP~KKwbQy&fCuv~xUFtp#kg9)8&wzG_4r?3yGyui2=l9) zgk}Es>sy%OFb|6aEyLn+c=tx9fsvTSe(KO~5V33D-;E$RI{X{`+JBC5)E)ngezkW? zMuF)+tqdyFmu$I{64nw70!7UmmmI?aj=Y&n+flP((n8HDX$R+%ELtcLWC|`b72@h( z*<)1QkK3WNV8;yugp?CYUsNhec91G7{6%BAJ>F?;vS?vY%&_S0t;UMY4^FeXL0o zK%_KPhHKN{*~#SBEAPMHa+S!iXF#p;)x-QM#++vHp%6I)cI&ZOLFs_#>m~jwuT&Z{ zam%gK+HH)1*ox%Q;;V#HKaLsWF^#2c{KCK3$W4EjaWZucuS&|bV#J}OurUw;}dxigiER287 zy+d++64((b5IAlJ{`x4i=>Oz&f4^RR{5EXw_U(Z8-%jd!b^dL+yI(ynFF!AS4()~a z7bMyDVYYppHO4aDLE zO4jxPQ3C$L2SpM=a1hTe$DqEOCozmUYKIZonukN<&wKie(u@4s0A_g`3I3!Z<2t%%b*I1X^N8a9Yl zXVITyou7~~!?#tg!N%=sGnCY*8vlwcm}&TGx~uDt!=_`A;)J`=!+wGO7aYFc zmFjxv;GcIG0=7H}pBHAE^{o5y-2!XXDlq3|m~)p2eWX-`KbQFlYUO@@F7p%AJWOg_ zNff9{V!W3=4(y6DE3#9`3R+6o;)mz+?(XN`%#fszRbZ!<)oJ%-2?r4x@Cq$eGV4!7 z^e+t-hiWoW$py|XL)krTmW$OEz93vtc!8lxUT21ud6~8_mqvZd0_Kr3a~^;B6AqFs zc2_&obgsU99gf^{zj4}sCbXyDIPLp{_VgR4{gBX}e&e)n657*moc7Oz_VgR4{hH98 ze&e+7657*moc3)(d-{#jUM94s-#G2hKN9Nb$4NgL$Gn7HBCL>cs~q^4NiZDJo6&M& z)~bEhVB`0TUth(prRJJ=yHNNE(lR zr^n6kWIE$Mk6Bt$Dd;`vcX#ACc2`H|kKLLP<5&fyKX!r9osklh57JSh;Z@4xZkW-F zN-I<>#5L=kMYvW`iE9=shSgM&mxFi##;__Y#=tALQYCVASJ?xbjsa?CbhLReqx2iC z1B-l!){5m?U&fDFNE)wU&Dr~+g;?$L%TFy*uTl~@P=tAqu(2H0z(Jz~iCly3i(Kn$ z%2Hcq%Fyt{v=N&Y+r@=5sVHM$m+i$!RzZt1EdFZ}Zrm@>XB^r<(BS!MO8?wmgd(4j zjuOr7YKV)?X(*BKUWur&v{22Du#29%0O{_HR(J90W{22E7#29!#P^_dFR+utZ zk134Ou=gmYg!d=KO2ZzeLcE|nhP_ZR2Hr0fD-C<93UTL$baf=!V-h!pV2O`7QNT4LXUR)#yu4+lgLgbt6;aUm{nk> zmQ}ddSI#T6RLN}G@++n^nW*H#>>BD*Dl}Bd%ilHB(}{KsMeSp}vv}Out;H$>HX6dY zzsIBBhpgd&4Ak)GcQk8wAOkf#`n}N_9>_oqkA9c6h6gfG!=vA?t>J+T)bQwcertFj z12sJQJ>(i5$UqH`emA;?2QpB@quo?O)qVW${!n;cAZsJT5BGCAfxPWPVM_i&5@RiZ)m8?(G zWs@L2(GRhP46fhuv{9d|DwJd7@tRF+b^IaLkimKJ)N=LWs=bJVZt>}E@SvN#<}wGl z3q>8A#P4lGUj9f zwBuN6ywroG#y=q`d$|Wm**_sEyO|CMND%!M$>Lpb^ENS32!A59>}4N9%l?G4%re{7 zgBbr3$oRaCj2|nL!PK5Fm98P2LJ_gD8@F>31qxiIPCqVKxP@)fxiSYe#34U!e0UzxaAb^fxkGJ@Z!@X8~tK+3NJu8 z%cc4ge(_}{8;GJa{rwugi(GF4T2|GCC=>(mL9OjYK&K5ie>~^a+U3~hrc*h#(XPO* z^4r{(^028MH?`XoZ&`SOs5e*1F5J4PWEYyNWfyH=)bfiARx(8U8I{zKrAkiGjz%T3 z$X+EsyTwsS%bKxlV5;nGKTH>_T;r1v;jEy`RF-dO1&MH0(4{KQ3KHS0pvzU96(qu0 zL6@vJD@cU1f-YNeR*(p11zo!0tRNB23c7s7SwSM46?6%Uvw}o8E9f#7X9bCHR`8uH z&J32B?1)z7(igW-b!lNu%Z*ua8_#`D(U5UVTT^li*XBeN1|=mDjO5XUE^Ubf+GW^y z-LDURf3d5O3S+F0*|ctGE_jtv3amIT(xXi7X`zXLUe%$(cwDeQF)e7Clx2o?Wt4e>G?kcce@BVv^t5>HLYg)m(7iMzCfaE#80H1q zN^G}jrEhMqsuFeD{!$j}q^Lx6`)Eo)r>Df5w&Rq5lcE+ewbv)=fs^}z8VkgBpf(DF zGlU^!RLr=?-+L4}V$}-J^dnLO=I!H&DSCT-8m$7qyuDd5mbZT^*7EjvHChFJd3(iT zEN?$qtfimCo7~Wkb&Qs`cP(b<4_T?Ug&#pWv6h19GaSc|jofw{_loeLdh;+(hbI!1*nV7oliKz~ zQ?_TSlI5f&2(ps32%&TiAucU=VT#BcV?UP7S&xc~Hy(*fY1-?nk3Sl(VQ-MuG~m6DpMI#pCnC*f^ycrmUEYA7wL4 z!J%9to1vJq2{AmgJY9+4xNyJv5h0}fSnO60%MQK(bY%`~VsWahaPO+&ey_`$%A*vz0*4rKIBR=HQD{`sO1m%+66n5zxDrHp} z)fn*HDKr#0qmRc_Iz5L%1FfeR@@g&V09*9E(Mj}IX-eJG=aE~BSZ(o z{)#LV_90VTYYc=u3Ioz7Q)x$JqJ?*uG{egzv`myY`@Oj*%eM(w_0LvS5IYKC%LV#XrCW<^En6n#4bC@=U zkvFDe*_?GMmb`sRT7nS9GK~;QV+3!BgbaB~B57&2d0v{OEth+dB_zRGI)+rfo8QC9 z6xLKI;%xa#8PjMEFL3mK^~c0$`2+V>o|bEcqQ4?^v=T9ahkx|2(T^A!{dwvu!apM5 z*_rjh4Sey`jQcfb!8uLZ4;%W^aiNB!!2F0A5F!%+=Ep!E_CS72WBnUDWykh`{&H`vo@htv_m+ zjTgn`F+&Rm{!#(;i(d+X#KakT?cg^Qd+Ha*DDc)aBJh#a$F12BViy!=q?oe_Y%aPE zE$)x&BK@u$T;Q{x1;_{q?ad_ijF8M;e`mNK-Y1+GE*9JEN8VrPJ@furApt)ln)TNT z$?WC*1$&Xd@op>flljrljJrW*s@a3{r!9B?Vha*qUS&b*#wl5eu zpr9qPKPDSe5K1+q#>Uix5CCCMNr)sHQUG9Dnt{H#3Cy&Ey=o>n$<{E9omb6ZryJ7I zy=+5j$1to;UWHxQ&AwSuS8;A}umsz!u&snu{BCFXF0-j+B74KJ0bH6$h$g^@oZgf*; zq6L?!5Q@1lWu)J>jLN9cL>!j_Ltz;ens8iTY&1q#Z|MY7F5wFdH}E=#dzWlskM=b; z>o`|Xj`B+Hb(mMPk6q`Ee%fa!Qyu&iN5dGDgM&V!a z{0aYknm9#&MILy+4O1m5wquVhmgW$kpM$J@5g$5iCn{9eKcKnA^ZQ*5BGnm_>TSK^7GnKs>^I<0(DJUs9T` zKqF1_OGF)G>8VfojUUBF!Lad}p#xJ~I7TPrftG??@ z*#PjA4fnIN0W~2kfY})whv+X(4HrG(Jx;*2hbjVEjBwU|e?U@dKNe2eKR&YjW4)mV z2t7_|q>y^&=MUY}gWcB21S*nES-$``dWBT{1EG|?^FA!E$>Q{7Qr2dlMswZ#=4P|} zv4Sr4HpMidkis!Aa5!Z5J;^(iN?AOfIg?WENfn0`SEZ=|4pT1dpXtU4wXbC3)&Gw1 zX{o8L<$upwLB5byLXS!hh)+IOSwQ|2+i`KLve1CZ6#G&pVd>N!b~jxrn#a|hcelp8 zHI`b2-Wa0tx|P2_(8w6di&|eHfOy}gmY}uPlA)bLkF)H`gt68dGMwsIZE1vcZK$*Q z3o2ntSZD#osF+F65*9G=M)hVLug?IzAvibN@J_#PtU;uvEGl&{%$_kDAyV#8I1Du8 z?;zO56<54!V^m9BY?NrJi)~RYb+s{+7Y#}yZmG)&@-20_P20A%Nf>LbVGO4_R$Cfj zUBeesQ0r?ihQJB@{;$XvPh)B&v4+?3`PXYq-9+rKc&eNR+ePFY~TeD^q*MwFqp_`xaSqXS+~?Y4WnpI&>+-4JVVIXq0b@ z+I2+kFiy}P#DabsAO9Y-+q^)YvDdy5hR8OPkh3k<*bXKnGMuK|p<;}FJ?`%tdC|qr zL_b@G7@xX(xVvNmC`Fmoq z2xIFs`F@r6tFz!aIF&K-IxJap3$cGR%d3xm_A|fxtzm2j7ZwE*REJqV=jOhG3=yx_xGr|0bwZZI$4(YNcJyM+lbUps(8@2QDJF*oKy z0o?HEdu;P8lko__m;;A zr>}TlI68u02Y&y*;C_Jd>2~+DSwDR^{nRG({c{Vj6!N;9Z*1J5Bv)|G<7U2HMj`)v zynCn(dl9B=b0ql?Wi^oJp=|6>DB*aT$LNOvwZ0SSpY$5; z)!^~-;`8q?dRw>^O}l5Te5pBS-L?QV9+1aEd-||oaQ&-&X1g>%S@Zk#p}Gio{$Sd2 z4?2s|SmkR(Gs~#vl-i7ISgECS9Q7@bG>#1{M{(5K5)aB=#3s zC44}?VqUNSN-U4v_={Fhp9FHK_F-v%N|v^qkmaqr=~&h_Ey-B+=2U6ZyeMP4bc&Rw z(Zp(svAzmi3K-W~Wf)WA{4|@a27^>Q%*{lnk=-=w+UWOFGhE-x$LL<^Fs#E-VZdTd0`HmYt3?;QJ<8H9VE+(epd9;?SK9H_ba-P8P*{3_eW?%Moz ziJPItXISW2{QPMuZMm|;FK_Y9Gth?I;wPrpv#V|H)21zV=-^H|XyDv&!K=l?uyy3k{U;Fl}WO55ho_2XzWU$Uvfsu}jAc-zaIHt}W~aJHkHmV_Cb4cPXN4|tigJXGfJKn?ujirBufSJ;*CW*cxOOSzKp zK5WA1(X}?F*XCL_ba3zN#BDrOET(YL|NMLZsl|#hyZLGtxpj=bn%CZZf24jNX7`nh zm4wM;M3)ZALqS@uPK*6m4XY0~)WOx~bf49ypEH-oo~xBVTW}_eppx)DY=(u(jmUAK z1|NVbJD$iz-=0@)+|fPktxziolZ9GoGb~hYdWsA6V~YTBg+Z^k`6}Z$$6J}V)%JU9#7z83pu^D6!vRO5Z=Lm9tnl{oR2sv+Vm#Z2325+ksoT;zIBW}_aRPXYh2T1#Y{!24s~!d6 zu7YmhyJ=g2w$1d^Ri!Up^QHGy2i3qg@yolFjwx^&c%=!W*Q@Wh#BSnVQxDjmX|R2P zsfjzgWOVqNsDeIlx$f}DM;~TQ3hi2ytGI?#I;OyBP-0QG{`q#za2j|OWvkn`I()XOpd0wENg;2SXTRA>Z2s&Q@Uyp5 zxOc1uB`2;UmBpsOIiy#$1txY2fUsZ1S6OD}!x7``*gIdIZDic?+}mL9!~5xc_~E_R zVK?#KZ)Lrc)A6dLJ=sxQ+Df#;dsv^)Di;B+iI1qs*mn_XpbqR?ec{QSb6BN2V@-Bu z&^GSrxtB_%v}R-e4jWaEXvZ$Kgx}(|v2tLXX2pJ=4jUHT%X0Z|*sGIlT(t1|jbJPG zMsdzvG|9RCD?@g59zLjKKPm+saIOzFMF1Pg<3eC*;Wr@ABnRz-d*;EHLnUAlW>as? zcP$R>tqQY+xBjpox%q2yI(T_zud}`puZ5TWLy8B?UOiqjFI5=?H~iqVVrlc#d#S=} z;UyXi?LS?Mzz%&T1oeDp{%EU^iK0>XV&`55fx`K706_0@%wF5NFSp)^t6m9{;#RZxL*NUtgrRP2?XorN_|j8@sCC~$CDmDV{a+&JC2 z{)@d|d_ce!e$Hm5Z8`81yA1QMfBfUu|N5irw$C@+RX2RjAo>uE{nUhg*zT|YG+#`J zKWH$#a0f#;^I-&1$bDo03l*=k#(1MC{TrpRDg1t1{A*#wW(>998@{R)Lk+d41y*T& zBsifrq~c%Eo9x4n?u#1N-WOlcr#9dR;sYc|zljw01LS6{auFB@A(Mp-4aeLon8ezASws^k=D&jPZy395j+K5f45aAN(4$6#Yj; za7hwPiEjZvx9R_4in9L}fh!L9Bmoi`OFJcE_@Bc!$d|8vx&Cnj8&!cRi5zdwcf5}+ ziR;UOz2X)U(VxuJW=&~3;*+WU3@@_Q*E;)rv`Yji)=%s0ZnK;}+&tfPtKD)l->o;~ z!$r89AyB358{%ZLVE9n884K99!f;v@aGE@9VXfz88(zl^$DqecN`MVmPws|K+Rbmk zC-b=+^O2UQMHI>X6YRn3NVYZy7X3jXKK>rL%nL&+KncfyYK7g?fmg}+ijOmQlv;Jhh(;a z?jTXR+ts(#ZY#kdRB|XM=FtFnMeA<8d4Pu<1!0RdBp8p&Z%PbbBZUDOs?PvcNrDs= zW-8Y#QlykaB8oGIL#X6X;_}Ra#2OL|zdR)vzJ|kKTPkP?ew%qIoEOboh2oQ1b)wFy zS>m^YU})>}X_}W#+KzGz$2qbcNjuvRIAUlX$AJ}cmMS(mW+u^~5nsYB+1usDE7`VY zJ+`(hhw?fH0_5kRz0L)XxOoi@;{q`3$Cz2Oo)ET#W_<=4-m(5}UbnqI?)(lgCFkr_ z44$LZC?19nmSRr&kvPYx)Dq%UI4zABRoMyol=|h`h~fvLqcWo>!jbzaG2~t8Br3wI zGZZn>uS+nDN(~`KwNu21SsQ~f!{SL9$FR~MW=PL~%(&vn>wS{rie5Bt)eIJdR-Gua zTHd~fpp}+lP6h1{!>QB~;zW*PLO5OsSt@O-L$E44A)nF+HE8pDzYrg$F%R8Oi6Lvn zO?8M@XDDJ+&{WfmN(~`K)lGEBtc}5#VR;kHFswA_7{WAySWut!Cm_xDE>@45J#hrrW+g+^p{<5QIt&#hfLAwVl;&^<&v>SKl5bIHZyU31;haHBzLMLV|8k zRWg)(&OQ-l*HjXPZy*Sj910oa91f`@L5hMbL5h?xlDCqOsw_#tq{ZFldD-7J2$m!x zi&&7gcnnqHZhpVbn~Wr#O<2l7O9RnpH2#s(4BIqMv;PrkqKSJ18U4oSg@9Nu#G9R2 zC#TJh2$&Z_3`n7n3NM5$#e2{(B~B(|Cn7}HiDE=;q>_xHz0^S};1o+ytQe^sT$6w! zB!9o&o_1fBPyNl!+tn5t{-ya`#2l8fK0M7gyAQLYUp`F05^2{?h-_OTrkNCP+?hAv zpfkVx@nN;y%s-sKAzH_=){vuLYY2IE)^FlLOwV3cx68-N#Sq(Lcm@^oPKaSv2{CL9 z)z{gP89J;VphTDBLLaR4rIz~=8V&mP)OKM(+EqVy zOy!m|XS6hC$9z`>=JtO%zJwe6u2>)zIa#6InZj-_E3^CCu{VxO@*QLac3~hRj)RjG z+Lgw^*p`=Ox94}21BBM77$ETM(0FSQ(!?epM8hJ&bm9^K8i&qi=+b~D92 z2|A8MO9&>F?K7>B#fVy4N1tOAX=E_GHaBD4lg-#wwa+Fxn)bPmrmB6WHF7?jM6GQm zLbF&ShY_~7IfPI?XFq6gbLIo_taZP^&06=xopoq?*{xC-M#qD-ytK?V)c0s0$lJEk zGTZLvj*CjhP4gL9XyawpXJ#?Rh|8=yagp_SD#QjQo)OZbPy-buiKX+5jkGPBd^oVQ z%(kK=2jb$A9Jq)}(i0bPmzE@0j!Lq4BR`t?R$4-ymRkx(X_b~*aEc12m=jla`t5wK z>`E=gaVoIHlwGMM#|cJJW61TU>?du!*U%PA)FAK0y5n9!oy$9Y5Td+;kFa$1fb#ee z>IJb9$V(yrXj@?}B&2e-qBxMYA|LUVVN_k>9}x@h$Iy}ZM^1BC$fIKDj|V)9NhJ;m zdQ}*-D3Ov%9Fm#zrP-UGIcMwGW2O~%~dBq9)ra#p=b7-!ED zVlCmFZq^bO;w*gf;Uwk+B$}^a0 z%@n2?`Ne&6aJa*a2Z*))PzqQGY)w**7u2LMjQxj2`|E zN*qEbg>!7);P3q*6mgFeI+avRA@&iRKXgwIb`MV$z*r@Pash7j8iMi(Wm9(lA9?S# z+(wS93;SW#?RJ>54)$fYo72C-o^FNZ)faP9K~W`{(-f&iQkJxy{!gF^iNvW2$OOx? zV@FI+$SmZSUnUag(}i}|YfiR%NrzBpAA8tladWe4;V$Asdz-<0NNz}j&L(1o@POQO!ONCw>uKUBk-JzAHA_4`0F$|s&IsOtxkjiQA%M$rOGx#v;> zU&w%neQY4#pE95djDkGjG754{dO}9Ei{ZFdSMbm;!Y$WOl=AQ6K}_N~F;8f7tMfFN zHF@H29a}{3U3Zy~#G#QDAt@+M1Jq=SpcQ=@lpd)+gHqHL$MO?!iMo#qM100(6tDXj zj5H83g8nU+5^VUce`kh=i9Go#eVToj7}lp@L6u_?&xv`O`m`ob zgISa3Kpib{XtIvxgJN}B*QNED2Bk+DOhGB4r_#cD*BlaqiH7bYi5EvQs2{1MTj#k4 z>{KZX=LQ^Xn!wO!osHgAWK$r9>(C%}DGM(SJ#WF$oPWacr_GOccW4f966*V6r#Dum%^DCvex4RR zfnv1W?Y0k{o-1!MiP9brK`p9dYT^o8ruZ(ap>$(-rUrMau!vrhZVWG8dq)5<;TU4P zmW?1{!V$zEqGFEj5}C7nkQwQ_yQ#W#D(c{LDvA|5H>&EnV5Bvea1_zxEF~C4Gzmu$ zF>6O5G36*GX6`5^rX0fz;~-|XSH(Ez4!g#TFd}CXyKjU8{pPoG!MB8*YQx;AdMep} zO~^v_4aoLiQ5GsW0u6r_93oAmPGEn`KDZf4nZP{Fx!TT6gh-CzL5vWm1d$QB{XA7( z*K0NEGM5+IYMro%p_w8`LT)J82pX2Y5jadYf`=t<1P{{<;|0EtnCj*M?3#Ppw{UmE zvOT~>%XnZK8vSn#^k)v|>+N!}CfoS(B`DYQkzd{8P-|+cpAo84cOe%GXK02EzI@GT zVX8T{O)Nuaff#C29V|V`2}3h|sd)AU0dT(xbotCvkg!#8-oF6}{n=N#8V-NYPMS-& z%NYJUKw0#!~5yqEdfE_Nn5A>LOIit3K{ zATZUFJ(Yr!r@DsK`US%2EoP`S)_M&CH2eBSmCGeun4jI8j7X(*>Fxo{mXv5p%Ov#B zov+!7hJ_NEm^*p0Nmaui;$PkvmGQ5EpWyFbK>#g&Hn%L?509 zMGeC?)QAexhI(}x`#e(UrGyRs298iLL2X>nXteL*mhTkQcjP@CR4YvThRdtZ-3!Xj zPTj6YdITjkEQxOT)MmhJ(et*ylb|M(WCnK%$i!y2WxiC-Fgde z)+tuY>+|Mnd417*UAY~~qbaFj$qCGCcb2Fp3$-0|)B*;5tY%QIE@~IMj#cLpR+~L+ z(zyI`qoyYMIeRiIx(qj?OrWm5b*dqq(7Hi&RjeaJ=;K_KF{I$Q7E}zmq!FEtDt4Gb zt(y%MjTlmZ7Qmuw(>yM2qi+G9H`nUhoK{=QE0}IszPyl%Sb%{%_$`LIV_cD3zEGN) zWu@j~M1!#bT1t4f7wUSmb?tKbFkeCQ`c1X1s$EqH)Dq@D9u9Zw#r>X~@MQ@PXnvJw z9v3#6^^?7D>{G4ccSlpfki>$yYAKd$7}3Yp+2KdkLFM9b_^8UZ2A>$tAfMP0dl{1~ z1j>QiQF@O}y$bBhb+k47M!JiVu3xsYBUtt@rDbVlN3iT=O3Tv9j$qmAl$NEH)v)Z$ zmNPxIlSB&=pwg!~WeM zts6*Rwi8FxfW8X$r6S7P7shP&2GA>Tk7j!v;wfmdS&iuu=(?IwzwQd8>O-CrpYSyNT#zn6@XWty$92nxjBemA;eSobT54U3LnrbaF3RuI>b}Z$6{S8T%x=+ zc>Rhc)rF)L%W0L2_A8c5%}1zMGBsBSlT^W^^EvekCZJc~9*x2}#8c4q!#g$hqv7p6 zH^;2w{qWAze1!1M)LbD%QsM3G$Yy$U0KEeDXbjdNo`S9)-l-WP8s6tsY6CyKGc_L} zyfZad2$56(l8IzNcXt5&h}_plodW>$3f!aRrw;KHG-b`*YM>_p@Nm`Qp*3rnD|L6` zB+i`Qnm>#pFN+!>XqP_O8QtbB(H+#zqXrQ2r_u5!bKmwV*y ztAD@5^xA9KP6NVO)bO^IhxSKjUm4z)F{t1JRnr4+Qv%4wjnL>=HCJwPp~ea}X5a8# z$G{SG6|5`qXRLQ{+#Cdr6>N0Q2CI^KFjLq+t)!MQsNjQ=d_F{aQpe3_&{)C7?4nc0 zz!G&8tP7&}-#T@b}Mr}NY5;xYymd{7d_ zv3Z;0*2SQ)f{oc>RmZ>*brq}&q8KOMe_9lmF{t2!k|>T%t{*pwV=D#a8neTyj)5iW zD&$}g#kem0)1tVHK?NU_L~(5GwmhZ^HBM~fRcv3tag9_eD_EIbcUC+A9=c$%;NL zxgYA3+=_H+6xfP%YQ(92SkG*JfTsn`vy0Fr9P1UTaD^=z?o>FpzNo>YhCgQJK2vpB z@5F_cr@E@u>fNTFWObS98dkeKRp|T=Uzi)eDekEA7pjQS>*LhMIc^El_ts7y)eN;Y z@>Z)Y3#l5lJ40;^Ye_eKvM?^yNqQDj@5v&)iZgFK@RO;~nET08XdE)B6jZ2Ry_uD1 zG)`<|?C9`O+l#NU%6EvcHY&gda|wa>K$&G%+=QqJ+D7`x4KNJm&Phr?`)>(pr12E#8a($ac|*q zo895*@on?_mp^~~hjUw9p^>zni zgvEa~|N8dV_0~>c!`FA1PW^>b+hE{(cv5AxY~YEXUAuU=d{(zYsaGHycynxZ*k3-+ z=cpw=HD!_|Rm{m)l!dPCH&%c9@vhmx%)Id$xXb$`Oqr*p%MFW`FBNJud1leNU&54m zS~`DOw0tR}5&WgzYJ&hd>td!0nVYA(=v8)IToy@CP4JFep{5cEqDjAx)|H_Xr)+H3 z`}x&BzFu#yn|Wsp{ed9#KOa7JZh?1-q7H!>NEatdAfg8+cHo9P57GTZWYs%l&$|`O zhpD>+J9E6>Nb0k@_0#^lsWb3jG{vD^uOBgm`4>&GhqZ#o`Ss!S?h!n)>Y1JeKZi0e zkn`QsW7lfEVYTb{_M+ief&lT>*NFNr`UUICPwFrF1zzvFzQuS|f77q<79W1?{-$3~ z=6^z6tK$bWs=w*i8Ts1%O};L!?brTq^7VB8ym$oFJ-GcRNprq$H;3ITD8_W|Pm#3B zgdWqR?S2Z=+M>~??A{Wz?T`5xT}yu;c&dbymF6M|qDdd_Tz2`<|4qK0`9*;KfayM8 zZ+knIKW@5k@_#aEA-dbm?K)cC)&2{wb=5ah&f#ulAjlSVb;s+PEZq!ItGlZdc!qOj zt@d>}cbIE#uG_=iYQ4VftK#cJ4ICjWsOf+fG#dJXQXLp9RvwO&)oJs!-B;n|BMF)5 zTvYD>@?B*igk0c81jxI`UAtWESKAGrkq;!~b*5-N^Xc^RmIWMNHbVq+5&06TH)o`v z-r^gm^58<=_l@d#K$>c3mLZgxJVJ1z;~ehWS8aqY|AkU~jo(=szhi%*ob7_8aUsyC zR?sc8ACd;CH+vR$hY%?iK3%MP|DN0h-SuQ&_*K;!`N0TJPZl0}3s2mAu(NS!bL#xHO- z&we2+Zc;4p1Caw=H;4#Fp`(a!?k8>+ejsvy*pHI*U*rqn2xllX0nRIOgq`(K zj&KQW91%YdIY8`3E&4C_%N^>1x!R~MxGprV3qKG!(4ZPzh*$j=`9k~w_tT{?$tNNU zSn5tYgX`RH7d9oaxhWX>L`N3S@WM(r;tV?BpXY0SXNeea)nxP zmPnQ6EPW_Zs>#eYd|wmC3=iNp&m0eTcV1{6l&|ICZU+A##Z;8vNFq)V`^35#?ji#@wAq8Ud$Y{yP8wt zqp}50qmNN5sh$VaO2K+sVNY=wrqJhl)?CdUWwzpd`a&%@@m|tFp+cw+HWB;N?6Dqx zpG#y$zg*1dG*kC6J*qa&nDs9fb#=qKJm_(z-(aCWOE*K*>h5RmS<1PxRy)k`m1<7S z`ipUdti0L!e$K3%m4_o`<=Mb6H*_!FfKxU7G%t-1P z^^>NbQV&|@m>Z(f#`;VK&>`#Q=Cd^F)a4qwIsRM?bR8g9rdun>PhDsO@w8rAVCR#S zE@S|n?^Z8zZKNw4xiZ}IySO4oq0 zWQdJ=If!kel`gljV6GNygqzfGU8mGWy+Fmb(MlIG0M^|aSQcNMx=;hjN4;dmw$Vx# zG62@ys$8y(bhlxyOt-q1pSsWn;zhj}$o8U@E@S{+?A9A|ZG;ne?9$LLPO`0}@`WtG zPO}1(cqxbvPFh>+v}9SuBXeH%H^QT#b0%#2j6~v!mt*nnE91 zpeghZHboX`J*)TDq7(>~YV!EzX>x3`8}<969fo)C!Em!5^3>_+$`G|cIMm!9Q3z4{ z51~Y!I>(=-hB|&NJ;XrbrR?;BJ=F=vCK4<8u`P7u0BWhA@h;fdE#RAcz#m8oRq>d^ z4b({I_b@$OYLC&^i~kY4Jh_NIyArMrJH(K^6a<4VXv3igD(rtEQg&II_|N`GQ{u8R zO^H9!l;LVH6$!tFvXN!n5F(O@AazT#M5_CNrf_NnRao>7G(~q zxJ>^glnIKgSy$5QSdsL8R+;pEj;Rt2&2q5F6f3@tTgn6pLv!$gxY+zeQsHWjS2Ug9 zF@10X1HpqYM#e1D#0(u=D#6&`Be)#OPb=7r=s0i?EQfySMdAoHgk`}x)}UwY?V$~l zHC5n*?EK{y6O?+EwA9^DNZqp_*oWZ41&c6JegUA+e`HNYNR1!~IR&dSLS_M;ke^wm z5z;a+mQBTD8J1f`P|FmGJ`@&b`8$641P^<-^+u^MUo&j=x4tN)4Z?iQaI}H18HD+o z^^y%=w-%RZ7g?^)gh;fDa$KJcG1{T~O(x>-a0q5=>N}B#E*yPqPw(D`AKVnMG-PrM zAVCCva8tlh5jO?=KvEEv_KXM-h<+#XpprgrqdCA2ZVLJonNC5ULeoFcXP(Rt1cR`! zXGr2K?RO#%Ea|&`S_6G{&&e%&rX;Sxes?vvqf}4{Kado}27AUNuEBmM@&HI5bxGCsuMVbS>Pss73J&Qsh2}k?g)j%&~(;DChl7b-g zleg;F6{Vd>K`_8DJrzrcnV)Q`tobb%Ku1St-8MkNss>sqx5V5PliM&_Avb@>oaLTQ zs8Ey2SbMmoG)FvXo^CpWW)HbAsU*Od%WSWylB?45)$e&Zq%5{IFR@`kj@x#m=4rsiU+G3yV{lvX_8p6(1yX&#v~F{RmIE9?1DuaDZcOfQ%>PhCw62mQwSms z-Ju^DiylM7gS>6UszyOxq(591DvvY5A@e8>na8zfAjTV+Akaf})?%_c$DL5Q zCTC42SCg~ulPlz`4HXC#+C=h^9QQFrJ2MO7AcagIOPtlJT$`O0tz02z)vG|L+$LxB zELRf<6>1_`K#l|P^O1lQGJ$+_*7I_0cGmo|gow@Lco5%a0#a^s`P?`-%2|ahwV50j z;@eC>%58SmJhSM7&Ca@LmJrEja(swyGXW{L*;$3nq7ODZ`*U-JoYmX{p+cL8cge9L zzIO>oAro+vv%Z{bv$F=BB}8oQ*Qxa(B|-nifho7!Tk*~^0^Fs<;6|B`O>@6_YL+iA zCvXMu;rnj;tgaJ&y1QE~S8$bmvwvJH^%DhfeWNP?FU>Z~?Pj@vM63U8o5TES`Kk{S zT2Pf{zj@rPHix@rtsgsBzCyPX-bt{h!))>#4z_tKl*70zlrx9etXRVG7_(H;2$@vU zxc;P9F@jva$@B>(sr20~L?@7~`)vd7jjT5JdhIOsyP7|a{SF5fK12WT0^;Z8Wj33g z;OixT7Q4XydT|N63C#tPu5y@LuLlO(K0YtafmmNp@{_XX+FbnQOQk-+GEC}|p74)2 zj@*LfYEdgzDgB8rdKHKiLYQ~=G2uxL45s*JjGg#r6SeRu4B%t*T%S=j-iqu{KAyxzh9ybruG! z10LWZD(DlKI~0n=igjM7-7MR?yLqsQ1hV#hbGh9&e?GRGhwW{VJ4#@AoZ&ep@+^~_ z>=<4#%hUbqW{ItNR!$m`VqG8i-?z^Xi_L4HLPxG#>(l18-QBIX&t+zQq;ln2A8!`R zzwZ{Sb^i=NWc52%zCTjAVyz#xKYCNmeL`6|O2r0s#%7W8Yotu+Vg^_v;RTn0)iKpn ztXOAB)zNkMvN)B%@;HyxAf;r-@QPWQ>ZO2)5h>Q?)GP%G9l3I?v}P&MO6AJ6+M2~& zla&>cq(-7oi$vsg5yb{|#@K>iJKu)QJgF1b=7Q4`vr$ry^Fg=6p zw)L!4FgD1`cQ%j(&^s{YDm{ZOV@+bMKx?xBYa zmjS~6O6n9(5;bS%;u%aR?AyX@M4@thr;m)N>1E2bowW>gD1`d5qvnwjHAbdbo67sg zE^10c#)uW`Jl`L-`+Z^KZiR~V=_S9#UE6f!v1leBkmYOd@`$J1$QEmd)&^Dx@$s;{ zw!_GjYg0QlO0^l8Vr|{ha+z%?Q>={~a4qPs5h@jO@wtkq)WBRtGCle)yG6!n2MCXH zp>lm@-l0UDktx@P(+(x-Pzd$q_BL?dp`fgxOtH3p#^HH*t|AsIo+N6{4}h_`ikQ~S zxr&(R*j&Ys48yvyxr&&&yt#^~q?vapi5eq=*5$@%KUblmCN)oGwtPSTK3bdh2u{JX6 zP@s=U8IAGzg;+*#=PEc@b{~{_Y%A!C#@3t3<5}t!^HQ0po*4BpJ#iU&dLWBhWUH-n zJdq7j%mnw&x(|wEy4aB})?KtmmL9;!a!(ODkNfC^0*~}4Y%yEhS6fU7C5v^sTWgCI zyW-{Aoh`QI+8yz7?RJZdzF}EUg9{15Ih(~%9wwNu}PsM~#vRJ2EH5Ds%#mlujRa3ckN4#9S zt=YV5c7mEMR;)W+-I-Ei?!oM`{5=iM%;=HYK^(d+RSVG&}JoG ztlbhXuAQvtpw^hXaKk@0o4bAgqq&^$cPGttx0NooJ3L{ZS1$$EPG^ZF*5d~=I+j}r z9JD?b(OSpY4~R*RzLTJ4^Ja^8aE5HTUb7Lw+MKNxMa#9?y#)+w&1Qz-5oD|-0w;GzZ>+Vs zIc!DI+Fa3or-6#Dks0F{XGgkN_c?A~%%))L) zDAsO8%eCUBgmSGYTCCM>PAJxDMT@o4EegeYsj$%uFpT8u-0J6WX$tOXEs(@xZ=fj)9ILEe^cRN&GtY?v0f|6)2e1;m>EsZgcR$} zn9GUfaK>CtRBU`MCoP7yW%mej=W=2?t!%kooRGmN%BGB>v%moQvk4&F$i_fF<4T+*|3ZIuyX1?15IY6h^&^wQe`}hwt!An?6@0LO>?a+?E2N zMf%1?836JqrvWccfJ@Zl8(jwV_dk|e6T%=ThG`)hfN~=4AfLY%gXB zFbTgC%8$=1fRS)I2TrhYwppxI9e&vMH&HU8Du#s2I5j~GkXen#pd{RMaC~p!no#x3 zqv{AS4D>)GeBe<<2z^BeD{}#{6qiTO|v0iTcHpT&N^x`!#^CAU`hK?HoD z+tXzjl)J?aUYcE!S7y~9Y_r`xK&Kd9gWaim_44|xxjt>?^Xm`&)g8s18i~d!Ers~) zEd6CFOR2`Hma0rUt7b)yR+XVL{h}Jf9!F z>kYWKu1-E>59t3F#18oJHfsvLl z=zZ`CH5EHATnq`D-Xakj7em6v*u|_aO@u)GCShUh;j*yu5*Fx-8iCU1uY?a;CE??N zNceOQ+)Kz%1PPOw8ea-akVTL%(H4na(g8?#XpcyE5C91eH8&`sVdW((WB*umgt{J^!LIN{U`7)`RshPSshl3_3D4y9n4kj50^`I)uEsv9t4%}ogIVk z2&jZ_-(JbQ3DT!c2O;6oH!~704uphDS9By)D1wAZSBNA`D1v~AeN&@!9Mm2B;E#dq zd&I?>h2y_&2MKrNfzkr60|s-UOiRi%^V=R!E^T|xZrc0Rrdw$)pQu7<^Z;XF13`G} zNGOgR%I$dHZf?0g=w(qm!vj`5Ul{e5TYtV21%VYu4h%Ca3NH+-JhCYF#OY2D2u2w7 zGrV9hcs?-F5(ei>5)2Frth|K9=@K)7!NEvN7+frAsbG*G01_T&u=~bTP7D?(F5z&x zhd}{*Hb>UiF^$fyse-}!p=xC z0{jDRDdffmMG$!70`jEY!Hxmu+$fP3u$aByf8VV(e>aD1a|hc^*!xj^7y+lV<+@$4 zcUGY^GGIi>S^Mw^yH2?wg5nYmtCub`81%I$>MpM@jB2JNYGzPBS-_qr<`%I|7PXhN zN99~mf$p=r-FCw+fGCX&7`{gkUUw43kwdu~Pwi{sd|}kj@BtwpkVXdOMm&B|)2Q6p z4V0EKfHf3eBMthMtV}y!w^Vat3YzVU6rR98=ZnWj)x#GAi3?GS3wJAw!$!8=Y@pN< zATQ4xgbJQv7bHSNQko15yXW6W8^~AiMyfbKdsALf8q-ps0={s!&i;F&n<8di4TA)vFDR;12VVoy<@LKyyB4pJ0K7)i&Np2;?hT5*9_dyq`0@>*h=2}TAjfZ_&W|I;ik@- z+Bo2Ms`U|C4@khvwElVo#2t}8fe+t7#v+X%U;+#LsopTFi#>oRU}>zaN_7mh z0$<1-UXy6JDF6WvQlaug%?AeFFv$aiYA)IVwPEs)p)XJu{?`nC?J<-ZAu+uiJh2T{7@nnXHy}F5QjPLa3 zHG~|a6Z!>SaO*X82hvP*ROmsXUtZPOm(zyJDS{*L6QbqU+J9W1HH&|Eu8YlPCf|o;p`MxZXaLO-7MVAE~gd%d6Y+w zxfPSU-+;&?3x+q&mJQrP#@}yc#3dX~^^KX_Enh}j!eI73a<>@6n<0*b)#=>|wi~EY z!wyw~AZOC`kW|IZa7|}S4Jl~+4It;yZFgX^0C5S2vz^XhQO39!71&4uwkOj; zRN}%6SVE;n9*m1W_ETHalim#mI@` z%Lil!S_DYsvlAV0>qU)#i(*w|Cki*0oV@Oug@D{(iy&3>8b8!rUedblg4AuBZH4+R z4Jh(n1XdJyNxWmQg`BFecC{ zdyyZCAwOZ=c)owSQ3HJT5Rw2$ymVo1$<$*NX7+g?RrvH1|58Q`nYrmk)P9W=*8`|7sc!KGJMlH0?QXqbm$ zhHy<)C>hV)HSL26ZhTrw!aecXjEn_ovfp~M+Emns;Tsd~V zfd8APkB@w7zP)R{&0zoi)n~X+8tQ$$Xi*ie9>=N-5zO#QdnxJIPbaXP`(r-;*1)yd z;5`2IZUK&v)#skp2PrKdNWyD&2{n1=E*Y-~kc8LC<=9GFx76EF|3&ChjxLFHvk9%^ z=@M866*qaOC)3jT{0EfSUz+Q~$-BGl?s>7h#itdT!{T1`pIA-i5vWY(n||fGbIz|n z*EzXd>Ujrhrp|KMwRX&~$kBsVeQcWh%~P{{d1?O#S_no^&gb)+ub=<8Zep*9=+++| z5&2DTMVd}o!oJT(GjJX;@Tl6}?$mPmf3fP3(+xbxHh)7Oa4x+=5}$K~7cTMbO-A%M zIObVU29DYqf-hZ42)RJWh%>wdO8u4wOGt==d>D;K@baZ)RRs;XF>DN9z_jG*z#%(^ zt^OmH z`Y0k&tcEDzs3Xz7tZDO?!Oq8$@JhakDRN)p*-qP!WLj;X$&}Dj{S9_O+gTb`DZ|@GF3i+mpbeE-GEA%`j2f&TDF%u}4B>eob7USD~)x+pr3?g^MKfCD6eqO=X^=ND@xYd!iCb z4v>VA^RB3bkpm=P)V(t*VA26d7)Zyn`l(aNhzV{x)Db7@d0P;HF91Zg4A=q47kXU?7ijQ^+Hs0*4S3 z7zrDE(^SF*K_pD*!=@54 z6i33xK5;5xV^Jhr@U2q`6$FtmAupavxDXf#8|U3q2_FXt8I{*n`1q)-_e5c8un~1A zkqlW4U{qMnd#IwkB2TkQdfRZjpm|wUGBH451bG#{uqq)HK@)JZZ>3_sl@|>Qf=n1u zWS>k$Dk2mKm+tvg36Bl|Ig~rqqre3~1`J>Juc=Dh&_f`Lax;7qYy<%Z`>rYaqMU{W zK_-kmu_#DIgo0ek4KfdajC(wks+aZZ3_Kk7k*?j{fj(+=4 ztR&C+JNm~i#_0E(OG%e&t6-aYCsNcpn0E}MHBFiIbx3DstgH?tPrwQ)B7!2w^|D7% zMS)SOYBHmM-vH4s%u4*|A=TiNS)L(JgtZ=WFViTn zG4V{SAR-co5{{9VXC)C5eSlWL&-5;IA51(dBE2y2sHnrLFe;)z0#CtCjbyi65OPDX z0=6b!k3o49y8>_Nq>tgKaRhv@R@2v`$_D5GmVg(8jnqX3LcoH)`6cs>ha})cyeuDB zhF}6_Xrr8$4<%rQCg!)>a{hd!(^?8wtjgk=VQ8mwT08qUX9evT!_Z#ow3dQ*)xEir zJ{ZGPqjh3i6VF{vZG4J`z#DD_DDAkK2^;JM3z%Vakh|h*lq&*PgI#`Y@4tjQar6Z0 zr?uWZQClMm^L=i#3T!ncWK8Ms%ea!vuEap#15y^Hy=5Otz{>bVzm!|U!5xr*5gIoZ zEan=S?!{aQcdkl-mHH|W@^Y?(et?C%IQu@x1Grev2yu{4`Nj?U5-!q_!5|xkRrsQ= z%`Xv(gbTini+*8HK@bU($ji7AP7yc>JNnYDDBBz$Iis$FM|%I9>{CyXnfE^JP69R( zv`lo2Da4Wcs16&2BH`k_qAQ7Q52^wym1V*_Bd_7s@svD_2&F1{Ck>>Yk2I3}XIN|0 z0VzyLZ26cKf-C`9o29HijggeapN}XF#2B8)hwf{wRRS^&S&?OpaCAxbh?O}CgE6Ei zj71kv9Eu^F$bXTiTC0TP0B&u*H3Bn2w?=d(V1*%?M6K;vaj-_1id*yWMb|0;n}!v6 zHH57Zu1VA*a1{n?oT{)+4MD}B8i$nllRoq-8NN^)2_JkDRhJi8w)$9Ac;S=35^o_h zM61b7I_mS;IlH77BY(t$TBTBsYNSd&tH-K)ome!ZfW8X0@<<$Sz|dpm6Qz*{ZJ~$? z?+i|Z)?=!kwyn;TfYxJ*FAm$u$SV2NJv>~Gr!v07#5z#S(_$K)b)O72OzWc7<7yud zuE*438lH@o_98D5OTse-CuHZp04${!;7Rz!9u_t^%*l-yo`fIorDCCr#};s7k0aYw zwY;wR#C%0qmQhn%d7PJvC0TtWMuK=RWYq5@7=6KbLMLTYs^=x>AdkLeT+str>d?9g z9~s8#U_zY@1{%B?=C-?29-L01JV$5#4YnF>c zd%xYio^BQoEj-#1k(ljY_lNdjK;ZiDzWM89cIrZ&yuWSl7EkMgk=$->SBKShGhb;n zajDt6_J5vMKNj#1@j)%MAK-_M>GrnOf}TNfdiug$FeWdtx?DF*oN!eFI+Z$(onZa0 zh)ACrd~`zdsJm>~ylwsMFaNtT)&EUj4;=fw*8v$3%VT{g?V;W87x(S2XYd00Y}V(l z=lFzoE^=h!zKV;cXp*2>>8OH(t2+KoP=Zs`i}Fo#_`cgdH`JezsQYqqX3CK%K@Dsr zJ}frN79Ish-(UKE?tC9}r3tIJ1vY=8vKR^a>sim

o<6$Tq8CCEZsGxLcGgr4}JoH7}+2`n^~0 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�#awlWssGIEQYKyI4n+#b3X*T3rNQ)u8R#JZq83Wm3$ZSZcXLS8p2T3v{ z^fL9wkp7VNhD?B@7;+b+qaklWx)_r13iZd310iXK6hL|!awnv>A+JOF81gqH-H?H= zQhyAY0vTY)eUQP1dzokcE(Z zL*9oJ7}EZA>W?8uK_(hf3@I|?Zb-2qpF>Iv*>g4Z$B-;YnIYFg$_-f#nPJEekP1V( zuA%-IG7>V|kTOV>AuAyB4fz{VZOFhks6U2Gfh;y;31o>OO^_Nx($-Rc49SBmH)IZE zg(0gUb%y*5S!u{&Z&H5@nFv{9$U;cHA@4)h8Pcwv`eR5YWW6C3kVZq6Lz)cv0*^tX1ErvV-*=)#1kS&I!zD@n<6YayA2 zJOmkT$VZSYLw0sRv41Bp88|RA&`}ZoCaBC z$PCCDLsmfQ4cP=)XGr&tsXvCC1X*uLDWuVm2Ov#`ya(B6Na82dA4Ae1&4%PbS`3*1 z*=)$;kS&I6fQ0squ0K0&p#B?NzrWsvrUJON2DWHY3rAqO>5e+(G|Ni}2+B+Zcb zAUzG){Zs0XA;&}d81ipOx*^X(G7R|!GQg1TpHY7d$%kYbG8;17kkybZL;i$}G~}?) zsXvBX1j#Yv0Z6VP??Lhm>D)y9F(e04V90flLPM59CK~b;q{xueFQ`9;WJ5{}xeZck z$Vy0=A>TpD4e9(P^~aD*NQEI2AeDy9hRil(C8Wxb?;!IH+5Ic(k0D1x78!CeWU(O& zAWIB+9a3Y+7D%ljeKt~m3^@z3!jNkrb%rd3tTg03$SOlxeNFu_q(7wIkOIg$Ln1oKFklu#81?gi*()ZLK zLymxC7%~wuz>vj|!G?SY$uy+Hf2co(91Y1bWC~=YA@@SE4S64uW5_Pe)E`5Rf#ex- z86@A3ham-qd0I4$M9LRh_Wlf;eAtN9ShD?F1H{>ozqaiOrnhg07 zveA&Pzfyk;IT6xq$mNh0L+*lXHslS+7DHMfq2AH;r`Klck0GZ)k`1{Q(%z8ekQ75U zLOL4K={M?+A;Tf5hFk$jGh`X0ry*ZMdK;4ZJN3tqlOgGb%z|VX@-Ae6A$$En{V`-T zB-4<&kl}_jK(Y);*+Ts>Bny&l$W%yjZ$O2|Y* zet;Ai()%y!k0Cjb5<_M{N)34yQfA1Hka9!z|C{<_NIs;(khzdbL*9kVHe}aOt5B68 z$3W&Aas{N?kj0QihI|ZJY)DE%tI!fdj)l}1auuZ3kUGe6Ls}p!4C&LVRjAI836PbB z%!jNp)A6{L6Qw=g0wee=Uu2jh8zm%XvkPd7ei)3QVm%KNi$?Uq^BWCDbycB z`at>^avCJvkSie>hTIDoV8~j?U_*X`WE#?aSL%-;BOzIaOofazWHBV$kPjd^hP3NI z{V^mHl4r;zkbFZHK?)4{08(g3yWOZih8zhgGUO6Su^|sZN(}i5Qff%&j?^DRj)#;R z@-N5?L!N|G81f^e(vW_gs6U2GfK(Z>05ac@47=^fshNSL%-;r$N#UxgL^X$TN@u zhWr2-Y)J3DsXvC~L53Sr3CS|#705_KLfxo8h8zaTG2}u>t|50r@(lS9l5a?dH0qBb z$3qGYnGTs~$Wlm=AsZpZhNO0<{upu+q|}gWAZ3O;0Vy|RBV>jlo%f;s7?K64G-N7d zwjmEestoxEGT)G$dQg81ITEtSkjaq6hAe_CF=PXz#*p25Qhy8?4q0x<6_6E%JOrsT zW?8uLGleLg%lX_5~R?O4t=RVhD?AI8FDwI z*pStb5<^1$s6U1r04XzMETr6!S&$iqyb7r>WHY4FkUr_uA4AT9R2gzTWWFJFkZMDI zhAc9q-@()$L&iat7%~r1W5`-atsyCgP=5?L3bMkGB1oMf4?tEL@)2Z}Au0W-KZXp4 z)EhD#vd)ktkOo86L)IIza|ZRtkP(n3L&_i<4S52x$&fE0&4zS4l=@@H1juGX9)fH! zKD@G$C+A?1){L*9n8HzetB>W?8qARP_42-3xnd5}~?UW23=@*AY5A?X9C zKZcwG>0`)jNV*}fKr#&Z4Kl!xegmmLhU7ys4Y>_6+>lj}EJJ>Sj5H*D5cS8936LB^ z?ttVPQV+>9B=HF9k0C=K1%_M>DKz9k$V5XvhZGsoWia)}kP{&#hFk|JHRKscnIXSH z$_?pvB=yITd`N{MRgg+URzqeRk~oC=V@Q9W?7>kS&JHhJ^Y?*Pk_zBtw3IBpcFu zIQ7SnJV=TmH$yravKG?CkmM26A45h#(hQje>1oJXNN+=SJcjyX$Ph@nA(ulk3|R^p zV93{y!G@$B+bWc4$f=OwhRlFu8S)flq#^P#kR(IygCraB0i?Yl9Z#YD7%~*n(U8fI zE`}_Cq#Cjsl4i&ske-I@e=7CIkkODnhFk|pH{>Zuh9SQ|1{l&Shx%hkE+o^Cxsc(8 zd;rNZq}yofk0IHRY(uVs=oksmJ@tG^E6kS&&jgo`;kf@++j=ke<2JA4BpW6^7gnsWjvr$ZSKB&Y=Dnau{U3A(uj` z4S5N&$dE0N#fD^_N&PY8dPt2SuR&@JX>}I$$B+S#6^2ZN)ERO&WTheRLsl8Ga~}1_ zkTW3lhAf1vGvqT!gCSkVP=5@`gESg)E2PPgwUCX5B%DqCF=RNT*^sG_7DJXoHXE`5 zvc-^YW2rys(e)<}l4Qs%NU|X>LfRYB3`sF0HJ|!pNFJn%A#)(9hP(kuGh~Nx)E`3z zL3$ff4C!OYqmXn%K80i$(&-%Pk0Du*!G>G~$uwj+WVj*UL9z_ldpz~WkkOEALvDcN z81gJ6*O1>Kd4}{Wp#B(g4y3@4d5}Uw)j->1oIzlc+z2TnOo7$lZ{1Lq39J z7}Bwb`eVp(kimvbhh!S^1Z21&n;=<+95|W!W5|V&Y(wsc+3!;oc=3PV1F zR2tIhQtFQ(S&%A2E`ZE4aw?J`heFmEat5T{kSieT3|R9@&VXz(W8L>2rBg_5u2nG$NZ?d)A4!59r6lG8^ul5;$yZpyZtgk!c(rN&6zUBF2xe`WB8DJI#)H~`VbPjOr}gfiw>m*Cn{*zC~Jg;tiq^*AtL5or8Q!e281M z?GXP4G>u0}axlB)Pa?_5{}zoT9|)=TxN=k@uFD}s>f&3}qIy+&tXehVdI=JmB`y35 z*UsCnA>waVjkr2juvXti#vy+l+tJSlt43TSAfdzMTp4yoIT)3(bMSf9Nb(nu z`a|U^D0)$cTt(-bL?fnTXx5prE^IalP6>-t_b;_6E6si#;4SCg3Feu5mW8gY$-WP4oKsYYD)LekX5 zUkP;d;ab&*>jy|Z^EuqY$8fPk+;+%y^`P#CHR2itsZkgI{DI?KQ&l6bJ0U4uP!0Y8P$lZ|Lx>xZE-&@CZH+nA<6FN#T?a0@=K6xb-645&#Dnuch+m^*UPys zq2WQB!iQYN>8cUe^^odRaixi2>+j;KRgJhlf)uHXzrGQ5h^syC1YwQ14u{mK>sUOZ zjeK>UYQ%Ljq>MFCc!US5i^w7V7gZy!?;vS961rmv{NY1f2h0_XxW+*;wS{iieAS5S zEl9SW%RTB^%@d8d4uaI{bw!@iK^vuo=cqqxiI8TU%adtgWCbF3xk5GKdKpsGQ_giJ zuE<(cT&Z`7MqC#`(mX9(s2Xv-38`Vl9E^zY8mTp3g%3H`F4dwD*Kv?Ky)O4mxmGpe zdIl0=4IMsLH7AKYiRE0IRU@u`3z;d}8}29Ld8!fDTu9A9a;^^BuE<_jy=ugja5v{t zmwSF4sv2>PhZL!cO)$sky+bwPdIM6nv#h$^BWj;}L?f=rkQ6UO^~UWz98Zr$)maL>UP zR3pi4@1u_GD=v4BjZlrara|g-UUcS^kO<$ep8ry6nfeT+G{ll0*}a+p4jC+p=5euHl(ah(=s1Al163ce?XjSx<^aTx%iq+K29U z^NW{@MqJ5HQT=w7KJ3o9V(-^H)rf1~r&;0G%S>_ahLx#CTvGkI>pe)3RwVbjrEG<0#MSdzMpR!pS6|K%+Zz|FMqJAv z`Rba2E4FSVKPMV-wwoqBd+Y#+%N47_cLXQYQ)uQ z4b>)BYOnjc@>C~%5hyeZ-_=*KSJu&<=!#d`%Te^YdAH&Mtk19%DqE1 z;@SksKUiAmp34K?5{!h!FKMqCY$dL6y)YIEd!q7m2p zfM^Td)#hu}h%5bl#)ijrrE0|W3M7BH%w_k8+Ot74;wprcsmonAR;Wf?JAObl*4}W> z<;)L7Bd(&4IG4^8_x##>y=cVs3Z%w!zb^e)G~(L(6Dq(k>5Zw*xqPK+#MJ<)4DGb7 zvQ5Ah`_wydgJ{H60;$n+xmV`(su9;dja;d^f*s)4r$dQq#I-6QmrDf*W@T&@9rdYb z#8nSzJWpI{xFU!6kNr$E;#v;LzC&E@`IY{;XvB3lBz=o~*T*PMBxi_x^@(c4)v<{- zt1B2AvAuDUYQ%Llr08b3%eA;-_qD!Njkr$wg6FcQ4_{D?xcYv{brec(q;amuAy;^_ zYQ*(Dq|DQYr+g(Ean(So|B|G@YwBd!jcn5Sdp zez{#wt43UT-!Y<&lAh1!OtC$`|M#L1S2HAAU6GxqprO*j`~M>vapgAibQmhayPmk+_xs7rzXVPC zO>*|&IT(ATPpC%D-U4aNle&6{({&u}2y4Vu1xe9&M)z9%Yt@J=BY~WQq=oMFSh;G% zwH6XOLR{|W#i^}CBd)h0_4=my59`cC(TFP#Qqv?mRPLS9r&J@Zl%&K^<`?2RnLZ5e zQ}~dt#;QhKiy$O4xl}J0*)oT+1Mpr^;P+KQH?2AR2Mq2g%mE>|Q_r zt{QP=?U)!UDwewH{$7aNR3onSkaX=0_jO&@PBh{=fco96*X15jvs5Fl?;(wPzk>I; z*t>irJKtfAxUPfbduGb6?Dd8<;<_DD=~*NFtQv8hv`bz zxNhl83)SWB`GhW_5!VHfYERwhwuflMwH8vO*X14?qxKYyxL${(zbtQm?%l9s_Y#e` zo`Yl_B~^3~r9JpWIebW+KOuE^6=N;tweMBR! zlX}o*k897Kq7hdkq;8PRl*8!_>F>x_%X*1MTvzVPJk1oB`z@*eexecAX93YqW~(?? z?EC3ky+tFgr}yVMtk)Gh&0|}5-2tKz*T@5Tro1YncTZfAL;OFfMqIP|;L<&6cV+uU zHR3wuAja5R(i`rT@CT|9*O`5}QqLRNi>eV<&wiXs-zMB|f7hr+T?pdb>q0hL?f<^kj#N{U0-oUvF}zt9WEMiZ63hf(Z4ft zJTB>j$X5#nibh;R260_l58V~}Bh`rOk|U@jtcrqqmYC3;|Hf9f_f#XUjKR1(pB>Lt zjkq>LD$kKB8hknsd#-Uuibh;3A=Nw-!Yy>ar<^!MG~%j<)O%K68AC-Qu3I1}`UZV! z&?o!~A94@!Gesk=-bb+_%8(WY-w_o1emYe(;#wIHeNS=MjopqGjkxk4nVvng+f^g3 z*CF-#{^joZ1BQu4T;-559rOEfU9tD;HPwhKc{t-x*VyhA(J87C*X@vI9Z|!a=V~=V zG~z0R)T_(AN4-up;u>@eeW+_2_gtQ?8gV@bX?{s6n|p23?^w}@YaXO#kc@eTv14ts zf0k&(wG5J8EVJ@pXK(zi8gU(S95rEzxZHaVH>*Zm??KWolhHebbIC}Le09q4q7m0B zNRjr2du$wVf@s8b9i-YbQ$ALWxcZJ{#%UkkP77n#05_>dTpJ;co(gc%iJ}qLBak9b z1-SAg(TFQ+6gfJVgZHo4nX*(h;_8^q{PN7@GgTw5d5}zfyK&FuHYbZlToWOUp1J(2 zYQ&X%3f0)N2Dn@`;%bC6pCuz|lJkC@d8%l{wHDH-WBv(TvENsDNRDX4RS8MgPjimO z6+3zl7%ducJqM}Q`<3CmUp-F~jkwAob@lQzKMhyx(;@M6(TJ-QQnOO(hI^)bqZ)CY z!uK!K>$9@d*~0f!Bd(k?cw5)K+@qW=-2Y6`h-)*XOjks~et2vjzIK*q#5FsQ7V3K5 zy~fTTBN}n-dp2`fzx&a>N@-DzxK@m1JbPApC*+GpTito zciG*-UC$AXxGEs|x}JBtb{j7mam|KQ>$}59=l%LqHR8%I;9h9YyPvQfCx}K|FGA9F zRhi}Njp^r#MqG!T$NgF*qc_-(imhy~szzL=6moVwSEkc7TQ%aUht%Y^*|yR8>$gkY7upHfVkXin<=Uh*Gfp)x^NW? z|GkpP+l^GlE|bw5BFVvbR>#(s@v4#J#gHOhuezV7tuGOcxbh(B`rL8voII==acvHW zu4LS+rZZVpg*D=O0#f;j?1BbQ;n?fyz|$Q+hu5nIdveB5l1`HR5^?65`r|S)Q2SehT-!Tr}b;gVgAn-~Bx>Yg8ky4ke5_ zU3nhu?89o+h^zNh?uCvG_p|$I)rjjoNS(eZxM%K&e~Ct1k3jN0PyFszh(=sDLCQRL z`7hOotFV;u>}g?xYQ%N)H137oZhMYy5DM#R*fWI2C4H@iC0x4t`23K%QG*gs773CA?dmvb6@+BSBXYk_d%KmOEsqJ z9Pe@cuNIBCo`&RmR`{W7L?f>|*FKO& z?G5*Ll+9F)xW0j;>wI_Du?uF1MqEvhnwMn77_6UT=imi1MI)|nAVvDLa?jk+H;6`D zPeW?-lZY2MQAh0#>5a^Pi$+{^kTl(2byvS@D?}r%;Wv__pXRvVT>eyzxN2^q&FXTG z!}Di}MqH_t%pKjacdwtnQH{8k-AoHVmzlDUv*)vJ5skPSAla|Uv)lbS+M&0KMqCw; zvPZ?WyY_nUh4lRUsu5S}Y+U*d;$Hh*ry6m61F84CgPeDpXvFmiq}o#tkGx$p;<_DD zuPq$S)kMBmMy{*f9MOpDUyvHlxiYFmBd(2*I*)7MT+xWD9Fnh}0UbvRc`|J~q=g0Z zL?f;tcd+{M^x+GtQP+HO^x54(PP6rQIoCz15!daIO#SS55NgpzzWPKp;!3-dD?MCB zulq@Kg=)lA4@vhtg?lexHtj9R!TLG2$MRJp$+tilqtMRU@v@V$SXv8z-qoT(?6~ z^cm-VTK%aSah?4D73p&s^X}36hHAuh*n^A>?Tuj!C+_;TLq^n{su9;;0Xb0iZQP%7 zp7xMv#I+dG{8apvOt&SX5mzOoNWWh__*pTr>!0^jBd*;arjB)$`Q_d}JXtm3x(-sK z-wp2mc_4MF5m!qPjy#PuGe zT3hJ;Ii>qQE*f!N2FcbPY4^_U!B2=rTwg-Uj+D_mhZgS0ukaylef>$%h->k3DuAwk z+$*%*o)V3?N+9V^%ef-w3CyVA2$IC7`uE}vN^8gVs2s`rx0=H46J?*-9_s{qod zu42v=Tjv+4MqHmj^7Xph6=2$nq7m2bFEKWBR{n!aHRAdN(yT6b6&`ZV8%)=9e}U%jImaizS0OP}WMmBT5j5!X$SMtv^3KQ+r- zD;jZag5>K@{|H7@>?-B_H$@|^Mo7ATH>P{tdr!S+#FhURqt|nnA5)FELT^)hJ$Lzd z)rjjRNVexLf1nz1?fnj8!*iD}R*krpL-K!>v2ld+E_Yrh8gUf`#Pinwv1-IM{9T@C zTG`yQvPCuGTJRn&PYZugjkt!qPYw6YS- z<*N?^jeZ^%teRqH(;**-Mv}`RA$0|x3&*Bguz- zL>*I?yFHbv5myr=+tZ!_>(LC1-<}H9Nb-k}G- z`WBkzcjdlkad(pW6+Yy?@AwH-%abz~I325>k6wRoJfUiXJJerVdg6B@;5Y29l+zUNd@J1FnL^A?SzG}Kh z1bii$$!O~IT)~<@a)@RgnxZ?T&HvDcXhIK(rdK3{uO#OyG?}XD>(r!uO66Bg@NN}3 zB$E7`cI5iIhId!73JDig93YsF8G{OHTCb;kWC&9Vi5Y0|8 z=L-Kk{QjXCbY1YX;KJFz;JU|6UXv8%iQl_rRcVPsllykNHLNwx<2&va< zF$X=aQq_p-dq|zS+}Cy1M$w4tMM#Z4W!%@5`n71pRRqabm;1Wbt43T$e?xD0T(znZ zSK7DqhPvF>b-ilDwGpyGM`qvR2_?ZhST!Gp1miI=VGK)R3mnKC8#pEQ28;a6gULlp2$j8%RQzOywkp*{bN95Ti_qR9aVpU;Ff;W-s3MbisS zup*9^b10g8H1Tpqpvm>*OhGfzld}*_fhXrpG$o##KhYFvHe@F~%@#GwgCa7HT+LMVUnbH*Rx<;W1 z+8i%uESipl!qLo}7o#WN422 zzQ2Q}*pu@cnoP}c&(i~1SUGrd&O(#r$(e_y!jtm>n&4i<>z~d)Cx)s#Iiu0!dUDFp zEb`<$geKpU^FEpyPfp@5;d>gsF8BS)LbJk?b0eDIp2o|03(YD|PN!eP_cUHVAB$$4 zCub^}8QLEA_<00PqbKKcG?kj;?w>t2Cx$k8az>$<@5!k|v)PmL7MjJLoRr_FnH1T$ zbskNvC+7+@DW07B(bQ>oErn ze?cv7|Ga@F7#s20^DCN6PfqtgcrI&>d;E+;Gt!f@5KW6G=LLsVC=EG`tSRyMf@UQSa z4fjtP=Z|gA6g0CvInSWU*YRhr|j8_E1cFMg01%70#mAAu(5!|?rb_w$u#)_ZbZKvV0DDSKv`TZ_--mWKnifyaooJdgCwP^K9fwV5f|s3m?KvB&jhF)8@=!npHm8Jgf+@$T37 zcGMqF&K5Mmx#H#A);=jz=gH~2Q}|r}l+(8)yqB^@b26z!c1-sz3TuLMg>x#YQ9b!( zk5@TYdp1Sm)t{qxP6}lc@=xsv5}!rWMRR&UV(Ve+U6?zboD=_EA!Nob1j+*PtMP1NkqPtNCPN<29`>_P4In9!;tz=XNwLo}Aav^wylg z&g%+wqr&q{iC57JZt(ag{scYFRo6ReHnUDv?w)C5n?rD(D|IZM%0dvZQUljF(h zv=22wbNC|ako$fDntV^rRcLBGIdy0zdUF0ovqE#+&(o87@GS7;+=-^%lk+p0a!<~Q zJ=sUn9QS>nj;7L+vlLCUC+ABv^F29x^-2nD(HwXGWTRQ^$+;Fy$`0}C*cvpoo}AtG zrH*-Wve49da;Bl_tvNjzg|YSdSu|@rIe(%VsX1MoIivSW3N?6g9!683Iqv)Z8JZ?f zPUqgNZ9F--Xqr7abJ3J~a^6F;#gnt!{?su~&dF$!c~-`&W3$lA_T;QW)6tWYZ~%2o za~RlBht!{eXwp16lhG{pdE;7P4Es9Z#)k>n7ZM~xf)II4iYct1vIlY$Gs2P|B&!INW7eT(Ja>-cR#nF3En~C z(A9_f_IR3IWM4DqdD&O+>jA|2Z@(+>Y+TFJUL&W+3ac0<%jWX(j50X zq4(kJ|8U9i+VcUL&6?xBu95-accOSXodo*WO{ObMl(Qj+}BldBx@T_&L3#_r%~ee z^Nb^5rO_nF;;1j9On&ZB%QZzZ9oLAB0dUAT4#Qu*bXF8e!&2itaRcI!9 za&{d>UDX`-b)6q*JUK6*Dfi@@myO1gv(w4!?Ratqor1=bbKa@cXHU+`K;y~joJ_c#-cC+8wG{Bzmc>Y;mHJcFj$le5EF)K$%)VNr)Xzb2sB;>mddO`0dCLmvA- ztoh?TFUF(kqdD$+_!ydwo}9!ntg$u6eO(WrN%Q24I-7N`C+BfAeLOjPjis(?j{CaK zM>D{a^CX%aPfnYBo&}zq(P;8C$31=?M3e2w`5R4T9QJ=a zIh_lrnVy_i&=h-eE}cNl^yKt9Hz`!+$$1yeVo%Ot=du6e$(e(uR&&yrrLp_i-=eAV zI?RgDNuqP8Q=g3K{4>iYqzZRki_GIGav@T)|>B+eOO{yp7O*Dm? z;{oH0IW5bhk0-9RQK^%3+d*wnj`JS9#(bQ><`+fPi z8`%Hx;vvk6VGM-;E0kNh`t(3A5LnqZG8Ue0k9%t6g@uMclQ6YLSi%lQaR zGJl;mUVR>TV|b4!Ud|je9W}?@p0CgZdqnYa4!?=IsyXiQGY?I$M-(sTPc-S8gE;Dt z@pICw@E%dToV(Br_T+qvCfFm2mveX}bH|gj2u-j@6fbAjo0&VB?&eoEP3}iq}84qFLw3X?F)>)zhA9&@_5-zC%;& z$vJ&K>u^ubV`$1eIlJ7+I$U$y(R9=t_kC}5 z7yCb+oUv%qJUL&Xsqy4Ys%GwJj(a@!T*z4U7@R)qH$5_T=1&CdZSr-|IYgG{=2i6=?E3IX|FT zr#bHHs$0$ek0)o=8lF3v)7!cJ`4mlwC#U}#yuwt16iu!tXTP`E|MBEpgeG5e+~auznkG-q$?q`cHOIZ4{}fHLCuj0H z-t{!c-Ja*sZ1Lpm^e*puo}4q#B=ZP}cfamMv%-_J&wJs$%6K_7Z^#Gb0Pfp)2!h4nR+VdEi z6`I2rj(wY%UxxQ8L~igy`L&cPeQdzJBW62Iozq&e>KQ;#Nzcj|aKcYedO$&)kj zTWXXi=ZH{%T(FA*y@%pF7e`vEO z=OHw~US+(T{>`*ma~QNyhwPKwiDslHr|l0sn>5GWKP%AWdU7WJ$g|0l)9)wte>^$g zp~?2-OmE>G)|0dA&pewvIXP%bJvnpG6nb)sf8ib0lXLQ~)Mw3ckLR5?^A79DS&gRD zlhfw6@E&Zu@pBZKa!*bpnkAn0O#huauQ~4Vv%??k|9En4MN_3Y?sad%mhj$byz82T zre1U0>$;Z%ji)_({YlN#9QSoiL9^bIvl>m(?(yqS=fA>xp7E}0Jem|w&I@Q-JniZB zH}ywz+~aUEnh@{Q@!Inenx2~D?w@^G%?5j(@p5LON%!P@i6+?djF&Skp>=4m=D4rx zF*L!RXS|#qty+hMdvdNv6YP1$%lQ_~NX>Eg&zXs|*^~1cnp{uLK1r=ZS)QCL&=h!b zR-wu9rkmD=O#20Jvm>anV~uE`+i2-)?4=~v|W>Vo%PY?OKPH zdvb0?6YN#S>*pWPtn}pcY2SM5US+(T^U&0La-KpH>{Z6gX}44B(0a{r->-|%G?tUJ+Ga66MqiC8n$Nd~Uau+n7oYiQ0caHzu>A(-++~UbO15JkJxclcxG{N3! zyngPqE45B@-2GFICfGZTm-7>vEKg2eht^y7PUGdgj3&pEv(Ij=x9*+B%bAWQUvu33 z(|{(}JB^ofaL3l6LQl>~Xo9`dcsUoMDbgHwKfi+}*gK7vb3`ZVvnOW-nmkX=k-Jl$ zJvl4U6nb(_=-fIq+mrJonqp5*k1nl4)tcj;Uk{=w^W+@72Q@)+-1q%gG!>qlXZLI! zYSbL}{knXw)}bm-&cXa3+)bXGZ_xyM!tw6=y&a=iANSOgGX_n*=D4qGNN=8%o}6y`vljK_+=C|AqmFl7`yIeqRCC<@ zb2^$}k2+q?^=Qg8$9-M(Xo5ZJcsY9wlk*muDo@UieRv1)&Yocv&570E}D&+978LdMto}4?;^wu1AKkslT zSIyp6y#BcqO@`*U+p`)?drwaH!+3saj=McYXu5cEo=21A$=UC4p530DS!i-J$9-LY zqe=JVOd7!2SaaOh^*)-xo}8frSsQDPyFFECvOGCIpefQEcYDqs#I<{JK1EaN$?1Ir z&s{&~quJ!iS&gQ_lhbWDYiv)>M`)TnIdev^#@<8IF#X!1NcZBL@kYmU1;7ojQitVKOJ_oE3uQ;0Wyb~%+Ar8(~YxfD%} zC+8zH&7Pc_a<~_soTEllqdYmur*SVlId7s#-b?DLyPtcV&b{#DT!ALVlk+Z`Mo&(^ zT-LOj;~vkoXf}Cr2A)Ap&>Z*unu}($C+9ab*_z|-pX@VvHnBGtZ~WYkCfAemH<}br z&go}SS2f3dUA1UZJvqDPv4-^Ij7AfDRub>J=AtR_zN4%V?(A0Z!K1CCJ#t|>)r~>M|=D7RkQ8dA4 z9Px6xPN2?va@L|*;>nqQE;UMX-2L+on&qCH{m!FCX^#84u12%clk+i}5I;^N-uF@W zDdb*wa;`v=tU2!MT8C!6C+DE^S<`xQu0ylYld}O$nkQ$_1?>NLa&AM@$CJ~HCd3|E zyzz6wg{)~kIn`*|dvbn8Gu)GN{6wCWo}9bTWP5V{LKA#;6YsjlT*R7IbKK)_Et+&s z&d`ggb)K9j&;*~|#B0w%lX!l4a^|AR^5nEGVr{HB?(uvsnjBBgt7ytJ$K5}JCWk+B ziFaKOqnY8!+4qw0XD;z_?m|=P$=PX2_%oMyIai>m(j0gHyoaXT(?16nv&PmOcmFIv zQ|ZZRcPX{klXE4S`JS8~(A0Wz&bW+ccbuHQ#MMWat zk)Kr=KGH(1Vo$U6kETa!wvuo4gt)enQogq(dFk4m6D z;XiwUyPQw^_y@nXk@Ycc?)!0c4#H5*zqh~AT`#BlndBRO-d@ubLt0|)#b|b(!iV(O zStO_Nt`}+Zy^wlCQe%3f{Il)bTpiQq;3s6*bG^yuBoPwsv5ZiNkr_GrtDL2M4=eBn( zpv{?GqxTl@nmgDCY3|kvS5Tv7^BaF*e%m3f zxZn!WNI!oMNjW6CJwr<&OtHw>Z-F#3gd*gNKy!FB890p*J}{cx3JDDglW@NzUdfei zBjFaE2FX4$TJt!hdPsE6UjfOCCMQnk+K-ARRgjcpqRBS_IX0RcRR+n5CbvO~j*BMW zLK;U#lQXWubxJgO2U3(5CgJNEcr_#QoM_EVNYVIc@u|omEC1*Ji*xDFUM{-HmR-Q%w=DusrU}w%>XtF#x6%}%Kg6o=04nGQZyJH@jHF_?) z$`$DYXmbAHT!BVbgN^^iYB2M^SPlNpxx%Z#qH)EA(d)o)i~j#!4a!<8{r2!o2@mb% z^kFa@!ZS`*7x_l>4VpSGF)}N=-^fTXnyVn0Rnf_xK#JxH2`3*Ks+=bz=(EFaVm)t? zV^?wiTWhv4oU7WL{r`UT6}0((wnm!H+3UBRJv`@D2JM+2?u{_{9a6U-njAWdT6b48 zISrDsFq%w-)G+BIPlv|>%{|ei5t3=h&XrW`MbVmLAk~HxL+b90*4!JA`=Uubq>Nh_ zIs0Zvqq(PjZl;9~L~Blk6g?D8$^wmXJq4*=60P|dQub&xX?+W;l%>(+AV~AFXfi6$ zJQhuEgQPqWODxZ!fXF*a{M3Y&N^k<{VvLL4}nrwvBtcoUm zXQNpiP0og-9o}wholZ=6iGJaS;%z&mV&AG7dA`3G>aChG|E=}Bed5dWJzV{Q z{^>L<6uLL^AfyNWZ=UbkV+mzA?IF+i{DIPkgUxvYwLIS&^cj~<_wgW)I^_8tyrYGm z%bUo#B1#ed@^kt*`5<||yPwN@+|DN~T_q=Yo`&y!kRW3t*cHkDFP?)3r$#>q#};2Q z?)>8DZIS=KpM${_|G#_6jG~{jKZqXBu}>NMMjx~%_O1Va_LM2&?D>P`z2F9tWAE}~ zs*$?U3@I~h9yf=a52LT*?SOm~J-d&u;!4*?6Zh;+|2R75|LyD!_k1wBM=)Xb54u*5 z|C`yJ#!T2+4`b#nGk4qSy?T($?#?kPncc&6R@TyvU=BwPnccZME3^1R-F#Bvi}dqm z&9N(CnYnG|Qo}XppJ#X3e=)mf>g*1haCkLk$sEUXuKep{j77#*Ad>b>R}EtjBk>s{xYjaqW1AXvB3GqT+@E*0Rp?9p-btG&z_7kvk;kI7l^;d;%ox zIZ4(n$gMX@{O6$w*7L#tCnm@{@K%YQdgZ8{8n(pC~ zZ2Pa|d>v@+7R>k->5l( zCV0Bo;~vhHt~u`ewF*sW@A#{@@6cpuPO>?P-1iPt_4b~eU^Q6%Upz0KHqVQl@1}+3 z`2T-3m`!igZL81WxgYx((0{WF5&JpOG?MF0a_mYkb~U&FS7<}@s_B2W8eB_GT4VHc z=dXZpUnB2&CoE*t8FD*h#^7yrZ0ntLuj?weC5LHMWu;elgj98=!*+X>QUM0*jLXD~Eb5R7&_!n)mlL&PFVbMf z)%_PUE`drC-iI7Naom(CV~eL2O&ELr#ph1yJAQnSwLf#PtRz@n@O-yTkyC}nqsiy9 zy~w`JgOHk?qsd#4qPOJQbMeNmH~xxo^}2_%{~zYgKF+Ff{r`KE9;gh49+Y;8l42tY z$wnPTY7jy+spz@U1EIrE9U)9d6vCjRQZ!KtVGzp6F%gQ&jwnYMged&p_g-_|d#zdb z+E?G-AAP^;_0o*bysztXKdt+|*TbF(s#lY|NqI;0eU6s`ofg$L(1dz zAa%_#EgwD(`WNp6+EEvr=Y_rqrk5Rc!RrEHro(t6!FXk!BgxOr*Uc~!tygeu67IMs z$)k7`!FXd#yktd^EV0lM6a6tDYXiWRT# zV7#-^cy)7nwSS5}wO;Oe-2yXH@iMbtYBy%T1MTcLVBoO6BMU1hy>zwuUOHe{zG?oW zyk~!|*-uuGJ#{Yso4R}DF>T2Aj{aH;Q)b)HeSUofGiNv2Fvewtnb)$t*K~N5HstPI zdgU;U=(XYXvH1U?Hr!6#z4Ao2;a>B&c2L@If0#wP(T4HeXv6kZ+VI+78}>8fu%h+< zopBha?p}GK+psOn3Z)HCfhpUKHcakD8+OaI;q@c>_ZvON*M?>+cEhW*-T$37>}|_q z+R(KNh{cA(tg>zBo)0G&W;fcfU^m+EW7~!U2leeYY}m;D!A5)luabx4UXxklGFw7f zrQWkl^p5c_m@*|#`}xAiou$DjiP7TjzSH%PWhCltl;X9tF{Q1R(~5sHbE53oeuF7h zGPiwN7|DDYN`;d79+;TT9Nalbi@jzU$^0!!krLJH8DUJ6yw8?8!5iUT&3eMbYR1w# z2u~S>Qao1L@EBUdtRmha<(Xp{DbHGzlG~*X8-Pp8Wxm^I0egvt-k#t4=?N$)C2BBC zX(NBsbd-v83B`S($#YEQnVT-^TPVpke&uVEC&1JyWe?fj-x|lFl+Bk~w5+VP_eJW{ zA13*t)K5nR|sg7bYIzB}^ZfTAcXiy!W2$ z%TF?6<6f9H5qYF!@4$HHyUBA2g$ds4H(7VWtM!PFZUSx*_21|+W&c(pN&^nGKbsn zWSGg;%j|8!^%?*(M)A5E#+&(#m+7x?y`F=aVZGe-S_f04c>M+AttrOqD!gj*U+_3_ z3D?Wk%RM$mz)Z>FC2t#URo*syl00^O&xr>MQu%-8TDWL8_I?L4XL@%6&E9Y9xW1#t zjuP2i znkjnk%tqssgYOj(IA?#%BShBvRgJZ6k#4jKJl z!{oj!%zhbw?}VxL0(1Dg!np5M9s-m5q%iLC91jy)AxuN3*TpbpBZYCd>OWu#M`UN_ z!KAXhEw(53NT#CiQXX%tQtli+u;AO}N<(}OGhaDRcficZa-N!8^*8trvB%p%3> zRG3+c*M%_N=#BOo53@}1ngvs;c%`4&?Z&)ux_{p2-)~HR-e&GEjm+0oc;zN4&*jWX z>m#@)Z0Z#_-+w_#1orbaUSh3$p$_N0To=Sq3SJgvPmi%vaQEtE`hs)Kaa;nk-1bFy zT{0o#V3sL;F&)NhALBKiD4FvzrVC(JSTFawv%)Zn*CrUR<&D=(7=+9HD@?iKRc{%; zS48nT9LDQY<8?4z;Q`VGX076N6^!{*lqqS|y}Go}Z7|+wF^t)(hP~#PJc`#lFxwQb z^wYQ9ICqx$&z*te`VTBL9}CT#Kilw%-&Z-p!^QQg_Og#jD|sl%p0#~vO52d~H5zdd6Zl!VcPv2ltjS&3zWjZQ@mQQR8`ud6a<*_QOX0#jUiDtRb zvYKCQyzJ9Jv&+q#xx)Mtro`rHAt};dg?SAoU&&Kp^3;(#_N|D|oVk*xRvBgfQR?Mp z4mXT_R%@7Wne$=FvoL#lHolqicxQ^~Q}?Oz0L)fQe3lb&0Qmw8_xT(A9Jr@s`h)-bIUuP!j&tQGAw0A`osH4&zr z;x!A#n-7gwxK30w_8v?uA$MuqV|6D?Qt@i}hRmzc^*SG>y5e;cOn1fWDHw0Yj;_}_ zm|BWg?d5#NQ1Lnm#+&)0>oo|bj^Z@~W`N?g!g!@ukm!1S1(U0I?foYGu6VV8@m8y7 zud`tC6tAH$;}x&;Q}W%|rI@?K_Rhf7!$w}&ZnkJ@kX8+epMUBPf0xc$b1LJ>m5^`_RjLuTgkHkTOM=&Iec6IGe4f)YX*$h?^5@g zp+p;ClGZCX^m8K|_73ld$FqA4hVe#}@fyTU+QUP+UW3WEUgj;z@DOhFZ?4}JuhB5x zST$Z-$rHSyFvj=5OtD_3zrtSgVans#>$MWb8{x*Q5qZMn=PSclFS8pAAJtd!d@!Ef z%ghq--IygV_0JMx296p&ctpQ3_O5X()*P=~xkd|DJ6*UgFhyU|~?TJn9= z`F@9CBy&2?Ge()=&r^m{pyc@lrs5%g)PC=BA0VK#Kq;H=XF8#jT4hhqB)xF=TGg~q z2WoFtyWsJ6m=$&;wB?84=AR9-HJ*JWtcLM=$9S0;AUx`}!0fPI?oszA%yz}=p#Mmp z8ZY;gn$uun$I9N=?KQ+O&9c|)KI4@hEz$LQ8m5-w^%hJW#p^Q|Z;Tl)^Yk*@7k|R! zS}*sW|Iqi?lPF%DV7$?5yv*;z2zy-ulc#u%g=wL9O@;B!i|BeSglV97y$_R6yncf5 z&ba7$?N`n|O7Us~(^2sFTO02S{TkJ<$3)5mr zsurHvI<00uW=E8Jwz(6gt1_b2!g#G=yn5s1?S8%X^#0um(@ODb`abXBD_&>9cxj5qkzGBu->3n>Q<9c9?_PRGJo3{z=DkYGq`&!! z5|%4(V>bIh7&51$EeS}gV?UT;@vr+h9YpZ9pXM7rqI4uxgS5wobU48GnSF4Pf*I%dgp7@8>Hs#(4beH57{-@ zH!a;>XIe(Q#-PO4W%o+IFPb)!sCh&sZM}}b1c#5@p^X4VJm~N3@|WvpY}H zGLq*Sl=8rvmgWu8VCIKm%4}wCqQ-=X**;in8OdDtW2if%HQY~OI>Y21>tAJho2bCO zrb#F%Ho%z?wGgH3_UxIzfJxdrRHi;ZqZAzH_o}^?UVd8gwDBrk`LFar5+-JumLXt3r@TpM^8{CF@#+p!rsTO9W`L4s3Ct=b&-XCi++zBoGhGzk$+TY2 z&cS-+!sJL-+OJo^tc~yz=y90wHjlgR8(}s_$mT7I;BhO=BI|VmKcq-ij)!1&DPD_UyxGrqy-kL&*MDHP zDPCX0)M}pn+PwNk-;A9ToPVU~C&Ji0K>E3-{3P@B5*WKHh+v9L9$7CUyq<%xyOfAL zYYihikO;=?V9R!6r`ItqJG~JDuM2%Lam01kQ^ou&pQ=l@z-R0w#?e>&Pu1%|8LM%a zVlEJ(m_4~RnKGYAdAxd=G7m=ypYJ_kS{#@C{!bs6JY|fTzDVsxU-XCv`y%-1yb=9O zUnH{h#hz}%!PMO=k7+~3w&Q#s3)9B7q5J&06(+tLZ5TUHf0lH$ZNtK`qkMOVDO~!v z2d`qe4-lT7(#+$gJocTyJ>9BHZ3#`Qy5B}v4U@2~8eBmtD;oO-rj637d#9wP(O%79 zIw)S945N6Nvmm}3JvcKiXMw57rY&Y%`H#!+%B_5g=lZO)VJE@F-ltA{@7)6l{}zbF z{yb@e&rni<`~0;xu>-lmyNcW^&0KAi!0({gf>IbzdVWrx+2Ve9I!^wP-Q>+M1-A(k zzT()^qizA^@mkfiSnw)R%KjNl(vAf8xt#k2`*~#~oDSo)v+)XE{fXB#CXe-UkMPG~ z@)fTSV7wkQUj0ZPKIz+UWPC`qy{d8U6k0E{Ukx9lV8$q3=FCm*#+mzJT+ZAvzTfPU@%$C9 zqUn{-w!+0tgZpmvF=?eKO8I3qsh?b}pAk~7LMaO{^H2)KE1l<6l%fFhB}yuw{DD$j zS5}!MahY9#Idk{)S$WXc(i*0h-A#6kVQeqE&&sn6qxAAX7_Xg;m&{Y?rnCRt4Kq>k zS_(5o@%kLb>#u09w*Tdg7scy(m>G)Kn=sx;FkbHU^fQ<#ir4QjvlOp`zL7CzyxP-l z;XXSZrr3J9XSNYArHa=>Fy82m_Id$khT^prW|`t;W`Kg-m;v@_CNqE;GWY#db?yEY zuY6_gZoZ9`@qOwc0Sl7Hl!IP5!m`Tx+`-HY;gtzlZsy>?H6DX}BLJxeTsS)q)CuVK7)HeT+v zyV3WYDb~w9!n?z)QM_(~@p{mBHD(Nk&!#V6=36iKTSMI{I8zj_1u)*&FkZFxa;@Em z{=lqdz1(Z}-7wn}uRmeDQD?k*@}JcL-8_aZqaU>xr6PQoBnki z{rHOXVlDpB<Mf24_(@3wpy;Kg@mC zQJ7&c+m$>;Fu6*eX)rsKJo8{0D|udr*`?%J2h&Q)Qvnm>W3Xo3uU6#_r_{arFMM)A z$^kW$ukJ1j*@3QOm8JmF^u`UX4%?jHp~De&nqx_N}dm4 z3Y9$DU>YcSV!!gVLdlZ{(^$#V3TCpB$E;Q*yRlmR)J*o7{YMTM*#Fw9zk{nIUip7k z_x5!WE75R2lU|=5Mu|&QT3H!Venv?ImjnU6zB9`E<+h7zxt-D?0$uHrQ# zlz9P4`Eh=)w@?ZLHQj&`4=CG1%D%r-i-bQRY8S4bI(k_<2tL(0P_sTIxrn>brOfqjmp?HH|}*c-;x(&42(cOb6=~N6yTC!n_5uUh&!t zr^0yiq463)F>6av?bl0T#wlLoV74n>_rrKIZM4^OFf$ad z)iALZ+0W(gVZ1rqc;!2ABOv@HB24Ft1FDR78tJ+$s=oB#_wvF zHP*|07veUU28!2g7;jC9uGeyy_14Q>ug_sxC|)tidSEl zV#beYIq#``rtRdr@i0XSWA{DiewA;RK7d#1uk3racVH?4 zyQbew2?I)#y=uft1IigF37$`Tclq}8dO8GmuU@8|d(c|drFrew$6#W7T+6#IaNk*4 z2h&mM)BUSS`xvh+NR4$6tCl8ygoHv3`mF92U;l)@A#t+5@ZT*(vPml7(>xiE3I#M#cK8)1r-^1KQYQ}S$s z$<4y->3u?@Ix>fwnWTvM#5~Ch9$jFH?79=@hvD`88klj)y7MrMHy;|W=V+{RgGT({ z>o6tOYl72jE6ha2t6p6hy~fM^S@Je8EqGzr+y7J#mBk3>z!WQ9LtwnKAi51F!?dzq zaWaS7a5l_L#p^8??`$$&3n+SDQ_R5e9ZXm2HI1Kzz3SJi5u2lUnSDYmPwvj`AMh~$ zBfm*w1Y0BTH)-%I_4^GAz5n?C_qnYkB}}z5f7w}{)La}=Mxc}jm`NzbR*~NuUlI7d z@z21-kFLB1N!Kd;S*q}-kiwsV3V*_=g3N`Nm?!(Dch2YE%$1Tihw@7Ie!@t-I-tZl z_-oodq!gf3r2o#fMBNxt?ng;n;{T0y&zd}ilqFprQu}cna(J=N^6XPi8uF0%|R&+D4S5q8~K^M1BhY*F>PwvC>HCD5)1UjH7Ln1 zq%Yzy9%*Rv-JYEJ<#ST`ouoWvrWm2)Zp!SPgK$-zzY9DMX1$$lXavWx5@wMy+iZdH z&Sm3e=H$#+m6X*Fq&$jObC@#4D+%Mx62{AX&Lh(o;x!Uxv*PtA%qqpp{Pufq{xM$W zJx@9F#EHK`1+!K0GQa(Pt>X0_<=JNQ1h0I>^;c7`h&;kH&663)lsWVKCsX2B>?D{v z+yu+EdiH{;i13nJBMpi8UfQr@p=fxTT_fzaQ%{UzX?-hy~1TN zTm?)A#p{szvRWCh1pO5r_Z?s+TCY>d93C4N!E{!<#=v;1p7ApK1Ud6eX}#lanB~^X z-CuKI@)fV;Fy4AL&d8V%#E@5XB#9dGV{2aiQC)p;RyZ{%t@xA1S+>lc_YidTn*vMVro`jaO-&PKsZ zwqEZ3dK#uk@!AUG?Kh0qB&S!)MljaP{n>%5VWucvvthiQjPV-8z-WeF@JPYTv|cCi z!*ClmI;2KyhT_!=#@i7YFEb9qc}BymwO-*iHYK|kW|rdh9E{zs=D6={FNeu(Ub$zB zSa-I+yCcR&~oJ)JJI`n4&Htsekgk_wi)ShXa;61eB~Ry z&JAA+hp&9YzZ1h;=XyuHa>cm__f!l2b<=Q^qJ#Y9xx*+2`jy!z$$;{P$y3+QY(O!8 zG$~WB9Vq1^WrUkEB{SO?${dZF5*2W7k5ZsKt+*V<{KZP|e0OJ_3=`+YflPUxMk(VY z$|$Q)63V^q9VSY-Vm&<0c)l)sc}BsMDD`?BCbz!7grA`lE1BCgql8N4@i2)%<_A!6 zmAWs7Nd|gn6H1ZN8g-jfQ>Ax0!KB!jWcuPNlp+R0MwyIKuH5f^2_~tO=X;n^r9AP& z7NDbH${LZ#(fx4>HI(}^$zd;7~g3#C}e{0B^2$$atQ z^hF@^bw*Lz@Cld_PR2|dt~5#@&(|oaEcf2coN&Mqw4qXqAuuVWo!@{l+s;gRJ~xW; z%q7v1-cg>B-2xL2WG+D|3d}99qLe5l+y;}(^_Q?_E9#}pnMcCJ183#mPzsdZxdx^z zFdyD;yaHujjFMDZeiKZ&Qm=YP(i+OFbs0>lG7jg#!~?U|3X~Eh^FggCp^|wZOfr!9 zR+P9>_orbB0xkazO0m)!zrd6!z0>k2`XVs@^h7BO%ss#j2J41;shuLbq?sIzG2(wJ_dH}{7b;j!i@=(tz$Llaf z9i(3Fdl%baRw!Nvx06w4ye`8foaOj)wTf4Nm>r7O z1eoM_d~o2C0?vBPgNfPuHkiiv|0>6)Fh%^qJ}*xLerndX;8Ej5#-U}p^26}hIMy)s z{*T+MH%#2-aeLhgleCOG&wQAa;yVRt`?`ocr^6H~URT4| zy?VsG?t5VD{yBnK0%Nc2BA8EL?3GJIng1|(>Su4C_{o${u8e5s4KVf&UPRqv9XT(Qem@MR%=U%5%w1uUN_mFD*!#UX zNoT)Lfw6aza|)gF>H@=9FE{f(jJ?~O-m`_<`9~Ogk2)t222k=&WsJ!#H{yB0i7-jq zU+(d91x(DgVR(Hr<}+dJef|h9^K2ry8_yObOE?!R+*A zGZvV_svODF`5X`rkz^b8$*FRer$=ng8P{}+H zrs!+Qd?R(uyu&FiUu+r4ycnf)Q}(EoWh83vb85uOe#;(}u#7}qh*I)H_NXGuNYuYj z5({fFqC{D3nCJbOvlrQq`9XC6#SDbE_1;w*XglMEKFypZK z1vO&ZBfQMduCpW|b{ZaLgMobF6_e4;GAz_p~cB z|D*x_$?GMnOtjYpFl!XAdtvG*ULU}C>zDER825To4EyyLnDy3+S0#O8RiH)}vOiS3 zI>C5roblR1X!vur{b1^xBKu79TWvGvg?LSZX`y({h4EI;=z6V!>0rIw^{RkLC|-FN z$qE}?ul6v5te3l9m%(&Yyl#f^)^6kVK8?e8s&c#nGtGLr$KjtaT@|lR7n3`^D~R^` zJIqYQ>t&c;iq{`7-hLyxzv8`l%iVgp`>Qidf#Nj?#@mxb_t%{;Ypj>MzZSp@Q@lQa z@pe1W_4)-S)=|d1yIzgB0ve}yb%ODBMA7x?2a~W~?s`pvnW%V~>$sxbxQ;vV2)R=_ zV(jpNqXze{^1Fs!!zZ82le3&jP;7cgone)Ff$dezA#=78m~U&p`KNa2{02C zuQ@Pt6t8z-ys=@t2C!)jw_&ZznYFB!yA3pK{4^hUSg0aviwQM}q4M)5K;Ny%=^BoEn{#B}DN1FQCGAH3qrBVZMBTtPpH|K>o_HIYnalPB(r%# zATwg57CkK^nMa_+YYv9xGt5Z8@-s@=bu3IfQm%N-2}Qkv5+CEwvj(N;O(}EmiK_JAuP}*6{EYl0)8CEy zvFBIvoC=elCC{Fm`OO$Dpgh~`S(zC-=4aAh|A1K=aaIa5A7;Cf=Y5#XN}e4syKJ7u zlp;KS4!x2)W=fvUFb#OQ%be5v1qx@LAuzkLW_D#_LE5Tob?G@divg zTb^J$3;8QdtybBu^^WQ<=Z^6**I#ud+th)2d^cVN46AS(?lXWl_pFz@4LiZKQM^XMcr%IAE8K>6!SsBZAV`W^znD;&@IeN^1f#doQEDZiq z!V~Z+{G#%2>ts$pJHE^}`7ovX`hVliaFn9;{`;#FQF1G&H+veD!hKq?$rb)73}5y>1FAGf;}2_cPChl>eBhWBkk( zl;S|?2`Q zC~6l<#asSXJ!CMm#IEdlPJszVU5b+W#b4&JC`C$nriP;Co2WpmzKv3<T7Stx1)O8H`cU+hFFwmV^_LErVD z?86!jts2zvUc(rNN_h^2DO2*C3=?}Wd;44jlWX(1+xZ%pe5E{7OnF`x zFJANW9nwBe!IaMw#@$~lUs2dV z*Q)>QKZ5(=iq|nP-ufQx)dQxE;xz(hjN)}SjJI=$_L>Kir+BS|DN?+)z<4{5Xs?r%Sh?6!l)yD)7OuWw;yDPDC8 zSwYfkQ?yrGn0AU+513NLYb1=fi;MOuhUutyJqxo;@md4p?GK~9et_w$cQB z6t8n(yd8D4*HD-Niq{=5I~1?EFy7AGc)8E7w_%1UUSGjf=d#qy+)>Y<_Z}^K{%Eh} zFk=+2BuuX2bp?!fH4*Jq1T$XodIF}g;`J7ccbyXLwHaoj;#F-7?-DCs&0)MNplGio z%oN3|FHAed>n0fQ+RAu!pl8GD@*^1lws1>XvXVwLc{ZX&RFJE z#p^Jb?uu6z81ITK+G_~RD#fc9rnlntJdAg(7wz>i%vQzgH<$s6*CE%kE~l>tqrE!9 zROeo$Y2B*#Jf**`fGJeGieS8JMw7=qHXetGD_(EHj90w2!g$x7(e_YdB1A#cL|eG{tK%jCTzi?X?bOjNeTx7;kJud$k?UQ+vg0AWXU9^)QS# z>Wo(psY>AMI+zm0>)^lhKAYlo0gN}EqrHk@W+`6(f!V5f)wxN|6yx=RJc0|`4a4UJdIn(|3YOltt@H6jzZ`9v!dJ?AMx5~edmafwWAtm>g zs!Z3Aa&t&|Ii&m&QjWg0YUW`f3! zbwNm(98#8slr14;-%0FS0<~xtQig|=$3n`QkW%j-RWqL%QmzXr3q#6RA*Io6q0A_` zfm#d>DfggM9O!>SSB8?T=U09}DXH&QnoUMI+^<}KQg*0cnS_$t+OIs1QhtJ8`4*-4 zXus0pc9@g>%B4mL{9WKtC@EgFF?V~b<@Dy?%xofefFBJ-EkP;V>3?4ENl5v_D1Z2w zW_MIox}cQ*ZDN@S3J`}YbB@rld{X45FCmSVD<|{(VttiETGS3Ss zYfwr8W!{F847l$%1ts8hJW5F*b03s~K%Oxuu|S^bMhWD3$wUS6Y(^;!MAf*9zW9qi zxBbp9bE!O}-`l_hqk5ne1@aUcCg6TAN(Ik}vt@oU6t%%*4&;g5&6wvm7iFF}w?Zka zo;`D~P}F#oRG>9xp(LC8&xw(;I@KRF2&F8*+=h}XYg0PU zT9icK%*`t%>L`Dn^HB0z`jukC9OhTvL@96OSAIuHw)HDVPo<`Td1Dw#SzvB?3Z>{* z|C+MFD7pSThy0V)2+VaoQ1To2nLAKQ^8CsQl)@AJN}YQt;jw-tAEji6-~D=&*a3d# zX_ShC{K_U1)zGixO{1o4jWT27Zzu)3{K`n91m@oPDES@ydA>5tX?~^YeK5!Sl}k`6 z0<-9YD5Zg!b^}U$Q{|o{-S3y)PrnD+a0*IAV8(tAB{$H9b*9r_fz{zGl#&&4o;I&M zL%lC@o{llhW5NXQ9tiUoOu;+CxSy!L43m69m4QW`a9+Et`KRXoX5;{XXtnxX6b2i z=QgwF^@Ft@=8e|Y*{`5`z<5`h#w+}$p~-g(Oqum^UqLU1X`y(14dY!88ZViZ{3VXX z4t#_=LW)->n1tdr7{pYmQiq}mr z-Zh%>I>6x+i!FvJSG>N3>7{rbUc%ax-ho7W^?_NVcuj*TP`p;bc-NKDUVA;pTjh$^ zNif3{uR<8_iZ$A64$OMRYZJ^k#jDZdoIB|~ZM4_`*K!!|Dm&V1C(LHW z>-Z;_dlj#tFy8fhwAUP%t%}!IFf$de7PBZ%dcPX&)emNy;`J!Z9K~w`jCao=+N?0k}@{j`=}C_xZ?FHjCX%5+G{IJW5w%$r+9l! z@#+ZU-Fb`lx(cR+;x!efgW|Oe#=EB%?ez^z8^!C8dAw1kc%1{|-7Spv8Vu7;@tO>i zuXxRd@$N%LdzHg7#hHn2%Tb-e9y>517u1*Yz-i6t7t@-o4XkuMc3lD_+%} z=1l{|>v$ON{;KhEuV0tJ^s-*=xpyK=k>d5VVbXVQqwDn{OmFMuK9~Q5nWA{Le1>}2 z{&LqVAEv;1x$AWU%nZeA7L0e_IJ#c%!VIup?t1+SGfVMmwt#sxeMdUFzk0$9vtI6c z-2_vrcs&i{-L;Oc*QYRr*2`V5eM)(wRq;9r#=9SGyo$J94)3FGf*GfHEr(g5cB8pUffjCVKQcwHWI)$5dJd5g( zm=eXS_G0#RZL;redct^5J&e~nXB*xDGsk+l+wd)zT*Ygz=h^qBpQjkFc22KTVHPP~ z*TXbcycWZFPimsQzK1DOyjm~ejaJ2LAdL46$ar1MhAlh}=fbQ~yuO2Jr+6K|lrpEE zE*UTPn7U!|CaHMkyuh50er{#F8igwr<8Lm&Y_?wRb9oF*cg5=&v+xSf^Fv{_ zTQ7GTJ_A#zc>Mt5Js*trI$;^}kK%O$%y`A?RT%Hdqw#XDDYakbI?j5z+prhRWX0=I z81I>;@v2S(hTHIKnChozzb0z;3U3lBUN^&dPfLy0+0L=?3``xxYop1dc-4EAJ$Cvz ztnvEBIX1e&UBHDKO=V*PAfj^KRqyGG1Z3 z?J%9Km%G1Oyv}`E#j6*L_axnTHFS>o=`g(%uTNpNDqchR;uXH<&=+Qa z;#C5(UGdrk<30V4_KGj(I!^H_fQj)7E6i*e^=X|F81KD;Xs;B^M8&Jwo1E{8*Of5d z8wkg;aP?&PXYXM9z#p@>+?`;<2HPPwS?%(VW z6|ZYy3KXxUhB?d|5mA4k<0F_th1m{c-vrAEk1x~thpwW1UB`nkMNKQ)Ck?!0qDIj( z{GZoinNX>B3MOCqeP226a(2i4nd2x$*JRJ!873Zx8f5Z}$R0HfCK-rYic+dXZHCDo zmp$|G|6%P8w9kboB})6uhAC7s{{j;Wl)1rsj14985SWzG@=HygK$+K}O$arfp-Gy84e1DtbWRgYI-Qm4yx+@<_D zrz#TL4l_(yn_7P;bvIs%*e0GE%5w!w$1}uhywmGmm~o2N3K*|djn@-QS&dQ> zh-$E&G5@PeJX4R5Y9`z^Y211t4^{Y*cUctBZzlKRrm{DG4E$*)Y^NYu}MrS)ep z+x^OGC`CW`l?zjxDL?v^uTkQGsKh21cCO|fd#}u|pp@43D;++kgxmaiu16^iC~u?0 zJJj{%`4%M^P>%Y7s9OHa&!JRQ_bZ9bM1AG=y1^)${mOEb#MgeM_LubOH-2RhO7UT} zedU>jl2G;l-@}wQ@JAi_6(!uj8A)$??QD4+VHmW7y~ zQ3?<8M;*P5-U&oqg%V^QMM*UEM{PvOPx-wXe_NHg45d8ok9yEBoBUC0LrneeaBuF9 zx(FrrbAQyd5c2^_aT9;k0pF7+(1!UaLFOKmMBq&MH%k8g{yfzxsKq+J`^hLlW)wc`3Z)`Y zuX!lNfwSpLl+wWHJ@h9^7#L$0qZBvum*;+z(!l8b5GDUmKa;l|_rUnM0HriguRBo+ z_wz@+fl~aJe`dSb`$1k@{2I>%KK?uQIf|SFB7$u zFLl$T`A4GOwv0q2e`Os!QKBvYJRlVHs%0dq!wy!Eqa}(>h3^or*_M&0+}~JJj>#T% zvt=Y|D@uWldJ?Ca)=j*w`dt`_+K3WAR=nI%eRc{XQEO0=r%BXfq|fZz#H(PJFcS3@ zO6kejqelH9j704~Np_Q{CM-q=hw3%)Phli#pT8KrXJ(JO-!c-_m^ORlurLd)VxuY6a6Gozn zQA+GM%=DEplzRPW8Hwsqy=JUTi7K^>MAg}wac9r3%(>TMt z$^G4YGSReQF<;Dg-XZmRtfnv$)xB0t-e}Dp^@n97YEJE%v3&m4r02DWFX6E(aWyNK}n_)U;0asHK*Xr~&)Y8hyRJ zsF(X5qx_Q=r6Ij5GV$~@)4tEa#HUm;=?4D>rEGy;IV=~3oA8-Eb?yn z8K~Fc2f+mDeg#T0(1z0u6R7)ph6(g(&4Zc8q=Y#Q(>*W$c-INB*ikU?yZp82k5U$B zpNCLN0?Y>}N!wq0`i|MY^{H3-Dw}fW@MzUHlSuvg8s-eSi%(>BADW~*`Joy zZa{0Kuhxy%2%^lK5tyUsL*B@!APfOYyotUNg2z z@jA8{{guAoV(Mjf1mUr96HKo4a=*p23TCb1)u?&R$~!s6Yn#*S8JIllRVO$|EC27z z!)nGhD_(11yn95^{nfh#^M>_upI_@>Dip6v4`&rl-)k~n^_=y345pR!a<}2vFuN45 zV~?QB*6T2**Cd!W*2`V5Phe^toqgUorX}MreaFny%RNU;fN7_At%b=`yxO*6HcsD* zi|((tVLB>aR~||GC|-XUCViJL+G}R(nz7D`SI47hXT@thjCcPq+Uxo@HDlcsulj9k z#yTioi($MwlhIy1kFFW(rFi`prnBNT>6n_8_dKJ$nkH(-`Y2v6!sIJn7amK0rSGO1 zFZUevILrX+HDpSQ9^*+oX>*b!Ku09?{@!AFB-2skn!}0BE z#>QAL_qqIsVHB^MPT*Wl-$^!J^_=y36K1^ia<^gK6B%QQ*M%_NU2EfYnA2;n$z#3T z_4*TLisE%ad&Wlk?zizW_ejF)*JPN<*2`V5S72r+UfW^3JMGb4r+1*tiq}0bvlOol zFy1|U<7FxpF89!r*!x+p*3P>B4pXXl-F`A_T>9yN@yc;})j6eRY?mryson>F=_L>c|M)BGK<2_F?UeDtmuGg8JV60aQm~g%Bfk`P|pTc-gYNEZ8 zr?D0&UQfboQ@rXV8He`H(#e#0Fa8T2Jz&OJFZcOA6=sLxwFbs}DrD+)Dkf$m1&_Sb znOhXE3t_4slYRelKaBUhDcb8Jn8}J){WI7fb@TC~^4Fmn{I`dye4 z6t9b6yeDhX{dGS~sp9n!On1fW;J+~^q@Q|3*XtsfrHa>dnBI!lS{Uz1pYb}yIS%We z#oVHJT?{io@tO|fJ^PFH`Uqx);&pIW@+e*x!FW#!W{364<%i*Q`7@ZMir1m% z(qHMPx5ldrdBR>-z|`VLW_J+v_VuGM%N4H_jQ3nP+N)^~7{#kEOu6FqD2(^SIofL@ zOasO1(4IA8>lLpnV7zD9#;d()CH@N@55vS2uMIF;6|W}wjKlO(^5}Y94%15UdIV;> z;`JGf_x#;>xyNCX^C*w?a*xA4FtJ4Tz0E@~-c$SNdVLC$v|jE#TjTTD8!KLy!+7rl z7%z8!&4lTyc&&$Npm;UDfH}(UZAj=izxu%BD_#%7v{1Y@!g%j6n0j$B;uwcbda>pz zUYElp6t9P2ytgBwz1G7NC|->(7{u63FEyh5?!w|FXlQ$@wy$RK=FDH#(N7T+AFU&*C~qEr7*)3uM!yV z{TAcZgZ|o^|ANOxn90^Fmmh}LuO^pJcg3p@jQ8eDwAX_$GZe3NFcTH82A47p)9>UM zuN4${pJ1i2EFlAbv0>+`uCgGDvWGm@y$6u7vENmkr#8=(&i0uJlc(f4@@mSgYcShF`OmEcY&K9xg^4c|M0(rsTQrTCS;;JYBEjzKxP+Cye(dm{|u;s2z)4Bh6#K zwi(CVYrPf*$}G?oFl!>bgeiux?~g_NO~ChH$`()-f+&xK2ENw2o;>oNRYacdF!rsp zoOXeD`JX#r?0aYtdESGuZ>FX1#YuGLYu*i%r&!9|fgc3t1w&o}W8Yqj$n%KFb9eSU z8%-X%z-ylqGllSdcj%4exkngxd9Hx5Z^7lb^E_hm$h%+CL6b-6_q8UEEswk35B@uOrixcYd0^~Yc@h0p0%PCPi)f!OVeFfG z5qVnQM0u2c9|B|F?u+QJr%WED-~Vg!$QytWd0O909;M$0!z7jSbPkMtCorOYw!oAr z{eDCd<+&?+e+`7OZxTk#8?#{S=Vj7=doj2^nN#Qs!^o#C(q*pUJF~oRo81DFlJX2f ztP^6cg0Y`Q$#FCDVC?6ua@cS>t{K09v7dN~V2-+#^2le7BFa1j#(wH2qV98H>?dC$ z@@#>zpUsJ=SDOi}DVwsl&owaiQ)3bJS_or56&1n!0AoLI6;bBIM6NyMlUzCZv@^?G zm187~{ft-yV?Nzkup6K5tbI)2)16}m3>?>gV4?hOi&*R#yvjcH{Lms+H~ z7KW5}Ow@LNc{ZaY757^Is2bHACI2nIdlIGa+U)H!C=~S%l;kh|@{|}xDbMmy)JBxl zul_tcPzsbhjc=U-S<}6`@pA_}lQIkn%iA`L}-NKOyBSl(GPmb9+^#F-lQ@X&+L~M=1?3 z!$Znsl;n5*@;rf(3PimWQa(T_2r%DWvx*1*ghCDffTDdoCgK8!bO8LvZ~c~-&9v|hPR=3AI;idVfm zWj>6qR|00f^>Wwi0+=0&*R?R-oEcrO88Az&m%Cms!BjuaeIH5Mc_WNB8ym0Fk;B&@ zf55D;UX7h?*klT8uHtnnj5n(ruO8$vcTt1K$Mf8mEu+RE?FI-z1qSwR=j$^v{SrB!gwo4wAVc_9Tcxpn55#h8pc~?jF)?C{0P%a z@yffKdmxI}i7?)36l2s(iq{`7-l`Yv6~Bjj zm5Ntqm_o&C5RA7n8ZYlHrN&Dl5)X1wC{E{wOr8n69`3eVx+z^qWb_9^Ds zmg03JjJHx7FEeL^z0QVNrFad4nWlK%4dbo&#w*Y1wE(8vdWEkA35uSg1I`^{XTCXN(;q#&+%vQzAT%Q*0#`Wnf+!o9H_Qla-MhzZu zb=$!sM#~lIFudaDc)Q%F-#&CNO#UnKet57iWT*I)W#n_mFQFs{narj&Xkp(WQSVzu zqP{>$EfcTc7?Y^qEF)31r%{X7CCXjG=9ZDD6Hp3lz1&{iEhABvqm;fTUPnYP@A6YN}E0lCjak={4Un67?EN;w*`Bm$2sj!bsFvD7i}1-IkH4 z_fQIzs2?mNQFW(trYKRzT1KLJqNL7{dbxj#$Pmj&)Xhe*ZCH;%l)2L-BkBRmNYv9P zMO=0nqFPRze=~=^5U+imQ6nuQQP-nXOwS&5yJaNmUX=VtvPaFej6}VFQu@#AQSVts zqCP_@vtBJ}ihZb?cSs-nZW)Q%?*Ur%Uh#5AwYH2zorY5Js6@4QdiAo5MD<6>pO!sp zoMj~HHk8C;64eDS(`UhYJz*J%dI6>QzU)yST1KM2K}kL=QTySQnc1Zc_kK_qiE4;a zGBtbD@s^ROvrrNMxsWe6c=ZYnqnD=dK9I^j`^=?yv)-Isn-(ANYqM{ z*bMPsvk=1De*ETzMinrs<~y3Z)K4Kpi) zF%+-4mXW9>C>3@`?QZ#ZEhAAIPzsec{J}C3^%qKs-LJY^wbvJ!waee~^DHA#FPl6z%I)=`Wh80~ zN^**fjpm${;d%ZK%Scq+M_E(sKFaLAWH%SHW23cYBb~bj;KL=SxqMD+_?74He&mrS=tYswXRFsl#((<h^G zmXWASP!jnP<(`d)TSlU8G>UD*jE}!HiY+5ikD}z;S!=wrUe8)aqFzNQu&q(oSlB~a z{sYTM)FzbV(^9X;hzO78?Us?KoX05Pe2My=s7z0b*MXLisHP~XXC!JAQNm`vJH|2+ zbrMR2EurxWpQn8-BT+Y_6rC?#?s`qPj6}^vNn9XNE1X_$SVp2gHhIpIsGpos-&;na zavoUE!GBWfl3NuoZWP?_HjEG4|bG7@zUO7UcgG7Z>Bs%2;V`IeEWH&DuN zm8dmNuZ@$6AQU>S*8f>Lhpl)6h;ZN4xP)eWU+ym-0$ z>tV}C)Hf!N-Qm0E-a1bUBT+3;^1F)Hl{B8TT;{uTEF)2aQOa!8`$UEJHuqXaqL!c( z*gL@Ps81~;QNN)S+5Mr}V~1ye+-HQ5sAeen_S)fSZ%|bJD>XdPG7{AVC8q3qFSU$B z4MwT3CCrr0*ooKQEhABPq7>UFKJKWwmXWB}P*O|fTG;IL#3A$DI?G7ZHz=hHKQmAB z$xUZewFSaR)IlgQ>$TRz@}GBzYa7c*)Tt;%_PYBF@bKzzzGWn;A4WAH zVI=AVl;Tn;p*!j#%ShBUC@~u~i8c(^YpP`=YM#ksOX%*em6nmHO(==yrG)POs`;!i z64er=baD2mb1frL!%dz*RJdOMw2VY8GR(SV~6YYuw^9bC6t(L4R?QSu#80gh7z~;>yG5)3SWQa zE)qtfnxUlZll}9Y^*Y5e64eu>piJ7Zh^Wl0Ej1i!8Hu{ZuGjZ%1y>{85~((o+$qh%zj?(?*UU6(Vh?l0jnmXWA)Q1We5 z=1SBbHQX{1bvsH?poE6^4rz^fmXWBpQHqtQZ!9BGwU=<7+Nd}t;nwJ28HwtLQedMp z$99{^6|GD9cFH%_!x)vqw$0j6}^f%3kJgpP60d zE&OZFOz)63{K_&C)#OE5qq;c7^U=DS@kmOKc;qO`^7R6b?mF0DN596%ShA$lvEr4C!SUtHq; z_nKnZLuSuI%5b+#rfm!;%qcL%S(rWjIiMbtCvImy_j|cF!X&tnXlC!Kze`6NVJ^(} z`i$80ek8K#et=Mk6!CC|%-QSz*V8K&g<8D@ZzXa6_& zonT6ywlIT~Jl$X>DtQLN3{&#VhbdO_`~*{|tw5+%k)#m{Gbc5-v zOC(JG-&m5RON}e}i>YOWk8+SW@4l_u}^A}8GB~POj%ymkh6JXjX zdGcY3lsrRWIx2Z4!Aw!|JPOlY$@2ot3?UqvRO@vqQ;qGt7LOr%q-vs#!mO})-1W-)H=k`+@|*&*#^!PF6Y^o&DR~CMthagG^|}!zspOdold^f- z<(UQ3UCFZqW~DxXbf1%m5|NzN@&-wRzm-X%17UJ7KCTc^-$ErsR16rk0ZDKQJXqo-bhPD0z0m%vbUp z_%7$NlIKX6rAnUDVDgkay-Ro5$T>r^8HC@>~ov-{x`GYbZ>ylILca zr8bYdJkwxiDtYF@EVFrn=c$}KFT>1H@~nngrR3QRvq;JFE6jQ&Pp#G5BU17-gxO~E zfRq{LlldI%e1hZMm^Bzpx=5ddotuPfzo}Bl& z7PfiZ^=b&SOUZLAOh=o?U7oHmwfM6s+18Z4FkNjPcYoaplc(fa0@KIlao4LHCa&c9 z8fKWy<37J~KA;ViJPlzAZ60^~w1erOEi*mtiWDJRif%Qu6!&6U)y&AMW!JeWBzz3?^5}a|+BdCC>#gahu0I ze(r`@q2yT!)5hj;?-M?QS)=6n8K#}h<1Ww9AJeBwo~vP!N}eZRwkdf&gXwPbxa;*R z%nl{berwtL**tAoN5j_+N5NF@kbRy%3udCtbF?$hK$u)5&jgr7HjleJkHR!o^1KAI zS;_MeOe-bN4={PW80kI7&vouM_Fc!=Q1ToO)57L)*XwGSq>^VYOfMzRH!$6mJZ(Rr zzib|Ne~p0Yt>jq%v&iOgx6k)51C%_+e9C7lj8o5lIKXn*gWp*f-_(mD0wb} zi7R==z_d{E+y&E4$@4Fmgp%iFn65UDd!O(DOh+Zp*D$?o9`|`#Z4+Kfo+dB@lsxTW zdMSC%gBhdb83I$FEi*MxRq=CC{la zbCf)NVTzSJx4JJCdED(&0kc-gQ-3q_VK14V-FZ5}Y*z9NglVAUxf7;B z$+HlqmCfUBpATVnDS3W_X=C%a>(%s2>V9(e^`Z+*MxVRG98IPo8rh{ya=v z$@3{pfz9J?pFd&RD0!NF#k^|sxZCF>m<~#w^I*oO7?kv9n5wm&tEXPN}j{Nq0CC2E-;OiJOg2N**xy^{dSmEN}i`- zYF#MnySshfhiRwe`4y&)&ExK`eYbJ{N6FI^CQr$8JWO{b&si{yl{}Zh^j7kWglVDV znG7>P$@3UY8=EKYynpx^Orese$+y(q=4t87a|z6NCC_~@V{D%0&OEDOCM$XBe#abc z^SIZ+wlLF_JmE0jDH#!Jbw|M$%EN}gUY%auIS zVYVuHK7lD$@-(Sn{!#MW2D4tt^8-w+i)7w#_j`vQD6^91W|#&_p0{AOD|zbv$XsXh zxaYB+FtLu==lQ8HZInD~VCpD&>i@)Ang0BsdDo~0kM8Snjs=g?U=r3VIEM>42&O@V zmoQU}SNfBQ#_JE{@Ow?K!E{u-euQbEc$vR9QL-C5sq-!c-l&#$;!uLGn*(qAR&RLe-z5R}wI;?>w0^|)muY7I)M?JxI=R(ppq z64e1Ef0FdFJ8HOPBx)u~!F-8&&soCNmXWB~Z|v&^NR->_O3O&pD=4Y{*`wmW3nNkE zQ3@5W7cC=EKcXa+sKicTBx(>!$>mbQrq0%Q*fJ8e3MKKhL>iPfwf38+r zYiYDX_!Qzawv+z5T#!xNfd@CR8~TWhEQ5rq*9Yf zQiRX#v9sI#oYQ%n=ly;8{_(nepO=f8d)M3T{`mcPJfG*s#v)Smrn_p9FjRelNZ|&m zj$s_4Cn_$s;b~#0N~sjlJE&tI2KyQ#*M;Im4`^lHmY7n#_(Q#M;NO1B2pwJY**1!{=Znm>M>-f zYL7_ar_5za7(P=b3PaUu6S;{h`?sloCk$1UVzK_L;Q1#|CsRh2u$?eeU4w{k9CPIa zu>sWs!ceu^_$*^C`x$bVFjP6!Vx7Eund=T~uC~HZH58E&IUCzggR_O9>UBgCqz&!4 zz88k7s&N?e(uRSZA-E0Gg`sK~B85^yd&|!ihN`y^@hNS%Ul^+5t7DDQ&c?z}H4YK4 zQm^^KP*sRXny3QnZg6WH6^5!h@t6hD8g^ALVW`SQ#3%I%d{iVWE(}#C5XqHZw$J6}HOWvl0Fiv9vr=$cjRCPt9>;~qt|0av^!cg@HBEDOwvah}C zg`sM{iAWm;S{+4|ver7A3{@G3FUkKV*{$WWDGBA-)bw&(EuYn(7tJ%UI<5mjT5i{%RZv`!eRicLgHXmW+m%H&#P zs2YMu(XGs7uh)aZQ1uofxf7}S1SJg5bwn7d>L+5|$fc^xs_HKcRZ~nvMwGn`UlfL_ z9f)L3Vy>If8sYau(Y47?)y70_qsrcfw+Tbl>xg(?rE0XbzxE45RYD!~#qCttPek2? zq3UKt3a3zY5$YA#WjRWo6NaiU5lNU#mHiwQU6%}1X^50b3GL^@>x7|dE+U@0nX3*; z7(P?h3q#cbM4Y>*vX`(`5*ey)M5JgcRV}Q!3WcF6p&s_-=~S(TDzIv^4SNVfRW2f# zlFOWp4xo$EUs>ULcCUe=|8czyC)kZ|}Wnace z1}v>{b^|h0jX zj*as?WT+Z~i04tNT3So^hA>pcHO5StL)H0K)mUMuT8~KHY^r*rPHgYMPj#D+p(+QF z+(lG%K)sNz;-daTVW_I#6wjj`r>cszgj0l}stA!1DWP4}rWqNk9zewVqc>`YceX zpj>N&p{fLt5>fqNRn=-mhN?_N5~N<{l~8na#l?EvDhySN5h;3}CG1B*`QKE1DhyS} z5h;6ts<~EGN-7zuh9Ht9s>N2-gThet79x4l%dbHdUav#KP?gvk<9Q`ZXm<0!#d`G= zhN_zp$&_9m6p-L2s#Xa@)enf2En%)pt*VA?$WWDyh)-1Gp$f0pqryRpSDc!cVMMM`5TMi%90nRILOXeo9#)3{{^aQYNZ+ zlra1}AJc&hRb3GA%DWm~wzlC-!cesk5ueoS5LAKPi1peo3|0RklDnGq+G?#=dPg!; zjX|VnICt|v9>}E)mkC4FcZd`!s-#Y2sLDdbH=em-ks*9U%@KyGLPWCU$RW}Pm)pA7gLP}_O|HYOs5r(QdU9k2ls%&AXnu|z*sG1;2cx!wu z3{^=Np$A13c=}?>$Px||hN_u}l!z)7i2_Qh3WcHS1R{<+2{g|t!)M9`8Dyxs(L^Ly z)1Yz%O89~>RP9BiY#hgiDP4GLoO>}Dssx?E)l0%qRg6g9hg6lIUg0yPV|OxC%|)c}ZFki{VW`UJfm!LL z>L+WijlxjXr6*SGQB?hFZTSVlP*r9k*SV_(TuO$j6(*wmo`|SkWT+Z~NS>m4T^Ooj zdt)x&(ReXknDO7x(05enZIRR#y;&b(YSZB84vmVS&#i!8~ zvCdq@X9Sr2iq8@-d5TXlm@>uZ+^kqme{6#b*R;!rzgRrDn4xoVT>t0*MRAy z_}mYsNbxBE(^K);4Q7Yp6L%%{9mS_Jn4OBxI55K$pZQ>l#mC-XAA%XD`1}E;RPkw+ zjWtv8xf0B2@kz9fpV?r1iq8fx30LtfVfQ%(X0GDXa&WBEOz{~CW`W}KAec^y&pTk2 zD?UfS^jCZu55Zhke69lHReT->vtIFeAIv1h=LDFoiqCmhVVzfehJo3k_&f?`vEs7{ zOo`(2JD38+r}p@~~KEjN;Q9OuG2k z+vj#Lxr)zoU^KK64OU53?^Oi`3}r! z#V2Mw&OhQ~Z=d#HVl&3>rg4rfM_VU~W#;5o^2WF?@^9`7}ichthu_h=!7lB!z z_}m1hOz~L?X1U_C9n5LPr}iy)cA@xO3num&uJiWs^E#OIichs%oc$D^i@|JFd~OAk zB0l! zeC+-8Hkjyc?(6&!Fxlc`FHg7Iuy-py^TBw<$KK8#fk{?;{sc2leC*}9Y!b$X;`0oc zNs7-2FzJfV<+o#P5g&WK?g5jj_`C*Yw)mtuw)6ZUF#Q#uMt9)eTzt$YxuWo&|KfeY zP%uLkpU1$IijTcKAAuR8`1}JV`C6_U_VTo!jJ;d&xdBX;_}ItuA}~`GpY340;$tsQ z>nZ39#b*wfd5X^=!zezN-iftNeC+jl7EHe4^ADJviqFuya0XC(-T-q*eC+LW&fOSe ziqEZJl83qXdl8r|icj0A=y%2E5imuH&o5wRDn3J|;rWl^^B$OWicj0=XhX&488D^d zWAFFfV2&$3b??FcuJ{ZA<8*gl=br==RP%ue~&y!$M#mBy` zegvkO;&Td2y7<`l<@4{w^B=|MS}>gypE+PM6rXnuqxc*K(?{{CcOUi?#b*$hY{h2| zn4aQe-%mG!@hU#Qfyq*Qn$N)VAI0ZtFvAp|IbfzJJ{!P{6CZoO{{m*F;?rOz$}B$i zaX1J}p5ikL%p}FOUT znvHuj#penzrxl+$VAhC_y?s6e6N~rhnOaABy&&pA^r`sR+oubdM8)SeFk8gOK7QT= z<57J61hY-?>GTlx6vgLGFgwJ@-ac=G>7@9a0#hPB_V(#G2Wzk5b32&*iqBhMvJ{^` z!5mV2I?lz~tN2U?Qz}08_IV4;IK}4=Fek;w-ahRg#+s@4+ydsb_}E{^e-?~S@%ai& z!U&#!?B%KU2-Z5q=Mpf9;$t7rlff)dd|m~UEI#&j{u#`2#i!|`xEEG@t^!k__{;&5 zEn0&?OXD~a&r>WJa`O_$~ z;&UCClj76F>azsQI>l!fnBybY$O;&Tj4vEtKe z5$2BKGX~5d#b*ha9L47pnB$7i;Kf)s6rb0?IG4Jw^EH-Wtcs6)e&vCQSA1$M#r#ry zCW1*)e7*p)M)65|2G4&KpGU!L5ua$8TjmF@heyDqDL%dPaVAlGmV?Pqe9Uh>D8yHa zRYv~GQD=vg$NW#5vEy^D$KMOP@V6d}o^)sK^=(Fv4n=D}i+=A{xqP*#9A(@B7wgqQ z7>`pau&e|?{4@|uf#Nes82FT{A44Q7t~#|NIwyPJ$`B1MP=!EcJ7BrLT}UWWO5KG>KPn)*hJ!k zTQxr{@&+Ql5N2ywWDg?F@4+qhxA7@s%llA^@ZPDv{7h9RL_8a)3Me3#&!`RpQ#7B9 zS%27*0Vc=zd_pGlo`_>(2AINSWIDkoFz3lE1e3XyOaoI4xyWobxt=9s_c;tEO({>* z^JtCd=#zvz%nAv`CorNcL>U}O<518fa#;GhYP_JDLxy) zWGg;Dfbp+LXrrhMv~!@}*|~p%*&(^i7z?Z$WNNQKUqr}7rY#u%s%3I@KsY>CA29os zT%*9`D7mJZ@|3SXk#j8pb6m;w9+)Xgu62`Z8Q$80d^lFQ!CH-lLdAr}p2gYoYdCKtZy$}yj%54{S&^z;VzY3RS3 z|JwzoP{~#4Ma<>$oyg?sY|V8Zm~182Krq{sTz8sW<@=Y(g%_-YzFEkW*IbW-8RKQW zLigNq0Dr6ovs20SAsGK&X>#>|imNhR9A}?lyv!9k#z_4GX1_}=en!3!L&9XJ9F-8h zKp|f5CHR-`%ZB*}5i>qQuZzLV_Od)F_{VUoQDDkk%3~a7f$>abdF=Ii$@nz(@7VtH zm{Epa?}I5(m|`%6cQF@dU8v7#lS^TeS7EPIm<%vkcf02r4#uM})4-G{xt4$_P?!y1 z93|HtFqsPT511k)SA*496BM6|!K5jSxtA&VKitdg>B4&%)0YPe&KyO7QenzsuDM|R{cduF_Mo4@uaW|@&g)*UU0@QGT+XW;2__eY zP0(Elb2S39UUHo|w*Ay4U_45$kzo8|%;duDttHn~Fk6&d3&Er+xz>U4k5!ZFCgcjt z0)L4yv%zeWT;V&6;i_RScT#e-2jiawk#k)GrdY`}158gP*J?1b0z_FF5M?&2mQ#mM zDk49Dx#=RVTIEk*M&5M&O{1=#c$++lF;7?gmnY)W74zgonDQU~LkY`{1>aNGe+_pN zWoR4xd*vuE{tSO|(iu#sDjSi)5T9ER@n&*o=mj7U$FoZ^CL*<0{tO$#2 zK_qWbu=5c_$_4~Ss=baqHzd*uk-U&dUqmuPA`=iPx-!`3Aw&wxpOdi6uOQ-F5zKsr zNIt%zJn#(UC?dHbk%TwE3=L*lBT^8;3`8U^K})>~a1%IFQnizxTq&KT}M37UJK+>sIMa z+#O%X^0WXGzOJ?eGs&eqCTV{#{uyU-Wx&Kd@d>@|1d}Sc?0feMV0=ohufh1|vdLxY z6kg_2VA7Oa4d22mhDxp;VEn6u$<@u8YXX>b$z|`;d0-YOxi*0DuRoFNwGT|Dlc3}>=R?o`;e43Vo##X2JZ)#_wh_%nudCEUw>X0o{@GVk~h^|Rd+oZsxC()L2`wTI_8=s3{~$U;>A+nFQHv^To|fa zZorD9sJy~Z^#mgM_c52fHMR>wRh5mX*GzX+H({unj7Xm3ve)Z1VW|2Ek&=6u%dTqp z9vP|zB2uKN9ukJC4T$8P9beJ%p(j1|*RR4*b#5Wf00;fEvvSlpjH|$U#~FJ$n9SPl z&i4pI=T(T5Db9Ngvz6^*@4<66k)d-pM4XS^Rd)zO)$@p?#k$wx3t_1G6A{k=wof0l zPoNjsK20~H<-cKh7zK)pEq|{tbl!zX{uXyt#`|QbdK!@eQJGm5xR~n$VW>KSNbW}F zY8;T@C#vdiAwyLUM6%krx7a*ksQMm}d@T5;9sE0570Ji8N&5h~+PXX6D-4~tA>x#} zJ2&_cz1-T}`6glLycUs?!*m{s^2UXgIp!nG%6NC@k;2e9{GR$XFqtw>L+_H<7e5L^ zpPE~-YRMe5tGWq8)lG?PHWsddIH1Mi{D|N5ql&WmkP63{`)ci1e3T z)%z1NR6T}BzVwA%^|LTkUGyn>urYfu#f(qsWw!iCVW^shNa4>M8=au2Dk|!q1(Pq% z<`fq#44pp^hR#1ClGV_?JXN=mp{gk&nM!$jf$@m5y*%TEq4NWXBw+pb@7?zHd0iN) zb|O;ppLvRoHYz{ChSxp%Gcr`2k4V{{RM~S47KW<35GfRuyi0?!9TptKS)vt)8DJ5+56&b4f zB2sd%d#)M6P_-73!s+g+qryb zfQV;3Rb~p+4qN>e3q#eXh&aVY#W^_i8}wjFaO5XMN;U+~ooU}9*BTQstIY`f$uS%F zsq#)T%ryg%vejJKzJ)5Vzf-?T7^*%)#3#8L0Sw%uQgz`jGE~h+q@XWb;}%m+{O7-@ zS}zP$yAes~!}YK~@bFc%>UU(QYK4gRM}LM$r}rUXJiXnW?-hp5D-g*QRUd14eieqQ z_Pfy3exo`t+sryl3s7flvYAm_zsy@O{H4zby+-WvNE;Ew+7kg)w zFjVbDBu(apT~&7v8LIjrk}vn&dyyn?a$v4$!cg@RBHlYVe(b7!!ccY2UYrx|bXQ#_ z3{}$+$(7cy=UOWaRfiENlNHI{8jZgvL)9Qe(xhH?)ofv?T8D_EsE!IlRl^drMt_b& z`)ukf3{^KHQuL$yYyMF_&GnQ5dSCen5*! z-R<+DoiJ2gi%5c$(5{*z3{`I;k}ppx?0tGv7^)ioh?>goX;)n%3{?*!;*sYz_OV(h z3{}4%QZmhbUNqZJhN{7c6#3j$j|fB6CPd1lHS8t)OBkwJ|AaXxDtl{;5r(QK5h;** z*;StkL)G7i_!L#U17xVW&O~Z*_bkRb7I;R)b?hl&sQLhr!W!lq_~cI9{={s%FjW1GNLDTPTxma(p=u-|d6LWChVz7>>U~7g z65Vq(JxqqGX^7;W}w!QL9zg-PzPfpd_O%P3{~w)G2`T} z->$k(7^*%)#4EY%C2aT$8LGx3;*qBr_FV4>LsgZdsF$J|A`Df}B2xH9@afclvM_&g zrd0iv3{}@7;t|ynu$4td)gfU-Rff?kCA7E3Tf$Hk^&9RcK41yk#W+q%Sgyx~p{l_# z%$>K~Rj&v`Rp;MP(-s_ueUT^pOgmf{s_sT4Q=Y~3feJlQaj{*V0aMi6-T8fC=)4aR zkCX>5=v&Iu;5Zqou0$kFa@kdn3PaTgh~!Ex`+j;v7^@SoVZ!$FV?aX(5a7B6+Oq$}H^fwtgKZr<4 zD(h}vjduw{RnyZLtBUG2VW`@Gi02EAAN#yW`iBfvHzATKdy~DLHwZ&j%)cn%PUh;2 zhGRPgetK9Ks%rd)ks!~p?X59R7^*fPQYf!U*U~5U zC0D61RMm{G=6ID{orIz4T10Z+=lHRY)pv!Vs&;;2on zN`|Uwh!ly+ykk6kC0QX1RUaebG-1n|vxZqy{1Jmiqn>ghoG}7yyqreo+>*)K(;P?-he!6Ycz9|n`TlXW+r6sUs#{1@loN5U}s-zNJm zcU6b_WT={ei0@l>)yu+A^)n()vAb&Exn!t%1Ch+#?y7T>$xt;75#M+2s{O)Hb!h`+ zS6ag-3{@>RaaJ?(CYZvXc%ptB&0m9EA^UOHhGeMPgos%y{3oJaP?`VtU+lpv8*#nGw`Q%PBW5r(Q;nqj6irRoN3DB-Fk)i5YL`o`|miJWbfL+c<qi>R(~# zGph~uxLdfVpb5)IN$5D-1Sa!KI`79nhS#)5TQYQh50NZ+0%KQoOCv+o21N4D<_MpK zRt;Z8FKS1Isy7hv+!oxbBim!Nj0}!czW@;*opa%AYU{t)KF{ipMdeNFIUl^)tbwIAERGCj3n6)Ofge!%is$)l-3KFTxhAME{VZGiI zhN{+`up-rRSFI9;s-~S$!rD{~L9XzT@T@RY)$4*1)}*Qm3Kjldh#(9B^`Lqs9D=sqGVA7QD4ZGRon(yv28%$v#nb7aQVXo)Fco&hemuEAW{I|)N zlX>8x&rgPVi;O1#;3qN(-LM`$LB@WQgW>Ylc|*X z2U8w}snH#MA?;%?b2~8k>saQN)-sO95PJOpl&8H7R9Y1g1p#!rt#6fyq<){dbeg$GT&&3c5H}Q!d3k zRhZ#m3hr_DnFA)@h5289JIdQA&(`bsN$tR%W14^~(Frigz5P2Nl#b-X4or=#FVEQXQ)%#R)iWQ$eV1_C__k$@> zd^Up_qxk#>X20Uor7zYE#piY~hZLVz!Aw0!+T*bKYguoRf;rNHD7vpC`ebR(w7Mvrh4e>W_77l>2;d17?fjb1j%?#pfL` zMT$?o%d0uDiqAAK#fr~9F!74dSpzUu6`za1Bq%-;z#Lb67J*4re0~Ar^l@KTFS(+c zlce}O1}0wd`4LRA;**|*T#C>AU_6S?UNFrRpN<2;h)-;EoSur$6fj=J=Xo&w6`vDeaulE5*(kH( zlMiN!;&TejF!3?>7g5spl`4K}IJlZKQ}O8mCP(oZ2PRMPc^J%8#pg9Jixr=*!OT^B zPJvme_%s-TT#8RWFl!W_$zWD1KFh%rDn4I;S+Dr~17@4zbKX^86raIhb}Byig7JUC z5$EhEEW(!SV=%>%E7n5b+h2#`{1YJ;1=oV{e|FO3I)!lH8_CGLXnZ7B2Eu{yOy(q* zG9_2f8x^Q!k0-}axDVm8O^=ho~sPZX(iXC*WejQ`R6oEu5K}oa~_K-fBy(( znB>X|s~5j5Dh;=a<{qhXR4V>5@8}J^?zKMr4oR-Sdt_K%^LL#Q@KJI-4(7P{w1FxxHY!z^ zZ3B}U!G}!Mk=QH8u;0y^8Mw&w0MkkF@qtNKd^UjTsrdY57{w>mi)R;#&j>Ktiq9f2 z!xW#LV8$pu)vl}Nj8lBNfSIKDOfZb%vlz@w#phcvKE>ypQMgZ0eENZztN7dpX1U_? z4wwas&oMA-6rZ-EkxTK(0kcK%c>zp;;`0NT9pcj;lOlY6C5^%UrT7d0}AFAW6kfqsC#LO0L0(2HKEt)Oh$Px$?oR6ra#Nmo;p8Bku7d_>g%8 zOo8|$vIymWlld0RNyW#RfH5XMokQwHpYdR#``PypQM|xUnoAKz<3p()nGCepA%rFDn2c5#=VT< zGZf4M#pgjVLlvKQz^oA;ED1pu`~5hWF^W%{TkuRq@fimuSMgZ}X1(~>&j8DN!_;d#|Tk*LIOtIp#2FyIg=O~y`#V6%fJZDpUMu9mkKKA}v2xhh7^CcMP2F`c8 zPqm5YQ^h9}Otj)N8O#>N=M^xq;$vSoz5`RF_*A_OXGq1TJ(yy}X9So`#b+g$LyFHa zFvAp|j7c~@D?Sf^nWFft1>;=izRn*4Gf(lUcRSW_#it*b0`akrpP68i6rYV?)+jzF z!8B8R+TVe(Dn9mgV=S07#b+Uyt%}c=U@{b+xXHN3SA2Sc>7)2e2XjdASqCOt@i_+O zr1;qT>-;I$;}oA!U`{JOPlL%(e2Tz0W~Sov5|~uQ zrvyx%;#21?^o8Ox8O&nEXD67cicjaeaTZm47J^wWKK6e949ptE$C-*;;*(-+=MG>B z6`ve1MT*ZdFxwQLonTHXKAopw4k|ti!Fa}V9NO#kH<v3%i?2i=SRVmDL$LQ z^jCZm@4*~Ye8z&wQhe5diN)=tDQ%?JyW@Nq&x+45Fo}xKD`18yKF+=93&m#;m|=>~ zaxkfi&j~PI@reyO^#<-#huw$!Q^jX9m~o0vuNk-pQG7lDlPf;<@sm6geX97}3}%w} zgg(#YdEU7nZK(J>4rYtu)9eA%UGaGfOyZ54U-om|ZZMM+A7>W!ZpEiL7@y+P4@`f> zXBL>biq94>;}oB$*|&3@D4r@FJM)Ao6 zQ>ggd24<_`vjWT(@v)!lz5=sD@o^pkqxiH2Q=<4>17^SCGaF2);`0`ma zpY>qIC_YJ#;hBTtGagK?;`0ue0`Uob{>=TW+v7MJD?VGnY!x5-_-Xb8p8qI5J}}!9 zpJFic6rWD>aPC!n3c%zmJ}FOP9aDVr!K_w%lAglZSn;_P%sR#A6EMZ%W8dF@1+zu* zNt}!H0ov%wTAKCgpGQ+$fS98!F$F2GzCANx4G0nBm5XDgU2 z#V7UYYK}9&eVxw(lPx~>bMGNA@rqC8LYyJR$6l`+!6Yd@^T2q;$L#Nc*JU{0-v-l6 z@!1O|SA6W{>9GiXs`#t~GfDCJ5ln{S({M4KU5Jl;UmgIakK!{OOupjt3YcugXD^to zicjYy=nKVX9+)!4=T|T}ici0#7#lZnp4$6;GMFif&vG#SZ>})+ux305#t(1m{sxmG zxkASVnJb^cIXprxGONI(icgD>TpX)0`FKVY!H3LfFxiUFdteqTKIcA*eNcStYuzPa zRw_QD!7NaGW`S9w_^dLF_}JH$FTfNkK7WE)ulO`rhJ9J_=>cYo_=NU5`{GV8I~AW- z!E6;Dd%gC7*{}H2dJg-S_}I&n38qZ(xe3e;@v+aH$H1IceBK1JUwrIq)P69rSGeyf zwU%SQxS4a=?$aGiqT+Kam~_SGQ!pOIr}^{Pn-rgWz@#cZyTHs8AA37jS%GInicdQ* z^TfwKer^HNQ}KBj%wol-6ik-l)9MA>J19Q4f*GdxtOc`L@%abLIK`*ON~{}-&#Pc2 zDL&`Eh;>8pnFYqD`1}rLi{dllB|IZid_D%VP4S6cg|%1l=?!Lw;&UIE<%-V+FvW_` zDKG_!&xNb8ZYVxez^qq%-UU;t_%wSNYp>$-Fqq?t&j~O)6rYi=V9iu~J_1vs__Tc$ z&s%QcdT5{T6Tp-zJ}-cY7a#k*aJvHBHz_{vf@!As40sJ?&T?Pp_kqa}pLiaN%Kzqm zI_7meBT{@0g6ShZ9jxc5hu^?6BE{!|HJHna&n_@2iqAc7;yzb=`dG^o`xf>l#pf|F zPA>aB!|GFiEuIl6KF@*4P<&F?;l5Jwc@xYO#i#4rct)i7d<15V_}JSg>m58JQhauS zIW0c+_8Ijq?&B1nBVhdB+F{Q8SL3~fRm;a<@E;GY$G&_k`yzDikUM_^&d(8Yk@*Bn zmiQzvT>dx5eAY%hM~dJ><{L2nZwN7Eei7l&b-@_k{vPhXB$vI+wF_~Uh>(kgdlSqQ z@v)cr;!U`3ir~XCe*nh+Z6v15#}E#k^CsW5n^AYkWiRtFFsmcvVwoR&ALWVQ!}8SI zf_WOjhs=wH5g&WqQ$N7|uK2tPW~<`U{zIJS6`wc3>=d8S_FvRg7i>?Tx324*Pvz}6BZ-f_ zUQdH*rueiiLay7`&I#O#>~Nc(cht7W&k_`W}f5J*VF z|CjkYt2zn$gMYu?Pl%-b8XUQE7nt9IBjN7Ud=M?5T?HNDO8kN6VM}92|KSOu~WS$Ule_{2m;6Y;RR3 z?~mZf`QL*%9vs<(NLfft2bZA5ut5jP^D`o8A*!@}sA;9(GH*o06Bium^aGqrgMH4~ zg>e`Xc^r{~)4@#7@320f2#%aUB(rj`^HaNVW(#StwEZY^NNaQ`#@R2V4f`If>g1nO zFxFLpN79_&X8dY{Mc&%%2f_I;uiqE(;+k^Aig~kW9jT(c$s+X@_ z<`15co)d(_&ro@scIyO;9N6=p{f*-Oht8V2^p%kAd-;A zTs2X`z&$MM)qNiss@_4Qs2x?Utg22wkfEvok+N=76+?BF)Q!0^ek4QHW<E5 zCqvZ^6X{RYWw1XxESL8uGE^Nvq^y^_YT^MhRGmbmuoYExQLmV=T-O~WL)8{Ue68J8 ztq+l*Di4v&=2SIDy~5it?q@PoO-H0Kg{py8)k$Hf$~lZvK^v+<&#LUN&xN7t{3Gah zMKxC#stzHNZ~=1#W=ZgvA5%((s_zgx{pI^OyBSTg6G4xBO>m^f+3*QrEoe>h6$b~7DA$4z62jzJ5i8tyWW;DNu4Hog3p6D!JBy@jqdRoNI7$jI&P3 z^*fktO0LHmU>ue|yNH~tRYR0n$@L+aol36j8pTvR6^WedZ!lYxTu*sooc&6!c8$>& z<}%8vFvpc#JHezXxmu@S9F{+e zi`-uyfjO<@8g*Wb(@Dwo4;cSbzR0;2pC98yPvVn*dmCo7ig9`>xr)K~pC3lfb!Tdf z6R+f|+Ztb6wE}V@%0)7|bvw*Zpm=CX_$(jGU`cT8xvdJr>tAcG+fU=250a~+HCLN|@JgtX>mV5a zbAFTSRTLPf`7^GE|HZpUB-e%3TrF5vO0MlFkN;HjQ^D*lgmCfo&vL2$@LAGbR}1vUN{?_F#DBUd%)x?xstDpsd#nLA(k?XY=%xNW8L$u)*CD-slm|wCl+xu%VnCLrr-mve> z#bAn*Tn*8N{#St`*J}ircqP{}V2YJoiw0u+l)t_lIoED5iAt_y)a#IvYZRWZ`d^hc zxq4a0VLq5-$&~;G$E`E2@4*~bay7`pURnNncjS5v2a_tf?ESSAjFattw)q~6|5ftH z^=g1NOqX2tdJO{;ujJZ`Ip}}=-Q?{gXFT;YdDxBCD#%#{#W)R=PCx% zU&)m`80T;$SL-3jC40&Z)_P3@lda@h2PRF)^)DFzyAe#i?74beh36Yet_Q(nD7l8A z?*8{VM9%drm@!JOgJAk7xwfM`{&!GB&XqVc#>r7~T>~at$(0Yr|K1FfYXJJI${DlN zarT0lB)RNkzQNTfvyy8V82`IIBIjBNW~P#B7nmF+SJjKLK9|3r#N>*x-s=qkGf#4* zpx)tY)C*vyD7pGnj;na5ipkZ{n(G5F>y=zRqT`&IO0G>{_KT1GlO5fv#5s8pe0WOU z1jaL&dtCpJx|8WvHO^VA`GCn0pU~$>^l29p=d4tGo&}Su_?#UZ=d4kD?gcYRd|F!T zbghB$toVEiW{u)A^sG4NwBqv&7|96`z_( zSX&gIO<+!oPw4AtEYJP*;vApi)3<({lX4g5MQiIgtZ{CfGgtBX0?bhHNwfOQOvYGM zd^$FWb7m_(hrujYe3mrCI$!<{C9_xJt((rRC{yV5Ihb{l>oxpiU=9k2&pQ-E$VDb^ z3eF^Rkq3dwQJwH-==?F!pGVw%_8Onp$#e)W3?dEhh7aGf6ro-t zz{oqeqU=6PjSt_~6v1bY@!>n2BJ@}CRJ60w@7IEncY;OmS!jHee&1<)USa##`@POI z_&i3&J`S%1Bkw4S&|mprxNtNT#q?^qr)p2N$0BN+KyNrbw;2u42d5TWh|!T5e)E_=OF zXP}+;xihzdks zHOv#ij0rg3Ba+!R&aWzuwDz1Cxf_wP;}y>3%+|0-?Z$CV{)fRnW5XhA5y?9d>=WJO z%*a4Q(oP05OT!{Z5XsyV%yeveW@H8;We)|H=gY82<7POay&25h8W!1vNd7Ouxz1`H z9Qj|rd-hsn_xCbpLirQL@YBxAU~=x}sWKToW*H7G@T5XHSzQUnKQVoxRwL(n4osnv>u)e6O0Fx<;|PzOYXz8M zCD&hIN|js#&ga~ToaRbH6e1Y1z`FsxqbzctmNv|hAWB5Wp?}UdHOV%agr;1uA4Uc z1x$*P%j`0~|HCfRwLfZPbg2}9MBh$PgD zuNW;ggT{y>qva!EsQMid?;(sY@RiRv<(inenx|v!O?G#_N*FrNK%_`oGWX9Q5^)kp%b*YI+f7w+} z2}9LBM2gzFm$3cCWT={EBGuhhFA77|c0}@|ckCr>)RhcX;}OY~mba@m2}4z_OVAfh zS;7=+%Xbups=@G-0S(hKQ%3S?fF%b8SB&xx0eD_aL=9YJp|YtbP7(4U!I&`I!YK>xW>~ zQbh6;)yH5GN`h5&d!PpuRd+CHFPfUN%xe)T+sGBW1s3|i?r2JFt}3|n=USIz)Lr53+*KGlk4D5J<>_NB&uU?) z`W2Bh$z@k{8bF4syAjEiT)nNiRtZDZ*NFHemt9rm3Nlo+MI=q`^_n6VI;i4e?~D_M zszr!+Wfs^~JA|PsCJXz{T#hk3gb#YI&RkuDq3Q-iy!TU8W>qZ}hN|s|L;uYtl)?PbS3{@?>Sk>hTgS~{4g`sLQB6*6c)^%j48i7b|$Xx*Ei6i$H?+Zg!lTqm9 zuXtiy0!d|&aeh57jHpJVmzAejw+TblMnrNCFxRs&j&pukt}Dinq3SzCoNwJ#6Rsyi z)d@rjTXFREMV{~{74^rGp{f%id53wXHM?G{l#uN*3{27a?#@18=)4pWkCX>5vRlgY zoiJ1-+<=)Yx$LU`!ccV|BDs>wzMrlXhN`WI_#~HIbyOIt&KieRUG8PSoFUhk zcRrXq#QOL%e0^Rh3{_{{gc9DtIcVlzxM~cTOvQPxFmxVtGvn-6p<`N zm2nFhsvaVz;< z-FQ3pWl`DNd9yH7CEkI$%hT`fsCD?B(n%Pqh9Kf=!Wm~*-6afF3lJ$%RGWmMYCj@r zimJwBGE}7@;`xAUoqeq42}9LkM6wjsERr!DSOA#r#ovmu$ck14Qy5m28P3_JTg`x9Di1_4Hs_rOHU{tX@hlQak1~n*a$X2zh z&KHKN-iTyMt`5k>41u3=grRBcr^U-nsWg)mf2M#QVk z%4J}(PP#i62}9?Th?FVi890LsRm%}cJLR71A7QAI|ojak-f%(qTKL^IEI3E&*&MjwQmwDXXc@UV)Qui`%5Qff8W@BVF zbzJ-6HZTQGF}uAlwt(>+anIiNK{Cuf50Nw_`%hqUmFyiJLSHB&Azv6~kDi16QnF_o zMzY)cbUB#JpWW;JgD}iqf37*{xwm{*Fj+EI?b%0x$=}KB12O8V;6MMxIk;FDW-mg- z^PRh@`omLH@sG5yP{%&_wnJ`ohdK4v8>h-oTRMpQz z_Fe9|1`9*gLnhLIXWF;e=;eR2!cf(I9%kHps%m4AZ7Fr5{ySl)n))Q>@(g!Xv!}>V z^&ui9PgSWnSv`*9SM9J|1Ll*VstA#?6;#c_rW39jx_}H--yxFwC{^RFs!>mqp=v)O zzGvK3ISa{9b<{*&q3Q!`z3x~J8dkfHNpMDkywYN}P0w2}-} zk04U^GF87qWm?vMu`gm?Btz9*h!m`%DidJ1s^&{%s9K6h;UKEAkt=W_Vy@&>WT={l zhYUYNsCozyPc~Jvkt=-6$G%L4Djyj&?oe%5q(m?u*qSRFOqr6)2gawA zc@-G1!h8e9QOf)m7>~4JOKX`^-$b7(cXlJdcom;KFa?UwW-z{Y*@nHW<*D@+`eMC1 zGX_kd)csPc&l=;ijy{)LnfSFBhf0~pfbl5(o(HBt>G$;}myhMa!WMLKjQwVEDNKuX zn9KLL`(%SDbYcG2pJTlb<;j`K&jtq8X43>%2FkDZz@!iHuiXC6$FWrc%xN&Wicjaa z(eH}S9bhIYKCgl4ulSULnWFf#cn9CsqWE~hOjUdqf*GUu>;U6ae9nFsZK(JR05enZ znFD63;7D?anU6e&KRfLX5i{0XL5@oDxRzGY7FnE~dI;`0NT z)rwEALVR14;`0)i0>$TBFwRx(>sa(AeAAlZlMW_c@fibVo#OKrm?Xs~b~C;oK=HW- zOf$u2HJC!h=N~X>iqC-eF;*3y7r{NUjet@%<;*$%eMDf`SCP(o}{19_T@#zL;isExKm@>uZJuovBpM;O_T?C5H zcrba2&t@>rG@dsS(A$CY7W@4mn8k`u{8rq5DL(DMtW_$&pJrub|I zQ>geH0F$Zs)cP3TgsJ#sg2_^RZUVDY@mUDQtN45fX20Td3{0-#)9@3FRmGsI& zp6Rm*OzcqmzC$Kq8~UsK6NM%hz97PqYYdnzO0KuTBr3Vi`V4cY#C#4ha;{NeoavmW z_Ij-a<8jHw-y)RP4|&RSrQ)w8tg`$a|2gJP`6nDrd7ec)^ghIZv%q9Xc>=EkhzWkE zydB^0=~5oU-UFtO__RSJ&|h4C-Uibtf)APB!Aub!vyKHWGR=zc4WEk7U@)^4pNGL@ zDLx;7S)lm*17?`wbKw_QGsOq6rF|xV8K?L>3&#JcOw*^Y;UR6SKm%3$bjg<(W4ISK zufkQ18XS^~@Ln*JBIF`7?JJDK^3Qul&UNk%-0La1-T~uNa$Ws3>Los*YYY3m1kBtB zK4fnA2IoWZ2_4U57Jylx_`;7K?!s90xwp?KFeQr55-{uSb4eqCVDJmtKY2PR2!B{3ZGcgk*@>muYLxE_poKIR`Aoe>USGn*IV`=hS5?{OT@ zkATS$pJc1gJ75wNp95fKD?aD!!S_BXK3%~qSA1rJNl|>h1XHN^B=5yDG{t8um}13e zKA23!XDgVKiq9!9{S}|{zsFhPUiN$Fp3FWS17@h=vlL8{;!K_n!8vclLi}={rjecOZC_Z<9nWFeC15>2yP-@*NyIA(iES&z@#WXYrteEK1ac%D?TZQ zaKEGYi~^G>KK6BEA((8%=Swg>6`yK9<9UMOlL@Ae;xidcj^gtQnEv9E;@HkD`@u|6 zeCi*@J&59y1!kt=^8lE|iqAnXd5TY;BUtMcpBKR_R(#@0an2MUd%s@{W~Jhj3#Lqb z?Crb)%o@d~7);U(t{ZlrbAG{DOY!LgCR6cw5zIElC+;Zja}}QnV0J1#+rZ?BkG-A$ z1G8W8Y5yzs9mQuRm@>uZ8!!tLpOi8@A5(np0<&20*#;)|TKD~;;cqyTC_cGh5*44# zV3sRBiO2A)K=Bz1W~KPVV%-Q_l`4MR1}0VUY5zO+cg5!|Fr5^iF2`|35+D2cnG2?; z;3;#27a`eG*MsoiHDm|==fi$Af3i;w+WcNv&*icc<>*^1AT zU?wR(?|@mZ`1}dRr}(6w#2Tge+zMu{;`0iaV#VicFbfo)(_l_2K21-d?ut)8Fp2lG z-=hPQ0zYy5OaoJ(_!NLiQha^{vtIG3^B2xz;$uJ8^#HR~@yP{~Dn9me-4ZZ66rWGP zbW(gyf++nSYr3I=>jqdd25Y zFbRs!pntGeijRF9-UB9C@mUS#kmA$wU!2typJiZ56`uzG;jFIsEC5rc`1}keQ}OA7 z*N%=WK6AkISA2@WoK$=|MOAl(Dn9eToK}2(0y9SO=}-x;zdgY9C-iwH*PjhwauuJR zm8&~R;$t5_`Cz6hKBvJXD?US`t2?t5pEY1Sici}r)tz~Y&r4vMDL&1sR(J9hpL{SW ziq9!9s}-L?G1Z+^@kz!m5hZ&D`)e|ob&AhoFntuCO<=YtJ_o>zQG60&t2;%CPZuyg z#b*qdV#VhXFpI^@UY<|EG*f)i;xWb)p9x^n6rUAfwu+B^ zfByzdhT>DTMs=r5@#z4jkK!{HOwuf_tM>A20+X%yB%f8?$y9tMgYhapUxFDYKK6e9 z4@{2YlUfsFwfvh9%xh$3JO{=P7or(prbw>Pu|a0HVIt%rb3p?33-M_Yl8bBIqhMx6 z@F8;q%yPx2_u18*JjLfZFx$i@*;<~Dz${jLj(|C&_|!b7y0cR8xd2S`Y>qM07lDg) zzZ%RM#pfO{@ruv$U8pxfo2k_@tn-0&|D$lLO|o;37*MZp~KK6Eg7)+|-^ER0M;u9N~6!?kl{3n=BiqD00t2?EN z&m=HC6`wc299Mi!fyq*QE=j`JP<-wOGfeUM6ioDk?(0U!de|=%pXb2DD?T;rS9c~U zK6isjRD2GA@hLt7&&9oi;*$qvuHv&DOf$tNF1fn1K=HX0Ose8@FPPJ%9x_{+2!yHt6`ZmXXoZ@o~Op4;Os0G%Ihq#VqSj*F_CFYLe^D>w$#iv6G&f$vB zdtl}&K7G!^m{)wh0JBx`x#oO4BT{^R1QR{Sy?t_8;r?Cm`2$R*;xj!J&xjPCnAVts z<=+%x?j7!|9Q+M(+@x24nJT$L=MI@(ZNNmxMdkpQdE#Tv5`l|nfSk5?jugR%%rP+j zZ>5M_=Eu@7FC>?}%(hB_jB+%=^IjzX8LPIrKYTm}~L{ zIEPCvdzsHl$GI*-F8VwVW`6`9mgm9?@jNPm519|ZoE9H@-TQRFvjWBEQ!w#!Ip*y? z13Kb)l;ZORm}K!uWOd8`W|^}(VI5O^wuAA1|Ay&{+Ht|(W<%4No$-7_a)qv|WV&?0 zJ!6DiWXiz!zu6;luIDep-lXKZHUsBXCD+*(V;qW4I*Jf}FY^)@$Lqc~_2`QIU3^lk zK80Z76`zYQ!T3>p)`Ce=eA;E=?1$f+UIito9A&T9M}|>+hIhmIEI#&eSPUjj@wv7; z`b+Wo4orsPb9E0qZxNq()GlywJnsb4$Lro-SM|g_qxjh8#aCdm6`w0E#hFBW?CrAy zj92lwx)+|4C_cqtaulDDy|G4#Pw0Bc_W2&n6wRj(&Qayxd}7AWy^iCA)(rvYGcZMx zEA+X9`FC?=^hG;+?R{bXz0K%Jw@kdvaZX-jzGcPaip8ISIcOMjnct0@|9|-1xYY*m zcjI0^WfFb^`}mu0<1b$?_t}K<6y@;qO?44ts|0?k)Q^lO;%{lc7)-wSq{0WsfQpNb z(}jUg`My|M7P2aWYr`A0O?;%F@ccR>mzWs!@wAnWM8pDGXiBJEP~tb?&}}ZGBW2y4FGo$S7kOG^_x1x{#sk5hxCshi2CSVd%R4 zZuDUvj+Yy?tm}I0#TJefhOQ-00+kyQ{=j`bs%CTn|N9QqN=n6q`<#GOOhbzASV_VDgAVXIU6sNf2YZ&Zugj0o~ z>tiT|vXYq3!O}g+(3K4(O&Oh0U|hX;6z1e2VVL|A6o<6Oe8y$1rBHE|>PLpI8=ypovFC@O7FTzN%(};fp=$$_w7vFc_l0?w&q{I!VVL|h zl%Tj;mzewU_Usadu8RFJUb2reySfNN*RxPUa_?Y%w!B9ex~dGoDlwQnwgW9pJiBv+ zq3b0mE^(R9?r(<JXl&TFQR5c3<%q$H@!E`y?6bu9p82|7t!MzmoH<#V9#-2cgH7 zuvU|JV@g!*4#uhEya>i2?J?)<0pqsG`Tzcjf0YK~DHb-R*4QPLijTR~30&2?fC+fb zcl2atg4ruM)*XHPMP?tEIbQpm%ZA`dyX2VLb3d3xO3pkm2PMbco^QYuDLHkA;$1T( zr$3mGlJgdrlSZc} zm7F)gWJ=DtPv&@Br>t5^&P^ln4!Go)+w&xtEG1_bnD$Ce%?D9S$>|5CvyxK?#-rr? z0VY>+%>C2)AuvkLG%$lC$GraR0h6cX)E?6iDNu5%jK(!i$$1FO zBqe7bn5jxmi-+-UpyXKnTuM$c&cjh)W+^$#z${R5j$4e9bIlm6;Y!XRFojCaVlW$& zoFBlfQgZ4R;Cd=K=JU%7W{Z;Z5}5r;&KFiKC8ydWSi>d9{7KZlU?NJ+GBBx6^Lk;< zNgj)9rIK?Om`o*SF__az&c9%Cm7Fe*;u_b}ew|+eW`g9H=ksAOX-ZCgKh6uuF|QkW zVA7SGC17SLIX{BQP;wfK!(L0t=?5lL$$1S-P;$)cSQLy~$+`Y9yd$sVJO-w{lCu@e z3du1)?@b$zcQBQlE?~APIkUm^R&u@u6H#*NO~AE4$>|T~q~w^dUvGmcP;&kNlN{iA zYMzHJC*oS5>z!M4Kfi&3IkT0kdDpnFwZ!E+yxtX}FhBawdSuR&qW9lOZ{2vNyE8xS;rN6`#VV zHI$rtz+_2|c^=LM(^<)}K1C4vA3jC!%U%2wLEjPi!~66Y{GZPee1}^8`^%o)?IxAF zA4h`V;unwW@~6q*Nmu-ziJkrPE-<0T?Q@+0jza1 z=$dbI4HJg0*Pu9`q^miOBeB+Z!q8P?I<9d8>9QUtU6RnkF2c|?1&YHz^S**H9=C89^tyE%DvS*M*_$Ybeeq*g|UxC%P_umJD5YKyiEMY9c*h zeZld1Mi{z2h2j@i8>6ez3^H`x2_>A*T9=~_%Zih=CJIB>yHI?``OMP~$Hn5}cz+Kj zZMc1MjpxWP`Bo^d5p+F+_OKQ4uf_^P*IQ70K6}>>!q8Rid0aia&{YnF;wuHK-YE=S z6QKkz;_n}{dJBy#e$f>YhOXbB6yC*J*BM=HW|E<68WfMXyl}BX{Hrg8p{wpJ%+)(t zs}Gu&_-^u0Vdz>0C3FW}!;6n7_6Mt;7KW~-FJS)2tSe<4uL5D{S`Ee3gSFl=9#_h2 zGIVu-;_OG)4QLeSnnU_!k}!0wh7yrl$wpW87s=2y7)rF4Rm)jiJt7QUZ$U}Bj;;d$@xkEY7hQ*hp{vF` z^u|Q4HXiU~<1@em#{FAKCce^gmW&7ExR%vJ$Vu#<4~1d%6Hr3sc)rJv(rPx_aaE8E zT|J;U#K)qe#hfb1B#y;6Fu{9Sz0f!otAt_oU!gcs?Z=|gD`e>E4kaK* zYVOt9!qD|8lr*Vjc9mN|hOV2TL>KcM9Be!XM+rmMVkqtfbhU>oaV#Rj&{c6E`gwfG zeoh>VTfz8FkQs%3wvHtB;(0L|jPUu!Wbuit|FQ zmGN0=)n{9~3PaaqC@$#@bI)%OhOX04!cxoZy6!bHbmc*DjplKg_gYJYq3bXdpSW(d z4o6-*uEvYV&@}*xe=cj)!6?Vag08v3(6tRpRM~6&1E%mr`{ZjElVP$KN@NaQ&!RnS zMf|Io!qBw^O4@9D*T2Hh<$4{}$I@lqYYh;FuDOS5M0@3kfgL)Rxz3P;gpeF``JVp}V|L58l5P(m{6%zLfp zgrVzmDBj7eW!`Jmev=GceWCaQba~Mzt`-jI&H2L6^*NNZDRfmbx|+O2hOWnsu&p8F%wutL{5w=z0K3;5J?>U&nF9S5o}t?CW`9=-L9s(}u2_(Za;l#_=v0 zx~_%dn`nP67z-w#?6uwo<7&<7>(Iu;{y8cPtJf~Vid4@2`hK4TeO==u^$+90|%!IgM@uk;=ny4pgqerA!~b$PnQ zD0{69U>pNk{T<_2{3{HrXD-LCTlPQk8D~v5&blGO(DgDDha9Q7SHBX5u1i*6wn#0r ztD`VV^Q~gGIVu@;+SAR7V|8Zve()HCamPt zTnXk~w$Oa;bQOjzoB|~x*GltvZ4id8-z`OY!`$;tJ|II^A1G0&Wp)LHq3bg!frk9P ztyfFTBZthWdaKCLH5f|x9`;6Sj8}PU3Z8v&9xfDyu02rv57K3QjxpXNbd_68hOXQv{*HEJJObLW4>oq72xuc(9bXDC*hOS4Ugk0>^XN|6pg`w->P1uj!WAD0G7`oSOO3EDT+{pagHEtC6wRO&^h= zYatY0HeFX5T|Wy$*EJtwjy0vrx_YMZu;ko(NEo`_hvI#JuI@%xsjXz_YHcaa=`z=P zOBlMUY{T5>PM5jXIAQ2I1jY3l=e+d}!X*jE)oD8!x|Tx;EVOt1BMe&_AzX}UOS5g@3k39P_yRwC$Ybcbc zJnb>NUK56{eNcjKj+b>;n|RHwu!9U;H$n;I(KXoU8ZHc7^P!|kt;gZAb|JAB`{i?C z=(=zxdR1!SgV2WS;0?mi)gMZ9B*&`_T#2jbOTy5#6^gHruGip7TsQs|hOVo2;o9Wn z9_dY^tG_UG&4W_dfG%qlP25ZD7ly7%yD=8^=)%YR41MSkhOQ@|1TLd%k+Fqqg`w*= zC{DTNz5!R_+-Ue28M?Yc@!!O`VYM*vxTXq2*9TC%{pfnm*utnVbk+JC=hs^tFY7r; z;<W!|elDhyq3KyfIp zZ-k-i;x91gJ92I;z;Pwc!#2XuHNsMI==#~%^NWO`YY!CPLv)$<>ZxCnp{oUy&@j5b zGS>15L)Sbg-Zkt)^ImIKCwJ#XHt&lZNRtx%#K9@i!u zSK|IT=_@jHHH8vb#}=AhgM^{$B`CqstYw{FiM2ixhOROPaIJjAs>QwfT~MO(OxV0v ze@PhTd}HOvvu^WVz0=oZ=voaW_zsWMyjL$1Aw$>gP+an?z`R#qB@A5+zQG)mdl~bt zd$=%kEr$}7yDhWpf^W&tbt{xWD~^SE*ZsaQbk+Y3^Lc>1Yo;)CB^^YsK1i2&uRdHD zy1syp^tpah@jb)ten6 zL)Sbgks);TG`bE6Ls!GY=tG~qYnCu{mHH7gvn^fb7TzWdT~nY$mvhcPj}|8G)&CHN zt{y+3h40zB770Vwk5EFZ=`!!SyB;A!*BU6!Rdktm_@$4Mq3c#C4tXMN-aq?=q3c~J zA$d+~b{!Rlu3A5%=j92W+0|7Tx}JpMlhxR~SN~8Lx_*Y@l6BR*SFiI68M^L-5*)?3 zVcvB=E(~4EphWJV>v62%i97tCgrTd(F;rj6@iOnaI|xJ97$}AF=rZr{-x7wdub?<; za*t%*30I4fq3d=i;reu$cioeOp=%8kcOAOS_XU3mLsyeuaeigcWxg*MA`D#%p+uw) z&3pBI!q8RbIF3|C*}Ut{7KW~YP&_iq<{f@e7`i@%;tz4W%zO2u6J+RW0>vY}VcrQ3 z5r(dXP~7S4L-St!YhmcBbQ0BT+q>=%hOUWFTrxMzJN$LR(Dert_Zq%8(Ew*k{Ka=| z8~uj%%qC<0j`;h*IM$NMh=<@S<^;e5&~>r*q|7<%!Gx5YQ()5O*yl7ng&gI$?z0%> zxTb;eD>-Yx1eKg$!MK&jJv{g z0ppp#TITl52UBR%p8xNksIUv|$;LL`x+_g86@LPOzseo>#ebp?d&Nd6#<1t&%5(S&WkNG?@L86JL9*zT+I*1!k|3Q|(`@KT1w6 zn1f2re2bBsx@bjwdaym8gNZ6R_Ed%{gu`XOx_gU>Zw~c};l3s@2hMdBdEC2$$yIV*0W(!{%CQr$^ z?!r{Z0?9Ft`=em;m7J|$iX_K;TxCk**p-~tU_z2(UJvJinX2Uc1t#{r9@aJY-0u+K z$n`3d>ezjrT4c6?nRT98WSXX=Iu1*Y`PhepS#X{l&Y!oyoRl2%oIeDnP|2xP7VD4X znA_76%qk^kA(#~0V8-?>=CSw_%oZi*j*C(q>5`MoZae!Yk9|6r-Ac|bFiy#__Qr{8 zcxt&+M?}eK3noW$8X9xPf;p<>EC-V>Io3It*q#$$PAfUrq+&ixPV(7);s4k_1HdHr zvA-591QSqlz5$b_X@PA+zTdM$(ademgJbnD-0$>$tha_Yl7rh_g0Dh+zL#l zk~0R(VaYL%*K#m!CFcYf#|)kq=JC4v;#5a_C8s}_WF==Im~KkWH(*kfoXgWv9le#D z`@p11j(NPE1>;k4wt~r&9P{~=R58_2pyadwMsm#ac?y_RC1>%lngYhF7?8s$-Cn^C+0u_xM=z=iKiMV(1|-1?Qcq z`8>7AybmTIIp$+O1!lr|a(GIp+TP1w=O3v3{R!B|*EN_YTGS%wiIg*ld2bhTDn8)i0Fu6+38ZfCd z?a!}2!Q?49O|QW9U2@FhH55#~lCv00hLUp-j9966enWFojA^rG_|mB_{{WDkbL;Fmoj5 zN@IK81+zuT`O#t|=W1h4tt+vgS8}?5IW0NnX9ZKhM3kJhV4SmfUR-5t&+lN4Dmhm* z!nrIt*BWzrf;p|^%mgz*ac)$2^~}2a~4c3d)oatu5;Hi2##u3qdih9 z#gYx?0wt$Em>EjWGB80Ur+y|FCFeOX zg_7gKv`Rb&4}e*!q!(4SX&owpYK#*q$L^HYhn?f^jQ3^_t^3 zl9DqRj8AgRYwvqt_A5F6f>|Ir*BOs1CkyMCk~1C5Udb`H=N~X9m7IasW6y@qBgOjJ z+@8H)9R2OD1#NFYKTD4FJsOGg=WQ^lN>0rdI0u!SK47XVId6bjAvw*A?fDH%JtgPH zY}|h-Ig7!#l$#*ob_OGl$^i8WGOk#TH-m9k~0*H zTXL*t4vFKw5R6yJ`O>PTj(Jb}2$)ey&bt<)_{tWa{6fGJXPegv~c$!X9E&xn+qK4A7L zIYBVnl$6 zR?4~mSp2tE9dO@to?0|K2gWBk*0~&iadn7*IeMNPGL1T7J}WsdfjO<@Tzm)Ss*-ar znB;->*Mfy$f=W&`5AFw*oF~B)DmkBlNmp`e---Q(k~0`ghLZC>n6Q%5xD%cuDLM1N zM3kIM?!rD?$(aZyDmgApp2WTSZ(!OhIej|gdK%=pY|eQTOgAOxcQ78wG2i36yWkm- zlJg`OzmoF@7@v~U|8C45$uZvx?*mhyI~`1QC1*336-v(EVCpG3 z*LBB!L&?bl<5F^70<%}i*$F0F$tmN-+)#2_fyq&F9szS&$@u_GXC>zkFe$I_{4$SM zvmV$#D>);;R9AA|1~W*>IR+*}a?JC&UQe7mO3poCvL(lSTu+0UpyX@>(_YE>3rs-C zY0?Y#UrJ72Fmsfg7r_ita`u5)q~uiVjccXknESaCm?9--8km6OnEUx-Fd-$UOdnk1 zl$^F;wkbK|!8l9B?!#lBb;Mu(^Rj+3ROEm7%}|3o%WsAnIiy#9pHaQ~`0}sr)r)b{ zQ7f=66+1QOd4KEEn-=q4F>}_q8A{qY%GXdl@0Vo$fD&3&QmNWE)#3QCq>>56x3Q#h zHx$n~Og@z0Im$CoLg%=aK?(CH&bDwjl(f|)lYfQcTwhYD*bmG(IoCq*55=7pGXC51 z7Zi6{E*PJ}Otg{}W(gRt!t4U$R+vA*xD=*#9!5}M+JkW_%m^?J8|MG}yOm$Cj_d5W zTjOQzJQMGZSAi*%v+~?sQ}K{GB4GBO=d2`?+@EK``D@h$vqGuW8q7hZRxdEI^XvSz z#(@bbwSr)xO06|uVrTC8Ykdu7i&D!m08et1TD8H%):?daMv>|Xh^4VbXhN{61f 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