diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml deleted file mode 120000 index 8b5fdf87..00000000 --- a/.markdownlint-cli2.yaml +++ /dev/null @@ -1 +0,0 @@ -builders/etc/.markdownlint-cli2.yaml \ No newline at end of file diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml new file mode 100644 index 00000000..df968a89 --- /dev/null +++ b/.markdownlint-cli2.yaml @@ -0,0 +1,44 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +config: + line-length: + line_length: 120 + #stern: true + code_blocks: false + tables: false + + # these are apparently in conflict with prettier's markdown formatting + list-marker-space: false + list-indent: false + ul-indent: false + + headings: false + + proper-names: + code_blocks: false + names: + - CommonMark + - JavaScript + - Markdown + - markdown-it + - markdownlint + - markdownlint-cli2 + - Node.js + +fix: true + +ignores: +- CHANGELOG.md +- google_internal/LATEST_RELEASE.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 88cd0a88..1b899f3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [2.6.0](https://github.com/privacysandbox/aggregation-service/compare/v2.5.0...v2.6.0) (2024-07-19) + +- Enabled support for + [Aggregate Debug Reporting API](https://github.com/WICG/attribution-reporting-api/blob/main/aggregate_debug_reporting.md). +- Reduced memory usage by making `AggregatedFacts` mutable and removing redundant object creation. +- Updated dependencies to address security vulnerabilities. +- Upgraded control plane shared library dependency to + [v1.9.0-rc03](https://github.com/privacysandbox/coordinator-services-and-shared-libraries/releases/tag/v1.9.0-rc03) + +## [2.5.1](https://github.com/privacysandbox/aggregation-service/compare/v2.5.0...v2.5.1) (2024-07-19) + +- Updated dependencies to address security vulnerabilities. + ## [2.5.0](https://github.com/privacysandbox/aggregation-service/compare/v2.4.2...v2.5.0) (2024-05-22) ### Changes @@ -25,6 +38,12 @@ - Upgraded control plane shared library dependency to [v1.8.0-rc01](https://github.com/privacysandbox/coordinator-services-and-shared-libraries/releases/tag/v1.8.0-rc01) +## [2.4.4](https://github.com/privacysandbox/aggregation-service/compare/v2.4.3...v2.4.4) (2024-07-19) + +### Changes + +- Updated dependencies to address security vulnerabilities. + ## [2.4.3](https://github.com/privacysandbox/aggregation-service/compare/v2.4.2...v2.4.3) (2024-05-20) ### Changes @@ -60,6 +79,12 @@ - Used RxJava for domain reading, reducing overall job execution time and memory consumption. - Upgraded Bazel version to 6.5.0. +## [2.3.4](https://github.com/privacysandbox/aggregation-service/compare/v2.3.3...v2.3.4) (2024-07-19) + +### Changes + +- Updated dependencies to address security vulnerabilities. + ## [2.3.3](https://github.com/privacysandbox/aggregation-service/compare/v2.3.2...v2.3.3) (2024-05-20) ### Changes diff --git a/VERSION b/VERSION index 437459cd..e70b4523 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.0 +2.6.0 diff --git a/WORKSPACE b/WORKSPACE index 2a801876..f8e2f725 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -24,7 +24,7 @@ PROTOBUF_CORE_VERSION = "3.25.2" PROTOBUF_SHA_256 = "3c83e4301b968d0b4f29a0c29c0b3cde1da81d790ffd344b111c523ba1954392" -COORDINATOR_VERSION = "v1.8.0-rc01" # version updated on 2024-05-20 +COORDINATOR_VERSION = "v1.9.0-rc03" # version updated on 2024-07-17 JACKSON_VERSION = "2.16.1" @@ -79,6 +79,7 @@ git_repository( remote = "https://github.com/privacysandbox/coordinator-services-and-shared-libraries", patches = [ "//build_defs/shared_libraries:coordinator.patch", + "//build_defs/shared_libraries:rules_pkg_build_fix.patch", ], tag = COORDINATOR_VERSION, workspace_file = "@shared_libraries_workspace//file", @@ -163,6 +164,7 @@ maven_install( "io.github.resilience4j:resilience4j-retry:1.7.1", "junit:junit:4.13.2", "org.apache.avro:avro:1.11.3", + "org.apache.commons:commons-compress:1.26.2", "org.apache.commons:commons-math3:3.6.1", "org.apache.httpcomponents:httpcore:4.4.16", "org.apache.httpcomponents:httpclient:4.5.14", diff --git a/build-scripts/DEBIAN_CONTAINER_DIGEST b/build-scripts/DEBIAN_CONTAINER_DIGEST index 1a6b5aba..9a04a244 100644 --- a/build-scripts/DEBIAN_CONTAINER_DIGEST +++ b/build-scripts/DEBIAN_CONTAINER_DIGEST @@ -1 +1 @@ -sha256:911821c26cc366231183098f489068afff2d55cf56911cb5b7bd32796538dfe1 +sha256:39868a6f452462b70cf720a8daff250c63e7342970e749059c105bf7c1e8eeaf diff --git a/build-scripts/aws/publish.sh b/build-scripts/aws/publish.sh index c41d18f6..84c17e98 100644 --- a/build-scripts/aws/publish.sh +++ b/build-scripts/aws/publish.sh @@ -36,3 +36,7 @@ bazel run //terraform/aws:aws_frontend_cleanup_handler_lambda_release \ bazel run //terraform/aws:local_testing_tool_release \ --//terraform/aws:bucket_flag=$JARS_PUBLISH_BUCKET --//terraform/aws:bucket_path_flag=$JARS_PUBLISH_BUCKET_PATH \ -- --version=$VERSION + +bazel run //terraform/aws:privacy_budget_unit_extraction_tool_release \ +--//terraform/aws:bucket_flag=$JARS_PUBLISH_BUCKET --//terraform/aws:bucket_path_flag=$JARS_PUBLISH_BUCKET_PATH \ +-- --version=$VERSION diff --git a/build-scripts/gcp/cloudbuild.yaml b/build-scripts/gcp/cloudbuild.yaml index d4661bfe..dc8ba284 100644 --- a/build-scripts/gcp/cloudbuild.yaml +++ b/build-scripts/gcp/cloudbuild.yaml @@ -25,6 +25,9 @@ steps: bazel run //terraform/gcp:local_testing_tool_release \ --//terraform/gcp:bucket_flag=$_JARS_PUBLISH_BUCKET --//terraform/gcp:bucket_path_flag=$_JARS_PUBLISH_BUCKET_PATH \ -- --version=$_VERSION + bazel run //terraform/gcp:privacy_budget_unit_extraction_tool_release \ + --//terraform/gcp:bucket_flag=$_JARS_PUBLISH_BUCKET --//terraform/gcp:bucket_path_flag=$_JARS_PUBLISH_BUCKET_PATH \ + -- --version=$_VERSION automapSubstitutions: true options: diff --git a/build_defs/container_dependencies.bzl b/build_defs/container_dependencies.bzl index 16510bb0..7c270a6f 100644 --- a/build_defs/container_dependencies.bzl +++ b/build_defs/container_dependencies.bzl @@ -24,11 +24,11 @@ # - java_base: Distroless image for running Java. ################################################################################ -# Updated as of: 2024-05-13 +# Updated as of: 2024-07-19 CONTAINER_DEPS = { "amazonlinux_2": { - "digest": "sha256:f165b1429c7b1dd0ca0eadd32507dd4b6bb410f96828ddd1bdf2141f0f21d475", + "digest": "sha256:7081389e0a1d55d5c05a6bab72fb8a82b37c72a724365c6104c7fbc5bcdb2e09", "registry": "index.docker.io", "repository": "amazonlinux", }, @@ -38,7 +38,7 @@ CONTAINER_DEPS = { "repository": "aws-observability/aws-otel-collector", }, "java_base": { - "digest": "sha256:d1ebe3d183e2e6bd09d4fd8f2cf0206693a3bca1858afe393ceb3161b5268f40", + "digest": "sha256:c7846b62436ccf2961972fea5b776527610a1a51b48d8e7b434287146904cf2d", "registry": "gcr.io", "repository": "distroless/java17-debian11", }, diff --git a/build_defs/shared_libraries/rules_pkg_build_fix.patch b/build_defs/shared_libraries/rules_pkg_build_fix.patch new file mode 100644 index 00000000..f447f7dd --- /dev/null +++ b/build_defs/shared_libraries/rules_pkg_build_fix.patch @@ -0,0 +1,227 @@ +diff --git a/BUILD b/BUILD +index 12cf08abb..9e25a6747 100644 +--- a/BUILD ++++ b/BUILD +@@ -12,7 +12,6 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + +-load("@bazel_skylib//rules:copy_directory.bzl", "copy_directory") + load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier") + load("@rules_pkg//:mappings.bzl", "pkg_files") + load("@rules_pkg//:pkg.bzl", "pkg_tar") +@@ -30,53 +29,6 @@ buildifier( + mode = "fix", + ) + +-# pkg_tar no longer allows directories to be specified. +-# Must use copy_directory to create Tree Artifacts. +-# https://github.com/bazelbuild/rules_pkg/issues/611 +-# +-# The srcs directory is prefixed to avoid the error conflicting with +-# other build rules: +-# "One of the output paths ... is a prefix of the other. +-# These actions cannot be simultaneously present; +-# please rename one of the output files or build just one of them" +-# It will be stripped by pkg_tar remap_paths. +- +-copy_directory( +- name = "build_defs_dir", +- src = "build_defs", +- out = "srcs/build_defs", +-) +- +-copy_directory( +- name = "cc_dir", +- src = "cc", +- out = "srcs/cc", +-) +- +-copy_directory( +- name = "java_dir", +- src = "java", +- out = "srcs/java", +-) +- +-copy_directory( +- name = "javatests_dir", +- src = "javatests", +- out = "srcs/javatests", +-) +- +-copy_directory( +- name = "licenses_dir", +- src = "licenses", +- out = "srcs/licenses", +-) +- +-copy_directory( +- name = "operator_dir", +- src = "operator", +- out = "srcs/operator", +-) +- + # This rule is used to copy the source code from other bazel rules. + # This can be used for reproducible builds. + # Only cc targets are needed at this point, so only the files needed to build +@@ -88,18 +40,15 @@ pkg_tar( + ".bazelversion", + "BUILD", + "WORKSPACE", +- ":build_defs_dir", +- ":cc_dir", +- ":java_dir", +- ":javatests_dir", +- ":licenses_dir", +- ":operator_dir", ++ "build_defs", ++ "cc", ++ "java", ++ "javatests", ++ "licenses", ++ "operator", + ] + glob(["*.bzl"]), + mode = "0777", + package_dir = "scp", +- remap_paths = { +- "srcs/": "", +- }, + ) + + pkg_files( +diff --git a/build_defs/aws/kmstool/kmstool.BUILD b/build_defs/aws/kmstool/kmstool.BUILD +index 022ca6791..5a5d95a2e 100644 +--- a/build_defs/aws/kmstool/kmstool.BUILD ++++ b/build_defs/aws/kmstool/kmstool.BUILD +@@ -1,62 +1,19 @@ +-load("@bazel_skylib//rules:copy_directory.bzl", "copy_directory") + load("@rules_pkg//:pkg.bzl", "pkg_tar") + + package(default_visibility = ["//visibility:public"]) + + exports_files(glob(["*"])) + +-copy_directory( +- name = "bin_dir", +- src = "bin", +- out = "bin", +-) +- +-copy_directory( +- name = "cmake_dir", +- src = "cmake", +- out = "cmake", +-) +- +-copy_directory( +- name = "containers_dir", +- src = "containers", +- out = "containers", +-) +- +-copy_directory( +- name = "docs_dir", +- src = "docs", +- out = "docs", +-) +- +-copy_directory( +- name = "include_dir", +- src = "include", +- out = "include", +-) +- +-copy_directory( +- name = "source_dir", +- src = "source", +- out = "source", +-) +- +-copy_directory( +- name = "tests_dir", +- src = "tests", +- out = "tests", +-) +- + pkg_tar( + name = "source_code_tar", + srcs = [ +- ":bin_dir", +- ":cmake_dir", +- ":containers_dir", +- ":docs_dir", +- ":include_dir", +- ":source_dir", +- ":tests_dir", ++ "bin", ++ "cmake", ++ "containers", ++ "docs", ++ "include", ++ "source", ++ "tests", + ] + glob(["*"]), + mode = "0777", + package_dir = "aws_nitro_enclaves_sdk_c", +diff --git a/operator/terraform/aws/environments/demo/BUILD b/operator/terraform/aws/environments/demo/BUILD +index 82726daf5..fdde467c2 100644 +--- a/operator/terraform/aws/environments/demo/BUILD ++++ b/operator/terraform/aws/environments/demo/BUILD +@@ -64,20 +64,20 @@ pkg_files( + # copied. + pkg_mklink( + name = "operator_service_link", +- link_name = "demo/operator_service.tf", +- target = "../shared/operator_service.tf", ++ src = "../shared/operator_service.tf", ++ dest = "demo/operator_service.tf", + ) + + pkg_mklink( + name = "operator_service_vars_link", +- link_name = "demo/operator_service_variables.tf", +- target = "../shared/operator_service_variables.tf", ++ src = "../shared/operator_service_variables.tf", ++ dest = "demo/operator_service_variables.tf", + ) + + pkg_mklink( + name = "ami_params_link", +- link_name = "demo/ami_params.auto.tfvars", +- target = "../shared/ami_params.auto.tfvars", ++ src = "../shared/ami_params.auto.tfvars", ++ dest = "demo/ami_params.auto.tfvars", + ) + + pkg_filegroup( +diff --git a/operator/terraform/gcp/environments/demo/BUILD b/operator/terraform/gcp/environments/demo/BUILD +index 5f5d9f54d..ee109ecf9 100644 +--- a/operator/terraform/gcp/environments/demo/BUILD ++++ b/operator/terraform/gcp/environments/demo/BUILD +@@ -20,20 +20,20 @@ package(default_visibility = ["//visibility:public"]) + # copied. + pkg_mklink( + name = "job_service_link", +- link_name = "demo/job_service.tf", +- target = "../shared/job_service.tf", ++ src = "../shared/job_service.tf", ++ dest = "demo/job_service.tf", + ) + + pkg_mklink( + name = "job_service_vars_link", +- link_name = "demo/job_service_variables.tf", +- target = "../shared/job_service_variables.tf", ++ src = "../shared/job_service_variables.tf", ++ dest = "demo/job_service_variables.tf", + ) + + pkg_mklink( + name = "job_service_outputs_link", +- link_name = "demo/job_service_outputs.tf", +- target = "../shared/job_service_outputs.tf", ++ src = "../shared/job_service_outputs.tf", ++ dest = "demo/job_service_outputs.tf", + ) + + pkg_files( diff --git a/docs/api.md b/docs/api.md index 93d6d93a..ad8dd809 100644 --- a/docs/api.md +++ b/docs/api.md @@ -78,12 +78,17 @@ POST // aggregation due to an error, will fail the job. // Values can be from 0 to 100. If left empty, default value of 10% // will be used, - "report_error_threshold_percentage": + "report_error_threshold_percentage": , // [Optional] Total number of reports provided as input data for this job. // This value, in conjunction with "report_error_threshold_percentage" will // enable early failure of the job when reports are excluded due to errors. - "input_report_count": + "input_report_count": , + + // [Optional] A list of unsigned filtering IDs separated by comma. All the + // contribtions other than the matching filtering ID will be filtered out. + // e.g. "filtering_ids":"12345,34455,12". Default value is "0". + "filtering_ids":, // [Optional] When executing a debug run, noised and unnoised debug summary // report and annotations are added to indicate which keys are present in the @@ -237,7 +242,11 @@ Not found: 404 Not Found // [Optional] Total number of reports provided as input data for this job. // This value, in conjunction with "report_error_threshold_percentage" will // enable early failure of the job when reports are excluded due to errors. - "input_report_count": + "input_report_count": , + // [Optional] A list of unsigned filtering IDs separated by comma. All the + // contribtions other than the matching filtering ID will be filtered out. + // e.g. "filtering_ids":"12345,34455,12". Default value is "0". + "filtering_ids":, }, // The time when worker starts processing request in the latest processing // attempt @@ -397,15 +406,8 @@ If the invalid reports in a job exceed the `report_error_threshold_percentage` ( [createJob](#createjob-endpoint) request job parameters above), the job will fail with REPORTS_WITH_ERRORS_EXCEEDED_THRESHOLD error. -Invalid aggregatable report error counters corresponding to various validations - - -| shared_info field | ErrorCode | Error Reason | -| --------------------- | ------------------------------- | ---------------------------------------------- | -| api | UNSUPPORTED_REPORT_API_TYPE | api is unsupported | -| report_id | INVALID_REPORT_ID | report_id is empty | -| reporting_origin | ATTRIBUTION_REPORT_TO_MALFORMED | syntactically invalid domain | -| scheduled_report_time | ORIGINAL_REPORT_TIME_TOO_OLD | older than 90 days at the time of aggregation. | -| version | UNSUPPORTED_SHAREDINFO_VERSION | unsupported report shared_info.version | +A summary of all report error counters along with their mitigations can be found in +[Aggregation Service Report Error Codes and Mitigations](/docs/error-codes-and-mitigation.md#aggregation-service-report-error-codes-and-mitigations). If report `shared_info.version` is higher than supported major version, the aggregation job will fail without consuming privacy budget with `result_info.return_code` UNSUPPORTED_REPORT_VERSION. diff --git a/docs/error-codes-and-mitigation.md b/docs/error-codes-and-mitigation.md new file mode 100644 index 00000000..e24e5f74 --- /dev/null +++ b/docs/error-codes-and-mitigation.md @@ -0,0 +1,49 @@ +# Error Codes and Mitigations for Aggregation Service + +## Aggregation Service Return Codes and Mitigations + +This section covers the return code provided by the Aggregation Service job once it finishes +running. The `return_code` field within the `result_info` section of the getJob API response will +provide these return codes listed in [/docs/api.md#getjob-endpoint](/docs/api.md#getjob-endpoint). + +| Return Code | Message | When does this error happen? | Job can be retried | Adtech actionable? | Mitigation | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| SUCCESS | Aggregation Job completed successfully. | Aggregation Job completed successfully. | N/A | N/A | N/A | +| SUCCESS_WITH_ERRORS | "Aggregation job successfully processed but some reports have errors." | Some of the reports had processing errors. | No | No | Check the Error Summary to see Aggregation Service Report Error Codes. More details about error summary at [/docs/api.md#error-response-body-1](/docs/api.md#error-response-body-1) | +| PRIVACY_BUDGET_EXHAUSTED | "Insufficient privacy budget for one or more aggregatable reports. No aggregatable report can appear in more than one aggregation job." | When a job is trying to process reports that have been processed before or have the same shared ID as another report that is already processed. | No | Yes | Remove reports that have shared IDs with no budget left. Note: All reports regardless of production or debug endpoint will need to be batched according to shared ID. If you have a batch where the shared ID both exists in production and debug, you will encounter a privacy budget exhausted error. See our batching strategies [/docs/batching-strategies.md](/docs/batching-strategies.md) for more information. | +| PRIVACY_BUDGET_ERROR | "Exception while consuming privacy budget. Exception message: " + {exception message} | An error happened while consuming the privacy budget. | Yes | Yes | Retry the job. We also recommend each batch to be per advertiser or destination. Batching strategies can be found at [/docs/batching-strategies.md](/docs/batching-strategies.md) | +| INVALID_JOB | "Error due to validation exception." | When the job parameters fail validation. | Yes | Yes | Correct the job parameters for the job based on the validation message returned. Please see the createJob request parameter documentation for more details : [/docs/api.md#payload](/docs/api.md#payload) | +| RESULT_WRITE_ERROR | "Exception occured while writing result." | When the write to the output directory fails. | No | Yes | 1. Check that the account running Aggregation Service has write permissions for the output directory. 2. If a budget recovery process is available then contact Aggregation Service support for recovering the budget. | +| INTERNAL_ERROR | "Exception in processing domain." or "Internal Service Exception when processing reports." | An error occurred while processing output domains or Internal Error encountered. | Yes | Yes | Ensure that output domain location is a valid path. Retry the job. If error persists, contact Aggregation Service support. | +| UNSUPPORTED_REPORT_VERSION | "Exception due to unsupported report version" | An aggregatable report with a higher major sharedInfo version was provided and Aggregation Service is not up-to-date to support this version. | No | Yes | Update Aggregation Service deployment to a version that supports the report versions. | +| PERMISSION_ERROR | "Exception because of missing permission." | Aggregation service did not have access to storage or other requested resources. | No | Yes | 1. Ensure that Aggregation Service has access to the storage and requested resources to run the job. 2. This could be due to permission error while fetching decryption keys. Ensure that the account running Aggregation Service is the same as the one provided during onboarding. | +| INPUT_DATA_READ_FAILED | "No report shards found for location: " + reportsLocationor "Exception while reading reports input data." or "Exception while reading domain input data." | No reports or output domain shards were found, or the Aggregation Service was unable to read them. | Yes | Yes | 1.Ensure that the input report data location has the reports to be processed. 2.Ensure that the job has the right permissions to read the input/domain shards. Make sure the worker/job has the correct permissions to read the shards. 3.Ensure that the input_data_bucket_name, input_data_blob_prefix, output_data_bucket_name and output_data_blob_prefix fields are correct in your createJob request | +| DEBUG_SUCCESS_WITH_PRIVACY_BUDGET_ERROR | "Aggregation would have failed in non-debug mode due to a privacy budget error." | Job run using debug_run param succeeded but would have failed due to privacy budget error if run in normal mode. | Yes | No | N/A | +| DEBUG_SUCCESS_WITH_PRIVACY_BUDGET_EXHAUSTED | "Aggregation would have failed in non-debug mode due to privacy budget exhaustion" | Job running in Debug Mode succeeded but would have failed if running in non-debug mode due to privacy budget exhaustion. | Yes | No | N/A | +| REPORTS_WITH_ERRORS_EXCEEDED_THRESHOLD | "Aggregation job failed early because the number of reports excluded from aggregation exceeded threshold." | The number reports with an issue exceeded the threshold. | Yes. | Yes | Check the Error Summary to see Aggregation Service Report Error Codes. Retry the job once reports with errors are removed from the batch. | +| PRIVACY_BUDGET_AUTHENTICATION_ERROR | "Aggregation service is not authenticated to call privacy budget service. This could happen due to a misconfiguration during enrollment. Please contact support for resolution." | Aggregation Service is not set up correctly for Aggregatable report accounting. | Yes, retry after setup is fixed. | Yes | Check that the account running the Aggregation Service matches the account that was provided during onboarding. | +| PRIVACY_BUDGET_AUTHORIZATION_ERROR | "Aggregation service is not authorized to call privacy budget service. This could happen if the createJob API job_paramaters.attribution_report_to does not match the one registered at enrollment. Please verify and contact support if needed." | The attribution reporting origin in the job parameters doesn't match the one registered during enrollment. | Yes, retry after changing the reporting origin job parameter. | Yes | Correct the job parameter `attribution_report_to`. | + +## Aggregation Service Report Error Codes and Mitigations + +This section covers the report-level errors present in the error summary. These are reports excluded +from aggregation due to errors and can be found in the `getJob` response +`result_info.error_summary.error_counts`. See +[/docs/api.md#error-response-body-1](/docs/api.md#error-response-body-1) for more details. + +| Return Code | Message | When does this error happen? | Mitigation | +| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DECRYPTION_KEY_NOT_FOUND | "Could not find decryption key on private key endpoint." | The key_id supplied in the report's payload was not found. | For Attribution Reporting API, this error may be caused by an issue with the trigger registration. Check that the trigger has been registered with the correct cloud using the `aggregation_coordinator_origin` field (instructions here: [AGGREGATE.md#data-processing-through-a-secure-aggregation-service in github.com/WICG/attribution-reporting-api](https://github.com/WICG/attribution-reporting-api/blob/main/AGGREGATE.md#data-processing-through-a-secure-aggregation-service)). This can also happen when aggregatable reports encrypted for one cloud are aggregated with an Aggregation service running on another cloud provider. Validate the public key endpoint used to encrypt the aggregatable reports. On your raw aggregatable report received in your .well-known reporting endpoint, you should be able to see the `aggregation_coordinator_origin` field. For GCP, the value should be `https://publickeyservice.msmt.gcp.privacysandboxservices.com`. For AWS, it's `https://publickeyservice.msmt.aws.privacysandboxservices.com`. If `aggregation_coordinator_origin` is not stated in the Attribution Reporting API / Private Aggregation API, the default will be AWS. For Attribution Reporting API, you can specify your cloud provider by passing it in the trigger registration. For Private Aggregation API, you will have to define the `aggregationCoordinatorOrigin` using the example in Aggregation coordinator choice section in the Private Aggregation API explainer. Please specify `https://publickeyservice.msmt.gcp.privacysandboxservices.com` as the "aggregationCoordinatorOrigin". | +| DECRYPTION_KEY_FETCH_ERROR | "Fetching the decryption key for report decryption failed. This can happen using an unapproved aggregation service binary, running the aggregation service binary in debug mode, key corruption or service availability issues." | This happens if running an unapproved Aggregation Service binary or due to Key Service issues. | No action required in case of Key Service disruptions. Job can be retried. In case of unapproved binary, using the right binary will fix the issue. Follow instructions here to use prebuilt image or self-build your image: [/docs/aws-aggregation-service.md#download-terraform-scripts-and-prebuilt-dependencies](/docs/aws-aggregation-service.md#download-terraform-scripts-and-prebuilt-dependencies) | +| DECRYPTION_ERROR | "Unable to decrypt the report. This may be caused by: a tampered aggregatable report file, a corrupt encrypted report, or other such issues." | This happens when report decryption fails. | 1. Ensure that the Aggregatable AVRO reports are generated correctly. Payload will need to be base64 decoded and converted into a byte array. More information on how to generate an AVRO report can be found at [/docs/collecting.md#convert-the-aggregatable-report-into-avro-binary-representation](/docs/collecting.md#convert-the-aggregatable-report-into-avro-binary-representation) 2. Ensure that the report is in avro format. 3.Check if the output domain AVRO is correct. Buckets are converted to escaped unicode hex format and then converted into a byte array. Contact Aggregation Service support for next steps. | +| ATTRIBUTION_REPORT_TO_MALFORMED | Report's reporting_origin domain is malformed. Domain must be syntactically valid and have an Effective Top Level Domain (eTLD). | This happens when the reporting origin's domain is malformed/invalid. | Ensure that the reports have a valid reporting origin domain. | +| ATTRIBUTION_REPORT_TO_MISMATCH | Report's reporting_origin value does not match attribution_report_to value set in the Aggregation job parameters. Aggregation request job parameters must have attribution_report_to set to report's reporting_origin value. | This occurs when there is a mismatch between the report's origin and the aggregation job parameters. | Change the reporting origin in the job parameter attribution_report_to to match the reporting origin of the reports being processed. | +| DEBUG_NOT_ENABLED | "Reports without .debug_mode enabled cannot be processed in a debug run." | This happens when the job is trying to process reports without debug mode enabled in a debug run. | Process only debug mode enabled reports in the debug run. A debug run only considers reports that have the flag "debug_mode": "enabled" in the report shared_info, see example at: [collecting.md#aggregatable-report-sample](/docs/collecting.md#aggregatable-report-sample) | +| NUM_REPORTS_WITH_ERRORS | "Total number of reports had an error. These reports were not considered in aggregation. See additional error messages for details on specific reasons. | This indicates that some reports had errors and were excluded from aggregation. | Exclude the processed reports and rerun the job with the unprocessed reports. | +| ORIGINAL_REPORT_TIME_TOO_OLD | "Report's scheduled_report_time is too old, reports cannot be older than 90 days." | This error occurs when the report's timestamp is older than the allowed 90-day limit. | N/A - The reports are too old to be processed. | +| INTERNAL_ERROR | "Internal error occurred during operation." | An internal error within the Aggregation Service service during operation. | Retry the job. If you encounter repeated Internal Errors, contact Aggregation Service support for help. | +| UNSUPPORTED_OPERATION | "Report's operation is unsupported. Supported operations are {SUPPORTED_OPERATIONS}." | This means that the report's operation is not among the supported operations. | N/A - The report's operation is not supported by Aggregation Service. | +| UNSUPPORTED_REPORT_API_TYPE | "The report's API type is not supported for aggregation. Supported APIs are {SUPPORTED_APIS}" | This error occurs when the report's API type is not supported by Aggregation Service. | N/A - The report's API type is not supported by Aggregation Service. | +| REQUIRED_SHAREDINFO_FIELD_INVALID | "One or more required SharedInfo fields are empty or invalid." | This indicates that essential SharedInfo fields are missing or contain invalid values. | Ensure that the reports have all the required SharedInfo fields. | +| INVALID_REPORT_ID | "Report ID missing or invalid in SharedInfo." | This error happens when the report ID is missing or invalid in the SharedInfo. | N/A - Aggregation Service cannot process reports with invalid report ID. | +| UNSUPPORTED_SHAREDINFO_VERSION | "Report has an unsupported version value in its shared_info. Supported values for report shared_info major version(s) are:{SUPPORTED_MAJOR_VERSIONS}" | This error arises when the report's shared_info version is incompatible with the supported versions. | Process the reports with a version of Aggregation Service that supports the report versions. | diff --git a/docs/supported-api-types.md b/docs/supported-api-types.md new file mode 100644 index 00000000..bc3f95b9 --- /dev/null +++ b/docs/supported-api-types.md @@ -0,0 +1,13 @@ +# API types supported by the Aggregation Service + +The following Aggregatable Report API types are supported by the Aggregation Service + +1. [Attribution Reporting API](https://github.com/WICG/attribution-reporting-api/blob/main/AGGREGATE.md) +2. [Attribution Reporting Debug API](https://github.com/WICG/attribution-reporting-api/blob/main/aggregate_debug_reporting.md) +3. [Protected Audience API](https://github.com/WICG/turtledove/blob/main/FLEDGE.md) +4. [Shared Storage API](https://github.com/WICG/shared-storage) + +Also see +[Private Aggregation API explainer](https://github.com/patcg-individual-drafts/private-aggregation-api) +for more information on measurement of results collected via Protected Audience API and Shared +Storage API. diff --git a/java/com/google/aggregate/adtech/worker/AggregationWorkerArgs.java b/java/com/google/aggregate/adtech/worker/AggregationWorkerArgs.java index bd85d0e2..8e29d0c9 100644 --- a/java/com/google/aggregate/adtech/worker/AggregationWorkerArgs.java +++ b/java/com/google/aggregate/adtech/worker/AggregationWorkerArgs.java @@ -129,14 +129,6 @@ public final class AggregationWorkerArgs { + " This is used only for the LocalFileDecryptionKeyService.") private String localFileDecryptionKeyPath = ""; - @Parameter( - names = "--private_key_service_base_url", - description = - "Full URL (including protocol and api version path fragment) of the private key vending" - + " service. Do not include trailing slash") - private String privateKeyServiceUrl = - "https://privatekeyservice-staging.aws.admcstesting.dev:443/v1alpha"; - @Parameter( names = "--coordinator_a_encryption_key_service_base_url", description = @@ -464,7 +456,7 @@ public final class AggregationWorkerArgs { @Parameter( names = "--attribution_reporting_debug_api_enabled", description = "Flag to enable support for Attribution Reporting Debug API.") - private boolean attributionReportingDebugApiEnabled = false; + private boolean attributionReportingDebugApiEnabled = true; @Parameter( names = "--parallel_fact_noising_enabled", @@ -599,10 +591,6 @@ String getLocalFileDecryptionKeyPath() { return localFileDecryptionKeyPath; } - String getPrivateKeyServiceBaseUrl() { - return privateKeyServiceUrl; - } - String getCoordinatorAEncryptionKeyServiceBaseUrl() { return coordinatorAEncryptionKeyServiceBaseUrl; } diff --git a/java/com/google/aggregate/adtech/worker/AggregationWorkerModule.java b/java/com/google/aggregate/adtech/worker/AggregationWorkerModule.java index ea464cd0..8d94e1df 100644 --- a/java/com/google/aggregate/adtech/worker/AggregationWorkerModule.java +++ b/java/com/google/aggregate/adtech/worker/AggregationWorkerModule.java @@ -86,7 +86,6 @@ import com.google.scp.operator.cpio.cryptoclient.Annotations.CoordinatorBEncryptionKeyServiceBaseUrl; import com.google.scp.operator.cpio.cryptoclient.Annotations.DecrypterCacheEntryTtlSec; import com.google.scp.operator.cpio.cryptoclient.Annotations.ExceptionCacheEntryTtlSec; -import com.google.scp.operator.cpio.cryptoclient.HttpPrivateKeyFetchingService.PrivateKeyServiceBaseUrl; import com.google.scp.operator.cpio.cryptoclient.aws.Annotations.KmsEndpointOverride; import com.google.scp.operator.cpio.cryptoclient.local.LocalFileDecryptionKeyServiceModule.DecryptionKeyFilePath; import com.google.scp.operator.cpio.distributedprivacybudgetclient.DistributedPrivacyBudgetClientModule.CoordinatorAPrivacyBudgetServiceAuthEndpoint; @@ -259,9 +258,6 @@ protected void configure() { bind(RecordReaderFactory.class).to(args.getEncryptedRecordReader().getReaderFactoryClass()); // Dependencies for decryption and deserialization. - bind(String.class) - .annotatedWith(PrivateKeyServiceBaseUrl.class) - .toInstance(args.getPrivateKeyServiceBaseUrl()); bind(String.class) .annotatedWith(CoordinatorAEncryptionKeyServiceBaseUrl.class) .toInstance(args.getCoordinatorAEncryptionKeyServiceBaseUrl()); diff --git a/java/com/google/aggregate/adtech/worker/ReportDecrypterAndValidator.java b/java/com/google/aggregate/adtech/worker/ReportDecrypterAndValidator.java index 35c28bfc..69a83864 100644 --- a/java/com/google/aggregate/adtech/worker/ReportDecrypterAndValidator.java +++ b/java/com/google/aggregate/adtech/worker/ReportDecrypterAndValidator.java @@ -109,7 +109,7 @@ private static ErrorCounter errorCounterFromCipherCreationException(ErrorReason return ErrorCounter.DECRYPTION_KEY_NOT_FOUND; case INTERNAL: default: - return ErrorCounter.SERVICE_ERROR; + return ErrorCounter.INTERNAL_ERROR; } } } diff --git a/java/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessor.java b/java/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessor.java index ff6b9f7d..7c3a1644 100644 --- a/java/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessor.java +++ b/java/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessor.java @@ -61,6 +61,8 @@ import com.google.aggregate.adtech.worker.util.JobResultHelper; import com.google.aggregate.adtech.worker.util.JobUtils; import com.google.aggregate.adtech.worker.util.NumericConversions; +import com.google.aggregate.adtech.worker.util.ReportingOriginUtils; +import com.google.aggregate.adtech.worker.util.ReportingOriginUtils.InvalidReportingOriginException; import com.google.aggregate.adtech.worker.validation.ValidationException; import com.google.aggregate.perf.StopwatchRegistry; import com.google.aggregate.privacy.budgeting.bridge.PrivacyBudgetingServiceBridge; @@ -451,12 +453,17 @@ private void consumePrivacyBudgetUnits(ImmutableList budgetsT try { try (Timer t = oTelConfiguration.createDebugTimerStarted("pbs_latency", toJobKeyString(job.jobKey()))) { + final String reportingOrigin = + job.requestInfo().getJobParametersMap().get(JOB_PARAM_ATTRIBUTION_REPORT_TO); + final String claimedIdentity = + ReportingOriginUtils.convertReportingOriginToSite(reportingOrigin); missingPrivacyBudgetUnits = - privacyBudgetingServiceBridge.consumePrivacyBudget( - budgetsToConsume, /* budgetsToConsume */ - job.requestInfo() /* attributionReportTo */ - .getJobParametersMap() - .get(JOB_PARAM_ATTRIBUTION_REPORT_TO)); + privacyBudgetingServiceBridge.consumePrivacyBudget(budgetsToConsume, claimedIdentity); + } catch (InvalidReportingOriginException e) { + throw new AggregationJobProcessException( + INVALID_JOB, + "The attribution_report_to parameter specified in the CreateJob request is not under a" + + " known public suffix."); } } catch (PrivacyBudgetingServiceBridgeException e) { if (e.getStatusCode() != null) { diff --git a/java/com/google/aggregate/adtech/worker/aggregation/domain/OutputDomainProcessor.java b/java/com/google/aggregate/adtech/worker/aggregation/domain/OutputDomainProcessor.java index ceda63e3..b434c380 100644 --- a/java/com/google/aggregate/adtech/worker/aggregation/domain/OutputDomainProcessor.java +++ b/java/com/google/aggregate/adtech/worker/aggregation/domain/OutputDomainProcessor.java @@ -271,11 +271,11 @@ public NoisedAggregatedResultSet adjustAggregationWithDomainAndNoiseStreaming( noisedOverlappingAndDomainResults .noisedAggregatedFacts() .forEach( - (f) -> { - if (overlappingKeys.contains(f.bucket())) { - overlappingFacts.add(f); + (aggregatedFact) -> { + if (overlappingKeys.contains(aggregatedFact.getBucket())) { + overlappingFacts.add(aggregatedFact); } else { - domainOnlyFacts.add(f); + domainOnlyFacts.add(aggregatedFact); } }); diff --git a/java/com/google/aggregate/adtech/worker/aggregation/engine/AggregationEngine.java b/java/com/google/aggregate/adtech/worker/aggregation/engine/AggregationEngine.java index 6746062d..f638dbd2 100644 --- a/java/com/google/aggregate/adtech/worker/aggregation/engine/AggregationEngine.java +++ b/java/com/google/aggregate/adtech/worker/aggregation/engine/AggregationEngine.java @@ -154,7 +154,7 @@ private void addPrivacyBudgetKey(SharedInfo sharedInfo, UnsignedLong filteringId public ImmutableMap makeAggregation() { return aggregationMap.entrySet().stream() .map(factAggr -> AggregatedFact.create(factAggr.getKey(), factAggr.getValue().longValue())) - .collect(toImmutableMap(AggregatedFact::bucket, Function.identity())); + .collect(toImmutableMap(AggregatedFact::getBucket, Function.identity())); } /** Gets a set of distinct privacy budget units observed during the aggregation */ diff --git a/java/com/google/aggregate/adtech/worker/gcp/AggregationWorkerArgs.java b/java/com/google/aggregate/adtech/worker/gcp/AggregationWorkerArgs.java index 2f428ad3..a5c7f20b 100644 --- a/java/com/google/aggregate/adtech/worker/gcp/AggregationWorkerArgs.java +++ b/java/com/google/aggregate/adtech/worker/gcp/AggregationWorkerArgs.java @@ -102,13 +102,6 @@ public class AggregationWorkerArgs { @Parameter(names = "--privacy_budgeting", description = "Implementation of privacy budgeting") private PrivacyBudgetingSelector privacyBudgeting = PrivacyBudgetingSelector.UNLIMITED; - @Parameter( - names = "--private_key_service_base_url", - description = - "Full URL (including protocol and api version path fragment) of the private key vending" - + " service. Do not include trailing slash") - private String privateKeyServiceUrl = ""; - @Parameter( names = "--primary_encryption_key_service_base_url", description = @@ -399,7 +392,7 @@ public class AggregationWorkerArgs { @Parameter( names = "--attribution_reporting_debug_api_enabled", description = "Flag to enable support for Attribution Reporting Debug API.") - private boolean attributionReportingDebugApiEnabled = false; + private boolean attributionReportingDebugApiEnabled = true; @Parameter( names = "--parallel_fact_noising_enabled", diff --git a/java/com/google/aggregate/adtech/worker/model/AggregatedFact.java b/java/com/google/aggregate/adtech/worker/model/AggregatedFact.java index 80ef8871..3a08369d 100644 --- a/java/com/google/aggregate/adtech/worker/model/AggregatedFact.java +++ b/java/com/google/aggregate/adtech/worker/model/AggregatedFact.java @@ -16,41 +16,41 @@ package com.google.aggregate.adtech.worker.model; -import com.google.auto.value.AutoValue; import java.math.BigInteger; import java.util.List; +import java.util.Objects; import java.util.Optional; /** Single aggregated result (for one key) */ -@AutoValue -public abstract class AggregatedFact { +public class AggregatedFact { - public abstract BigInteger bucket(); + private final BigInteger bucket; - public abstract long metric(); + private long metric; /** Set it optional because it is for debug result use. */ - public abstract Optional unnoisedMetric(); + private Optional unnoisedMetric; /** Set it optional because it is for debug result use only. */ - public abstract Optional debugAnnotations(); + private Optional debugAnnotations; - public static Builder builder() { - return new AutoValue_AggregatedFact.Builder(); + private AggregatedFact( + BigInteger bucket, + long metric, + Optional unnoisedMetric, + Optional debugBucketAnnotations) { + this.bucket = bucket; + this.metric = metric; + this.unnoisedMetric = unnoisedMetric; + this.debugAnnotations = debugBucketAnnotations; } public static AggregatedFact create(BigInteger bucket, long metric) { - AggregatedFact.Builder builder = AggregatedFact.builder().setBucket(bucket).setMetric(metric); - return builder.build(); + return new AggregatedFact(bucket, metric, Optional.empty(), Optional.empty()); } public static AggregatedFact create(BigInteger bucket, long metric, Long unnoisedMetric) { - AggregatedFact.Builder builder = - AggregatedFact.builder() - .setBucket(bucket) - .setMetric(metric) - .setUnnoisedMetric(unnoisedMetric); - return builder.build(); + return new AggregatedFact(bucket, metric, Optional.of(unnoisedMetric), Optional.empty()); } public static AggregatedFact create( @@ -58,26 +58,59 @@ public static AggregatedFact create( long metric, Long unnoisedMetric, List debugAnnotations) { - AggregatedFact.Builder builder = - AggregatedFact.builder() - .setBucket(bucket) - .setMetric(metric) - .setUnnoisedMetric(unnoisedMetric) - .setDebugAnnotations(debugAnnotations); - return builder.build(); + return new AggregatedFact( + bucket, metric, Optional.of(unnoisedMetric), Optional.of(debugAnnotations)); } - @AutoValue.Builder - public abstract static class Builder { + public BigInteger getBucket() { + return bucket; + } - public abstract Builder setBucket(BigInteger value); + public long getMetric() { + return metric; + } - public abstract Builder setMetric(long value); + public void setMetric(long metric) { + this.metric = metric; + } - public abstract Builder setUnnoisedMetric(Long value); + public Optional getUnnoisedMetric() { + return unnoisedMetric; + } - public abstract Builder setDebugAnnotations(List value); + public void setUnnoisedMetric(Optional unnoisedMetric) { + this.unnoisedMetric = unnoisedMetric; + } + + public Optional getDebugAnnotations() { + return debugAnnotations; + } + + public void setDebugAnnotations(List debugBucketAnnotations) { + this.debugAnnotations = Optional.of(debugBucketAnnotations); + } + + @Override + public int hashCode() { + return Objects.hash( + this.bucket.hashCode(), + this.metric, + this.unnoisedMetric.hashCode(), + this.debugAnnotations.hashCode()); + } - public abstract AggregatedFact build(); + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } else if (!(o instanceof AggregatedFact)) { + return false; + } else { + AggregatedFact that = (AggregatedFact) o; + return this.bucket.equals(that.getBucket()) + && this.metric == that.getMetric() + && this.unnoisedMetric.equals(that.getUnnoisedMetric()) + && this.debugAnnotations.equals(that.getDebugAnnotations()); + } } } diff --git a/java/com/google/aggregate/adtech/worker/model/ErrorCounter.java b/java/com/google/aggregate/adtech/worker/model/ErrorCounter.java index 4c446ceb..37044c8c 100644 --- a/java/com/google/aggregate/adtech/worker/model/ErrorCounter.java +++ b/java/com/google/aggregate/adtech/worker/model/ErrorCounter.java @@ -50,7 +50,7 @@ public enum ErrorCounter { "Report's shared_info.scheduled_report_time is too old, reports cannot be older than %s" + " days.", SharedInfo.MAX_REPORT_AGE.toDays())), - SERVICE_ERROR("Internal error occurred during operation."), + INTERNAL_ERROR("Internal error occurred during operation."), UNSUPPORTED_OPERATION( String.format( "Report's operation is unsupported. Supported operations are %s.", diff --git a/java/com/google/aggregate/adtech/worker/testing/BUILD b/java/com/google/aggregate/adtech/worker/testing/BUILD index 620bee54..5d6765f2 100644 --- a/java/com/google/aggregate/adtech/worker/testing/BUILD +++ b/java/com/google/aggregate/adtech/worker/testing/BUILD @@ -165,15 +165,6 @@ java_library( ], ) -java_library( - name = "fake_private_key_fetching_service", - srcs = ["FakePrivateKeyFetchingService.java"], - javacopts = ["-Xep:Var"], - deps = [ - "//java/external:clients_cryptoclient", - ], -) - java_library( name = "local_aggregation_worker_runner", srcs = ["LocalAggregationWorkerRunner.java"], diff --git a/java/com/google/aggregate/adtech/worker/testing/FakePrivateKeyFetchingService.java b/java/com/google/aggregate/adtech/worker/testing/FakePrivateKeyFetchingService.java deleted file mode 100644 index 9a11a9c9..00000000 --- a/java/com/google/aggregate/adtech/worker/testing/FakePrivateKeyFetchingService.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.aggregate.adtech.worker.testing; - -import com.google.scp.operator.cpio.cryptoclient.PrivateKeyFetchingService; - -/** Fake PrivateKeyFetchingService which returns a preconfigured response. */ -public final class FakePrivateKeyFetchingService implements PrivateKeyFetchingService { - - private String response = ""; - - public String fetchKeyCiphertext(String keyId) throws PrivateKeyFetchingServiceException { - return response; - } - - public void setResponse(String newResponse) { - response = newResponse; - } -} diff --git a/java/com/google/aggregate/adtech/worker/util/BUILD b/java/com/google/aggregate/adtech/worker/util/BUILD index aaf362ff..ba210eee 100644 --- a/java/com/google/aggregate/adtech/worker/util/BUILD +++ b/java/com/google/aggregate/adtech/worker/util/BUILD @@ -24,6 +24,7 @@ java_library( "JobUtils.java", "NumericConversions.java", "OutputShardFileHelper.java", + "ReportingOriginUtils.java", ], javacopts = ["-Xep:Var"], deps = [ diff --git a/java/com/google/aggregate/adtech/worker/util/ReportingOriginUtils.java b/java/com/google/aggregate/adtech/worker/util/ReportingOriginUtils.java new file mode 100644 index 00000000..0cf52a24 --- /dev/null +++ b/java/com/google/aggregate/adtech/worker/util/ReportingOriginUtils.java @@ -0,0 +1,67 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.adtech.worker.util; + +import com.google.common.net.InternetDomainName; +import java.net.MalformedURLException; +import java.net.URL; + +/** Utility class providing methods for working with reporting origins URLs. */ +public class ReportingOriginUtils { + /** + * Converts a reporting origin URL to a site URL by extracting the top private domain. The return + * value is always prefixed with the https protocol. + * + * @param reportingOrigin the reporting origin URL + * @return the site URL, prefixed with https:// (e.g., https://example.com) + * @throws InvalidReportingOriginException if the reporting origin is malformed or not under a + * known public suffix + */ + public static String convertReportingOriginToSite(String reportingOrigin) + throws InvalidReportingOriginException { + URL url; + try { + // Strip trailing slash. + if (reportingOrigin.endsWith("/")) { + reportingOrigin = reportingOrigin.substring(0, reportingOrigin.length() - 1); + } + url = new URL(reportingOrigin); + } catch (MalformedURLException e) { + throw new InvalidReportingOriginException(e); + } + // Remove the protocol and port (if any) + String host = url.getHost(); + InternetDomainName domain = InternetDomainName.from(host); + if (!domain.isUnderPublicSuffix()) { + throw new InvalidReportingOriginException( + "Reporting origin is not under a known public suffix."); + } + return "https://" + domain.topPrivateDomain(); + } + + /** Exception thrown when a reporting origin is invalid. */ + public static class InvalidReportingOriginException extends Exception { + + public InvalidReportingOriginException(Throwable e) { + super(e); + } + + public InvalidReportingOriginException(String message) { + super(message); + } + } +} diff --git a/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroDebugResultFileWriter.java b/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroDebugResultFileWriter.java index ef8bfce3..bb9e4265 100644 --- a/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroDebugResultFileWriter.java +++ b/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroDebugResultFileWriter.java @@ -56,10 +56,10 @@ public void writeLocalFile(Stream results, Path resultFilePath) results.map( (fact -> AvroDebugResultsRecord.create( - fact.bucket(), - fact.metric(), - fact.unnoisedMetric().get(), - fact.debugAnnotations().get()))); + fact.getBucket(), + fact.getMetric(), + fact.getUnnoisedMetric().get(), + fact.getDebugAnnotations().get()))); avroDebugResultsWriter.writeRecords(metaData, resultsRecords.collect(toImmutableList())); } catch (IOException e) { throw new FileWriteException("Failed to write local Avro debug file", e); diff --git a/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroResultFileWriter.java b/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroResultFileWriter.java index 3c5ed4d3..9970f78e 100644 --- a/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroResultFileWriter.java +++ b/java/com/google/aggregate/adtech/worker/writer/avro/LocalAvroResultFileWriter.java @@ -119,9 +119,9 @@ public String getFileExtension() { private GenericRecord aggregatedFactToGenericRecord(AggregatedFact aggregatedFact) { GenericRecord genericRecord = new GenericData.Record(schemaSupplier.get()); ByteBuffer bucketBytes = - ByteBuffer.wrap(NumericConversions.toUnsignedByteArray(aggregatedFact.bucket())); + ByteBuffer.wrap(NumericConversions.toUnsignedByteArray(aggregatedFact.getBucket())); genericRecord.put("bucket", bucketBytes); - genericRecord.put("metric", aggregatedFact.metric()); + genericRecord.put("metric", aggregatedFact.getMetric()); return genericRecord; } } diff --git a/java/com/google/aggregate/adtech/worker/writer/json/LocalJsonResultFileWriter.java b/java/com/google/aggregate/adtech/worker/writer/json/LocalJsonResultFileWriter.java index 1ee1bc5a..2273f26e 100644 --- a/java/com/google/aggregate/adtech/worker/writer/json/LocalJsonResultFileWriter.java +++ b/java/com/google/aggregate/adtech/worker/writer/json/LocalJsonResultFileWriter.java @@ -120,9 +120,9 @@ public String getFileExtension() { private GenericRecord aggregatedFactToGenericRecord(AggregatedFact aggregatedFact) { GenericRecord genericRecord = new GenericData.Record(schemaSupplier.get()); ByteBuffer bucketBytes = - ByteBuffer.wrap(NumericConversions.toUnsignedByteArray(aggregatedFact.bucket())); + ByteBuffer.wrap(NumericConversions.toUnsignedByteArray(aggregatedFact.getBucket())); genericRecord.put("bucket", bucketBytes); - genericRecord.put("metric", aggregatedFact.metric()); + genericRecord.put("metric", aggregatedFact.getMetric()); return genericRecord; } diff --git a/java/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImpl.java b/java/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImpl.java index cc6b4514..11bfe70b 100644 --- a/java/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImpl.java +++ b/java/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImpl.java @@ -71,7 +71,7 @@ public NoisedAggregationResult threshold( Streams.stream(aggregatedFacts) .filter( aggregatedFactItem -> - (DoubleMath.fuzzyCompare(aggregatedFactItem.metric(), threshold, TOLERANCE) + (DoubleMath.fuzzyCompare(aggregatedFactItem.getMetric(), threshold, TOLERANCE) >= 0)) .collect(toImmutableList()); @@ -79,6 +79,11 @@ public NoisedAggregationResult threshold( requestScopedPrivacyParamsSupplier.get(), thresholdedFacts); } + /* + * Noises AggregatedFact#metric using Google's DP library. AggregatedFact#metric is interpreted as + * unnoised data and copied to the AggregatedFact#unnoisedMetric field, and the noised value is + * set in the AggregatedFact#metric field. + */ @Override public NoisedAggregationResult noise( Iterable aggregatedFact, Optional debugPrivacyEpsilon) { @@ -119,10 +124,10 @@ private AggregatedFact noiseSingleFact( } private AggregatedFact noiseSingleFact(AggregatedFact aggregatedFact, NoiseApplier noiseApplier) { - return AggregatedFact.create( - aggregatedFact.bucket(), - noiseApplier.noiseMetric(aggregatedFact.metric()), - aggregatedFact.metric()); + long unnoisedMetric = aggregatedFact.getMetric(); + aggregatedFact.setUnnoisedMetric(Optional.of(unnoisedMetric)); + aggregatedFact.setMetric(noiseApplier.noiseMetric(unnoisedMetric)); + return aggregatedFact; } private Supplier getScopedPrivacyParamSupplier( diff --git a/java/com/google/aggregate/privacy/noise/model/NoisedAggregationResult.java b/java/com/google/aggregate/privacy/noise/model/NoisedAggregationResult.java index 035c80d7..65761bab 100644 --- a/java/com/google/aggregate/privacy/noise/model/NoisedAggregationResult.java +++ b/java/com/google/aggregate/privacy/noise/model/NoisedAggregationResult.java @@ -58,9 +58,9 @@ public static NoisedAggregationResult addDebugAnnotations( .map( aggregatedFact -> AggregatedFact.create( - aggregatedFact.bucket(), - aggregatedFact.metric(), - aggregatedFact.unnoisedMetric().get(), + aggregatedFact.getBucket(), + aggregatedFact.getMetric(), + aggregatedFact.getUnnoisedMetric().get(), debugAnnotations)) .collect(toImmutableList())); } diff --git a/java/com/google/aggregate/protocol/avro/AvroResultsDeserializerRunner.java b/java/com/google/aggregate/protocol/avro/AvroResultsDeserializerRunner.java index bec216e3..0e8c987b 100644 --- a/java/com/google/aggregate/protocol/avro/AvroResultsDeserializerRunner.java +++ b/java/com/google/aggregate/protocol/avro/AvroResultsDeserializerRunner.java @@ -62,12 +62,12 @@ private void runResultDeserialization(AvroResultsDeserializerRunnerArgs args) th } private static String formatOutput(AggregatedFact fact, boolean outputAsHex) { - String bucketString = fact.bucket().toString(); + String bucketString = fact.getBucket().toString(); if (outputAsHex) { - byte[] bucketBytes = NumericConversions.toUnsignedByteArray(fact.bucket()); + byte[] bucketBytes = NumericConversions.toUnsignedByteArray(fact.getBucket()); bucketString = "0x" + BaseEncoding.base16().encode(bucketBytes); } - return bucketString + "," + fact.metric(); + return bucketString + "," + fact.getMetric(); } static final class AvroResultsDeserializerRunnerArgs { diff --git a/java/com/google/aggregate/tools/diff/DiffRunner.java b/java/com/google/aggregate/tools/diff/DiffRunner.java index d44eafc4..a217073c 100644 --- a/java/com/google/aggregate/tools/diff/DiffRunner.java +++ b/java/com/google/aggregate/tools/diff/DiffRunner.java @@ -140,7 +140,7 @@ private static ImmutableList runAndGetResult( ImmutableList resultAggregatedFacts = localAggregationWorker.waitForAggregation(); return resultAggregatedFacts.stream() - .map(fact -> AggregatedFact.create(fact.bucket(), fact.metric())) + .map(fact -> AggregatedFact.create(fact.getBucket(), fact.getMetric())) .collect(toImmutableList()); } catch (ResultLogException | TimeoutException e) { diff --git a/java/com/google/aggregate/tools/diff/ResultDiffer.java b/java/com/google/aggregate/tools/diff/ResultDiffer.java index 84c0214a..58a7b651 100644 --- a/java/com/google/aggregate/tools/diff/ResultDiffer.java +++ b/java/com/google/aggregate/tools/diff/ResultDiffer.java @@ -117,7 +117,7 @@ public static MapDifference diffResults( private static ImmutableMap keyAggregatedFacts( Stream facts) { - return facts.collect(toImmutableMap(AggregatedFact::bucket, Function.identity())); + return facts.collect(toImmutableMap(AggregatedFact::getBucket, Function.identity())); } private static final class Env extends AbstractModule {} diff --git a/java/com/google/aggregate/tools/privacybudgetutil/aws/AwsPrivacyBudgetUnitExtraction.java b/java/com/google/aggregate/tools/privacybudgetutil/aws/AwsPrivacyBudgetUnitExtraction.java new file mode 100644 index 00000000..0ea9e192 --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/aws/AwsPrivacyBudgetUnitExtraction.java @@ -0,0 +1,189 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.aws; + +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorFactory; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorModule; +import com.google.aggregate.tools.privacybudgetutil.aws.AwsPrivacyBudgetUnitExtractionModule.Client; +import com.google.aggregate.tools.privacybudgetutil.common.ExtractionUtils; +import com.google.aggregate.tools.privacybudgetutil.common.PrivacyBudgetUnitExtractionConfig; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Inject; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.time.format.DateTimeFormatter; +import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import software.amazon.awssdk.core.ResponseInputStream; +import software.amazon.awssdk.core.sync.RequestBody; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; +import software.amazon.awssdk.services.s3.model.GetObjectResponse; +import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; +import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; +import software.amazon.awssdk.services.s3.model.S3Object; +import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Iterable; + +/** Extracts budget keys from avros in AWS */ +final class AwsPrivacyBudgetUnitExtraction { + + private static final Logger LOGGER = + LoggerFactory.getLogger(AwsPrivacyBudgetUnitExtraction.class); + + private final PrivacyBudgetUnitExtractionConfig config; + private final S3Client client; + private final PrivacyBudgetKeyGeneratorFactory generatorFactory; + + @Inject + AwsPrivacyBudgetUnitExtraction( + PrivacyBudgetUnitExtractionConfig config, + PrivacyBudgetKeyGeneratorFactory generatorFactory, + @Client S3Client client) { + this.config = config; + this.client = client; + this.generatorFactory = generatorFactory; + } + + public static void main(String[] args) throws Exception { + PrivacyBudgetUnitExtractionConfig config = + new PrivacyBudgetUnitExtractionConfig( + PrivacyBudgetUnitExtractionConfig.CloudPlatform.AWS, args); + if (config.printHelp()) { + return; + } + Guice.createInjector( + new AwsPrivacyBudgetUnitExtractionModule(), + new PrivacyBudgetKeyGeneratorModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(PrivacyBudgetUnitExtractionConfig.class).toInstance(config); + } + }) + .getInstance(AwsPrivacyBudgetUnitExtraction.class) + .run(); + } + + public void run() throws Exception { + + if (this.config.getFunction().equals("generate_keys")) { + ListObjectsV2Iterable response = listObjects(); + if (!this.config.getSingleFile()) { + for (ListObjectsV2Response page : response) { + page.contents().stream() + .filter(s -> s.key().endsWith(".avro")) + .map(this::accept) + .forEach(System.out::println); + } + } else { + for (ListObjectsV2Response page : response) { + String builder = + page.contents().stream() + .filter(s -> s.key().endsWith(".avro")) + .map(this::accept) + .filter(s -> s != null) + .map(ExtractionUtils.KeyFile::body) + .collect(Collectors.joining(",", "[", "]")); + LOGGER.info(builder); + } + } + } + + if (this.config.getFunction().equals("write_keys")) { + ListObjectsV2Iterable response = listObjects(); + if (!this.config.getSingleFile()) { + for (ListObjectsV2Response page : response) { + page.contents().stream() + .filter(s -> s.key().endsWith(".avro")) + .map(this::accept) + .forEach(this::writeKeyFile); + } + } else { + for (ListObjectsV2Response page : response) { + String builder = + page.contents().stream() + .filter(s -> s.key().endsWith(".avro")) + .map(this::accept) + .filter(s -> s != null) + .map(ExtractionUtils.KeyFile::body) + .collect(Collectors.joining(",", "[", "]")); + String filename = this.config.getOutputPrefix(); + ExtractionUtils.KeyFile keyFile = ExtractionUtils.KeyFile.create(filename, builder); + writeKeyFile(keyFile); + } + } + } + } + + private ListObjectsV2Iterable listObjects() { + ListObjectsV2Request request = + ListObjectsV2Request.builder() + .bucket(this.config.getBucket()) + .prefix(this.config.getInputPrefix()) + .build(); + + return client.listObjectsV2Paginator(request); + } + + private ExtractionUtils.KeyFile readBucketObject(String key) { + GetObjectRequest getObjectRequest = + GetObjectRequest.builder().bucket(this.config.getBucket()).key(key).build(); + try { + ResponseInputStream responseInputStream = + client.getObject(getObjectRequest); + + InputStream stream = new ByteArrayInputStream(responseInputStream.readAllBytes()); + ExtractionUtils.KeyFile keyfile = + ExtractionUtils.processAvro( + stream, this.generatorFactory, key, this.config.getFilteringIds()); + return keyfile; + } catch (IOException e) { + throw new AssertionError("Failed to get credentials", e); + } + } + + /** Writes keys to destination */ + private void writeKeyFile(ExtractionUtils.KeyFile keyFile) { + if (keyFile == null) { + return; + } + String filename = + String.format( + "%s/%s_%s.json", + this.config.getOutputPrefix(), + keyFile.key(), + java.time.LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM_dd_yy"))); + LOGGER.info( + String.format( + "Writing shared_ids from %s/%s to %s", + this.config.getBucket(), this.config.getInputPrefix(), filename)); + if (keyFile != null) { + PutObjectRequest putOb = + PutObjectRequest.builder().bucket(this.config.getBucket()).key(filename).build(); + + client.putObject(putOb, RequestBody.fromString(keyFile.body())); + } + } + + private ExtractionUtils.KeyFile accept(S3Object object) { + return readBucketObject(object.key()); + } +} diff --git a/java/com/google/aggregate/tools/privacybudgetutil/aws/AwsPrivacyBudgetUnitExtractionModule.java b/java/com/google/aggregate/tools/privacybudgetutil/aws/AwsPrivacyBudgetUnitExtractionModule.java new file mode 100644 index 00000000..78da343a --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/aws/AwsPrivacyBudgetUnitExtractionModule.java @@ -0,0 +1,52 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.aws; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.google.aggregate.tools.privacybudgetutil.common.PrivacyBudgetUnitExtractionConfig; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.inject.Qualifier; +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.s3.S3Client; + +/** Provides bindings for {@link AwsPrivacyBudgetUnitExtraction}. */ +final class AwsPrivacyBudgetUnitExtractionModule extends AbstractModule { + + @Provides + @Client + S3Client provideS3Client(PrivacyBudgetUnitExtractionConfig config) { + S3Client client = + S3Client.builder() + .httpClient(UrlConnectionHttpClient.builder().build()) + .region(Region.of(config.getRegion())) + .build(); + return client; + } + + @Qualifier + @Target({FIELD, PARAMETER, METHOD}) + @Retention(RUNTIME) + @interface Client {} +} diff --git a/java/com/google/aggregate/tools/privacybudgetutil/aws/BUILD b/java/com/google/aggregate/tools/privacybudgetutil/aws/BUILD new file mode 100644 index 00000000..a98ad4b5 --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/aws/BUILD @@ -0,0 +1,91 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_java//java:defs.bzl", "java_binary", "java_library") + +package(default_visibility = ["//visibility:public"]) + +java_library( + name = "lib", + srcs = glob(["*.java"]), + deps = [ + "//java/com/google/aggregate/adtech/worker/model", + "//java/com/google/aggregate/privacy/budgeting/bridge:privacy_budgeting_service_bridge", + "//java/com/google/aggregate/privacy/budgeting/budgetkeygenerator:privacy_budget_key_generator", + "//java/com/google/aggregate/protocol/avro:avro_record_reader", + "//java/com/google/aggregate/tools/privacybudgetutil/common:config", + "//java/com/google/aggregate/tools/privacybudgetutil/common:extraction_utils", + "//java/external:acai", + "//java/external:autovalue", + "//java/external:autovalue_annotations", + "//java/external:avro", + "//java/external:aws_auth", + "//java/external:aws_core", + "//java/external:aws_regions", + "//java/external:aws_s3", + "//java/external:aws_url_connection_client", + "//java/external:guava", + "//java/external:guice", + "//java/external:jackson_annotations", + "//java/external:jackson_core", + "//java/external:jackson_databind", + "//java/external:jackson_datatype_jsr310", + "//java/external:javax_inject", + "//java/external:jcommander", + "//java/external:jimfs", + "//java/external:slf4j", + "//java/external:slf4j_simple", + ], +) + +java_binary( + name = "AwsPrivacyBudgetUnitExtraction", + srcs = glob(["*.java"]), + main_class = "com.google.aggregate.tools.privacybudgetutil.aws.AwsPrivacyBudgetUnitExtraction", + deps = [ + ":lib", + "//java/com/google/aggregate/adtech/worker/model", + "//java/com/google/aggregate/privacy/budgeting/bridge:privacy_budgeting_service_bridge", + "//java/com/google/aggregate/privacy/budgeting/budgetkeygenerator:privacy_budget_key_generator", + "//java/com/google/aggregate/protocol/avro:avro_record_reader", + "//java/com/google/aggregate/tools/privacybudgetutil/common:extraction_utils", + "//java/external:acai", + "//java/external:autovalue", + "//java/external:autovalue_annotations", + "//java/external:avro", + "//java/external:aws_auth", + "//java/external:aws_core", + "//java/external:aws_regions", + "//java/external:aws_s3", + "//java/external:aws_sts", + "//java/external:aws_url_connection_client", + "//java/external:guava", + "//java/external:guice", + "//java/external:jackson_annotations", + "//java/external:jackson_core", + "//java/external:jackson_databind", + "//java/external:jackson_datatype_jsr310", + "//java/external:javax_inject", + "//java/external:jcommander", + "//java/external:jimfs", + "//java/external:slf4j", + "//java/external:slf4j_simple", + ], +) + +# The deploy JAR for the PrivacyBudgetExtractionTool. +alias( + name = "AwsPrivacyBudgetUnitExtractionDeploy", + actual = ":AwsPrivacyBudgetUnitExtraction_deploy.jar", +) diff --git a/java/com/google/aggregate/tools/privacybudgetutil/common/BUILD b/java/com/google/aggregate/tools/privacybudgetutil/common/BUILD new file mode 100644 index 00000000..4846307d --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/common/BUILD @@ -0,0 +1,53 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_java//java:defs.bzl", "java_library") + +package(default_visibility = ["//visibility:public"]) + +java_library( + name = "extraction_utils", + srcs = glob(["*.java"]), + deps = [ + "//java/com/google/aggregate/adtech/worker/model", + "//java/com/google/aggregate/privacy/budgeting/bridge:privacy_budgeting_service_bridge", + "//java/com/google/aggregate/privacy/budgeting/budgetkeygenerator:privacy_budget_key_generator", + "//java/com/google/aggregate/protocol/avro:avro_record_reader", + "//java/external:acai", + "//java/external:autovalue", + "//java/external:autovalue_annotations", + "//java/external:avro", + "//java/external:guava", + "//java/external:guice", + "//java/external:jackson_annotations", + "//java/external:jackson_core", + "//java/external:jackson_databind", + "//java/external:jackson_datatype_jsr310", + "//java/external:javax_inject", + "//java/external:jcommander", + "//java/external:jimfs", + "//java/external:slf4j", + "//java/external:slf4j_simple", + ], +) + +java_library( + name = "config", + srcs = ["PrivacyBudgetUnitExtractionConfig.java"], + deps = [ + "//java/external:guava", + "//java/external:jcommander", + "//java/external:slf4j", + ], +) diff --git a/java/com/google/aggregate/tools/privacybudgetutil/common/ExtractionUtils.java b/java/com/google/aggregate/tools/privacybudgetutil/common/ExtractionUtils.java new file mode 100644 index 00000000..aa98b0f4 --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/common/ExtractionUtils.java @@ -0,0 +1,158 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.common; + +import static com.google.aggregate.adtech.worker.model.SharedInfo.ATTRIBUTION_REPORTING_API; +import static com.google.aggregate.adtech.worker.model.SharedInfo.ATTRIBUTION_REPORTING_DEBUG_API; +import static java.time.temporal.ChronoUnit.HOURS; + +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.google.aggregate.adtech.worker.model.SharedInfo; +import com.google.aggregate.privacy.budgeting.bridge.PrivacyBudgetingServiceBridge.PrivacyBudgetUnit; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGenerator; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGenerator.PrivacyBudgetKeyInput; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorFactory; +import com.google.auto.value.AutoValue; +import com.google.common.primitives.UnsignedLong; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.Instant; +import java.util.HashSet; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.Set; +import org.apache.avro.file.DataFileStream; +import org.apache.avro.generic.GenericDatumReader; +import org.apache.avro.generic.GenericRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ExtractionUtils { + + private static final Logger LOGGER = LoggerFactory.getLogger(ExtractionUtils.class); + + /** Takes a .avro file as an input and generates the correct key for the API. */ + public static ExtractionUtils.KeyFile processAvro( + InputStream stream, + PrivacyBudgetKeyGeneratorFactory generatorFactory, + String key, + List filteringIds) + throws IOException { + GenericRecord avroRecord = null; + SharedInfo info = null; + Set keyset = new HashSet(); + final DataFileStream dfStream = + new DataFileStream(stream, new GenericDatumReader()); + while (dfStream.hasNext()) { + avroRecord = dfStream.next(avroRecord); + if (!avroRecord.hasField("shared_info")) { + LOGGER.warn(String.format("No shared info in %s, skipping.%n", key)); + continue; + } + Object sharedInfo = avroRecord.get("shared_info"); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode root = objectMapper.readTree(sharedInfo.toString()); + BigDecimal reportTime = + new BigDecimal(root.get("scheduled_report_time").toString().replace("\"", "")); + + SharedInfo.Builder builder = + SharedInfo.builder() + .setApi(root.get("api").asText()) + .setVersion(root.get("version").asText()) + .setScheduledReportTime( + Instant.ofEpochSecond(reportTime.setScale(0, RoundingMode.DOWN).longValue())) + .setReportingOrigin(root.get("reporting_origin").asText()); + if (!root.has("attribution_destination") + && root.get("api").toString().equals(ATTRIBUTION_REPORTING_API) + || root.get("api").toString().equals(ATTRIBUTION_REPORTING_DEBUG_API)) { + LOGGER.error("shared info has no attribution destination. skipping"); + continue; + } + if (root.has("attribution_destination")) { + builder.setDestination(root.get("attribution_destination").asText()); + } + + if (root.has("source_registration_time")) { + BigDecimal sourceRegistrationTime = + new BigDecimal(root.get("source_registration_time").toString().replace("\"", "")); + + builder.setSourceRegistrationTime( + Instant.ofEpochSecond( + sourceRegistrationTime.setScale(0, RoundingMode.DOWN).longValue())); + } + if (root.has("debug_mode")) { + builder.setReportDebugModeString(root.get("debug_mode").asText()); + } + info = builder.build(); + + for (UnsignedLong filteringId : filteringIds) { + keyset.add( + PrivacyBudgetUnit.create( + getPrivacyBudgetKey(info, filteringId, generatorFactory), + info.scheduledReportTime().truncatedTo(HOURS), + info.reportingOrigin())); + } + } + if (keyset.isEmpty()) { + return null; + } + ObjectMapper om = new ObjectMapper(); + om.registerModule(new JavaTimeModule()); + om.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); + ExtractionUtils.KeyFile keyFile = + ExtractionUtils.KeyFile.create(key, om.writeValueAsString(keyset)); + return keyFile; + } + + /** Calculates Privacy Budget Keys */ + private static String getPrivacyBudgetKey( + SharedInfo sharedInfo, + UnsignedLong filteringId, + PrivacyBudgetKeyGeneratorFactory generatorFactory) { + try { + PrivacyBudgetKeyInput input = + PrivacyBudgetKeyInput.builder() + .setSharedInfo(sharedInfo) + .setFilteringId(filteringId) + .build(); + Optional privacyBudgetKeyGenerator = + generatorFactory.getPrivacyBudgetKeyGenerator(input); + return privacyBudgetKeyGenerator.get().generatePrivacyBudgetKey(input); + } catch (IllegalArgumentException | NoSuchElementException e) { + throw new AssertionError("failed to get generator", e); + } + } + + @AutoValue + public abstract static class KeyFile { + + public static ExtractionUtils.KeyFile create(String key, String body) { + return new AutoValue_ExtractionUtils_KeyFile(key, body); + } + + public abstract String key(); + + public abstract String body(); + } +} diff --git a/java/com/google/aggregate/tools/privacybudgetutil/common/PrivacyBudgetUnitExtractionConfig.java b/java/com/google/aggregate/tools/privacybudgetutil/common/PrivacyBudgetUnitExtractionConfig.java new file mode 100644 index 00000000..d30a4b37 --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/common/PrivacyBudgetUnitExtractionConfig.java @@ -0,0 +1,159 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.common; + +import com.beust.jcommander.IStringConverter; +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.google.common.collect.ImmutableList; +import com.google.common.primitives.UnsignedLong; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/* + * This tool is for generating lists of privacy budget units in an adtech environment + * and this config controls what is extracted. + * Given the correct credentials the lists can be generated with: + * bazel run //java/com/google/aggregate/tools/privacybudgetunit/extraction/(aws:AwsPrivacyBudgetUnitExtraction | gcp:GcpPrivacyBudgetUnitExtraction) \ + * (generate_keys | write_keys) \ + * --bucket \ + * --input_prefix + */ +public final class PrivacyBudgetUnitExtractionConfig { + + private static final Logger LOGGER = + LoggerFactory.getLogger(PrivacyBudgetUnitExtractionConfig.class); + + @Parameter(description = "The main function of the tool, generate_keys or write_keys.") + private String function = "generate_keys"; + + @Parameter(names = "--help", description = "Prints usage.", help = true) + private boolean help = false; + + @Parameter(names = "--bucket", description = "Bucket where the avro files reside.") + private String bucket; + + @Parameter(names = "--input_prefix", description = "Prefix for file selection.") + private String inputPrefix; + + @Parameter( + names = "--dry_run", + description = "Run in dry run mode. This will not write any files.") + private boolean dryRun = false; + + @Parameter( + names = "--output_prefix", + description = "The output file prefix to write the file to.") + private String outputPrefix = "shared_ids"; + + @Parameter(names = "--single_file", description = "Create a single file for the output.") + private boolean singleFile = true; + + @Parameter( + names = "--filtering_ids", + description = + "The filtering IDs to use. This option can be used multiple times, and may be" + + " comma-separated.", + converter = StringToUnsignedLongConverter.class) + private List filteringIds = ImmutableList.of(UnsignedLong.ZERO); + + private String groups; + private final JCommander commander; + private final GCPCommands gcp; + private final AWSCommands aws; + + public PrivacyBudgetUnitExtractionConfig(CloudPlatform cloudPlatform, String[] args) { + aws = new AWSCommands(); + gcp = new GCPCommands(); + JCommander.Builder builder = JCommander.newBuilder().addObject(this); + if (cloudPlatform == CloudPlatform.AWS) { + builder.addObject(aws); + } else { + builder.addObject(gcp); + } + commander = builder.build(); + commander.parse(args); + } + + public boolean printHelp() { + if (help) { + commander.usage(); + } + return this.help; + } + + public String getBucket() { + return this.bucket; + } + + public String getRegion() { + return this.aws.region; + } + + public String getFunction() { + return this.function; + } + + public String getInputPrefix() { + return this.inputPrefix; + } + + public Boolean getDryRun() { + return this.dryRun; + } + + public String getOutputPrefix() { + return this.outputPrefix; + } + + public Boolean getSingleFile() { + return this.singleFile; + } + + public String getProjectId() { + return this.gcp.projectId; + } + + public List getFilteringIds() { + return this.filteringIds; + } + + private class AWSCommands { + + @Parameter(names = "--region", description = "Region for the request") + private String region = "us-east-1"; + } + + private class GCPCommands { + + @Parameter(names = "--project_id", description = "GCP project Id.") + private String projectId; + } + + public enum CloudPlatform { + GCP, + AWS + } + + public static class StringToUnsignedLongConverter implements IStringConverter { + @Override + public UnsignedLong convert(String value) { + return UnsignedLong.valueOf(value); + } + } +} diff --git a/java/com/google/aggregate/tools/privacybudgetutil/gcp/BUILD b/java/com/google/aggregate/tools/privacybudgetutil/gcp/BUILD new file mode 100644 index 00000000..399540ba --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/gcp/BUILD @@ -0,0 +1,85 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@rules_java//java:defs.bzl", "java_binary", "java_library") + +package(default_visibility = ["//visibility:public"]) + +java_library( + name = "lib", + srcs = glob(["*.java"]), + deps = [ + "//java/com/google/aggregate/privacy/budgeting/budgetkeygenerator:privacy_budget_key_generator", + "//java/com/google/aggregate/protocol/avro:avro_record_reader", + "//java/com/google/aggregate/tools/privacybudgetutil/common:config", + "//java/com/google/aggregate/tools/privacybudgetutil/common:extraction_utils", + "//java/external:acai", + "//java/external:autovalue", + "//java/external:autovalue_annotations", + "//java/external:avro", + "//java/external:gcp_api_gax", + "//java/external:gcp_core", + "//java/external:gcp_storage", + "//java/external:guava", + "//java/external:guice", + "//java/external:jackson_annotations", + "//java/external:jackson_core", + "//java/external:jackson_databind", + "//java/external:jackson_datatype_jsr310", + "//java/external:javax_inject", + "//java/external:jcommander", + "//java/external:jimfs", + "//java/external:slf4j", + "//java/external:slf4j_simple", + ], +) + +java_binary( + name = "GcpPrivacyBudgetUnitExtraction", + srcs = glob(["*.java"]), + main_class = "com.google.aggregate.tools.privacybudgetutil.gcp.GcpPrivacyBudgetUnitExtraction", + deps = [ + ":lib", + "//java/com/google/aggregate/adtech/worker/model", + "//java/com/google/aggregate/privacy/budgeting/bridge:privacy_budgeting_service_bridge", + "//java/com/google/aggregate/privacy/budgeting/budgetkeygenerator:privacy_budget_key_generator", + "//java/com/google/aggregate/protocol/avro:avro_record_reader", + "//java/com/google/aggregate/tools/privacybudgetutil/common:config", + "//java/com/google/aggregate/tools/privacybudgetutil/common:extraction_utils", + "//java/external:acai", + "//java/external:autovalue", + "//java/external:autovalue_annotations", + "//java/external:avro", + "//java/external:gcp_api_gax", + "//java/external:gcp_core", + "//java/external:gcp_storage", + "//java/external:guava", + "//java/external:guice", + "//java/external:jackson_annotations", + "//java/external:jackson_core", + "//java/external:jackson_databind", + "//java/external:jackson_datatype_jsr310", + "//java/external:javax_inject", + "//java/external:jcommander", + "//java/external:jimfs", + "//java/external:slf4j", + "//java/external:slf4j_simple", + ], +) + +# The deploy JAR for the PrivacyBudgetUnitExtractionTool. +alias( + name = "GcpPrivacyBudgetUnitExtractionDeploy", + actual = ":GcpPrivacyBudgetUnitExtraction_deploy.jar", +) diff --git a/java/com/google/aggregate/tools/privacybudgetutil/gcp/GcpPrivacyBudgetUnitExtraction.java b/java/com/google/aggregate/tools/privacybudgetutil/gcp/GcpPrivacyBudgetUnitExtraction.java new file mode 100644 index 00000000..d0da0b0a --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/gcp/GcpPrivacyBudgetUnitExtraction.java @@ -0,0 +1,183 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.gcp; + +import static com.google.cloud.storage.Storage.BlobListOption.*; + +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorFactory; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorModule; +import com.google.aggregate.tools.privacybudgetutil.common.ExtractionUtils; +import com.google.aggregate.tools.privacybudgetutil.common.PrivacyBudgetUnitExtractionConfig; +import com.google.aggregate.tools.privacybudgetutil.gcp.GcpPrivacyBudgetUnitExtractionModule.StorageClient; +import com.google.api.gax.paging.Page; +import com.google.cloud.ReadChannel; +import com.google.cloud.WriteChannel; +import com.google.cloud.storage.Blob; +import com.google.cloud.storage.BlobId; +import com.google.cloud.storage.BlobInfo; +import com.google.cloud.storage.Storage; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Inject; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; +import java.nio.charset.StandardCharsets; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** Extracts privacy budget units from avros in GCP. */ +final class GcpPrivacyBudgetUnitExtraction { + + private static final Logger LOGGER = + LoggerFactory.getLogger(GcpPrivacyBudgetUnitExtraction.class); + + private final PrivacyBudgetUnitExtractionConfig config; + private final Storage storage; + private final PrivacyBudgetKeyGeneratorFactory generatorFactory; + private final List keys; + + @Inject + GcpPrivacyBudgetUnitExtraction( + PrivacyBudgetUnitExtractionConfig config, + PrivacyBudgetKeyGeneratorFactory generatorFactory, + @StorageClient Storage storage) { + this.config = config; + this.storage = storage; + this.generatorFactory = generatorFactory; + this.keys = new ArrayList(); + } + + public static void main(String[] args) throws Exception { + PrivacyBudgetUnitExtractionConfig config = + new PrivacyBudgetUnitExtractionConfig( + PrivacyBudgetUnitExtractionConfig.CloudPlatform.GCP, args); + if (config.printHelp()) { + return; + } + Guice.createInjector( + new GcpPrivacyBudgetUnitExtractionModule(), + new PrivacyBudgetKeyGeneratorModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(PrivacyBudgetUnitExtractionConfig.class).toInstance(config); + } + }) + .getInstance(GcpPrivacyBudgetUnitExtraction.class) + .run(); + } + + public void run() throws Exception { + + if (this.config.getFunction().equals("generate_keys")) { + + Page blobs = + storage.list(this.config.getBucket(), prefix(this.config.getInputPrefix())); + if (!this.config.getSingleFile()) { + blobs + .streamAll() + .filter(blob -> blob.getName().endsWith(".avro")) + .map(this::accept) + .forEach(System.out::println); + } else { + String builder = + blobs + .streamAll() + .filter(blob -> blob.getName().endsWith(".avro")) + .map(this::accept) + .filter(s -> s != null) + .map(ExtractionUtils.KeyFile::body) + .collect(Collectors.joining(",", "[", "]")); + LOGGER.info(builder); + } + } + + if (this.config.getFunction().equals("write_keys")) { + Page blobs = + storage.list(this.config.getBucket(), prefix(this.config.getInputPrefix())); + if (!this.config.getSingleFile()) { + blobs + .streamAll() + .filter(blob -> blob.getName().endsWith(".avro")) + .map(this::accept) + .forEach(this::writeKeyFile); + } else { + String builder = + blobs + .streamAll() + .filter(blob -> blob.getName().endsWith(".avro")) + .map(this::accept) + .filter(s -> s != null) + .map(ExtractionUtils.KeyFile::body) + .collect(Collectors.joining(",", "[", "]")); + String filename = storage.getOptions().getProjectId(); + ExtractionUtils.KeyFile keyFile = ExtractionUtils.KeyFile.create(filename, builder); + writeKeyFile(keyFile); + } + } + } + + private ExtractionUtils.KeyFile readBucketObject(BlobId blobId, String key) { + ReadChannel reader = storage.reader(blobId); + InputStream inputStream = Channels.newInputStream(reader); + try { + return ExtractionUtils.processAvro( + inputStream, this.generatorFactory, key, this.config.getFilteringIds()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** Writes keys to destination */ + private void writeKeyFile(ExtractionUtils.KeyFile keyFile) { + String filename = + String.format( + "%s/%s_%s.json", + this.config.getOutputPrefix(), + keyFile.key(), + java.time.LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM_dd_yy"))); + LOGGER.info( + String.format( + "writing %s/%s to %s", config.getBucket(), config.getInputPrefix(), filename)); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + if (!this.config.getDryRun()) { + BlobId blobId = BlobId.of(this.config.getBucket(), filename); + BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build(); + try { + stream.write(keyFile.body().getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new RuntimeException(e); + } + try (WriteChannel writer = storage.writer(blobInfo)) { + writer.write(ByteBuffer.wrap(stream.toByteArray())); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + private ExtractionUtils.KeyFile accept(Blob blob) { + return readBucketObject(blob.getBlobId(), blob.getName()); + } +} diff --git a/java/com/google/aggregate/tools/privacybudgetutil/gcp/GcpPrivacyBudgetUnitExtractionModule.java b/java/com/google/aggregate/tools/privacybudgetutil/gcp/GcpPrivacyBudgetUnitExtractionModule.java new file mode 100644 index 00000000..5f6e7f3b --- /dev/null +++ b/java/com/google/aggregate/tools/privacybudgetutil/gcp/GcpPrivacyBudgetUnitExtractionModule.java @@ -0,0 +1,48 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.gcp; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.google.aggregate.tools.privacybudgetutil.common.PrivacyBudgetUnitExtractionConfig; +import com.google.cloud.storage.Storage; +import com.google.cloud.storage.StorageOptions; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.inject.Qualifier; + +/** Provides bindings for {@link GcpPrivacyBudgetUnitExtraction}. */ +final class GcpPrivacyBudgetUnitExtractionModule extends AbstractModule { + + @Provides + @StorageClient + Storage provideStorage(PrivacyBudgetUnitExtractionConfig config) { + Storage storage = + StorageOptions.newBuilder().setProjectId(config.getProjectId()).build().getService(); + return storage; + } + + @Qualifier + @Target({FIELD, PARAMETER, METHOD}) + @Retention(RUNTIME) + @interface StorageClient {} +} diff --git a/javatests/com/google/aggregate/adtech/worker/AggregationWorkerDiffTest.java b/javatests/com/google/aggregate/adtech/worker/AggregationWorkerDiffTest.java index 314a247b..f8dc74f5 100644 --- a/javatests/com/google/aggregate/adtech/worker/AggregationWorkerDiffTest.java +++ b/javatests/com/google/aggregate/adtech/worker/AggregationWorkerDiffTest.java @@ -157,7 +157,7 @@ private MapDifference diff() throws Exception { // Create AggregatedFact with only two fields: bucket and metric Stream testFactsTwoFields = - testFacts.stream().map(fact -> AggregatedFact.create(fact.bucket(), fact.metric())); + testFacts.stream().map(fact -> AggregatedFact.create(fact.getBucket(), fact.getMetric())); return ResultDiffer.diffResults(testFactsTwoFields, goldenFacts.stream()); } diff --git a/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousSmokeTest.java b/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousSmokeTest.java index e231c42a..dbd5c46b 100644 --- a/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousSmokeTest.java +++ b/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousSmokeTest.java @@ -34,15 +34,20 @@ import com.google.aggregate.adtech.worker.testing.AvroResultsFileReader; import com.google.aggregate.protocol.avro.AvroDebugResultsReaderFactory; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.primitives.UnsignedLong; +import com.google.errorprone.annotations.Var; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.scp.operator.cpio.blobstorageclient.aws.S3BlobStorageClient; import com.google.scp.operator.cpio.blobstorageclient.aws.S3BlobStorageClientModule.PartialRequestBufferSize; import com.google.scp.operator.cpio.blobstorageclient.aws.S3BlobStorageClientModule.S3UsePartialRequests; import com.google.scp.operator.protos.frontend.api.v1.CreateJobRequestProto.CreateJobRequest; +import java.io.IOException; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.Optional; +import java.util.Set; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -59,47 +64,11 @@ * Integration test which runs against an AWS deployment and verifies that a job accessing an * existing encrypted payload can be processed by the system and produce an output avro file. * - *

The expected input files are of 3 types as detailed below and are located at the S3 prefix - * "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-inputs". Currently, there are multiple - * tests that rely on reports with version 0.1 and hence we generate multiple input report files for - * version 0.1. This is necessary because everytime a report file is used, the privacy budget - * associated with it is consumed and it cannot be reused. Similar technique can be followed to - * generate multiple report files in other versions as per need. Please see shared_e2e.sh for - * details: - * - *

    - *
  • Multiple report input files with version 0.1 of reports. Each file follows the naming - * format 10k_test_input_${number}.avro. Each test below that relies on version 0.1 reports is - * supposed to use one of the above input files each - *
  • One report input file with version 0.1 of reports and debug mode enabled on generated - * reports. The file follows the naming format 10k_attribution_report_test_input_debug.avro - *
- * - * The expected domain files are of 3 types as detailed below and are located at the S3 prefix - * "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-inputs": - * - *
    - *
  • Multiple domain files for version 0.1 of reports. Each file follows the naming format - * 10k_test_domain_${number}.avro. Each test below that relies on version 0.1 reports is - * supposed to use one of the above domain files each that matches the report input. - *
  • One domain file for reports in version 0.1 with debug mode enabled on the reports. The file - * follows the naming format 10k_test_domain_debug.avro - *
- * - * The expected distribution file used can be found at - * "s3://aggregation-service-testing/testdata/1m_staging_1_integer_buckets.txt" - * - *

The resulting output files are: - * - *

    - *
  • "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-outputs/10k_test_output_${number}.avro" - *
  • "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-outputs/10k_test_output_debug_nodebug.avro" - *
  • "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-outputs/10k_test_output_nodebug_nodebug.avro" - *
  • "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-outputs/10k_test_output_debug_debug.avro" - *
- * - * See the definition of continuous_smoke_test() in //kokoro/gcp_ubuntu/shared_e2e.sh for how these - * are generated. + *

The expected input files are located at the S3 prefix + * "s3://aggregation-service-testing/$KOKORO_BUILD_ID/test-inputs". We generate multiple input + * report files because everytime a report file is used, the privacy budget associated with it is + * consumed, and it cannot be reused. Please see the definition of continuous_smoke_test() in + * //kokoro/gcp_ubuntu/shared_e2e.sh for how these are generated. */ @RunWith(JUnit4.class) public class AwsWorkerContinuousSmokeTest { @@ -169,12 +138,7 @@ public void createJobE2ETest() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName(), /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); // Read output avro from s3. ImmutableList aggregatedFacts = @@ -217,12 +181,7 @@ public void createNotDebugJobE2EReportDebugEnabledTest() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName(), /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); // Read output avro from s3. ImmutableList aggregatedFacts = @@ -269,12 +228,7 @@ public void createDebugJobE2EReportDebugModeEnabledTest() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName(), /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); // Read output avro from s3. ImmutableList aggregatedFacts = @@ -382,7 +336,7 @@ public void createDebugJobE2EReportDebugModeDisabledTest() throws Exception { // The unnoisedMetric of aggregatedDebugFacts should be 0 for all keys because // all reports are filtered out. // Noised metric in both debug reports and summary reports should be noise value instead of 0. - aggregatedDebugFacts.forEach(fact -> assertThat(fact.unnoisedMetric().get()).isEqualTo(0)); + aggregatedDebugFacts.forEach(fact -> assertThat(fact.getUnnoisedMetric().get()).isEqualTo(0)); } @Test @@ -481,29 +435,18 @@ public void createJobE2EAggregateReportingDebugTest() throws Exception { /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); + ImmutableList aggregatedFacts = + readResultsFromS3( + s3BlobStorageClient, + avroResultsFileReader, + getTestDataBucket(), + getOutputFileName(outputKey)); - // TODO: b/322832198 - Update assertions once Debug Reporting API is launched. - // The threshold is 100%, so we get SUCCESS_WITH_ERRORS. assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS_WITH_ERRORS.name()); - assertThat( - result - .get("result_info") - .get("error_summary") - .get("error_counts") - .get(0) - .get("count") - .asInt()) - .isEqualTo(10000); - assertThat( - result - .get("result_info") - .get("error_summary") - .get("error_counts") - .get(0) - .get("category") - .asText()) - .isEqualTo(ErrorCounter.UNSUPPORTED_REPORT_API_TYPE.name()); + .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); + assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) + .isTrue(); + assertThat(aggregatedFacts.size()).isAtLeast(DEBUG_DOMAIN_KEY_SIZE); } @Test @@ -534,12 +477,7 @@ public void createJobE2ETestPrivacyBudgetExhausted() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName() + "_request_1", /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest1, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest1, AggregationWorkerReturnCode.SUCCESS); CreateJobRequest createJobRequest2 = createJobRequest1.toBuilder() @@ -547,7 +485,7 @@ public void createJobE2ETestPrivacyBudgetExhausted() throws Exception { getClass().getSimpleName() + "::" + name.getMethodName() + "_request_2") .build(); - result = submitJobAndWaitForResult(createJobRequest2, COMPLETION_TIMEOUT); + JsonNode result = submitJobAndWaitForResult(createJobRequest2, COMPLETION_TIMEOUT); assertThat(result.get("result_info").get("return_code").asText()) .isEqualTo(PRIVACY_BUDGET_EXHAUSTED.name()); @@ -590,12 +528,7 @@ public void createJobE2EFledgeTest() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName(), /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); // Read output avro from s3. ImmutableList aggregatedFacts = @@ -644,12 +577,7 @@ public void createJobE2ESharedStorageTest() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName(), /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); // Read output avro from s3. ImmutableList aggregatedFacts = @@ -688,19 +616,14 @@ public void createDebugJobE2ETestPrivacyBudgetExhausted() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName() + "_request_1", /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest1, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(DEBUG_SUCCESS_WITH_PRIVACY_BUDGET_EXHAUSTED.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest1, DEBUG_SUCCESS_WITH_PRIVACY_BUDGET_EXHAUSTED); CreateJobRequest createJobRequest2 = createJobRequest1.toBuilder() .setJobRequestId( getClass().getSimpleName() + "::" + name.getMethodName() + "_request_2") .build(); - result = submitJobAndWaitForResult(createJobRequest2, COMPLETION_TIMEOUT); + JsonNode result = submitJobAndWaitForResult(createJobRequest2, COMPLETION_TIMEOUT); assertThat(result.get("result_info").get("return_code").asText()) .isEqualTo(DEBUG_SUCCESS_WITH_PRIVACY_BUDGET_EXHAUSTED.name()); @@ -741,12 +664,7 @@ public void createJobE2ETestWithMultiOutputShard() throws Exception { /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName(), /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), /* outputDomainPrefix= */ Optional.of(domainKey)); - JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS.name()); - assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) - .isTrue(); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); // Read output avro from s3. ImmutableList aggregatedFactsInShard1 = @@ -803,6 +721,115 @@ public void createJobE2ETestWithInvalidReports() throws Exception { .isEqualTo(AggregationWorkerReturnCode.SUCCESS_WITH_ERRORS.name()); } + @Test + public void createJob_withFilteringId() throws Exception { + // This tests depends on the continued usage of CONSTANT_NOISING when building the worker image. + // The Constant Noising adds 0 noise enabling the testing of the contribution filtering. + + // The source data from which the input reports are generated has 50k reports with 50k unique + // contribution ids. These are divided equally among 5 ids [0, 5, 65536, 4294967296, 18446744073709551615]. + // Filtering on any one of these ids should have all except 10k contribution keys filtered out. + + String inputKey = + String.format( + "%s/%s/test-inputs/50k_test_input_filtering_ids.avro", + TEST_DATA_S3_KEY_PREFIX, KOKORO_BUILD_ID); + String domainKey = + String.format( + "%s/%s/test-inputs/50k_test_domain_filtering_ids.avro", + TEST_DATA_S3_KEY_PREFIX, KOKORO_BUILD_ID); + String outputKeyPrefix = + String.format( + "%s/%s/test-outputs/50k_test_output_filtering_ids", + TEST_DATA_S3_KEY_PREFIX, KOKORO_BUILD_ID); + String outputKey = outputKeyPrefix + ".avro"; + + @Var Set filteringIds = ImmutableSet.of(); + @Var + CreateJobRequest createJobRequest = + AwsWorkerContinuousTestHelper.createJobRequest( + getTestDataBucket(), + inputKey, + getTestDataBucket(), + outputKey, + /* debugRun= */ false, + /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName() + "::1", + /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), + /* outputDomainPrefix= */ Optional.of(domainKey), + 2, + Optional.of(50000L), + filteringIds); + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); + @Var + ImmutableList aggregatedFacts = + AwsWorkerContinuousTestHelper.readResultsFromMultipleFiles( + s3BlobStorageClient, avroResultsFileReader, getTestDataBucket(), outputKeyPrefix); + // assert that aggregated facts count is at least equal to number of domain keys + assertThat(aggregatedFacts.size()).isAtLeast(50000); + // Filtering Id = 0 filters out all contributions except 10000 keys. + assertThat( + aggregatedFacts.stream() + .filter(aggregatedFact -> aggregatedFact.getMetric() > 0) + .count()) + .isAtLeast(10000); + + filteringIds = + ImmutableSet.of(UnsignedLong.valueOf("18446744073709551615"), UnsignedLong.valueOf(65536)); + createJobRequest = + AwsWorkerContinuousTestHelper.createJobRequest( + getTestDataBucket(), + inputKey, + getTestDataBucket(), + outputKey, + /* debugRun= */ false, + /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName() + "::2", + /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), + /* outputDomainPrefix= */ Optional.of(domainKey), + 2, + Optional.of(50000L), + filteringIds); + // Privacy Budget is not exhausted for the same data because different filtering Ids are used. + assertResponseForCode(createJobRequest, AggregationWorkerReturnCode.SUCCESS); + aggregatedFacts = + AwsWorkerContinuousTestHelper.readResultsFromMultipleFiles( + s3BlobStorageClient, avroResultsFileReader, getTestDataBucket(), outputKeyPrefix); + // assert that aggregated facts count is at least equal to number of domain keys + assertThat(aggregatedFacts.size()).isAtLeast(50000); + // Filtering Id = 65536 & 18446744073709551615 filters out all contributions except 20000 keys. + assertThat( + aggregatedFacts.stream() + .filter(aggregatedFact -> aggregatedFact.getMetric() > 0) + .count()) + .isAtLeast(20000); + + filteringIds = ImmutableSet.of(UnsignedLong.valueOf(5), UnsignedLong.ZERO); + createJobRequest = + AwsWorkerContinuousTestHelper.createJobRequest( + getTestDataBucket(), + inputKey, + getTestDataBucket(), + outputKey, + /* debugRun= */ false, + /* jobId= */ getClass().getSimpleName() + "::" + name.getMethodName() + "::3", + /* outputDomainBucketName= */ Optional.of(getTestDataBucket()), + /* outputDomainPrefix= */ Optional.of(domainKey), + 2, + Optional.of(50000L), + filteringIds); + // Privacy Budget is exhausted for the same data and the same filtering ids. + assertResponseForCode(createJobRequest, PRIVACY_BUDGET_EXHAUSTED); + } + + private static void assertResponseForCode( + CreateJobRequest createJobRequest, AggregationWorkerReturnCode returnCode) + throws IOException, InterruptedException { + JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); + + assertThat(result.get("result_info").get("return_code").asText()).isEqualTo(returnCode.name()); + assertThat(result.get("result_info").get("error_summary").get("error_counts").isEmpty()) + .isTrue(); + } + private static class TestEnv extends AbstractModule { @Override diff --git a/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousTestHelper.java b/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousTestHelper.java index 5797a85c..e03b1c1f 100644 --- a/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousTestHelper.java +++ b/javatests/com/google/aggregate/adtech/worker/AwsWorkerContinuousTestHelper.java @@ -28,7 +28,9 @@ import com.google.aggregate.protocol.avro.AvroDebugResultsRecord; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.io.ByteStreams; +import com.google.common.primitives.UnsignedLong; import com.google.protobuf.util.JsonFormat; import com.google.scp.operator.cpio.blobstorageclient.BlobStorageClient.BlobStorageClientException; import com.google.scp.operator.cpio.blobstorageclient.aws.S3BlobStorageClient; @@ -48,6 +50,7 @@ import java.util.Iterator; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -154,7 +157,8 @@ public static CreateJobRequest createJobRequest( outputDomainBucketName, outputDomainPrefix, /* reportErrorThresholdPercentage= */ 100, - /* inputReportCount= */ Optional.empty())) + /* inputReportCount= */ Optional.empty(), + /* filteringIds= */ Optional.empty())) .build(); } @@ -179,7 +183,37 @@ public static CreateJobRequest createJobRequest( outputDomainBucketName, outputDomainPrefix, /* reportErrorThresholdPercentage= */ 100, - /* inputReportCount= */ Optional.empty())) + /* inputReportCount= */ Optional.empty(), + /* filteringIds= */ Optional.empty())) + .build(); + } + + public static CreateJobRequest createJobRequest( + String inputDataBlobBucket, + String inputDataBlobPrefix, + String outputDataBlobBucket, + String outputDataBlobPrefix, + Boolean debugRun, + String jobId, + Optional outputDomainBucketName, + Optional outputDomainPrefix, + int reportErrorThresholdPercentage, + Optional inputReportCount, + Set filteringIds) { + return createDefaultJobRequestBuilder( + inputDataBlobBucket, + inputDataBlobPrefix, + outputDataBlobBucket, + outputDataBlobPrefix, + jobId) + .putAllJobParameters( + getJobParams( + debugRun, + outputDomainBucketName, + outputDomainPrefix, + reportErrorThresholdPercentage, + inputReportCount, + Optional.of(filteringIds))) .build(); } @@ -206,7 +240,8 @@ public static CreateJobRequest createJobRequest( outputDomainBucketName, outputDomainPrefix, reportErrorThresholdPercentage, - inputReportCount)) + inputReportCount, + /* filteringIds= */ Optional.empty())) .build(); } @@ -238,7 +273,8 @@ private static ImmutableMap getJobParams( Optional outputDomainBucketName, Optional outputDomainPrefix, int reportErrorThresholdPercentage, - Optional inputReportCountOptional) { + Optional inputReportCountOptional, + Optional> filteringIdsOptional) { ImmutableMap.Builder jobParams = ImmutableMap.builder(); jobParams.put("attribution_report_to", getAttributionReportTo()); @@ -253,13 +289,23 @@ private static ImmutableMap getJobParams( if (outputDomainPrefix.isPresent() && outputDomainBucketName.isPresent()) { jobParams.put("output_domain_blob_prefix", outputDomainPrefix.get()); jobParams.put("output_domain_bucket_name", outputDomainBucketName.get()); - return jobParams.build(); - } else if (outputDomainPrefix.isEmpty() && outputDomainBucketName.isEmpty()) { - return jobParams.build(); - } else { + } else if (!(outputDomainPrefix.isEmpty() && outputDomainBucketName.isEmpty())) { throw new IllegalStateException( "outputDomainPrefix and outputDomainBucketName must both be provided or both be empty."); } + + if (filteringIdsOptional.isPresent()) { + Set filteringIds = filteringIdsOptional.get(); + jobParams.put( + JobUtils.JOB_PARAM_FILTERING_IDS, + String.join( + ",", + filteringIds.stream() + .map(id -> id.toString()) + .collect(ImmutableSet.toImmutableSet()))); + } + + return jobParams.build(); } public static JsonNode submitJobAndWaitForResult( @@ -360,19 +406,19 @@ public static JsonNode getJobResult(String uri) throws IOException { return callGetJobAPI(uri); } + /** Returns a list of AggregatedFact from the file matching the bucket and key. */ public static ImmutableList readResultsFromS3( S3BlobStorageClient s3BlobStorageClient, AvroResultsFileReader avroResultsFileReader, - String outputBucket, - String outputPrefix) - throws Exception { + String bucket, + String key) + throws BlobStorageClientException, IOException { Path tempResultFile = Files.createTempFile(/* prefix= */ "results", /* suffix= */ "avro"); try (InputStream resultStream = s3BlobStorageClient.getBlob( - DataLocation.ofBlobStoreDataLocation( - BlobStoreDataLocation.create(outputBucket, outputPrefix))); + DataLocation.ofBlobStoreDataLocation(BlobStoreDataLocation.create(bucket, key))); OutputStream outputStream = Files.newOutputStream(tempResultFile)) { ByteStreams.copy(resultStream, outputStream); outputStream.flush(); @@ -383,6 +429,26 @@ public static ImmutableList readResultsFromS3( return facts; } + /** Returns a list of AggregatedFacts from a list of files matching the bucket and prefix. */ + public static ImmutableList readResultsFromMultipleFiles( + S3BlobStorageClient s3BlobStorageClient, + AvroResultsFileReader avroResultsFileReader, + String bucket, + String prefix) + throws BlobStorageClientException, IOException { + BlobStoreDataLocation blobsPrefixLocation = BlobStoreDataLocation.create(bucket, prefix); + DataLocation prefixLocation = DataLocation.ofBlobStoreDataLocation(blobsPrefixLocation); + ImmutableList shardBlobs = s3BlobStorageClient.listBlobs(prefixLocation); + + ImmutableList.Builder aggregatedFactBuilder = ImmutableList.builder(); + for (String shard : shardBlobs) { + aggregatedFactBuilder.addAll( + readResultsFromS3( + s3BlobStorageClient, avroResultsFileReader, blobsPrefixLocation.bucket(), shard)); + } + return aggregatedFactBuilder.build(); + } + private static AvroDebugResultsReader getReader( AvroDebugResultsReaderFactory readerFactory, Path avroFile) throws Exception { return readerFactory.create(Files.newInputStream(avroFile)); diff --git a/javatests/com/google/aggregate/adtech/worker/BUILD b/javatests/com/google/aggregate/adtech/worker/BUILD index 93fe7a7a..d866af3e 100644 --- a/javatests/com/google/aggregate/adtech/worker/BUILD +++ b/javatests/com/google/aggregate/adtech/worker/BUILD @@ -348,6 +348,7 @@ java_library( srcs = ["AwsWorkerContinuousTestHelper.java"], javacopts = ["-Xep:Var"], deps = [ + "//java/com/google/aggregate/adtech/worker/exceptions", "//java/com/google/aggregate/adtech/worker/model", "//java/com/google/aggregate/adtech/worker/testing:avro_results_file_reader", "//java/com/google/aggregate/adtech/worker/util", diff --git a/javatests/com/google/aggregate/adtech/worker/GcpWorkerContinuousSmokeTest.java b/javatests/com/google/aggregate/adtech/worker/GcpWorkerContinuousSmokeTest.java index 59ddad81..b2fe2630 100644 --- a/javatests/com/google/aggregate/adtech/worker/GcpWorkerContinuousSmokeTest.java +++ b/javatests/com/google/aggregate/adtech/worker/GcpWorkerContinuousSmokeTest.java @@ -278,7 +278,7 @@ public void createDebugJobE2EReportDebugModeDisabledTest() throws Exception { // The unnoisedMetric of aggregatedDebugFacts should be 0 for all keys because // all reports are filtered out. // Noised metric in both debug reports and summary reports should be noise value instead of 0. - aggregatedDebugFacts.forEach(fact -> assertThat(fact.unnoisedMetric().get()).isEqualTo(0)); + aggregatedDebugFacts.forEach(fact -> assertThat(fact.getUnnoisedMetric().get()).isEqualTo(0)); } /** @@ -306,28 +306,14 @@ public void createJobE2EAggregateReportingDebugTest() throws Exception { Optional.of(domainDataPrefix)); JsonNode result = submitJobAndWaitForResult(createJobRequest, COMPLETION_TIMEOUT); - // TODO: b/322832198 - Update assertions once Debug Reporting API is launched. - // The threshold is 100%, so we get SUCCESS_WITH_ERRORS. - assertThat(result.get("result_info").get("return_code").asText()) - .isEqualTo(AggregationWorkerReturnCode.SUCCESS_WITH_ERRORS.name()); - assertThat( - result - .get("result_info") - .get("error_summary") - .get("error_counts") - .get(0) - .get("count") - .asInt()) - .isEqualTo(10000); - assertThat( - result - .get("result_info") - .get("error_summary") - .get("error_counts") - .get(0) - .get("category") - .asText()) - .isEqualTo(ErrorCounter.UNSUPPORTED_REPORT_API_TYPE.name()); + checkJobExecutionResult(result, SUCCESS.name(), 0); + ImmutableList aggregatedFacts = + readResultsFromCloud( + gcsBlobStorageClient, + avroResultsFileReader, + getTestDataBucket(), + outputDataPrefix + OUTPUT_DATA_PREFIX_NAME); + assertThat(aggregatedFacts.size()).isAtLeast(DEBUG_DOMAIN_KEY_SIZE); } /* diff --git a/javatests/com/google/aggregate/adtech/worker/LocalRunnerTest.java b/javatests/com/google/aggregate/adtech/worker/LocalRunnerTest.java index 17f777ea..09d6545b 100644 --- a/javatests/com/google/aggregate/adtech/worker/LocalRunnerTest.java +++ b/javatests/com/google/aggregate/adtech/worker/LocalRunnerTest.java @@ -473,7 +473,7 @@ public void testMainMethodJsonOutputConstantNoise_Set2_no_noise() convertToAggregatedFact(objectMapper.readTree(Files.newInputStream(outputJson))); List nonZeroFacts = output.stream() - .filter((aggregatedFact) -> aggregatedFact.metric() != 0) + .filter((aggregatedFact) -> aggregatedFact.getMetric() != 0) .collect(Collectors.toList()); assertThat(nonZeroFacts).hasSize(0); @@ -504,7 +504,7 @@ public void testMainMethodJsonOutputConstantNoise_Set2_noise_epsilon64() Path outputJson = outputDirectoryPath.resolve("output.json"); List output = convertToAggregatedFact(objectMapper.readTree(Files.newInputStream(outputJson))); - Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.metric()); + Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.getMetric()); Stats statsAccumulator = Stats.of(allMetrics.collect(Collectors.toList())); assertThat(statsAccumulator.count()).isEqualTo(10000); @@ -539,7 +539,7 @@ public void testMainMethodJsonOutputConstantNoise_Set2_noise_epsilon1() Path outputJson = outputDirectoryPath.resolve("output.json"); List output = convertToAggregatedFact(objectMapper.readTree(Files.newInputStream(outputJson))); - Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.metric()); + Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.getMetric()); Stats statsAccumulator = Stats.of(allMetrics.collect(Collectors.toList())); assertThat(statsAccumulator.count()).isEqualTo(10000); @@ -572,7 +572,7 @@ public void testMainMethodJsonOutputConstantNoise_Set2_noise_default_epsilon10() Path outputJson = outputDirectoryPath.resolve("output.json"); List output = convertToAggregatedFact(objectMapper.readTree(Files.newInputStream(outputJson))); - Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.metric()); + Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.getMetric()); Stats statsAccumulator = Stats.of(allMetrics.collect(Collectors.toList())); assertThat(statsAccumulator.count()).isEqualTo(10000); @@ -700,7 +700,7 @@ public void testMainMethodJsonOutput_fledge_set2_withNoise_epsilon64() Path outputJson = outputDirectoryPath.resolve("output.json"); List output = convertToAggregatedFact(objectMapper.readTree(Files.newInputStream(outputJson))); - Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.metric()); + Stream allMetrics = output.stream().map(aggregatedFact -> aggregatedFact.getMetric()); Stats statsAccumulator = Stats.of(allMetrics.collect(Collectors.toList())); assertThat(statsAccumulator.count()).isEqualTo(10000); @@ -737,7 +737,7 @@ public void testMainMethodJsonOutput_fledge_set2_constantNoise() convertToAggregatedFact(objectMapper.readTree(Files.newInputStream(outputJson))); List nonZeroFacts = output.stream() - .filter((aggregatedFact) -> aggregatedFact.metric() != 0) + .filter((aggregatedFact) -> aggregatedFact.getMetric() != 0) .collect(Collectors.toList()); assertThat(nonZeroFacts).isEmpty(); diff --git a/javatests/com/google/aggregate/adtech/worker/ReportDecrypterAndValidatorTest.java b/javatests/com/google/aggregate/adtech/worker/ReportDecrypterAndValidatorTest.java index 5133f5d0..8f6b1cc2 100644 --- a/javatests/com/google/aggregate/adtech/worker/ReportDecrypterAndValidatorTest.java +++ b/javatests/com/google/aggregate/adtech/worker/ReportDecrypterAndValidatorTest.java @@ -126,7 +126,7 @@ public void testDecryptionKeyServiceError_INTERNAL() { assertThat(decryptionValidationResult.report()).isEmpty(); assertThat(decryptionValidationResult.errorMessages().stream().map(ErrorMessage::category)) - .containsExactly(ErrorCounter.SERVICE_ERROR); + .containsExactly(ErrorCounter.INTERNAL_ERROR); } @Test @@ -159,7 +159,7 @@ public void testDecryptionKeyServiceError_DEFAULT() { assertThat(decryptionValidationResult.report()).isEmpty(); assertThat(decryptionValidationResult.errorMessages().stream().map(ErrorMessage::category)) - .containsExactly(ErrorCounter.SERVICE_ERROR); + .containsExactly(ErrorCounter.INTERNAL_ERROR); } public static final class TestEnv extends AbstractModule { diff --git a/javatests/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessorTest.java b/javatests/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessorTest.java index 8a3de0f4..47b5c51d 100644 --- a/javatests/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessorTest.java +++ b/javatests/com/google/aggregate/adtech/worker/aggregation/concurrent/ConcurrentAggregationProcessorTest.java @@ -595,14 +595,14 @@ public void aggregate_debugRunDomainOptional_resultsInSameDebugFacts() throws Ex assertThat(jobResultProcessor).isEqualTo(makeExpectedJobResult()); Map resultFacts = resultLogger.getMaterializedAggregationResults().getMaterializedAggregations().stream() - .collect(Collectors.toMap(AggregatedFact::bucket, Function.identity())); + .collect(Collectors.toMap(AggregatedFact::getBucket, Function.identity())); assertThat(resultFacts).hasSize(3); assertThat(resultLogger.getMaterializedDebugAggregationResults().getMaterializedAggregations()) .hasSize(3); Map debugFacts = resultLogger.getMaterializedDebugAggregationResults().getMaterializedAggregations().stream() - .collect(Collectors.toMap(AggregatedFact::bucket, Function.identity())); + .collect(Collectors.toMap(AggregatedFact::getBucket, Function.identity())); assertThat(debugFacts).hasSize(3); // Key 1 is in the report only, key 2 overlaps both sets, and key 3 is in the domain only. @@ -651,12 +651,12 @@ public void aggregate_debugRunWithOutputDomain_resultsInSameDebugFacts() throws Map resultFacts = resultLogger.getMaterializedAggregationResults().getMaterializedAggregations().stream() - .collect(Collectors.toMap(AggregatedFact::bucket, Function.identity())); + .collect(Collectors.toMap(AggregatedFact::getBucket, Function.identity())); assertThat(resultFacts).hasSize(2); Map debugFacts = resultLogger.getMaterializedDebugAggregationResults().getMaterializedAggregations().stream() - .collect(Collectors.toMap(AggregatedFact::bucket, Function.identity())); + .collect(Collectors.toMap(AggregatedFact::getBucket, Function.identity())); assertThat(debugFacts).hasSize(3); // Key 2 is in both domain and reports; key 3 is in the domain only. @@ -671,8 +671,8 @@ public void aggregate_debugRunWithOutputDomain_resultsInSameDebugFacts() throws // Key 1 is in the report only but should be present in the debug facts. assertThat(resultFacts).doesNotContainKey(createBucketFromInt(1)); assertThat(debugFacts).containsKey(createBucketFromInt(1)); - assertThat(debugFacts.get(createBucketFromInt(1)).debugAnnotations()).isPresent(); - assertThat(debugFacts.get(createBucketFromInt(1)).debugAnnotations().get()) + assertThat(debugFacts.get(createBucketFromInt(1)).getDebugAnnotations()).isPresent(); + assertThat(debugFacts.get(createBucketFromInt(1)).getDebugAnnotations().get()) .containsExactly(DebugBucketAnnotation.IN_REPORTS); } @@ -1123,8 +1123,8 @@ public void process_decryptionKeyFetchFailedOtherReasons() throws Exception { .addAllErrorCounts( ImmutableList.of( ErrorCount.newBuilder() - .setCategory(ErrorCounter.SERVICE_ERROR.name()) - .setDescription(ErrorCounter.SERVICE_ERROR.getDescription()) + .setCategory(ErrorCounter.INTERNAL_ERROR.name()) + .setDescription(ErrorCounter.INTERNAL_ERROR.getDescription()) .setCount(4L) .build(), ErrorCount.newBuilder() @@ -1755,6 +1755,33 @@ public void aggregate_withPrivacyBudgeting_unauthorizedException_failJob() { assertThat(ex.getCode()).isEqualTo(PRIVACY_BUDGET_AUTHORIZATION_ERROR); } + @Test + public void aggregate_withPrivacyBudgeting_invalidReportingOriginException_failJob() { + FakePrivacyBudgetingServiceBridge fakePrivacyBudgetingServiceBridge = + new FakePrivacyBudgetingServiceBridge(); + + Map jobParameters = new HashMap<>(ctx.requestInfo().getJobParametersMap()); + jobParameters.put(JOB_PARAM_ATTRIBUTION_REPORT_TO, "https://subdomain.coordinator.test"); + ctx = + ctx.toBuilder() + .setRequestInfo( + ctx.requestInfo().toBuilder() + .putAllJobParameters( + combineJobParams(ctx.requestInfo().getJobParametersMap(), jobParameters)) + .build()) + .build(); + privacyBudgetingServiceBridge.setPrivacyBudgetingServiceBridgeImpl( + fakePrivacyBudgetingServiceBridge); + + AggregationJobProcessException ex = + assertThrows(AggregationJobProcessException.class, () -> processor.get().process(ctx)); + assertThat(ex.getCode()).isEqualTo(INVALID_JOB); + assertThat(ex.getMessage()) + .isEqualTo( + "The attribution_report_to parameter specified in the CreateJob request is not under a" + + " known public suffix."); + } + @Test public void aggregate_withPrivacyBudgeting_oneBudgetMissing() { FakePrivacyBudgetingServiceBridge fakePrivacyBudgetingServiceBridge = @@ -1894,18 +1921,18 @@ private void compareDebugFactByKey( assertThat(resultFacts).containsKey(key); assertThat(debugFacts).containsKey(key); compareDebugFact(resultFacts.get(key), debugFacts.get(key)); - assertThat(debugFacts.get(key).debugAnnotations()).isPresent(); - assertThat(debugFacts.get(key).debugAnnotations().get()) + assertThat(debugFacts.get(key).getDebugAnnotations()).isPresent(); + assertThat(debugFacts.get(key).getDebugAnnotations().get()) .containsExactlyElementsIn(expectedAnnotation); } private void compareDebugFact(AggregatedFact resultFact, AggregatedFact debugFact) { - assertEquals(resultFact.bucket(), debugFact.bucket()); - assertEquals(resultFact.metric(), debugFact.metric()); + assertEquals(resultFact.getBucket(), debugFact.getBucket()); + assertEquals(resultFact.getMetric(), debugFact.getMetric()); - assertThat(resultFact.unnoisedMetric()).isPresent(); - assertThat(debugFact.unnoisedMetric()).isPresent(); - assertEquals(resultFact.unnoisedMetric().get(), debugFact.unnoisedMetric().get()); + assertThat(resultFact.getUnnoisedMetric()).isPresent(); + assertThat(debugFact.getUnnoisedMetric()).isPresent(); + assertEquals(resultFact.getUnnoisedMetric().get(), debugFact.getUnnoisedMetric().get()); } private void writeOutputDomainTextFile(Path outputDomainPath, String... keys) throws IOException { diff --git a/javatests/com/google/aggregate/adtech/worker/model/serdes/SharedInfoSerdesTest.java b/javatests/com/google/aggregate/adtech/worker/model/serdes/SharedInfoSerdesTest.java index 75a2e224..c0d59c74 100644 --- a/javatests/com/google/aggregate/adtech/worker/model/serdes/SharedInfoSerdesTest.java +++ b/javatests/com/google/aggregate/adtech/worker/model/serdes/SharedInfoSerdesTest.java @@ -18,6 +18,7 @@ import static com.google.aggregate.adtech.worker.model.SharedInfo.LATEST_VERSION; import static com.google.aggregate.adtech.worker.model.SharedInfo.SHARED_STORAGE_API; +import static com.google.aggregate.adtech.worker.model.SharedInfo.ATTRIBUTION_REPORTING_DEBUG_API; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth8.assertThat; import static org.junit.Assert.assertFalse; @@ -273,14 +274,35 @@ public void deserialize_withGoldenReportVersion1() { String sharedInfoJsonString = "{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"21abd97f-73e8-4b88-9389-a9fee6abda5e\",\"reporting_origin\":\"https://report.test\",\"scheduled_report_time\":\"1234486400\",\"version\":\"1.0\"}"; SharedInfo expectedSharedInfo = - SharedInfo.builder() - .setVersion("1.0") - .setApi(SHARED_STORAGE_API) - .setReportId("21abd97f-73e8-4b88-9389-a9fee6abda5e") - .setReportingOrigin(REPORTING_ORIGIN_CHROME_GOLDEN_REPORT) - .setScheduledReportTime(Instant.ofEpochSecond(1234486400)) - .setReportDebugMode(true) - .build(); + SharedInfo.builder() + .setVersion("1.0") + .setApi(SHARED_STORAGE_API) + .setReportId("21abd97f-73e8-4b88-9389-a9fee6abda5e") + .setReportingOrigin(REPORTING_ORIGIN_CHROME_GOLDEN_REPORT) + .setScheduledReportTime(Instant.ofEpochSecond(1234486400)) + .setReportDebugMode(true) + .build(); + + Optional deserialized = sharedInfoSerdes.convert(sharedInfoJsonString); + + assertThat(deserialized).hasValue(expectedSharedInfo); + } + + /** Test with Chrome generated attribution-reporting-debug reports used from here - b/324143474 */ + @Test + public void deserialize_withGoldenReport_debugApi() { + String sharedInfoJsonString = + "{\"api\":\"attribution-reporting-debug\",\"attribution_destination\":\"https://conversion.test\",\"debug_mode\":\"enabled\",\"report_id\":\"21abd97f-73e8-4b88-9389-a9fee6abda5e\",\"reporting_origin\":\"https://report.test\",\"scheduled_report_time\":\"1234486400\",\"version\":\"0.1\"}"; + SharedInfo expectedSharedInfo = + SharedInfo.builder() + .setVersion("0.1") + .setApi(ATTRIBUTION_REPORTING_DEBUG_API) + .setReportId("21abd97f-73e8-4b88-9389-a9fee6abda5e") + .setReportingOrigin(REPORTING_ORIGIN_CHROME_GOLDEN_REPORT) + .setDestination(DESTINATION_CHROME_GOLDEN_REPORT) + .setScheduledReportTime(Instant.ofEpochSecond(1234486400)) + .setReportDebugMode(true) + .build(); Optional deserialized = sharedInfoSerdes.convert(sharedInfoJsonString); diff --git a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/BUILD b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/BUILD index 19a46e7b..84066e61 100644 --- a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/BUILD +++ b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/BUILD @@ -20,6 +20,8 @@ java_test( name = "CborPayloadSerdesTest", srcs = ["CborPayloadSerdesTest.java"], data = [ + ":resources/debug_api_report_1.cbor", # Generated by Chrome + ":resources/debug_api_report_2.cbor", # Generated by Chrome ":resources/nullReport.cbor", # Generated by Chrome ":resources/report1.cbor", # Generated by Chrome ":resources/report2.cbor", # Generated by Chrome @@ -33,6 +35,8 @@ java_test( # Pass the path to the input file via environment variable instead of # hard-coding a path in the test env = { + "CBOR_DEBUG_REPORT_1_LOCATION": "$(location :resources/debug_api_report_1.cbor)", + "CBOR_DEBUG_REPORT_2_LOCATION": "$(location :resources/debug_api_report_2.cbor)", "CBOR_NULL_REPORT_LOCATION": "$(location :resources/nullReport.cbor)", "CBOR_REPORT_1_LOCATION": "$(location :resources/report1.cbor)", "CBOR_REPORT_2_LOCATION": "$(location :resources/report2.cbor)", diff --git a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/CborPayloadSerdesTest.java b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/CborPayloadSerdesTest.java index 68e1220b..768f0bf5 100644 --- a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/CborPayloadSerdesTest.java +++ b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/CborPayloadSerdesTest.java @@ -56,6 +56,30 @@ public void setUp() { .build(); } + @Test + public void testDeserializeFromCborBytes_debugReport1() throws Exception { + Payload expectedPayload = + Payload.builder() + .addFact(Fact.builder().setBucket(BigInteger.valueOf(0x1)).setValue(2).build()) + .addFact(Fact.builder().setBucket(BigInteger.valueOf(0x3)).setValue(4).build()) + .build(); + + readCborBytesFromFileAndAssert( + Path.of(System.getenv("CBOR_DEBUG_REPORT_1_LOCATION")), expectedPayload); + } + + @Test + public void testDeserializeFromCborBytes_debugReport2() throws Exception { + Payload expectedPayload = + Payload.builder() + .addFact(Fact.builder().setBucket(BigInteger.valueOf(0x1)).setValue(2).build()) + .addFact(Fact.builder().setBucket(BigInteger.valueOf(0x0)).setValue(0).build()) + .build(); + + readCborBytesFromFileAndAssert( + Path.of(System.getenv("CBOR_DEBUG_REPORT_2_LOCATION")), expectedPayload); + } + @Test public void testDeserializeFromCborBytes_report1() throws Exception { Payload expectedPayload = diff --git a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/README.md b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/README.md index f075b20d..193f4f5f 100644 --- a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/README.md +++ b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/README.md @@ -12,5 +12,11 @@ base64 decoder to get cbor, for example: base64 -d report_1_cleartext_payloads.json > report1.cbor ``` +Alternative, to ignore garbage while decoding use the following command: + +```sh + base64 -di report_1_cleartext_payloads.json > report1.cbor +``` + CborPayloadSerdesTest reads the cbor files from reportx.cbor files, deserializes the cbor payload and compares it with manually constructed test payload. diff --git a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/resources/debug_api_report_1.cbor b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/resources/debug_api_report_1.cbor new file mode 100644 index 00000000..271d8e81 Binary files /dev/null and b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/resources/debug_api_report_1.cbor differ diff --git a/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/resources/debug_api_report_2.cbor b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/resources/debug_api_report_2.cbor new file mode 100644 index 00000000..fda1649e Binary files /dev/null and b/javatests/com/google/aggregate/adtech/worker/model/serdes/cbor/resources/debug_api_report_2.cbor differ diff --git a/javatests/com/google/aggregate/adtech/worker/util/ReportingOriginUtilsTest.java b/javatests/com/google/aggregate/adtech/worker/util/ReportingOriginUtilsTest.java new file mode 100644 index 00000000..6fa44766 --- /dev/null +++ b/javatests/com/google/aggregate/adtech/worker/util/ReportingOriginUtilsTest.java @@ -0,0 +1,115 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.adtech.worker.util; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; + +import com.google.aggregate.adtech.worker.util.ReportingOriginUtils.InvalidReportingOriginException; +import org.junit.Test; + +public class ReportingOriginUtilsTest { + + @Test + public void convertToSite_singlePartTld() throws InvalidReportingOriginException { + assertThat(ReportingOriginUtils.convertReportingOriginToSite("https://dummyOrigin.foo.com")) + .isEqualTo("https://foo.com"); + } + + @Test + public void convertToSite_multipartTld() throws InvalidReportingOriginException { + assertThat(ReportingOriginUtils.convertReportingOriginToSite("https://dummyOrigin.foo.co.uk")) + .isEqualTo("https://foo.co.uk"); + } + + @Test + public void convertToSite_whenSiteProvided() throws InvalidReportingOriginException { + assertThat(ReportingOriginUtils.convertReportingOriginToSite("https://foo.co.uk")) + .isEqualTo("https://foo.co.uk"); + } + + @Test + public void convertToSite_whenHttpUrlProvided() throws InvalidReportingOriginException { + assertThat(ReportingOriginUtils.convertReportingOriginToSite("http://about.foo.blogspot.com")) + .isEqualTo("https://foo.blogspot.com"); + } + + @Test + public void convertToSite_whenUrlWithTrailingSlashProvided() + throws InvalidReportingOriginException { + assertThat(ReportingOriginUtils.convertReportingOriginToSite("http://about.foo.blogspot.com/")) + .isEqualTo("https://foo.blogspot.com"); + } + + @Test + public void convertToSite_whenUrlWithPortProvided() throws InvalidReportingOriginException { + assertThat( + ReportingOriginUtils.convertReportingOriginToSite( + "http://about.foo.blogspot.com:8443/bar")) + .isEqualTo("https://foo.blogspot.com"); + } + + @Test + public void convertToSite_onlyPublicSuffixProvided_throwsException() { + InvalidReportingOriginException ex = + assertThrows( + InvalidReportingOriginException.class, + () -> ReportingOriginUtils.convertReportingOriginToSite("https://blogspot.com")); + assertThat(ex.getMessage()).contains("not under a known public suffix"); + } + + @Test + public void convertToSite_underUnknownPublicSuffix_throwsException() { + + InvalidReportingOriginException ex = + assertThrows( + InvalidReportingOriginException.class, + () -> + ReportingOriginUtils.convertReportingOriginToSite( + "https://dummyOrigin.coordinator.test")); + assertThat(ex.getMessage()).contains("not under a known public suffix"); + } + + @Test + public void convertToSite_invalidDomainNoProtocol_throwsException() { + + InvalidReportingOriginException ex = + assertThrows( + InvalidReportingOriginException.class, + () -> + ReportingOriginUtils.convertReportingOriginToSite("dummyOrigin.coordinator.test")); + assertThat(ex.getMessage()).contains("no protocol"); + } + + @Test + public void convertToSite_malformedUrl_throwsException() { + InvalidReportingOriginException ex = + assertThrows( + InvalidReportingOriginException.class, + () -> ReportingOriginUtils.convertReportingOriginToSite("some invalid URL")); + assertThat(ex.getMessage()).contains("no protocol"); + } + + @Test + public void convertToSite_emptyInput_throwsException() { + InvalidReportingOriginException ex = + assertThrows( + InvalidReportingOriginException.class, + () -> ReportingOriginUtils.convertReportingOriginToSite("")); + assertThat(ex.getMessage()).contains("no protocol"); + } +} diff --git a/javatests/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImplTest.java b/javatests/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImplTest.java index 41b938ba..1f3a957a 100644 --- a/javatests/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImplTest.java +++ b/javatests/com/google/aggregate/privacy/noise/NoisedAggregationRunnerImplTest.java @@ -55,12 +55,6 @@ public class NoisedAggregationRunnerImplTest { private static final ImmutableList VALUE_NOISE_LIST = ImmutableList.of(10L, -10L); - - private static final AggregatedFact FACT1 = - AggregatedFact.create(BigInteger.valueOf(1), /* metric= */ 5, 5L); - private static final AggregatedFact FACT2 = - AggregatedFact.create(BigInteger.valueOf(2), /* metric= */ 500, 500L); - private static final AggregatedFact NOISED_FACT1 = AggregatedFact.create(BigInteger.valueOf(1), /* metric= */ 15, 5L); private static final AggregatedFact NOISED_FACT2 = @@ -87,11 +81,9 @@ public void setUp() { public void noise() { thresholdSupplier.setThreshold(0); - ImmutableList input = ImmutableList.of(FACT1, FACT2); - NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(NOISED_FACT1, NOISED_FACT2); @@ -113,9 +105,7 @@ public void noise_parallelNoisingEnabled() { NoisedAggregationResult result = noiseAndThreshold( - ImmutableList.of(FACT1, FACT2), - /* doThreshold= */ true, - /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(noisedFact1, noisedFact2); @@ -125,11 +115,9 @@ public void noise_parallelNoisingEnabled() { public void noise_noThresholding() { thresholdSupplier.setThreshold(10000); - ImmutableList input = ImmutableList.of(FACT1, FACT2); - NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ false, /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ false, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(NOISED_FACT1, NOISED_FACT2); @@ -138,11 +126,10 @@ public void noise_noThresholding() { @Test public void threshold() { thresholdSupplier.setThreshold(30); - ImmutableList input = ImmutableList.of(FACT1, FACT2); NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(NOISED_FACT2); @@ -151,11 +138,10 @@ public void threshold() { @Test public void countEqualToIntThreshold() { thresholdSupplier.setThreshold(10); - ImmutableList input = ImmutableList.of(FACT1, FACT2); NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(NOISED_FACT1, NOISED_FACT2); @@ -164,11 +150,10 @@ public void countEqualToIntThreshold() { @Test public void countEqualToDoubleThreshold() { thresholdSupplier.setThreshold(10.0001); - ImmutableList input = ImmutableList.of(FACT1, FACT2); NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(NOISED_FACT1, NOISED_FACT2); @@ -177,11 +162,10 @@ public void countEqualToDoubleThreshold() { @Test public void countLessThanDoubleThreshold() { thresholdSupplier.setThreshold(25.0002); - ImmutableList input = ImmutableList.of(FACT1, FACT2); NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.empty()); assertThat(result.privacyParameters()).isEqualTo(customDeltaPrivacyParamsSupplier.get()); assertThat(result.noisedAggregatedFacts()).containsExactly(NOISED_FACT2); @@ -190,11 +174,10 @@ public void countLessThanDoubleThreshold() { @Test public void testDebugEpsilonRequestScoped() { thresholdSupplier.setThreshold(25.0002); - ImmutableList input = ImmutableList.of(FACT1, FACT2); NoisedAggregationResult result = noiseAndThreshold( - input, /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.of(0.2)); + getTestFacts(), /* doThreshold= */ true, /* debugPrivacyEpsilon= */ Optional.of(0.2)); // debugEpsilon is not used with constant noise, but we can check that the epsilon is updated in // the privacy params. @@ -220,6 +203,15 @@ private NoisedAggregationResult noiseAndThreshold( : noisedAggregationResult; } + private static ImmutableList getTestFacts() { + AggregatedFact fact1 = + AggregatedFact.create(BigInteger.valueOf(1), /* metric= */ 5, /* unnoisedMetric= */ 5L); + AggregatedFact fact2 = + AggregatedFact.create(BigInteger.valueOf(2), /* metric= */ 500, /* unnoisedMetric= */ 500L); + + return ImmutableList.of(fact1, fact2); + } + /** * Test implementation of {@code PrivacyParameters} supplier to allow delta to be modified for * testing threshold. diff --git a/javatests/com/google/aggregate/tools/privacybudgetutil/common/BUILD b/javatests/com/google/aggregate/tools/privacybudgetutil/common/BUILD new file mode 100644 index 00000000..99e929fe --- /dev/null +++ b/javatests/com/google/aggregate/tools/privacybudgetutil/common/BUILD @@ -0,0 +1,43 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +load("@rules_java//java:defs.bzl", "java_test") + +package(default_visibility = ["//visibility:public"]) + +java_test( + name = "ExtractionUtilsTest", + srcs = ["ExtractionUtilsTest.java"], + data = [":data_files"], + deps = [ + "//java/com/google/aggregate/privacy/budgeting/bridge:privacy_budgeting_service_bridge", + "//java/com/google/aggregate/privacy/budgeting/budgetkeygenerator:privacy_budget_key_generator", + "//java/com/google/aggregate/tools/privacybudgetutil/common:extraction_utils", + "//java/external:acai", + "//java/external:google_truth", + "//java/external:guava", + "//java/external:guice", + "//java/external:jackson_annotations", + "//java/external:jackson_core", + "//java/external:jackson_databind", + "//java/external:jackson_datatype_jsr310", + ], +) + +filegroup( + name = "data_files", + srcs = [ + "test_data/input_version_01.avro", + "test_data/input_version_1.avro", + ], +) diff --git a/javatests/com/google/aggregate/tools/privacybudgetutil/common/ExtractionUtilsTest.java b/javatests/com/google/aggregate/tools/privacybudgetutil/common/ExtractionUtilsTest.java new file mode 100644 index 00000000..76dc2a61 --- /dev/null +++ b/javatests/com/google/aggregate/tools/privacybudgetutil/common/ExtractionUtilsTest.java @@ -0,0 +1,153 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.aggregate.tools.privacybudgetutil.common; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.fail; + +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.google.acai.Acai; +import com.google.aggregate.privacy.budgeting.bridge.PrivacyBudgetingServiceBridge.PrivacyBudgetUnit; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorFactory; +import com.google.aggregate.privacy.budgeting.budgetkeygenerator.PrivacyBudgetKeyGeneratorModule; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.primitives.UnsignedLong; +import com.google.inject.AbstractModule; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.Instant; +import java.util.Set; +import javax.inject.Inject; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class ExtractionUtilsTest { + + @Rule public final Acai acai = new Acai(TestEnv.class); + + @Inject private PrivacyBudgetKeyGeneratorFactory privacyBudgetKeyGeneratorFactory; + + private static final String KEYFILE_NAME = "key"; + + @Test + public void testPrivacyBudgetKeyFromAvro() throws Exception { + ExtractionUtils.KeyFile goldenKeyFile = + ExtractionUtils.KeyFile.create(KEYFILE_NAME, getKeySetAsString(buildUnitSet())); + Path avro = + Paths.get( + "javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_01.avro"); + + try { + InputStream stream = Files.newInputStream(avro); + ExtractionUtils.KeyFile file = + ExtractionUtils.processAvro( + stream, + privacyBudgetKeyGeneratorFactory, + KEYFILE_NAME, + ImmutableList.of(UnsignedLong.ZERO)); + assertThat(file).isEqualTo(goldenKeyFile); + } catch (IOException e) { + fail(e.getMessage()); + } + } + + @Test + public void testPrivacyBudgetKeyFromAvroWithFilteringIds() throws Exception { + ExtractionUtils.KeyFile goldenKeyFile = + ExtractionUtils.KeyFile.create(KEYFILE_NAME, getKeySetAsString(buildFilteringIdsUnitSet())); + Path avro = + Paths.get( + "javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_1.avro"); + + InputStream stream = Files.newInputStream(avro); + ExtractionUtils.KeyFile file = + ExtractionUtils.processAvro( + stream, + privacyBudgetKeyGeneratorFactory, + KEYFILE_NAME, + ImmutableList.of( + UnsignedLong.valueOf(1), UnsignedLong.valueOf(2), UnsignedLong.valueOf(3))); + assertThat(file).isEqualTo(goldenKeyFile); + } + + private static Set buildUnitSet() { + return ImmutableSet.of( + PrivacyBudgetUnit.create( + "4c136a585949aefbd6180b817933393353a27bdd3936d246a10c694066d5a79e", + Instant.ofEpochSecond(1710288000), + "https://privacy-sandbox-demos-dsp.dev"), + PrivacyBudgetUnit.create( + "4c136a585949aefbd6180b817933393353a27bdd3936d246a10c694066d5a79e", + Instant.ofEpochSecond(1710284400), + "https://privacy-sandbox-demos-dsp.dev")); + } + + private static Set buildFilteringIdsUnitSet() { + return ImmutableSet.of( + PrivacyBudgetUnit.create( + "3bd6a0d3635c6d16f5c8c70bd63005f6f8e2ad31b72c95907afea9b35919cdc1", + Instant.ofEpochSecond(1710284400), + "https://privacy-sandbox-demos-dsp.dev"), + PrivacyBudgetUnit.create( + "b3eb3651049728d8edc02542fc685586a9ffea9c559852e0746c6cef6ddcc137", + Instant.ofEpochSecond(1710288000), + "https://privacy-sandbox-demos-dsp.dev"), + PrivacyBudgetUnit.create( + "3bd6a0d3635c6d16f5c8c70bd63005f6f8e2ad31b72c95907afea9b35919cdc1", + Instant.ofEpochSecond(1710288000), + "https://privacy-sandbox-demos-dsp.dev"), + PrivacyBudgetUnit.create( + "db4bb8c6d309ce494bb8f9fc0f17c2b2dc7b34ed0338e7b92319da82456bf03e", + Instant.ofEpochSecond(1710284400), + "https://privacy-sandbox-demos-dsp.dev"), + PrivacyBudgetUnit.create( + "b3eb3651049728d8edc02542fc685586a9ffea9c559852e0746c6cef6ddcc137", + Instant.ofEpochSecond(1710284400), + "https://privacy-sandbox-demos-dsp.dev"), + PrivacyBudgetUnit.create( + "db4bb8c6d309ce494bb8f9fc0f17c2b2dc7b34ed0338e7b92319da82456bf03e", + Instant.ofEpochSecond(1710288000), + "https://privacy-sandbox-demos-dsp.dev")); + } + + private static String getKeySetAsString(Set unitSet) + throws JsonProcessingException { + ObjectMapper om = new ObjectMapper(); + om.registerModule(new JavaTimeModule()); + om.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); + return om.writeValueAsString(unitSet); + } + + static final class TestEnv extends AbstractModule { + + @Override + protected void configure() { + install(new PrivacyBudgetKeyGeneratorModule()); + } + } +} diff --git a/javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_01.avro b/javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_01.avro new file mode 100644 index 00000000..2fdd8dae Binary files /dev/null and b/javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_01.avro differ diff --git a/javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_1.avro b/javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_1.avro new file mode 100644 index 00000000..0454a4e1 Binary files /dev/null and b/javatests/com/google/aggregate/tools/privacybudgetutil/common/test_data/input_version_1.avro differ diff --git a/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_1.json b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_1.json new file mode 100644 index 00000000..b5509828 --- /dev/null +++ b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_1.json @@ -0,0 +1,13 @@ +{ + "aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com", + "aggregation_service_payloads": [ + { + "debug_cleartext_payload": "omRkYXRhgqJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAABGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAA2lvcGVyYXRpb25paGlzdG9ncmFt", + "key_id": "example_id", + "payload": "X5tO0bPyX0D/E/NrwN2EQCJCg1qFLUlSoNm7fZZrlUTiZp9Rou1xSAjL5AmpKhmEjqakj8aiIDXCfEyeHcfxd7LoXfA04Bi1QrZTTT0e86qlfbE//+1cG5o+2vWaEoJMMjvUMfeeqtG0p7SkyTLbz8nmEC0dR7JaPnP6gM3EfgzD354n1YdKs504ySRClkKwnZO/" + } + ], + "shared_info": "{\"api\":\"attribution-reporting-debug\",\"attribution_destination\":\"https://conversion.test\",\"debug_mode\":\"enabled\",\"report_id\":\"21abd97f-73e8-4b88-9389-a9fee6abda5e\",\"reporting_origin\":\"https://report.test\",\"scheduled_report_time\":\"1234486400\",\"version\":\"0.1\"}", + "source_debug_key": "123", + "trigger_debug_key": "456" +} \ No newline at end of file diff --git a/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_1_cleartext_payloads.json b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_1_cleartext_payloads.json new file mode 100644 index 00000000..8dbb5d2d --- /dev/null +++ b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_1_cleartext_payloads.json @@ -0,0 +1,3 @@ +[ + "omRkYXRhgqJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAABGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAA2lvcGVyYXRpb25paGlzdG9ncmFt" +] diff --git a/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_2.json b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_2.json new file mode 100644 index 00000000..176bc05b --- /dev/null +++ b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_2.json @@ -0,0 +1,13 @@ +{ + "aggregation_coordinator_origin": "https://publickeyservice.msmt.gcp.privacysandboxservices.com", + "aggregation_service_payloads": [ + { + "debug_cleartext_payload": "omRkYXRhgqJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt", + "key_id": "example_id", + "payload": "g9IeDXvoc655PVAmt10dcqhTJyR/EU+vNIep+0ZL3CytfmTlE2a0XB7pAs+GmX8ejIl4f5PkIpLV4Bds4GS0kzLP/wPV5VFftLwJ1RKUsN0eEjE3UMS+D8NewSGaCy+AU5UP1B3rHsgg9gy4Xfw0zvKLtMAl8FGnkLKxNrvjRVOFNZWnm77CYvzahkedtqEJV1wN" + } + ], + "shared_info": "{\"api\":\"attribution-reporting-debug\",\"attribution_destination\":\"https://conversion.test\",\"debug_mode\":\"enabled\",\"report_id\":\"21abd97f-73e8-4b88-9389-a9fee6abda5e\",\"reporting_origin\":\"https://report.test\",\"scheduled_report_time\":\"1234486400\",\"version\":\"0.1\"}", + "source_debug_key": "123", + "trigger_debug_key": "456" +} diff --git a/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_2_cleartext_payloads.json b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_2_cleartext_payloads.json new file mode 100644 index 00000000..0a0d3a32 --- /dev/null +++ b/javatests/testData/aggregatable_report_goldens/latest/debug_api_report_2_cleartext_payloads.json @@ -0,0 +1,3 @@ +[ + "omRkYXRhgqJldmFsdWVEAAAAAmZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAaJldmFsdWVEAAAAAGZidWNrZXRQAAAAAAAAAAAAAAAAAAAAAGlvcGVyYXRpb25paGlzdG9ncmFt" +] diff --git a/maven_install.json b/maven_install.json index afc11802..95259341 100644 --- a/maven_install.json +++ b/maven_install.json @@ -1,6 +1,6 @@ { "dependency_tree": { - "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 768200708, + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": -693403977, "conflict_resolution": { "com.google.api:gax:2.38.0": "com.google.api:gax:2.42.0", "com.google.auto.value:auto-value-annotations:1.7.4": "com.google.auto.value:auto-value-annotations:1.10.4", @@ -23,10 +23,10 @@ { "coord": "com.amazonaws:aws-java-sdk-cloudwatch:1.12.641", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", "com.fasterxml.jackson.core:jackson-databind:2.16.1", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.amazonaws:jmespath-java:1.12.641", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", @@ -49,17 +49,17 @@ { "coord": "com.amazonaws:aws-java-sdk-core:1.12.641", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.16.1" ], "directDependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.16.1" @@ -76,10 +76,10 @@ { "coord": "com.amazonaws:aws-java-sdk-kms:1.12.641", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", "com.fasterxml.jackson.core:jackson-databind:2.16.1", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.amazonaws:jmespath-java:1.12.641", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", @@ -102,10 +102,10 @@ { "coord": "com.amazonaws:aws-java-sdk-s3:1.12.641", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", "com.fasterxml.jackson.core:jackson-databind:2.16.1", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.amazonaws:jmespath-java:1.12.641", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", @@ -130,10 +130,10 @@ { "coord": "com.amazonaws:aws-java-sdk-sqs:1.12.641", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", "com.fasterxml.jackson.core:jackson-databind:2.16.1", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.amazonaws:jmespath-java:1.12.641", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", @@ -156,10 +156,10 @@ { "coord": "com.amazonaws:aws-java-sdk-xray:1.12.641", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", "com.fasterxml.jackson.core:jackson-databind:2.16.1", + "commons-codec:commons-codec:1.17.0", "joda-time:joda-time:2.10.8", "com.amazonaws:jmespath-java:1.12.641", "com.fasterxml.jackson.core:jackson-databind:jar:2.16.1", @@ -1533,13 +1533,13 @@ { "coord": "com.google.api:gax:2.42.0", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "com.google.j2objc:j2objc-annotations:2.8", "org.apache.httpcomponents:httpclient:4.5.14", "com.google.http-client:google-http-client:1.43.3", "com.google.code.findbugs:jsr305:3.0.2", "com.google.auth:google-auth-library-credentials:1.22.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.code.gson:gson:2.10.1", @@ -1624,13 +1624,13 @@ { "coord": "com.google.auth:google-auth-library-oauth2-http:1.22.0", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "com.google.j2objc:j2objc-annotations:2.8", "org.apache.httpcomponents:httpclient:4.5.14", "com.google.http-client:google-http-client:1.43.3", "com.google.code.findbugs:jsr305:3.0.2", "com.google.auth:google-auth-library-credentials:1.22.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.code.gson:gson:2.10.1", @@ -1797,7 +1797,6 @@ "coord": "com.google.cloud:google-cloud-compute:1.44.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "com.google.j2objc:j2objc-annotations:2.8", "org.apache.httpcomponents:httpclient:4.5.14", @@ -1809,6 +1808,7 @@ "com.google.auth:google-auth-library-credentials:1.22.0", "org.checkerframework:checker-qual:3.42.0", "com.google.api:gax:2.42.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -1829,7 +1829,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "com.google.j2objc:j2objc-annotations:2.8", "org.apache.httpcomponents:httpclient:4.5.14", @@ -1841,6 +1840,7 @@ "com.google.auth:google-auth-library-credentials:1.22.0", "org.checkerframework:checker-qual:3.42.0", "com.google.api:gax:2.42.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -1955,7 +1955,6 @@ "coord": "com.google.cloud:google-cloud-kms:2.37.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "com.google.api.grpc:grpc-google-common-protos:2.31.0", @@ -1976,6 +1975,7 @@ "com.google.api:gax:2.42.0", "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2010,7 +2010,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "com.google.api.grpc:grpc-google-common-protos:2.31.0", @@ -2031,6 +2030,7 @@ "com.google.api:gax:2.42.0", "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2076,7 +2076,6 @@ "coord": "com.google.cloud:google-cloud-monitoring:3.35.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2096,6 +2095,7 @@ "com.google.api:gax:2.42.0", "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.re2j:re2j:1.7", @@ -2127,7 +2127,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2147,6 +2146,7 @@ "com.google.api:gax:2.42.0", "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.re2j:re2j:1.7", @@ -2189,7 +2189,6 @@ "coord": "com.google.cloud:google-cloud-pubsub:1.126.2", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2209,6 +2208,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "com.google.api.grpc:proto-google-cloud-pubsub-v1:1.108.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2242,7 +2242,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2262,6 +2261,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "com.google.api.grpc:proto-google-cloud-pubsub-v1:1.108.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2306,7 +2306,6 @@ "coord": "com.google.cloud:google-cloud-secretmanager:2.34.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2327,6 +2326,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.34.0", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2360,7 +2360,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2381,6 +2380,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:2.34.0", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2425,7 +2425,6 @@ "coord": "com.google.cloud:google-cloud-spanner:6.56.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "com.google.api.grpc:proto-google-cloud-spanner-v1:6.56.0", "commons-logging:commons-logging:1.3.0", @@ -2448,6 +2447,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.56.0", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2490,7 +2490,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "com.google.api.grpc:proto-google-cloud-spanner-v1:6.56.0", "commons-logging:commons-logging:1.3.0", @@ -2513,6 +2512,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.56.0", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2566,7 +2566,6 @@ "coord": "com.google.cloud:google-cloud-storage:2.32.1", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "io.opencensus:opencensus-proto:0.2.0", "com.google.j2objc:j2objc-annotations:2.8", @@ -2587,6 +2586,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", "com.google.api.grpc:gapic-google-cloud-storage-v2:2.32.1-alpha", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2629,7 +2629,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "io.opencensus:opencensus-proto:0.2.0", "com.google.j2objc:j2objc-annotations:2.8", @@ -2650,6 +2649,7 @@ "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", "com.google.api.grpc:gapic-google-cloud-storage-v2:2.32.1-alpha", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2703,7 +2703,6 @@ "coord": "com.google.cloud:google-cloud-trace:2.35.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2724,6 +2723,7 @@ "com.google.api:gax:2.42.0", "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2756,7 +2756,6 @@ ], "directDependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "commons-codec:commons-codec:1.16.0", "io.grpc:grpc-inprocess:1.61.0", "commons-logging:commons-logging:1.3.0", "io.opencensus:opencensus-proto:0.2.0", @@ -2777,6 +2776,7 @@ "com.google.api:gax:2.42.0", "org.conscrypt:conscrypt-openjdk-uber:2.5.2", "io.grpc:grpc-xds:1.61.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.api:gax-httpjson:2.42.0", @@ -2867,12 +2867,12 @@ { "coord": "com.google.crypto.tink:tink-gcpkms:1.9.0", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpclient:4.5.14", "com.google.http-client:google-http-client:1.43.3", "com.google.code.findbugs:jsr305:3.0.2", "com.google.crypto.tink:tink:1.13.0", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "com.google.auto.service:auto-service-annotations:1.1.1", "com.google.api-client:google-api-client:2.2.0", @@ -3079,13 +3079,13 @@ { "coord": "com.google.http-client:google-http-client-jackson2:1.43.3", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "com.google.j2objc:j2objc-annotations:2.8", "org.apache.httpcomponents:httpclient:4.5.14", "com.google.http-client:google-http-client:1.43.3", "com.fasterxml.jackson.core:jackson-core:2.16.1", "com.google.code.findbugs:jsr305:3.0.2", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "io.opencensus:opencensus-contrib-http-util:0.31.1", @@ -3248,12 +3248,12 @@ { "coord": "com.google.oauth-client:google-oauth-client:1.35.0", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "commons-logging:commons-logging:1.3.0", "com.google.j2objc:j2objc-annotations:2.8", "org.apache.httpcomponents:httpclient:4.5.14", "com.google.http-client:google-http-client:1.43.3", "com.google.code.findbugs:jsr305:3.0.2", + "commons-codec:commons-codec:1.17.0", "com.google.errorprone:error_prone_annotations:2.24.1", "io.opencensus:opencensus-api:0.31.1", "com.google.code.gson:gson:2.10.1", @@ -3631,30 +3631,30 @@ "url": "https://repo1.maven.org/maven2/com/sun/mail/mailapi/1.6.2/mailapi-1.6.2.jar" }, { - "coord": "commons-codec:commons-codec:1.16.0", + "coord": "commons-codec:commons-codec:1.17.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar", + "file": "v1/https/repo1.maven.org/maven2/commons-codec/commons-codec/1.17.0/commons-codec-1.17.0.jar", "mirror_urls": [ - "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar", - "https://maven.google.com/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar", - "https://jcenter.bintray.com/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar" + "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.17.0/commons-codec-1.17.0.jar", + "https://maven.google.com/commons-codec/commons-codec/1.17.0/commons-codec-1.17.0.jar", + "https://jcenter.bintray.com/commons-codec/commons-codec/1.17.0/commons-codec-1.17.0.jar" ], - "sha256": "56595fb20b0b85bc91d0d503dad50bb7f1b9afc0eed5dffa6cbb25929000484d", - "url": "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar" + "sha256": "f700de80ac270d0344fdea7468201d8b9c805e5c648331c3619f2ee067ccfc59", + "url": "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.17.0/commons-codec-1.17.0.jar" }, { - "coord": "commons-io:commons-io:2.8.0", + "coord": "commons-io:commons-io:2.16.1", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.8.0/commons-io-2.8.0.jar", + "file": "v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.16.1/commons-io-2.16.1.jar", "mirror_urls": [ - "https://repo1.maven.org/maven2/commons-io/commons-io/2.8.0/commons-io-2.8.0.jar", - "https://maven.google.com/commons-io/commons-io/2.8.0/commons-io-2.8.0.jar", - "https://jcenter.bintray.com/commons-io/commons-io/2.8.0/commons-io-2.8.0.jar" + "https://repo1.maven.org/maven2/commons-io/commons-io/2.16.1/commons-io-2.16.1.jar", + "https://maven.google.com/commons-io/commons-io/2.16.1/commons-io-2.16.1.jar", + "https://jcenter.bintray.com/commons-io/commons-io/2.16.1/commons-io-2.16.1.jar" ], - "sha256": "02f291e5d1243dc143496e3cbbb40a1ced47aa58f2d633d3e38780cd068d5074", - "url": "https://repo1.maven.org/maven2/commons-io/commons-io/2.8.0/commons-io-2.8.0.jar" + "sha256": "f41f7baacd716896447ace9758621f62c1c6b0a91d89acee488da26fc477c84f", + "url": "https://repo1.maven.org/maven2/commons-io/commons-io/2.16.1/commons-io-2.16.1.jar" }, { "coord": "commons-logging:commons-logging:1.3.0", @@ -4927,6 +4927,7 @@ "coord": "io.swagger.core.v3:swagger-core:2.1.5", "dependencies": [ "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.swagger.core.v3:swagger-annotations:2.1.5", "com.fasterxml.jackson.core:jackson-databind:2.16.1", @@ -4936,11 +4937,11 @@ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1", "jakarta.validation:jakarta.validation-api:2.0.2", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", - "org.apache.commons:commons-lang3:3.11", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "io.swagger.core.v3:swagger-annotations:2.1.5", "com.fasterxml.jackson.core:jackson-databind:2.16.1", "org.slf4j:slf4j-api:2.0.11", @@ -4948,7 +4949,6 @@ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1", "jakarta.validation:jakarta.validation-api:2.0.2", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", - "org.apache.commons:commons-lang3:3.11", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "exclusions": [ @@ -5011,13 +5011,13 @@ "io.swagger:swagger-compat-spec-parser:1.0.52", "io.swagger:swagger-parser:1.0.52", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.swagger.core.v3:swagger-annotations:2.1.5", "com.fasterxml.jackson.core:jackson-databind:2.16.1", "org.yaml:snakeyaml:2.0", "io.swagger:swagger-annotations:1.6.2", "io.swagger:swagger-core:1.6.2", - "commons-io:commons-io:2.8.0", "org.slf4j:slf4j-api:2.0.11", "io.swagger.core.v3:swagger-core:2.1.5", "io.swagger.parser.v3:swagger-parser-v3:2.0.23", @@ -5029,8 +5029,8 @@ "com.fasterxml.jackson.core:jackson-annotations:2.16.1", "io.swagger.parser.v3:swagger-parser-core:2.0.23", "org.slf4j:slf4j-ext:1.7.28", - "org.apache.commons:commons-lang3:3.11", "javax.validation:validation-api:1.1.0.Final", + "commons-io:commons-io:2.16.1", "io.swagger:swagger-models:1.6.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], @@ -5058,11 +5058,11 @@ "coord": "io.swagger.parser.v3:swagger-parser-v3:2.0.23", "dependencies": [ "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.swagger.core.v3:swagger-annotations:2.1.5", "com.fasterxml.jackson.core:jackson-databind:2.16.1", "org.yaml:snakeyaml:2.0", - "commons-io:commons-io:2.8.0", "org.slf4j:slf4j-api:2.0.11", "io.swagger.core.v3:swagger-core:2.1.5", "io.swagger.core.v3:swagger-models:2.1.5", @@ -5070,17 +5070,17 @@ "jakarta.validation:jakarta.validation-api:2.0.2", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", "io.swagger.parser.v3:swagger-parser-core:2.0.23", - "org.apache.commons:commons-lang3:3.11", + "commons-io:commons-io:2.16.1", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", "com.fasterxml.jackson.core:jackson-databind:2.16.1", - "commons-io:commons-io:2.8.0", "io.swagger.core.v3:swagger-core:2.1.5", "io.swagger.core.v3:swagger-models:2.1.5", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", - "io.swagger.parser.v3:swagger-parser-core:2.0.23" + "io.swagger.parser.v3:swagger-parser-core:2.0.23", + "commons-io:commons-io:2.16.1" ], "exclusions": [ "com.github.fge:json-patch" @@ -5101,6 +5101,7 @@ "io.swagger:swagger-compat-spec-parser:1.0.52", "io.swagger:swagger-parser:1.0.52", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.swagger.core.v3:swagger-annotations:2.1.5", "com.fasterxml.jackson.core:jackson-databind:2.16.1", @@ -5108,7 +5109,6 @@ "org.yaml:snakeyaml:2.0", "io.swagger:swagger-annotations:1.6.2", "io.swagger:swagger-core:1.6.2", - "commons-io:commons-io:2.8.0", "org.slf4j:slf4j-api:2.0.11", "io.swagger.core.v3:swagger-core:2.1.5", "io.swagger.parser.v3:swagger-parser-v3:2.0.23", @@ -5120,13 +5120,13 @@ "com.fasterxml.jackson.core:jackson-annotations:2.16.1", "io.swagger.parser.v3:swagger-parser-core:2.0.23", "org.slf4j:slf4j-ext:1.7.28", - "org.apache.commons:commons-lang3:3.11", "javax.validation:validation-api:1.1.0.Final", + "commons-io:commons-io:2.16.1", "io.swagger:swagger-models:1.6.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ - "commons-io:commons-io:2.8.0", + "commons-io:commons-io:2.16.1", "io.swagger.parser.v3:swagger-parser-v2-converter:2.0.23", "io.swagger.parser.v3:swagger-parser-v3:2.0.23" ], @@ -5164,10 +5164,10 @@ "org.apache.httpcomponents:httpclient:4.5.14", "io.swagger:swagger-parser:1.0.52", "io.swagger:swagger-core:1.6.2", - "commons-io:commons-io:2.8.0", "org.slf4j:slf4j-api:2.0.11", "com.github.java-json-tools:json-schema-validator:2.2.14", - "org.slf4j:slf4j-ext:1.7.28" + "org.slf4j:slf4j-ext:1.7.28", + "commons-io:commons-io:2.16.1" ], "directDependencies": [ "com.github.java-json-tools:json-schema-validator:2.2.14", @@ -5191,6 +5191,7 @@ "coord": "io.swagger:swagger-core:1.6.2", "dependencies": [ "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "com.fasterxml.jackson.core:jackson-core:2.16.1", "com.fasterxml.jackson.core:jackson-databind:2.16.1", "org.yaml:snakeyaml:2.0", @@ -5198,17 +5199,16 @@ "org.slf4j:slf4j-api:2.0.11", "com.google.guava:guava:33.0.0-jre", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", - "org.apache.commons:commons-lang3:3.11", "javax.validation:validation-api:1.1.0.Final", "io.swagger:swagger-models:1.6.2" ], "directDependencies": [ "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "com.fasterxml.jackson.core:jackson-databind:2.16.1", "org.slf4j:slf4j-api:2.0.11", "com.google.guava:guava:33.0.0-jre", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", - "org.apache.commons:commons-lang3:3.11", "javax.validation:validation-api:1.1.0.Final", "io.swagger:swagger-models:1.6.2" ], @@ -5251,13 +5251,13 @@ { "coord": "io.swagger:swagger-parser:1.0.52", "dependencies": [ - "commons-io:commons-io:2.8.0", "io.swagger:swagger-core:1.6.2", "org.slf4j:slf4j-ext:1.7.28", - "org.slf4j:slf4j-api:2.0.11" + "org.slf4j:slf4j-api:2.0.11", + "commons-io:commons-io:2.16.1" ], "directDependencies": [ - "commons-io:commons-io:2.8.0", + "commons-io:commons-io:2.16.1", "io.swagger:swagger-core:1.6.2", "org.slf4j:slf4j-api:2.0.11", "org.slf4j:slf4j-ext:1.7.28" @@ -5589,15 +5589,15 @@ { "coord": "org.apache.avro:avro:1.11.3", "dependencies": [ + "org.apache.commons:commons-compress:1.26.2", "com.fasterxml.jackson.core:jackson-core:2.16.1", "org.slf4j:slf4j-api:2.0.11", - "com.fasterxml.jackson.core:jackson-databind:2.16.1", - "org.apache.commons:commons-compress:1.24.0" + "com.fasterxml.jackson.core:jackson-databind:2.16.1" ], "directDependencies": [ "com.fasterxml.jackson.core:jackson-core:2.16.1", "com.fasterxml.jackson.core:jackson-databind:2.16.1", - "org.apache.commons:commons-compress:1.24.0", + "org.apache.commons:commons-compress:1.26.2", "org.slf4j:slf4j-api:2.0.11" ], "file": "v1/https/repo1.maven.org/maven2/org/apache/avro/avro/1.11.3/avro-1.11.3.jar", @@ -5610,30 +5610,38 @@ "url": "https://repo1.maven.org/maven2/org/apache/avro/avro/1.11.3/avro-1.11.3.jar" }, { - "coord": "org.apache.commons:commons-compress:1.24.0", - "dependencies": [], - "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.24.0/commons-compress-1.24.0.jar", + "coord": "org.apache.commons:commons-compress:1.26.2", + "dependencies": [ + "org.apache.commons:commons-lang3:3.14.0", + "commons-io:commons-io:2.16.1", + "commons-codec:commons-codec:1.17.0" + ], + "directDependencies": [ + "commons-codec:commons-codec:1.17.0", + "commons-io:commons-io:2.16.1", + "org.apache.commons:commons-lang3:3.14.0" + ], + "file": "v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.26.2/commons-compress-1.26.2.jar", "mirror_urls": [ - "https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.24.0/commons-compress-1.24.0.jar", - "https://maven.google.com/org/apache/commons/commons-compress/1.24.0/commons-compress-1.24.0.jar", - "https://jcenter.bintray.com/org/apache/commons/commons-compress/1.24.0/commons-compress-1.24.0.jar" + "https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.26.2/commons-compress-1.26.2.jar", + "https://maven.google.com/org/apache/commons/commons-compress/1.26.2/commons-compress-1.26.2.jar", + "https://jcenter.bintray.com/org/apache/commons/commons-compress/1.26.2/commons-compress-1.26.2.jar" ], - "sha256": "fbf2c5d275e513c08f4e4fb539726dbf3ac2142af956ba93efb983244f0c36bd", - "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.24.0/commons-compress-1.24.0.jar" + "sha256": "9168a03141d8fc7eda21a2360d83cc0412bcbb1d6204d992bd48c2573cb3c6b8", + "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.26.2/commons-compress-1.26.2.jar" }, { - "coord": "org.apache.commons:commons-lang3:3.11", + "coord": "org.apache.commons:commons-lang3:3.14.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11.jar", + "file": "v1/https/repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar", "mirror_urls": [ - "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11.jar", - "https://maven.google.com/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11.jar", - "https://jcenter.bintray.com/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11.jar" + "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar", + "https://maven.google.com/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar", + "https://jcenter.bintray.com/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" ], - "sha256": "4ee380259c068d1dbe9e84ab52186f2acd65de067ec09beff731fca1697fdb16", - "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11.jar" + "sha256": "7b96bf3ee68949abb5bc465559ac270e0551596fa34523fddf890ec418dde13c", + "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" }, { "coord": "org.apache.commons:commons-math3:3.6.1", @@ -5719,11 +5727,11 @@ "coord": "org.apache.httpcomponents:httpclient:4.5.14", "dependencies": [ "org.apache.httpcomponents:httpcore:4.4.16", - "commons-codec:commons-codec:1.16.0", + "commons-codec:commons-codec:1.17.0", "commons-logging:commons-logging:1.3.0" ], "directDependencies": [ - "commons-codec:commons-codec:1.16.0", + "commons-codec:commons-codec:1.17.0", "commons-logging:commons-logging:1.3.0", "org.apache.httpcomponents:httpcore:4.4.16" ], @@ -5799,11 +5807,11 @@ { "coord": "org.apache.velocity:velocity-engine-core:2.2", "dependencies": [ - "org.slf4j:slf4j-api:2.0.11", - "org.apache.commons:commons-lang3:3.11" + "org.apache.commons:commons-lang3:3.14.0", + "org.slf4j:slf4j-api:2.0.11" ], "directDependencies": [ - "org.apache.commons:commons-lang3:3.11", + "org.apache.commons:commons-lang3:3.14.0", "org.slf4j:slf4j-api:2.0.11" ], "file": "v1/https/repo1.maven.org/maven2/org/apache/velocity/velocity-engine-core/2.2/velocity-engine-core-2.2.jar", @@ -5819,8 +5827,8 @@ "coord": "org.apache.velocity:velocity-engine-scripting:2.2", "dependencies": [ "org.apache.velocity:velocity-engine-core:2.2", - "org.slf4j:slf4j-api:2.0.11", - "org.apache.commons:commons-lang3:3.11" + "org.apache.commons:commons-lang3:3.14.0", + "org.slf4j:slf4j-api:2.0.11" ], "directDependencies": [ "org.apache.velocity:velocity-engine-core:2.2" @@ -6030,7 +6038,6 @@ { "coord": "org.mock-server:mockserver-client-java:5.11.2", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "com.jcraft:jzlib:1.1.3", "com.github.java-json-tools:jackson-coreutils:2.0", "org.hamcrest:hamcrest:2.2", @@ -6040,6 +6047,7 @@ "io.swagger:swagger-parser:1.0.52", "com.sun.mail:mailapi:1.6.2", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "io.netty:netty-codec-socks:4.1.53.Final", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.netty:netty-handler:4.1.100.Final", @@ -6055,9 +6063,9 @@ "org.mock-server:mockserver-core:5.11.2", "io.swagger:swagger-annotations:1.6.2", "io.swagger:swagger-core:1.6.2", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", - "commons-io:commons-io:2.8.0", "io.netty:netty-codec-http:4.1.100.Final", "joda-time:joda-time:2.10.8", "io.netty:netty-common:4.1.100.Final", @@ -6084,13 +6092,13 @@ "io.swagger.parser.v3:swagger-parser:2.0.23", "org.slf4j:slf4j-ext:1.7.28", "org.mozilla:rhino:1.7.7.2", - "org.apache.commons:commons-lang3:3.11", "com.github.java-json-tools:json-schema-core:1.2.14", "org.xmlunit:xmlunit-core:2.8.0", "io.netty:netty-handler-proxy:4.1.53.Final", "net.javacrumbs.json-unit:json-unit-core:2.19.0", "jakarta.activation:jakarta.activation-api:1.2.2", "javax.validation:validation-api:1.1.0.Final", + "commons-io:commons-io:2.16.1", "io.netty:netty-codec:4.1.100.Final", "javax.servlet:javax.servlet-api:4.0.1", "io.swagger:swagger-models:1.6.2", @@ -6100,7 +6108,7 @@ ], "directDependencies": [ "com.google.guava:guava:33.0.0-jre", - "org.apache.commons:commons-lang3:3.11", + "org.apache.commons:commons-lang3:3.14.0", "org.mock-server:mockserver-core:5.11.2", "org.slf4j:slf4j-api:2.0.11" ], @@ -6116,7 +6124,6 @@ { "coord": "org.mock-server:mockserver-core:5.11.2", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "com.jcraft:jzlib:1.1.3", "com.github.java-json-tools:jackson-coreutils:2.0", "org.hamcrest:hamcrest:2.2", @@ -6126,6 +6133,7 @@ "io.swagger:swagger-parser:1.0.52", "com.sun.mail:mailapi:1.6.2", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "io.netty:netty-codec-socks:4.1.53.Final", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.netty:netty-handler:4.1.100.Final", @@ -6140,9 +6148,9 @@ "org.yaml:snakeyaml:2.0", "io.swagger:swagger-annotations:1.6.2", "io.swagger:swagger-core:1.6.2", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", - "commons-io:commons-io:2.8.0", "io.netty:netty-codec-http:4.1.100.Final", "joda-time:joda-time:2.10.8", "io.netty:netty-common:4.1.100.Final", @@ -6169,13 +6177,13 @@ "io.swagger.parser.v3:swagger-parser:2.0.23", "org.slf4j:slf4j-ext:1.7.28", "org.mozilla:rhino:1.7.7.2", - "org.apache.commons:commons-lang3:3.11", "com.github.java-json-tools:json-schema-core:1.2.14", "org.xmlunit:xmlunit-core:2.8.0", "io.netty:netty-handler-proxy:4.1.53.Final", "net.javacrumbs.json-unit:json-unit-core:2.19.0", "jakarta.activation:jakarta.activation-api:1.2.2", "javax.validation:validation-api:1.1.0.Final", + "commons-io:commons-io:2.16.1", "io.netty:netty-codec:4.1.100.Final", "javax.servlet:javax.servlet-api:4.0.1", "io.swagger:swagger-models:1.6.2", @@ -6184,17 +6192,17 @@ "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ - "commons-codec:commons-codec:1.16.0", "com.jcraft:jzlib:1.1.3", "com.lmax:disruptor:3.4.2", + "org.apache.commons:commons-lang3:3.14.0", "io.netty:netty-codec-socks:4.1.53.Final", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.netty:netty-handler:4.1.100.Final", "org.apache.velocity:velocity-engine-scripting:2.2", "com.fasterxml.jackson.core:jackson-databind:2.16.1", "com.fasterxml.uuid:java-uuid-generator:4.0.1", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-buffer:4.1.100.Final", - "commons-io:commons-io:2.8.0", "io.netty:netty-codec-http:4.1.100.Final", "org.apache.velocity:velocity-engine-core:2.2", "org.slf4j:slf4j-api:2.0.11", @@ -6206,10 +6214,10 @@ "org.apache.commons:commons-text:1.9", "com.fasterxml.jackson.core:jackson-annotations:2.16.1", "io.swagger.parser.v3:swagger-parser:2.0.23", - "org.apache.commons:commons-lang3:3.11", "org.xmlunit:xmlunit-core:2.8.0", "io.netty:netty-handler-proxy:4.1.53.Final", "net.javacrumbs.json-unit:json-unit-core:2.19.0", + "commons-io:commons-io:2.16.1", "io.netty:netty-codec:4.1.100.Final", "javax.servlet:javax.servlet-api:4.0.1", "io.netty:netty-transport:4.1.100.Final" @@ -6226,7 +6234,6 @@ { "coord": "org.mock-server:mockserver-junit-rule:5.11.2", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "com.jcraft:jzlib:1.1.3", "com.github.java-json-tools:jackson-coreutils:2.0", "org.hamcrest:hamcrest:2.2", @@ -6236,6 +6243,7 @@ "io.swagger:swagger-parser:1.0.52", "com.sun.mail:mailapi:1.6.2", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "io.netty:netty-codec-socks:4.1.53.Final", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.netty:netty-handler:4.1.100.Final", @@ -6252,9 +6260,9 @@ "io.swagger:swagger-annotations:1.6.2", "org.mock-server:mockserver-client-java:5.11.2", "io.swagger:swagger-core:1.6.2", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", - "commons-io:commons-io:2.8.0", "io.netty:netty-codec-http:4.1.100.Final", "joda-time:joda-time:2.10.8", "io.netty:netty-common:4.1.100.Final", @@ -6282,13 +6290,13 @@ "io.swagger.parser.v3:swagger-parser:2.0.23", "org.slf4j:slf4j-ext:1.7.28", "org.mozilla:rhino:1.7.7.2", - "org.apache.commons:commons-lang3:3.11", "com.github.java-json-tools:json-schema-core:1.2.14", "org.xmlunit:xmlunit-core:2.8.0", "io.netty:netty-handler-proxy:4.1.53.Final", "net.javacrumbs.json-unit:json-unit-core:2.19.0", "jakarta.activation:jakarta.activation-api:1.2.2", "javax.validation:validation-api:1.1.0.Final", + "commons-io:commons-io:2.16.1", "junit:junit:4.13.2", "io.netty:netty-codec:4.1.100.Final", "javax.servlet:javax.servlet-api:4.0.1", @@ -6314,7 +6322,6 @@ { "coord": "org.mock-server:mockserver-netty:5.11.2", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "com.jcraft:jzlib:1.1.3", "com.github.java-json-tools:jackson-coreutils:2.0", "org.hamcrest:hamcrest:2.2", @@ -6324,6 +6331,7 @@ "io.swagger:swagger-parser:1.0.52", "com.sun.mail:mailapi:1.6.2", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1", + "org.apache.commons:commons-lang3:3.14.0", "io.netty:netty-codec-socks:4.1.53.Final", "com.fasterxml.jackson.core:jackson-core:2.16.1", "io.netty:netty-handler:4.1.100.Final", @@ -6340,9 +6348,9 @@ "io.swagger:swagger-annotations:1.6.2", "org.mock-server:mockserver-client-java:5.11.2", "io.swagger:swagger-core:1.6.2", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", - "commons-io:commons-io:2.8.0", "io.netty:netty-codec-http:4.1.100.Final", "joda-time:joda-time:2.10.8", "io.netty:netty-common:4.1.100.Final", @@ -6369,13 +6377,13 @@ "io.swagger.parser.v3:swagger-parser:2.0.23", "org.slf4j:slf4j-ext:1.7.28", "org.mozilla:rhino:1.7.7.2", - "org.apache.commons:commons-lang3:3.11", "com.github.java-json-tools:json-schema-core:1.2.14", "org.xmlunit:xmlunit-core:2.8.0", "io.netty:netty-handler-proxy:4.1.53.Final", "net.javacrumbs.json-unit:json-unit-core:2.19.0", "jakarta.activation:jakarta.activation-api:1.2.2", "javax.validation:validation-api:1.1.0.Final", + "commons-io:commons-io:2.16.1", "io.netty:netty-codec:4.1.100.Final", "javax.servlet:javax.servlet-api:4.0.1", "io.swagger:swagger-models:1.6.2", @@ -6388,11 +6396,11 @@ "org.mock-server:mockserver-core:5.11.2", "org.mock-server:mockserver-client-java:5.11.2", "io.netty:netty-buffer:4.1.100.Final", - "commons-io:commons-io:2.8.0", "io.netty:netty-codec-http:4.1.100.Final", "io.netty:netty-common:4.1.100.Final", "org.slf4j:slf4j-api:2.0.11", "com.google.guava:guava:33.0.0-jre", + "commons-io:commons-io:2.16.1", "io.netty:netty-codec:4.1.100.Final", "io.netty:netty-transport:4.1.100.Final" ], @@ -6571,6 +6579,7 @@ { "coord": "org.testcontainers:localstack:1.19.3", "dependencies": [ + "org.apache.commons:commons-compress:1.26.2", "com.github.docker-java:docker-java-transport-zerodep:3.3.4", "com.github.docker-java:docker-java-api:3.3.4", "net.java.dev.jna:jna:5.13.0", @@ -6581,8 +6590,7 @@ "com.fasterxml.jackson.core:jackson-annotations:2.16.1", "org.jetbrains:annotations:17.0.0", "org.rnorth.duct-tape:duct-tape:1.0.8", - "junit:junit:4.13.2", - "org.apache.commons:commons-compress:1.24.0" + "junit:junit:4.13.2" ], "directDependencies": [ "org.testcontainers:testcontainers:1.19.3" @@ -6599,6 +6607,7 @@ { "coord": "org.testcontainers:testcontainers:1.19.3", "dependencies": [ + "org.apache.commons:commons-compress:1.26.2", "com.github.docker-java:docker-java-transport-zerodep:3.3.4", "com.github.docker-java:docker-java-api:3.3.4", "net.java.dev.jna:jna:5.13.0", @@ -6608,16 +6617,15 @@ "com.fasterxml.jackson.core:jackson-annotations:2.16.1", "org.jetbrains:annotations:17.0.0", "org.rnorth.duct-tape:duct-tape:1.0.8", - "junit:junit:4.13.2", - "org.apache.commons:commons-compress:1.24.0" + "junit:junit:4.13.2" ], "directDependencies": [ + "org.apache.commons:commons-compress:1.26.2", "com.github.docker-java:docker-java-transport-zerodep:3.3.4", "com.github.docker-java:docker-java-api:3.3.4", "org.slf4j:slf4j-api:2.0.11", "org.rnorth.duct-tape:duct-tape:1.0.8", - "junit:junit:4.13.2", - "org.apache.commons:commons-compress:1.24.0" + "junit:junit:4.13.2" ], "file": "v1/https/repo1.maven.org/maven2/org/testcontainers/testcontainers/1.19.3/testcontainers-1.19.3.jar", "mirror_urls": [ @@ -6694,7 +6702,6 @@ { "coord": "software.amazon.awssdk:accessanalyzer:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -6706,6 +6713,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -6766,7 +6774,6 @@ { "coord": "software.amazon.awssdk:account:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -6778,6 +6785,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -6838,7 +6846,6 @@ { "coord": "software.amazon.awssdk:acm:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -6850,6 +6857,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -6910,7 +6918,6 @@ { "coord": "software.amazon.awssdk:acmpca:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -6922,6 +6929,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -6982,7 +6990,6 @@ { "coord": "software.amazon.awssdk:alexaforbusiness:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -6994,6 +7001,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7054,7 +7062,6 @@ { "coord": "software.amazon.awssdk:amp:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7066,6 +7073,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7126,7 +7134,6 @@ { "coord": "software.amazon.awssdk:amplify:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7138,6 +7145,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7198,7 +7206,6 @@ { "coord": "software.amazon.awssdk:amplifybackend:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7210,6 +7217,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7270,7 +7278,6 @@ { "coord": "software.amazon.awssdk:amplifyuibuilder:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7282,6 +7289,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7355,9 +7363,9 @@ { "coord": "software.amazon.awssdk:apache-client:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "org.apache.httpcomponents:httpclient:4.5.14", "org.reactivestreams:reactive-streams:1.0.4", + "commons-codec:commons-codec:1.17.0", "org.slf4j:slf4j-api:2.0.11", "software.amazon.awssdk:utils:2.21.16", "software.amazon.awssdk:annotations:2.21.16", @@ -7366,8 +7374,8 @@ "software.amazon.awssdk:metrics-spi:2.21.16" ], "directDependencies": [ - "commons-codec:commons-codec:1.16.0", "org.apache.httpcomponents:httpclient:4.5.14", + "commons-codec:commons-codec:1.17.0", "software.amazon.awssdk:utils:2.21.16", "software.amazon.awssdk:annotations:2.21.16", "software.amazon.awssdk:http-client-spi:2.21.16", @@ -7386,7 +7394,6 @@ { "coord": "software.amazon.awssdk:apigateway:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7398,6 +7405,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7458,7 +7466,6 @@ { "coord": "software.amazon.awssdk:apigatewaymanagementapi:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7470,6 +7477,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7530,7 +7538,6 @@ { "coord": "software.amazon.awssdk:apigatewayv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7542,6 +7549,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7602,7 +7610,6 @@ { "coord": "software.amazon.awssdk:appconfig:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7614,6 +7621,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7674,7 +7682,6 @@ { "coord": "software.amazon.awssdk:appconfigdata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7686,6 +7693,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7746,7 +7754,6 @@ { "coord": "software.amazon.awssdk:appfabric:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7758,6 +7765,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7818,7 +7826,6 @@ { "coord": "software.amazon.awssdk:appflow:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7830,6 +7837,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7890,7 +7898,6 @@ { "coord": "software.amazon.awssdk:appintegrations:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7902,6 +7909,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -7962,7 +7970,6 @@ { "coord": "software.amazon.awssdk:applicationautoscaling:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -7974,6 +7981,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8034,7 +8042,6 @@ { "coord": "software.amazon.awssdk:applicationcostprofiler:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8046,6 +8053,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8106,7 +8114,6 @@ { "coord": "software.amazon.awssdk:applicationdiscovery:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8118,6 +8125,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8178,7 +8186,6 @@ { "coord": "software.amazon.awssdk:applicationinsights:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8190,6 +8197,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8250,7 +8258,6 @@ { "coord": "software.amazon.awssdk:appmesh:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8262,6 +8269,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8322,7 +8330,6 @@ { "coord": "software.amazon.awssdk:apprunner:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8334,6 +8341,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8394,7 +8402,6 @@ { "coord": "software.amazon.awssdk:appstream:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8406,6 +8413,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8466,7 +8474,6 @@ { "coord": "software.amazon.awssdk:appsync:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8478,6 +8485,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8538,7 +8546,6 @@ { "coord": "software.amazon.awssdk:arczonalshift:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8550,6 +8557,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8631,7 +8639,6 @@ { "coord": "software.amazon.awssdk:athena:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8643,6 +8650,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8703,7 +8711,6 @@ { "coord": "software.amazon.awssdk:auditmanager:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8715,6 +8722,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8821,7 +8829,6 @@ { "coord": "software.amazon.awssdk:autoscaling:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8832,6 +8839,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -8893,7 +8901,6 @@ { "coord": "software.amazon.awssdk:autoscalingplans:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -8905,6 +8912,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -9146,7 +9154,6 @@ { "coord": "software.amazon.awssdk:aws-sdk-java:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:waf:2.21.16", "software.amazon.awssdk:budgets:2.21.16", "software.amazon.awssdk:datasync:2.21.16", @@ -9300,6 +9307,7 @@ "software.amazon.awssdk:iotanalytics:2.21.16", "software.amazon.awssdk:launchwizard:2.21.16", "software.amazon.awssdk:ssm:2.21.16", + "commons-codec:commons-codec:1.17.0", "software.amazon.awssdk:computeoptimizer:2.21.16", "software.amazon.awssdk:codepipeline:2.21.16", "software.amazon.awssdk:cloudsearch:2.21.16", @@ -9967,7 +9975,6 @@ { "coord": "software.amazon.awssdk:backup:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -9979,6 +9986,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10039,7 +10047,6 @@ { "coord": "software.amazon.awssdk:backupgateway:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10051,6 +10058,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10111,7 +10119,6 @@ { "coord": "software.amazon.awssdk:backupstorage:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10123,6 +10130,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10183,7 +10191,6 @@ { "coord": "software.amazon.awssdk:batch:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10195,6 +10202,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10255,7 +10263,6 @@ { "coord": "software.amazon.awssdk:bedrock:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10267,6 +10274,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10327,7 +10335,6 @@ { "coord": "software.amazon.awssdk:bedrockruntime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10339,6 +10346,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10399,7 +10407,6 @@ { "coord": "software.amazon.awssdk:billingconductor:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10411,6 +10418,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10471,7 +10479,6 @@ { "coord": "software.amazon.awssdk:braket:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10483,6 +10490,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10543,7 +10551,6 @@ { "coord": "software.amazon.awssdk:budgets:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10555,6 +10562,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10651,7 +10659,6 @@ { "coord": "software.amazon.awssdk:chime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10663,6 +10670,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10723,7 +10731,6 @@ { "coord": "software.amazon.awssdk:chimesdkidentity:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10735,6 +10742,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10795,7 +10803,6 @@ { "coord": "software.amazon.awssdk:chimesdkmediapipelines:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10807,6 +10814,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10867,7 +10875,6 @@ { "coord": "software.amazon.awssdk:chimesdkmeetings:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10879,6 +10886,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -10939,7 +10947,6 @@ { "coord": "software.amazon.awssdk:chimesdkmessaging:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -10951,6 +10958,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11011,7 +11019,6 @@ { "coord": "software.amazon.awssdk:chimesdkvoice:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11023,6 +11030,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11083,7 +11091,6 @@ { "coord": "software.amazon.awssdk:cleanrooms:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11095,6 +11102,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11155,7 +11163,6 @@ { "coord": "software.amazon.awssdk:cloud9:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11167,6 +11174,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11227,7 +11235,6 @@ { "coord": "software.amazon.awssdk:cloudcontrol:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11239,6 +11246,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11299,7 +11307,6 @@ { "coord": "software.amazon.awssdk:clouddirectory:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11311,6 +11318,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11371,7 +11379,6 @@ { "coord": "software.amazon.awssdk:cloudformation:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11382,6 +11389,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11443,7 +11451,6 @@ { "coord": "software.amazon.awssdk:cloudfront:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:aws-xml-protocol:2.21.16", @@ -11455,6 +11462,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11516,7 +11524,6 @@ { "coord": "software.amazon.awssdk:cloudhsm:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11528,6 +11535,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11588,7 +11596,6 @@ { "coord": "software.amazon.awssdk:cloudhsmv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11600,6 +11607,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11660,7 +11668,6 @@ { "coord": "software.amazon.awssdk:cloudsearch:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11671,6 +11678,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11732,7 +11740,6 @@ { "coord": "software.amazon.awssdk:cloudsearchdomain:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11744,6 +11751,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11804,7 +11812,6 @@ { "coord": "software.amazon.awssdk:cloudtrail:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11816,6 +11823,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11876,7 +11884,6 @@ { "coord": "software.amazon.awssdk:cloudtraildata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11888,6 +11895,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -11948,7 +11956,6 @@ { "coord": "software.amazon.awssdk:cloudwatch-metric-publisher:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -11960,6 +11967,7 @@ "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", "software.amazon.awssdk:cloudwatch:2.21.16", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12009,7 +12017,6 @@ { "coord": "software.amazon.awssdk:cloudwatch:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12020,6 +12027,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12081,7 +12089,6 @@ { "coord": "software.amazon.awssdk:cloudwatchevents:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12093,6 +12100,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12153,7 +12161,6 @@ { "coord": "software.amazon.awssdk:cloudwatchlogs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12165,6 +12172,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12225,7 +12233,6 @@ { "coord": "software.amazon.awssdk:codeartifact:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12237,6 +12244,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12297,7 +12305,6 @@ { "coord": "software.amazon.awssdk:codebuild:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12309,6 +12316,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12369,7 +12377,6 @@ { "coord": "software.amazon.awssdk:codecatalyst:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12381,6 +12388,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12440,7 +12448,6 @@ { "coord": "software.amazon.awssdk:codecommit:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12452,6 +12459,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12512,7 +12520,6 @@ { "coord": "software.amazon.awssdk:codedeploy:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12524,6 +12531,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12584,7 +12592,6 @@ { "coord": "software.amazon.awssdk:codeguruprofiler:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12596,6 +12603,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12656,7 +12664,6 @@ { "coord": "software.amazon.awssdk:codegurureviewer:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12668,6 +12675,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12728,7 +12736,6 @@ { "coord": "software.amazon.awssdk:codegurusecurity:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12740,6 +12747,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12800,7 +12808,6 @@ { "coord": "software.amazon.awssdk:codepipeline:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12812,6 +12819,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12872,7 +12880,6 @@ { "coord": "software.amazon.awssdk:codestar:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12884,6 +12891,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -12944,7 +12952,6 @@ { "coord": "software.amazon.awssdk:codestarconnections:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -12956,6 +12963,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13016,7 +13024,6 @@ { "coord": "software.amazon.awssdk:codestarnotifications:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13028,6 +13035,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13088,7 +13096,6 @@ { "coord": "software.amazon.awssdk:cognitoidentity:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13100,6 +13107,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13160,7 +13168,6 @@ { "coord": "software.amazon.awssdk:cognitoidentityprovider:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13172,6 +13179,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13232,7 +13240,6 @@ { "coord": "software.amazon.awssdk:cognitosync:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13244,6 +13251,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13304,7 +13312,6 @@ { "coord": "software.amazon.awssdk:comprehend:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13316,6 +13323,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13376,7 +13384,6 @@ { "coord": "software.amazon.awssdk:comprehendmedical:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13388,6 +13395,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13448,7 +13456,6 @@ { "coord": "software.amazon.awssdk:computeoptimizer:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13460,6 +13467,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13520,7 +13528,6 @@ { "coord": "software.amazon.awssdk:config:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13532,6 +13539,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13592,7 +13600,6 @@ { "coord": "software.amazon.awssdk:connect:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13604,6 +13611,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13664,7 +13672,6 @@ { "coord": "software.amazon.awssdk:connectcampaigns:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13676,6 +13683,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13736,7 +13744,6 @@ { "coord": "software.amazon.awssdk:connectcases:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13748,6 +13755,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13808,7 +13816,6 @@ { "coord": "software.amazon.awssdk:connectcontactlens:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13820,6 +13827,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13880,7 +13888,6 @@ { "coord": "software.amazon.awssdk:connectparticipant:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13892,6 +13899,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -13952,7 +13960,6 @@ { "coord": "software.amazon.awssdk:controltower:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -13964,6 +13971,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14024,7 +14032,6 @@ { "coord": "software.amazon.awssdk:costandusagereport:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14036,6 +14043,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14096,7 +14104,6 @@ { "coord": "software.amazon.awssdk:costexplorer:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14108,6 +14115,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14189,7 +14197,6 @@ { "coord": "software.amazon.awssdk:customerprofiles:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14201,6 +14208,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14261,7 +14269,6 @@ { "coord": "software.amazon.awssdk:databasemigration:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14273,6 +14280,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14333,7 +14341,6 @@ { "coord": "software.amazon.awssdk:databrew:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14345,6 +14352,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14405,7 +14413,6 @@ { "coord": "software.amazon.awssdk:dataexchange:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14417,6 +14424,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14477,7 +14485,6 @@ { "coord": "software.amazon.awssdk:datapipeline:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14489,6 +14496,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14549,7 +14557,6 @@ { "coord": "software.amazon.awssdk:datasync:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14561,6 +14568,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14621,7 +14629,6 @@ { "coord": "software.amazon.awssdk:datazone:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14633,6 +14640,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14693,7 +14701,6 @@ { "coord": "software.amazon.awssdk:dax:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14705,6 +14712,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14765,7 +14773,6 @@ { "coord": "software.amazon.awssdk:detective:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14777,6 +14784,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14837,7 +14845,6 @@ { "coord": "software.amazon.awssdk:devicefarm:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14849,6 +14856,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14909,7 +14917,6 @@ { "coord": "software.amazon.awssdk:devopsguru:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14921,6 +14928,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -14981,7 +14989,6 @@ { "coord": "software.amazon.awssdk:directconnect:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -14993,6 +15000,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15053,7 +15061,6 @@ { "coord": "software.amazon.awssdk:directory:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15065,6 +15072,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15125,7 +15133,6 @@ { "coord": "software.amazon.awssdk:dlm:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15137,6 +15144,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15197,7 +15205,6 @@ { "coord": "software.amazon.awssdk:docdb:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15208,6 +15215,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15269,7 +15277,6 @@ { "coord": "software.amazon.awssdk:docdbelastic:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15281,6 +15288,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15341,7 +15349,6 @@ { "coord": "software.amazon.awssdk:drs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15353,6 +15360,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15413,7 +15421,6 @@ { "coord": "software.amazon.awssdk:dynamodb-enhanced:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15425,6 +15432,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15476,7 +15484,6 @@ { "coord": "software.amazon.awssdk:dynamodb:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15488,6 +15495,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15548,7 +15556,6 @@ { "coord": "software.amazon.awssdk:ebs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15560,6 +15567,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15620,7 +15628,6 @@ { "coord": "software.amazon.awssdk:ec2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15631,6 +15638,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15692,7 +15700,6 @@ { "coord": "software.amazon.awssdk:ec2instanceconnect:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15704,6 +15711,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15764,7 +15772,6 @@ { "coord": "software.amazon.awssdk:ecr:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15776,6 +15783,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15836,7 +15844,6 @@ { "coord": "software.amazon.awssdk:ecrpublic:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15848,6 +15855,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15908,7 +15916,6 @@ { "coord": "software.amazon.awssdk:ecs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15920,6 +15927,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -15980,7 +15988,6 @@ { "coord": "software.amazon.awssdk:efs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -15992,6 +15999,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16052,7 +16060,6 @@ { "coord": "software.amazon.awssdk:eks:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16064,6 +16071,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16124,7 +16132,6 @@ { "coord": "software.amazon.awssdk:elasticache:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16135,6 +16142,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16196,7 +16204,6 @@ { "coord": "software.amazon.awssdk:elasticbeanstalk:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16207,6 +16214,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16268,7 +16276,6 @@ { "coord": "software.amazon.awssdk:elasticinference:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16280,6 +16287,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16340,7 +16348,6 @@ { "coord": "software.amazon.awssdk:elasticloadbalancing:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16351,6 +16358,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16412,7 +16420,6 @@ { "coord": "software.amazon.awssdk:elasticloadbalancingv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16423,6 +16430,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16484,7 +16492,6 @@ { "coord": "software.amazon.awssdk:elasticsearch:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16496,6 +16503,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16556,7 +16564,6 @@ { "coord": "software.amazon.awssdk:elastictranscoder:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16568,6 +16575,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16628,7 +16636,6 @@ { "coord": "software.amazon.awssdk:emr:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16640,6 +16647,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16700,7 +16708,6 @@ { "coord": "software.amazon.awssdk:emrcontainers:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16712,6 +16719,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16772,7 +16780,6 @@ { "coord": "software.amazon.awssdk:emrserverless:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16784,6 +16791,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16861,7 +16869,6 @@ { "coord": "software.amazon.awssdk:entityresolution:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16873,6 +16880,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -16933,7 +16941,6 @@ { "coord": "software.amazon.awssdk:eventbridge:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -16945,6 +16952,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17005,7 +17013,6 @@ { "coord": "software.amazon.awssdk:evidently:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17017,6 +17024,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17077,7 +17085,6 @@ { "coord": "software.amazon.awssdk:finspace:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17089,6 +17096,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17149,7 +17157,6 @@ { "coord": "software.amazon.awssdk:finspacedata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17161,6 +17168,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17221,7 +17229,6 @@ { "coord": "software.amazon.awssdk:firehose:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17233,6 +17240,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17293,7 +17301,6 @@ { "coord": "software.amazon.awssdk:fis:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17305,6 +17312,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17365,7 +17373,6 @@ { "coord": "software.amazon.awssdk:fms:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17377,6 +17384,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17437,7 +17445,6 @@ { "coord": "software.amazon.awssdk:forecast:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17449,6 +17456,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17509,7 +17517,6 @@ { "coord": "software.amazon.awssdk:forecastquery:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17521,6 +17528,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17581,7 +17589,6 @@ { "coord": "software.amazon.awssdk:frauddetector:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17593,6 +17600,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17653,7 +17661,6 @@ { "coord": "software.amazon.awssdk:fsx:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17665,6 +17672,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17725,7 +17733,6 @@ { "coord": "software.amazon.awssdk:gamelift:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17737,6 +17744,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17797,7 +17805,6 @@ { "coord": "software.amazon.awssdk:glacier:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17809,6 +17816,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17869,7 +17877,6 @@ { "coord": "software.amazon.awssdk:globalaccelerator:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17881,6 +17888,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -17941,7 +17949,6 @@ { "coord": "software.amazon.awssdk:glue:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -17953,6 +17960,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18013,7 +18021,6 @@ { "coord": "software.amazon.awssdk:grafana:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18025,6 +18032,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18085,7 +18093,6 @@ { "coord": "software.amazon.awssdk:greengrass:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18097,6 +18104,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18157,7 +18165,6 @@ { "coord": "software.amazon.awssdk:greengrassv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18169,6 +18176,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18229,7 +18237,6 @@ { "coord": "software.amazon.awssdk:groundstation:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18241,6 +18248,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18301,7 +18309,6 @@ { "coord": "software.amazon.awssdk:guardduty:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18313,6 +18320,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18373,7 +18381,6 @@ { "coord": "software.amazon.awssdk:health:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18385,6 +18392,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18445,7 +18453,6 @@ { "coord": "software.amazon.awssdk:healthlake:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18457,6 +18464,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18517,7 +18525,6 @@ { "coord": "software.amazon.awssdk:honeycode:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18529,6 +18536,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18744,7 +18752,6 @@ { "coord": "software.amazon.awssdk:iam:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18755,6 +18762,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18837,7 +18845,6 @@ { "coord": "software.amazon.awssdk:identitystore:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18849,6 +18856,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18909,7 +18917,6 @@ { "coord": "software.amazon.awssdk:imagebuilder:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18921,6 +18928,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -18981,7 +18989,6 @@ { "coord": "software.amazon.awssdk:inspector2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -18993,6 +19000,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19053,7 +19061,6 @@ { "coord": "software.amazon.awssdk:inspector:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19065,6 +19072,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19125,7 +19133,6 @@ { "coord": "software.amazon.awssdk:internetmonitor:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19137,6 +19144,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19197,7 +19205,6 @@ { "coord": "software.amazon.awssdk:iot1clickdevices:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19209,6 +19216,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19269,7 +19277,6 @@ { "coord": "software.amazon.awssdk:iot1clickprojects:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19281,6 +19288,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19341,7 +19349,6 @@ { "coord": "software.amazon.awssdk:iot:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19353,6 +19360,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19413,7 +19421,6 @@ { "coord": "software.amazon.awssdk:iotanalytics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19425,6 +19432,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19485,7 +19493,6 @@ { "coord": "software.amazon.awssdk:iotdataplane:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19497,6 +19504,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19557,7 +19565,6 @@ { "coord": "software.amazon.awssdk:iotdeviceadvisor:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19569,6 +19576,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19629,7 +19637,6 @@ { "coord": "software.amazon.awssdk:iotevents:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19641,6 +19648,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19701,7 +19709,6 @@ { "coord": "software.amazon.awssdk:ioteventsdata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19713,6 +19720,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19773,7 +19781,6 @@ { "coord": "software.amazon.awssdk:iotfleethub:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19785,6 +19792,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19845,7 +19853,6 @@ { "coord": "software.amazon.awssdk:iotfleetwise:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19857,6 +19864,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19917,7 +19925,6 @@ { "coord": "software.amazon.awssdk:iotjobsdataplane:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -19929,6 +19936,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -19989,7 +19997,6 @@ { "coord": "software.amazon.awssdk:iotroborunner:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20001,6 +20008,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20061,7 +20069,6 @@ { "coord": "software.amazon.awssdk:iotsecuretunneling:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20073,6 +20080,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20133,7 +20141,6 @@ { "coord": "software.amazon.awssdk:iotsitewise:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20145,6 +20152,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20205,7 +20213,6 @@ { "coord": "software.amazon.awssdk:iotthingsgraph:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20217,6 +20224,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20277,7 +20285,6 @@ { "coord": "software.amazon.awssdk:iottwinmaker:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20289,6 +20296,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20349,7 +20357,6 @@ { "coord": "software.amazon.awssdk:iotwireless:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20361,6 +20368,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20421,7 +20429,6 @@ { "coord": "software.amazon.awssdk:ivs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20433,6 +20440,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20493,7 +20501,6 @@ { "coord": "software.amazon.awssdk:ivschat:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20505,6 +20512,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20565,7 +20573,6 @@ { "coord": "software.amazon.awssdk:ivsrealtime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20577,6 +20584,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20660,7 +20668,6 @@ { "coord": "software.amazon.awssdk:kafka:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20672,6 +20679,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20732,7 +20740,6 @@ { "coord": "software.amazon.awssdk:kafkaconnect:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20744,6 +20751,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20804,7 +20812,6 @@ { "coord": "software.amazon.awssdk:kendra:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20816,6 +20823,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20876,7 +20884,6 @@ { "coord": "software.amazon.awssdk:kendraranking:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20888,6 +20895,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -20948,7 +20956,6 @@ { "coord": "software.amazon.awssdk:keyspaces:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -20960,6 +20967,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21020,7 +21028,6 @@ { "coord": "software.amazon.awssdk:kinesis:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21033,6 +21040,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21095,7 +21103,6 @@ { "coord": "software.amazon.awssdk:kinesisanalytics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21107,6 +21114,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21167,7 +21175,6 @@ { "coord": "software.amazon.awssdk:kinesisanalyticsv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21179,6 +21186,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21239,7 +21247,6 @@ { "coord": "software.amazon.awssdk:kinesisvideo:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21251,6 +21258,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21311,7 +21319,6 @@ { "coord": "software.amazon.awssdk:kinesisvideoarchivedmedia:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21323,6 +21330,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21383,7 +21391,6 @@ { "coord": "software.amazon.awssdk:kinesisvideomedia:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21395,6 +21402,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21455,7 +21463,6 @@ { "coord": "software.amazon.awssdk:kinesisvideosignaling:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21467,6 +21474,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21527,7 +21535,6 @@ { "coord": "software.amazon.awssdk:kinesisvideowebrtcstorage:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21539,6 +21546,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21599,7 +21607,6 @@ { "coord": "software.amazon.awssdk:kms:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21611,6 +21618,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21671,7 +21679,6 @@ { "coord": "software.amazon.awssdk:lakeformation:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21683,6 +21690,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21743,7 +21751,6 @@ { "coord": "software.amazon.awssdk:lambda:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21755,6 +21762,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21815,7 +21823,6 @@ { "coord": "software.amazon.awssdk:launchwizard:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21827,6 +21834,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21887,7 +21895,6 @@ { "coord": "software.amazon.awssdk:lexmodelbuilding:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21899,6 +21906,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -21959,7 +21967,6 @@ { "coord": "software.amazon.awssdk:lexmodelsv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -21971,6 +21978,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22031,7 +22039,6 @@ { "coord": "software.amazon.awssdk:lexruntime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22043,6 +22050,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22103,7 +22111,6 @@ { "coord": "software.amazon.awssdk:lexruntimev2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22115,6 +22122,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22175,7 +22183,6 @@ { "coord": "software.amazon.awssdk:licensemanager:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22187,6 +22194,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22247,7 +22255,6 @@ { "coord": "software.amazon.awssdk:licensemanagerlinuxsubscriptions:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22259,6 +22266,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22319,7 +22327,6 @@ { "coord": "software.amazon.awssdk:licensemanagerusersubscriptions:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22331,6 +22338,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22391,7 +22399,6 @@ { "coord": "software.amazon.awssdk:lightsail:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22403,6 +22410,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22463,7 +22471,6 @@ { "coord": "software.amazon.awssdk:location:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22475,6 +22482,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22535,7 +22543,6 @@ { "coord": "software.amazon.awssdk:lookoutequipment:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22547,6 +22554,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22607,7 +22615,6 @@ { "coord": "software.amazon.awssdk:lookoutmetrics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22619,6 +22626,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22679,7 +22687,6 @@ { "coord": "software.amazon.awssdk:lookoutvision:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22691,6 +22698,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22751,7 +22759,6 @@ { "coord": "software.amazon.awssdk:m2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22763,6 +22770,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22823,7 +22831,6 @@ { "coord": "software.amazon.awssdk:machinelearning:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22835,6 +22842,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22895,7 +22903,6 @@ { "coord": "software.amazon.awssdk:macie2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22907,6 +22914,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -22967,7 +22975,6 @@ { "coord": "software.amazon.awssdk:macie:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -22979,6 +22986,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23039,7 +23047,6 @@ { "coord": "software.amazon.awssdk:managedblockchain:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23051,6 +23058,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23111,7 +23119,6 @@ { "coord": "software.amazon.awssdk:managedblockchainquery:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23123,6 +23130,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23183,7 +23191,6 @@ { "coord": "software.amazon.awssdk:marketplacecatalog:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23195,6 +23202,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23255,7 +23263,6 @@ { "coord": "software.amazon.awssdk:marketplacecommerceanalytics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23267,6 +23274,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23327,7 +23335,6 @@ { "coord": "software.amazon.awssdk:marketplaceentitlement:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23339,6 +23346,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23399,7 +23407,6 @@ { "coord": "software.amazon.awssdk:marketplacemetering:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23411,6 +23418,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23471,7 +23479,6 @@ { "coord": "software.amazon.awssdk:mediaconnect:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23483,6 +23490,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23543,7 +23551,6 @@ { "coord": "software.amazon.awssdk:mediaconvert:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23555,6 +23562,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23615,7 +23623,6 @@ { "coord": "software.amazon.awssdk:medialive:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23627,6 +23634,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23687,7 +23695,6 @@ { "coord": "software.amazon.awssdk:mediapackage:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23699,6 +23706,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23759,7 +23767,6 @@ { "coord": "software.amazon.awssdk:mediapackagev2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23771,6 +23778,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23831,7 +23839,6 @@ { "coord": "software.amazon.awssdk:mediapackagevod:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23843,6 +23850,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23903,7 +23911,6 @@ { "coord": "software.amazon.awssdk:mediastore:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23915,6 +23922,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -23975,7 +23983,6 @@ { "coord": "software.amazon.awssdk:mediastoredata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -23987,6 +23994,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24047,7 +24055,6 @@ { "coord": "software.amazon.awssdk:mediatailor:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24059,6 +24066,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24119,7 +24127,6 @@ { "coord": "software.amazon.awssdk:medicalimaging:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24131,6 +24138,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24191,7 +24199,6 @@ { "coord": "software.amazon.awssdk:memorydb:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24203,6 +24210,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24284,7 +24292,6 @@ { "coord": "software.amazon.awssdk:mgn:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24296,6 +24303,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24356,7 +24364,6 @@ { "coord": "software.amazon.awssdk:migrationhub:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24368,6 +24375,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24428,7 +24436,6 @@ { "coord": "software.amazon.awssdk:migrationhubconfig:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24440,6 +24447,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24500,7 +24508,6 @@ { "coord": "software.amazon.awssdk:migrationhuborchestrator:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24512,6 +24519,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24572,7 +24580,6 @@ { "coord": "software.amazon.awssdk:migrationhubrefactorspaces:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24584,6 +24591,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24644,7 +24652,6 @@ { "coord": "software.amazon.awssdk:migrationhubstrategy:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24656,6 +24663,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24716,7 +24724,6 @@ { "coord": "software.amazon.awssdk:mobile:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24728,6 +24735,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24788,7 +24796,6 @@ { "coord": "software.amazon.awssdk:mq:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24800,6 +24807,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24860,7 +24868,6 @@ { "coord": "software.amazon.awssdk:mturk:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24872,6 +24879,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -24932,7 +24940,6 @@ { "coord": "software.amazon.awssdk:mwaa:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -24944,6 +24951,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25004,7 +25012,6 @@ { "coord": "software.amazon.awssdk:neptune:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25015,6 +25022,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25076,7 +25084,6 @@ { "coord": "software.amazon.awssdk:neptunedata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25088,6 +25095,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25194,7 +25202,6 @@ { "coord": "software.amazon.awssdk:networkfirewall:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25206,6 +25213,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25266,7 +25274,6 @@ { "coord": "software.amazon.awssdk:networkmanager:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25278,6 +25285,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25338,7 +25346,6 @@ { "coord": "software.amazon.awssdk:nimble:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25350,6 +25357,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25410,7 +25418,6 @@ { "coord": "software.amazon.awssdk:oam:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25422,6 +25429,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25482,7 +25490,6 @@ { "coord": "software.amazon.awssdk:omics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25494,6 +25501,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25554,7 +25562,6 @@ { "coord": "software.amazon.awssdk:opensearch:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25566,6 +25573,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25626,7 +25634,6 @@ { "coord": "software.amazon.awssdk:opensearchserverless:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25638,6 +25645,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25698,7 +25706,6 @@ { "coord": "software.amazon.awssdk:opsworks:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25710,6 +25717,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25770,7 +25778,6 @@ { "coord": "software.amazon.awssdk:opsworkscm:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25782,6 +25789,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25842,7 +25850,6 @@ { "coord": "software.amazon.awssdk:organizations:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25854,6 +25861,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25914,7 +25922,6 @@ { "coord": "software.amazon.awssdk:osis:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25926,6 +25933,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -25986,7 +25994,6 @@ { "coord": "software.amazon.awssdk:outposts:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -25998,6 +26005,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26058,7 +26066,6 @@ { "coord": "software.amazon.awssdk:panorama:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26070,6 +26077,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26130,7 +26138,6 @@ { "coord": "software.amazon.awssdk:paymentcryptography:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26142,6 +26149,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26202,7 +26210,6 @@ { "coord": "software.amazon.awssdk:paymentcryptographydata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26214,6 +26221,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26274,7 +26282,6 @@ { "coord": "software.amazon.awssdk:pcaconnectorad:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26286,6 +26293,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26346,7 +26354,6 @@ { "coord": "software.amazon.awssdk:personalize:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26358,6 +26365,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26418,7 +26426,6 @@ { "coord": "software.amazon.awssdk:personalizeevents:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26430,6 +26437,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26490,7 +26498,6 @@ { "coord": "software.amazon.awssdk:personalizeruntime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26502,6 +26509,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26562,7 +26570,6 @@ { "coord": "software.amazon.awssdk:pi:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26574,6 +26581,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26634,7 +26642,6 @@ { "coord": "software.amazon.awssdk:pinpoint:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26646,6 +26653,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26706,7 +26714,6 @@ { "coord": "software.amazon.awssdk:pinpointemail:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26718,6 +26725,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26778,7 +26786,6 @@ { "coord": "software.amazon.awssdk:pinpointsmsvoice:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26790,6 +26797,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26850,7 +26858,6 @@ { "coord": "software.amazon.awssdk:pinpointsmsvoicev2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26862,6 +26869,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26922,7 +26930,6 @@ { "coord": "software.amazon.awssdk:pipes:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -26934,6 +26941,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -26994,7 +27002,6 @@ { "coord": "software.amazon.awssdk:polly:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27006,6 +27013,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27066,7 +27074,6 @@ { "coord": "software.amazon.awssdk:pricing:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27078,6 +27085,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27138,7 +27146,6 @@ { "coord": "software.amazon.awssdk:privatenetworks:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27150,6 +27157,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27264,7 +27272,6 @@ { "coord": "software.amazon.awssdk:proton:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27276,6 +27283,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27336,7 +27344,6 @@ { "coord": "software.amazon.awssdk:qldb:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27348,6 +27355,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27408,7 +27416,6 @@ { "coord": "software.amazon.awssdk:qldbsession:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27420,6 +27427,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27480,7 +27488,6 @@ { "coord": "software.amazon.awssdk:quicksight:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27492,6 +27499,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27552,7 +27560,6 @@ { "coord": "software.amazon.awssdk:ram:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27564,6 +27571,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27624,7 +27632,6 @@ { "coord": "software.amazon.awssdk:rbin:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27636,6 +27643,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27696,7 +27704,6 @@ { "coord": "software.amazon.awssdk:rds:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27707,6 +27714,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27768,7 +27776,6 @@ { "coord": "software.amazon.awssdk:rdsdata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27780,6 +27787,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27840,7 +27848,6 @@ { "coord": "software.amazon.awssdk:redshift:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27851,6 +27858,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27912,7 +27920,6 @@ { "coord": "software.amazon.awssdk:redshiftdata:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27924,6 +27931,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -27984,7 +27992,6 @@ { "coord": "software.amazon.awssdk:redshiftserverless:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -27996,6 +28003,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28093,7 +28101,6 @@ { "coord": "software.amazon.awssdk:rekognition:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28105,6 +28112,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28165,7 +28173,6 @@ { "coord": "software.amazon.awssdk:resiliencehub:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28177,6 +28184,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28237,7 +28245,6 @@ { "coord": "software.amazon.awssdk:resourceexplorer2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28249,6 +28256,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28309,7 +28317,6 @@ { "coord": "software.amazon.awssdk:resourcegroups:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28321,6 +28328,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28381,7 +28389,6 @@ { "coord": "software.amazon.awssdk:resourcegroupstaggingapi:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28393,6 +28400,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28453,7 +28461,6 @@ { "coord": "software.amazon.awssdk:robomaker:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28465,6 +28472,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28525,7 +28533,6 @@ { "coord": "software.amazon.awssdk:rolesanywhere:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28537,6 +28544,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28597,7 +28605,6 @@ { "coord": "software.amazon.awssdk:route53:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:aws-xml-protocol:2.21.16", @@ -28609,6 +28616,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28670,7 +28678,6 @@ { "coord": "software.amazon.awssdk:route53domains:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28682,6 +28689,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28742,7 +28750,6 @@ { "coord": "software.amazon.awssdk:route53recoverycluster:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28754,6 +28761,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28814,7 +28822,6 @@ { "coord": "software.amazon.awssdk:route53recoverycontrolconfig:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28826,6 +28833,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28886,7 +28894,6 @@ { "coord": "software.amazon.awssdk:route53recoveryreadiness:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28898,6 +28905,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -28958,7 +28966,6 @@ { "coord": "software.amazon.awssdk:route53resolver:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -28970,6 +28977,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29030,7 +29038,6 @@ { "coord": "software.amazon.awssdk:rum:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29042,6 +29049,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29102,7 +29110,6 @@ { "coord": "software.amazon.awssdk:s3-transfer-manager:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:aws-xml-protocol:2.21.16", @@ -29116,6 +29123,7 @@ "io.netty:netty-codec-http2:4.1.100.Final", "software.amazon.awssdk:s3:2.21.16", "software.amazon.awssdk:crt-core:2.21.16", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29170,7 +29178,6 @@ { "coord": "software.amazon.awssdk:s3:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:aws-xml-protocol:2.21.16", @@ -29183,6 +29190,7 @@ "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", "software.amazon.awssdk:crt-core:2.21.16", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29247,7 +29255,6 @@ { "coord": "software.amazon.awssdk:s3control:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:aws-xml-protocol:2.21.16", @@ -29261,6 +29268,7 @@ "io.netty:netty-codec-http2:4.1.100.Final", "software.amazon.awssdk:s3:2.21.16", "software.amazon.awssdk:crt-core:2.21.16", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29325,7 +29333,6 @@ { "coord": "software.amazon.awssdk:s3outposts:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29337,6 +29344,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29397,7 +29405,6 @@ { "coord": "software.amazon.awssdk:sagemaker:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29409,6 +29416,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29469,7 +29477,6 @@ { "coord": "software.amazon.awssdk:sagemakera2iruntime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29481,6 +29488,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29541,7 +29549,6 @@ { "coord": "software.amazon.awssdk:sagemakeredge:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29553,6 +29560,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29613,7 +29621,6 @@ { "coord": "software.amazon.awssdk:sagemakerfeaturestoreruntime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29625,6 +29632,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29685,7 +29693,6 @@ { "coord": "software.amazon.awssdk:sagemakergeospatial:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29697,6 +29704,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29757,7 +29765,6 @@ { "coord": "software.amazon.awssdk:sagemakermetrics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29769,6 +29776,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29829,7 +29837,6 @@ { "coord": "software.amazon.awssdk:sagemakerruntime:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29841,6 +29848,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29901,7 +29909,6 @@ { "coord": "software.amazon.awssdk:savingsplans:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29913,6 +29920,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -29973,7 +29981,6 @@ { "coord": "software.amazon.awssdk:scheduler:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -29985,6 +29992,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30045,7 +30053,6 @@ { "coord": "software.amazon.awssdk:schemas:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30057,6 +30064,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30158,7 +30166,6 @@ { "coord": "software.amazon.awssdk:secretsmanager:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30170,6 +30177,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30230,7 +30238,6 @@ { "coord": "software.amazon.awssdk:securityhub:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30242,6 +30249,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30302,7 +30310,6 @@ { "coord": "software.amazon.awssdk:securitylake:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30314,6 +30321,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30374,7 +30382,6 @@ { "coord": "software.amazon.awssdk:serverlessapplicationrepository:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30386,6 +30393,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30446,7 +30454,6 @@ { "coord": "software.amazon.awssdk:servicecatalog:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30458,6 +30465,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30518,7 +30526,6 @@ { "coord": "software.amazon.awssdk:servicecatalogappregistry:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30530,6 +30537,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30590,7 +30598,6 @@ { "coord": "software.amazon.awssdk:servicediscovery:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30602,6 +30609,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30662,7 +30670,6 @@ { "coord": "software.amazon.awssdk:servicequotas:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30674,6 +30681,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30734,7 +30742,6 @@ { "coord": "software.amazon.awssdk:ses:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30745,6 +30752,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30806,7 +30814,6 @@ { "coord": "software.amazon.awssdk:sesv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30818,6 +30825,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30878,7 +30886,6 @@ { "coord": "software.amazon.awssdk:sfn:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30890,6 +30897,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -30950,7 +30958,6 @@ { "coord": "software.amazon.awssdk:shield:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -30962,6 +30969,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31022,7 +31030,6 @@ { "coord": "software.amazon.awssdk:signer:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31034,6 +31041,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31094,7 +31102,6 @@ { "coord": "software.amazon.awssdk:simspaceweaver:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31106,6 +31113,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31166,7 +31174,6 @@ { "coord": "software.amazon.awssdk:sms:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31178,6 +31185,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31238,7 +31246,6 @@ { "coord": "software.amazon.awssdk:snowball:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31250,6 +31257,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31310,7 +31318,6 @@ { "coord": "software.amazon.awssdk:snowdevicemanagement:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31322,6 +31329,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31382,7 +31390,6 @@ { "coord": "software.amazon.awssdk:sns:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31393,6 +31400,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31454,7 +31462,6 @@ { "coord": "software.amazon.awssdk:sqs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31465,6 +31472,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31526,7 +31534,6 @@ { "coord": "software.amazon.awssdk:ssm:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31538,6 +31545,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31598,7 +31606,6 @@ { "coord": "software.amazon.awssdk:ssmcontacts:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31610,6 +31617,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31670,7 +31678,6 @@ { "coord": "software.amazon.awssdk:ssmincidents:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31682,6 +31689,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31742,7 +31750,6 @@ { "coord": "software.amazon.awssdk:ssmsap:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31754,6 +31761,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31814,7 +31822,6 @@ { "coord": "software.amazon.awssdk:sso:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31826,6 +31833,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31886,7 +31894,6 @@ { "coord": "software.amazon.awssdk:ssoadmin:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31898,6 +31905,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -31958,7 +31966,6 @@ { "coord": "software.amazon.awssdk:ssooidc:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -31970,6 +31977,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32031,7 +32039,6 @@ { "coord": "software.amazon.awssdk:storagegateway:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32043,6 +32050,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32103,7 +32111,6 @@ { "coord": "software.amazon.awssdk:sts:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32114,6 +32121,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32175,7 +32183,6 @@ { "coord": "software.amazon.awssdk:support:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32187,6 +32194,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32247,7 +32255,6 @@ { "coord": "software.amazon.awssdk:supportapp:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32259,6 +32266,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32319,7 +32327,6 @@ { "coord": "software.amazon.awssdk:swf:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32331,6 +32338,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32391,7 +32399,6 @@ { "coord": "software.amazon.awssdk:synthetics:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32403,6 +32410,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32463,7 +32471,6 @@ { "coord": "software.amazon.awssdk:textract:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32475,6 +32482,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32565,7 +32573,6 @@ { "coord": "software.amazon.awssdk:timestreamquery:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32577,6 +32584,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32637,7 +32645,6 @@ { "coord": "software.amazon.awssdk:timestreamwrite:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32649,6 +32656,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32709,7 +32717,6 @@ { "coord": "software.amazon.awssdk:tnb:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32721,6 +32728,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32781,7 +32789,6 @@ { "coord": "software.amazon.awssdk:transcribe:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32793,6 +32800,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32853,7 +32861,6 @@ { "coord": "software.amazon.awssdk:transcribestreaming:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32865,6 +32872,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32927,7 +32935,6 @@ { "coord": "software.amazon.awssdk:transfer:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -32939,6 +32946,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -32999,7 +33007,6 @@ { "coord": "software.amazon.awssdk:translate:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33011,6 +33018,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33116,7 +33124,6 @@ { "coord": "software.amazon.awssdk:verifiedpermissions:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33128,6 +33135,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33188,7 +33196,6 @@ { "coord": "software.amazon.awssdk:voiceid:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33200,6 +33207,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33260,7 +33268,6 @@ { "coord": "software.amazon.awssdk:vpclattice:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33272,6 +33279,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33332,7 +33340,6 @@ { "coord": "software.amazon.awssdk:waf:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33344,6 +33351,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33404,7 +33412,6 @@ { "coord": "software.amazon.awssdk:wafv2:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33416,6 +33423,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33476,7 +33484,6 @@ { "coord": "software.amazon.awssdk:wellarchitected:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33488,6 +33495,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33548,7 +33556,6 @@ { "coord": "software.amazon.awssdk:wisdom:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33560,6 +33567,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33620,7 +33628,6 @@ { "coord": "software.amazon.awssdk:workdocs:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33632,6 +33639,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33692,7 +33700,6 @@ { "coord": "software.amazon.awssdk:worklink:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33704,6 +33711,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33764,7 +33772,6 @@ { "coord": "software.amazon.awssdk:workmail:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33776,6 +33783,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33836,7 +33844,6 @@ { "coord": "software.amazon.awssdk:workmailmessageflow:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33848,6 +33855,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33908,7 +33916,6 @@ { "coord": "software.amazon.awssdk:workspaces:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33920,6 +33927,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -33980,7 +33988,6 @@ { "coord": "software.amazon.awssdk:workspacesweb:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -33992,6 +33999,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", @@ -34052,7 +34060,6 @@ { "coord": "software.amazon.awssdk:xray:2.21.16", "dependencies": [ - "commons-codec:commons-codec:1.16.0", "software.amazon.awssdk:netty-nio-client:2.21.16", "software.amazon.awssdk:aws-core:2.21.16", "software.amazon.awssdk:protocol-core:2.21.16", @@ -34064,6 +34071,7 @@ "io.netty:netty-handler:4.1.100.Final", "org.reactivestreams:reactive-streams:1.0.4", "io.netty:netty-codec-http2:4.1.100.Final", + "commons-codec:commons-codec:1.17.0", "io.netty:netty-resolver:4.1.100.Final", "io.netty:netty-buffer:4.1.100.Final", "io.netty:netty-codec-http:4.1.100.Final", diff --git a/terraform/aws/BUILD b/terraform/aws/BUILD index 88368253..69e339e9 100644 --- a/terraform/aws/BUILD +++ b/terraform/aws/BUILD @@ -74,3 +74,11 @@ s3_jar_release( release_bucket = ":bucket_flag", release_key = ":bucket_path_flag", ) + +s3_jar_release( + name = "privacy_budget_unit_extraction_tool_release", + artifact_base_name = "PrivacyBudgetUnitExtraction_{VERSION}.jar", + jar_target = "//java/com/google/aggregate/tools/privacybudgetutil/aws:AwsPrivacyBudgetUnitExtractionDeploy", + release_bucket = ":bucket_flag", + release_key = ":bucket_path_flag", +) diff --git a/terraform/gcp/BUILD b/terraform/gcp/BUILD index 09571361..2f3f0684 100644 --- a/terraform/gcp/BUILD +++ b/terraform/gcp/BUILD @@ -50,3 +50,11 @@ gcs_jar_release( release_bucket = ":bucket_flag", release_key = ":bucket_path_flag", ) + +gcs_jar_release( + name = "privacy_budget_unit_extraction_tool_release", + artifact_base_name = "PrivacyBudgetUnitExtractionTool_{VERSION}.jar", + jar_target = "//java/com/google/aggregate/tools/privacybudgetutil/gcp:GcpPrivacyBudgetUnitExtractionDeploy", + release_bucket = ":bucket_flag", + release_key = ":bucket_path_flag", +) diff --git a/worker/aws/BUILD b/worker/aws/BUILD index d9888279..52ccccfd 100644 --- a/worker/aws/BUILD +++ b/worker/aws/BUILD @@ -53,8 +53,6 @@ DEFAULT_ENCLAVE_ARGS = [ "--result_logger", "LOCAL_TO_CLOUD", # coord-staging environment - "--private_key_service_base_url", - "https://il9t0ajpsa.execute-api.us-west-2.amazonaws.com/stage/v1alpha", "--result_working_directory_path", "/", "--decryption_key_service",