diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index cbcbb434..f8a708eb 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -21,7 +21,8 @@ "https://bcr.bazel.build/modules/abseil-cpp/20250814.0/MODULE.bazel": "c43c16ca2c432566cdb78913964497259903ebe8fb7d9b57b38e9f1425b427b8", "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2", "https://bcr.bazel.build/modules/abseil-cpp/20260107.1/MODULE.bazel": "e33b3801443f5fd64465262084534115db76363df13d2168a42bbfacc747be81", - "https://bcr.bazel.build/modules/abseil-cpp/20260107.1/source.json": "7a9a88969b1e79268cf613728ca8ff8fa4bc4b1a9abee9ec1fb5f113ca751971", + "https://bcr.bazel.build/modules/abseil-cpp/20260526.0/MODULE.bazel": "b4a76a8d70ba08aa0253fd5e374ca5a5fa6b15aba985a7bbe4467c138954830f", + "https://bcr.bazel.build/modules/abseil-cpp/20260526.0/source.json": "a39a26fec1b7037bdd7ea6c25cc098b99ae80af10ff0b6ec8c4bfe0df694f451", "https://bcr.bazel.build/modules/abseil-py/2.1.0/MODULE.bazel": "5ebe5bf853769c65707e5c28f216798f7a4b1042015e6a36e6d03094d94bec8a", "https://bcr.bazel.build/modules/abseil-py/2.1.0/source.json": "0e8fc4f088ce07099c1cd6594c20c7ddbb48b4b3c0849b7d94ba94be88ff042b", "https://bcr.bazel.build/modules/apple_rules_lint/0.4.0/MODULE.bazel": "c59831c3a5389430516203777816527f257329a5da363994e1d62b9ae6729f71", @@ -318,8 +319,9 @@ "https://bcr.bazel.build/modules/googletest/1.16.0/MODULE.bazel": "a175623c69e94fca4ca7acbc12031e637b0c489318cd4805606981d4d7adb34a", "https://bcr.bazel.build/modules/googletest/1.17.0.bcr.1/MODULE.bazel": "9f8e815fba6e81dee850a33068166989000eabcf7690d2127a975c2ebda6baae", "https://bcr.bazel.build/modules/googletest/1.17.0.bcr.2/MODULE.bazel": "827f54f492a3ce549c940106d73de332c2b30cebd0c20c0bc5d786aba7f116cb", - "https://bcr.bazel.build/modules/googletest/1.17.0.bcr.2/source.json": "3664514073a819992320ffbce5825e4238459df344d8b01748af2208f8d2e1eb", "https://bcr.bazel.build/modules/googletest/1.17.0/MODULE.bazel": "dbec758171594a705933a29fcf69293d2468c49ec1f2ebca65c36f504d72df46", + "https://bcr.bazel.build/modules/googletest/1.18.0/MODULE.bazel": "00f855225d5746ca0d59965b09762e278b7259a6dfb7840d1b034ab60e72921e", + "https://bcr.bazel.build/modules/googletest/1.18.0/source.json": "cbf8951f03dcff3750c0265b431bb6245e91cf327a2c7284e896acefd1b87b68", "https://bcr.bazel.build/modules/grpc-java/1.62.2/MODULE.bazel": "99b8771e8c7cacb130170fed2a10c9e8fed26334a93e73b42d2953250885a158", "https://bcr.bazel.build/modules/grpc-java/1.66.0/MODULE.bazel": "86ff26209fac846adb89db11f3714b3dc0090fb2fb81575673cc74880cda4e7e", "https://bcr.bazel.build/modules/grpc-java/1.69.0/MODULE.bazel": "53887af6a00b3b406d70175d3d07e84ea9362016ff55ea90b9185f0227bfaf98", @@ -1386,17 +1388,17 @@ "REPO_MAPPING:rules_rust+,bazel_skylib bazel_skylib+", "REPO_MAPPING:rules_rust+,bazel_tools bazel_tools", "REPO_MAPPING:rules_rust+,rules_cc rules_cc+", - "FILE:@@//Cargo.lock c743d5cdc1b10cb9c233542eb30525c73ec90cc857dc22482c00dba71c30e49d", + "FILE:@@//Cargo.lock fbcfbfd43488ba730509ca6613314349b498975e69c862097105882f63b083a1", "FILE:@@//Cargo.toml 928046f1687cf5e178c250c20378129ec3d2b0cb3e7d43b1ba5cbd15fb57e61e", "FILE:@@//domains/ai/apps/impact_mcp/Cargo.toml c726e9af0505442cf6cc4735b0f350d690e98e5d6b8d475a0677d9048a4a993a", "FILE:@@//domains/ai/apps/microgpt_cli/Cargo.toml 28a43ecb02c6d3ea9018a1c96fa8224d46f4f35b341bd907f0d450e9638f4039", "FILE:@@//domains/ai/libs/microgpt/Cargo.toml 890a96f46963d4f49a8b6e4e110788f6269b021702df2c8b2a225a0e9d2f07ff", - "FILE:@@//domains/ai/apis/microgpt_serve/Cargo.toml 0dd1713180c50c778a35d552be293d2835af44131746c4bc25778e26db53f814", - "FILE:@@//domains/platform/libs/server_pal/Cargo.toml 49e129afaa7ddc37f89d9f275de8f259593168fa8100f04629b0e01a1ae360bf", + "FILE:@@//domains/ai/apis/microgpt_serve/Cargo.toml 517415fcf3b6d05fabb5e3fd8f05e7ea5c1a4e1783f94083baceaabf94657d5f", + "FILE:@@//domains/platform/libs/server_pal/Cargo.toml c130676ba91c3bc80ca52e5282d92fceda479e06cdc78900df5751155799dddf", "FILE:@@//domains/graphics/libs/imagine_rust/Cargo.toml 93f5b4c46c2251b724755524effaf555f77dc3250c7191c82c03878b77427995", - "FILE:@@//domains/games/apis/mithril/Cargo.toml 49dfc3ce31fbe8e637706d4780b2e41b0eaad7aa8c397222cb9f9283278a5126", + "FILE:@@//domains/games/apis/mithril/Cargo.toml b4ff1052fd76b3855c5d1ed75dd1db49edc75eae258b00d6d8f13d85e6fc2d84", "FILE:@@//domains/games/libs/wordchains/Cargo.toml ce1f633edf5610f14e437f50af1d1b1bd85fe371bccb0cbb2e70b00b57e454bd", - "FILE:@@//domains/graphics/apis/posterize/Cargo.toml 2ab738a87eef9e53a18201be9b0e758fc9d243ac5b10c32c3370fd19ad85151a", + "FILE:@@//domains/graphics/apis/posterize/Cargo.toml e2ee10bec0b8777aec21f4c44eca872ba49908bc15c48cd2f431725e7dee5d19", "FILE:@@//domains/games/apps/wordchains/Cargo.toml c3ed1f82c3b9fa912dce667148b511927ea5eb1cac6f67f5dafbf444060a9481" ], "generatedRepoSpecs": { @@ -1406,7 +1408,7 @@ "contents": { "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n [\n \"cargo-bazel.json\",\n \"crates.bzl\",\n \"defs.bzl\",\n ] + glob(\n allow_empty = True,\n include = [\"*.bazel\"],\n ),\n)\n\nfilegroup(\n name = \"srcs\",\n srcs = glob(\n allow_empty = True,\n include = [\n \"*.bazel\",\n \"*.bzl\",\n ],\n ),\n)\n\n# Workspace Member Dependencies\nalias(\n name = \"axum-0.8.9\",\n actual = \"@crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum\",\n actual = \"@crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64-0.23.0\",\n actual = \"@crates__base64-0.23.0//:base64\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64\",\n actual = \"@crates__base64-0.23.0//:base64\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64ct-1.8.3\",\n actual = \"@crates__base64ct-1.8.3//:base64ct\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64ct\",\n actual = \"@crates__base64ct-1.8.3//:base64ct\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"candle-core-0.11.0\",\n actual = \"@crates__candle-core-0.11.0//:candle_core\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"candle-core\",\n actual = \"@crates__candle-core-0.11.0//:candle_core\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"candle-nn-0.11.0\",\n actual = \"@crates__candle-nn-0.11.0//:candle_nn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"candle-nn\",\n actual = \"@crates__candle-nn-0.11.0//:candle_nn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"chrono-0.4.45\",\n actual = \"@crates__chrono-0.4.45//:chrono\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"chrono\",\n actual = \"@crates__chrono-0.4.45//:chrono\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.6.4\",\n actual = \"@crates__clap-4.6.4//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crates__clap-4.6.4//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"dirs-6.0.0\",\n actual = \"@crates__dirs-6.0.0//:dirs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"dirs\",\n actual = \"@crates__dirs-6.0.0//:dirs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"half-2.7.1\",\n actual = \"@crates__half-2.7.1//:half\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"half\",\n actual = \"@crates__half-2.7.1//:half\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"http-body-util-0.1.4\",\n actual = \"@crates__http-body-util-0.1.4//:http_body_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"http-body-util\",\n actual = \"@crates__http-body-util-0.1.4//:http_body_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"image-0.25.10\",\n actual = \"@crates__image-0.25.10//:image\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"image\",\n actual = \"@crates__image-0.25.10//:image\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.33\",\n actual = \"@crates__log-0.4.33//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crates__log-0.4.33//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-0.32.0\",\n actual = \"@crates__opentelemetry-0.32.0//:opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry\",\n actual = \"@crates__opentelemetry-0.32.0//:opentelemetry\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-otlp-0.32.0\",\n actual = \"@crates__opentelemetry-otlp-0.32.0//:opentelemetry_otlp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry-otlp\",\n actual = \"@crates__opentelemetry-otlp-0.32.0//:opentelemetry_otlp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry_sdk-0.32.1\",\n actual = \"@crates__opentelemetry_sdk-0.32.1//:opentelemetry_sdk\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"opentelemetry_sdk\",\n actual = \"@crates__opentelemetry_sdk-0.32.1//:opentelemetry_sdk\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest-0.13.4\",\n actual = \"@crates__reqwest-0.13.4//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest\",\n actual = \"@crates__reqwest-0.13.4//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rmcp-3.0.1\",\n actual = \"@crates__rmcp-3.0.1//:rmcp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rmcp\",\n actual = \"@crates__rmcp-3.0.1//:rmcp\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls-0.23.43\",\n actual = \"@crates__rustls-0.23.43//:rustls\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustls\",\n actual = \"@crates__rustls-0.23.43//:rustls\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustyline-18.0.1\",\n actual = \"@crates__rustyline-18.0.1//:rustyline\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustyline\",\n actual = \"@crates__rustyline-18.0.1//:rustyline\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"safetensors-0.8.0\",\n actual = \"@crates__safetensors-0.8.0//:safetensors\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"safetensors\",\n actual = \"@crates__safetensors-0.8.0//:safetensors\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"schemars-1.2.2\",\n actual = \"@crates__schemars-1.2.2//:schemars\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"schemars\",\n actual = \"@crates__schemars-1.2.2//:schemars\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.229\",\n actual = \"@crates__serde-1.0.229//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.229//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.151\",\n actual = \"@crates__serde_json-1.0.151//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.151//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml_ng-0.10.0\",\n actual = \"@crates__serde_yaml_ng-0.10.0//:serde_yaml_ng\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml_ng\",\n actual = \"@crates__serde_yaml_ng-0.10.0//:serde_yaml_ng\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2-0.11.0\",\n actual = \"@crates__sha2-0.11.0//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2\",\n actual = \"@crates__sha2-0.11.0//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"simplelog-0.12.2\",\n actual = \"@crates__simplelog-0.12.2//:simplelog\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"simplelog\",\n actual = \"@crates__simplelog-0.12.2//:simplelog\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.27.0\",\n actual = \"@crates__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@crates__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokenizers-0.23.1\",\n actual = \"@crates__tokenizers-0.23.1//:tokenizers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokenizers\",\n actual = \"@crates__tokenizers-0.23.1//:tokenizers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.53.1\",\n actual = \"@crates__tokio-1.53.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crates__tokio-1.53.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-0.5.3\",\n actual = \"@crates__tower-0.5.3//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower\",\n actual = \"@crates__tower-0.5.3//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-http-0.7.0\",\n actual = \"@crates__tower-http-0.7.0//:tower_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-http\",\n actual = \"@crates__tower-http-0.7.0//:tower_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower_governor-0.8.0\",\n actual = \"@crates__tower_governor-0.8.0//:tower_governor\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower_governor\",\n actual = \"@crates__tower_governor-0.8.0//:tower_governor\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-0.1.44\",\n actual = \"@crates__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing\",\n actual = \"@crates__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber-0.3.23\",\n actual = \"@crates__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber\",\n actual = \"@crates__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid-1.24.0\",\n actual = \"@crates__uuid-1.24.0//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid\",\n actual = \"@crates__uuid-1.24.0//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"webpki-root-certs-1.0.9\",\n actual = \"@crates__webpki-root-certs-1.0.9//:webpki_root_certs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"webpki-root-certs\",\n actual = \"@crates__webpki-root-certs-1.0.9//:webpki_root_certs\",\n tags = [\"manual\"],\n)\n", "alias_rules.bzl": "\"\"\"Alias that transitions its target to `compilation_mode=opt`. Use `transition_alias=\"opt\"` to enable.\"\"\"\n\nload(\"@rules_cc//cc:defs.bzl\", \"CcInfo\")\nload(\"@rules_rust//rust:rust_common.bzl\", \"COMMON_PROVIDERS\")\n\ndef _transition_alias_impl(ctx):\n # `ctx.attr.actual` is a list of 1 item due to the transition\n providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]\n if CcInfo in ctx.attr.actual[0]:\n providers.append(ctx.attr.actual[0][CcInfo])\n return providers\n\ndef _change_compilation_mode(compilation_mode):\n def _change_compilation_mode_impl(_settings, _attr):\n return {\n \"//command_line_option:compilation_mode\": compilation_mode,\n }\n\n return transition(\n implementation = _change_compilation_mode_impl,\n inputs = [],\n outputs = [\n \"//command_line_option:compilation_mode\",\n ],\n )\n\ndef _transition_alias_rule(compilation_mode):\n return rule(\n implementation = _transition_alias_impl,\n provides = COMMON_PROVIDERS,\n attrs = {\n \"actual\": attr.label(\n mandatory = True,\n doc = \"`rust_library()` target to transition to `compilation_mode=opt`.\",\n providers = COMMON_PROVIDERS,\n cfg = _change_compilation_mode(compilation_mode),\n ),\n \"_allowlist_function_transition\": attr.label(\n default = \"@bazel_tools//tools/allowlists/function_transition_allowlist\",\n ),\n },\n doc = \"Transitions a Rust library crate to the `compilation_mode=opt`.\",\n )\n\ntransition_alias_dbg = _transition_alias_rule(\"dbg\")\ntransition_alias_fastbuild = _transition_alias_rule(\"fastbuild\")\ntransition_alias_opt = _transition_alias_rule(\"opt\")\n", - "crates.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_edition](#crate_edition)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe:defs.bzl\", \"crates_vendor_remote_repository\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef crate_edition(package_name = None):\n \"\"\"Finds the Rust edition for the package where this macro is called.\n\n Args:\n package_name (str, optional): The package name whose edition should be\n looked up. Defaults to `native.package_name()` when unset.\n\n Returns:\n str: The Rust edition declared by the package's Cargo.toml file.\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n if package_name not in _CRATE_EDITIONS:\n fail(\"Tried to get crate_edition for package \" + package_name + \" but that package had no Cargo.toml file\")\n\n return _CRATE_EDITIONS[package_name]\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list.\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS, ALIASES, AND EDITIONS\n###############################################################################\n\n_CRATE_EDITIONS = {\n \"domains/graphics/libs/imagine_rust\": \"2024\",\n \"domains/ai/apps/impact_mcp\": \"2024\",\n \"domains/ai/libs/microgpt\": \"2024\",\n \"domains/ai/apps/microgpt_cli\": \"2024\",\n \"domains/ai/apis/microgpt_serve\": \"2024\",\n \"domains/games/apis/mithril\": \"2024\",\n \"domains/graphics/apis/posterize\": \"2024\",\n \"domains/platform/libs/server_pal\": \"2024\",\n \"domains/games/libs/wordchains\": \"2024\",\n \"domains/games/apps/wordchains\": \"2024\",\n}\n\n_NORMAL_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n _COMMON_CONDITION: {\n \"image\": Label(\"@crates//image-0.25.10\"),\n },\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n \"chrono\": Label(\"@crates//chrono-0.4.45\"),\n \"clap\": Label(\"@crates//clap-4.6.4\"),\n \"dirs\": Label(\"@crates//dirs-6.0.0\"),\n \"reqwest\": Label(\"@crates//reqwest-0.13.4\"),\n \"rmcp\": Label(\"@crates//rmcp-3.0.1\"),\n \"schemars\": Label(\"@crates//schemars-1.2.2\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"serde_yaml_ng\": Label(\"@crates//serde_yaml_ng-0.10.0\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n \"uuid\": Label(\"@crates//uuid-1.24.0\"),\n },\n },\n \"domains/ai/libs/microgpt\": {\n _COMMON_CONDITION: {\n \"candle-core\": Label(\"@crates//candle-core-0.11.0\"),\n \"candle-nn\": Label(\"@crates//candle-nn-0.11.0\"),\n \"half\": Label(\"@crates//half-2.7.1\"),\n \"safetensors\": Label(\"@crates//safetensors-0.8.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tokenizers\": Label(\"@crates//tokenizers-0.23.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/ai/apps/microgpt_cli\": {\n _COMMON_CONDITION: {\n \"clap\": Label(\"@crates//clap-4.6.4\"),\n \"rustyline\": Label(\"@crates//rustyline-18.0.1\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n },\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"opentelemetry\": Label(\"@crates//opentelemetry-0.32.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n },\n },\n \"domains/games/apis/mithril\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n },\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"base64\": Label(\"@crates//base64-0.23.0\"),\n \"image\": Label(\"@crates//image-0.25.10\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"opentelemetry\": Label(\"@crates//opentelemetry-0.32.0\"),\n \"opentelemetry-otlp\": Label(\"@crates//opentelemetry-otlp-0.32.0\"),\n \"opentelemetry_sdk\": Label(\"@crates//opentelemetry_sdk-0.32.1\"),\n \"reqwest\": Label(\"@crates//reqwest-0.13.4\"),\n \"rustls\": Label(\"@crates//rustls-0.23.43\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tower-http\": Label(\"@crates//tower-http-0.7.0\"),\n \"tower_governor\": Label(\"@crates//tower_governor-0.8.0\"),\n \"webpki-root-certs\": Label(\"@crates//webpki-root-certs-1.0.9\"),\n },\n },\n \"domains/games/libs/wordchains\": {\n _COMMON_CONDITION: {\n \"base64ct\": Label(\"@crates//base64ct-1.8.3\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"sha2\": Label(\"@crates//sha2-0.11.0\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/games/apps/wordchains\": {\n _COMMON_CONDITION: {\n \"clap\": Label(\"@crates//clap-4.6.4\"),\n \"log\": Label(\"@crates//log-0.4.33\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"simplelog\": Label(\"@crates//simplelog-0.12.2\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/libs/microgpt\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/apps/microgpt_cli\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apis/mithril\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/libs/wordchains\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apps/wordchains\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n \"tempfile\": Label(\"@crates//tempfile-3.27.0\"),\n },\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n \"http-body-util\": Label(\"@crates//http-body-util-0.1.4\"),\n \"opentelemetry_sdk\": Label(\"@crates//opentelemetry_sdk-0.32.1\"),\n \"tower\": Label(\"@crates//tower-0.5.3\"),\n },\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n \"http-body-util\": Label(\"@crates//http-body-util-0.1.4\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tower\": Label(\"@crates//tower-0.5.3\"),\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n \"tower\": Label(\"@crates//tower-0.5.3\"),\n },\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\": [],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"android\\\"))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", not(target_os = \\\"wasi\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(unix, not(target_os = \\\"android\\\"), not(target_vendor = \\\"apple\\\"), not(target_arch = \\\"wasm32\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(unix, not(target_os = \\\"macos\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_arch = \\\"x86\\\", target_arch = \\\"x86_64\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\", target_os = \\\"freebsd\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(any(target_os = \\\"windows\\\", target_arch = \\\"wasm32\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_arch = \\\"wasm32\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_has_atomic = \\\"64\\\"))\": [],\n \"cfg(not(windows))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_arch = \\\"spirv\\\")\": [],\n \"cfg(target_arch = \\\"wasm32\\\")\": [],\n \"cfg(target_arch = \\\"x86\\\")\": [],\n \"cfg(target_arch = \\\"x86_64\\\")\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_os = \\\"android\\\")\": [],\n \"cfg(target_os = \\\"haiku\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"redox\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(target_os = \\\"windows\\\")\": [],\n \"cfg(target_vendor = \\\"apple\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"i686-pc-windows-gnu\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-gnu\": [],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n crates_vendor_remote_repository,\n name = \"crates\",\n # Lean interface: just point at `crates.bzl`; the repo rule\n # derives the sibling `BUILD.bazel` and `defs.bzl`.\n crates_module = Label(\"@crates//crates:crates.bzl\"),\n )\n maybe(\n http_archive,\n name = \"crates__adler2-2.0.1\",\n sha256 = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/adler2/2.0.1/download\"],\n strip_prefix = \"adler2-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.adler2-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ahash-0.8.12\",\n sha256 = \"5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ahash/0.8.12/download\"],\n strip_prefix = \"ahash-0.8.12\",\n build_file = Label(\"@crates//crates:BUILD.ahash-0.8.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__alloc-no-stdlib-2.0.4\",\n sha256 = \"cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/alloc-no-stdlib/2.0.4/download\"],\n strip_prefix = \"alloc-no-stdlib-2.0.4\",\n build_file = Label(\"@crates//crates:BUILD.alloc-no-stdlib-2.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__alloc-stdlib-0.2.4\",\n sha256 = \"0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/alloc-stdlib/0.2.4/download\"],\n strip_prefix = \"alloc-stdlib-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.alloc-stdlib-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__allocator-api2-0.2.21\",\n sha256 = \"683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/allocator-api2/0.2.21/download\"],\n strip_prefix = \"allocator-api2-0.2.21\",\n build_file = Label(\"@crates//crates:BUILD.allocator-api2-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__android_system_properties-0.1.5\",\n sha256 = \"819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/android_system_properties/0.1.5/download\"],\n strip_prefix = \"android_system_properties-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.android_system_properties-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anyhow-1.0.104\",\n sha256 = \"330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.104/download\"],\n strip_prefix = \"anyhow-1.0.104\",\n build_file = Label(\"@crates//crates:BUILD.anyhow-1.0.104.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__async-compression-0.4.43\",\n sha256 = \"3976abdc8fe7d1133d43d304afd42abdf5bc3e1319d263d223bde07b5efc4be8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-compression/0.4.43/download\"],\n strip_prefix = \"async-compression-0.4.43\",\n build_file = Label(\"@crates//crates:BUILD.async-compression-0.4.43.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__async-trait-0.1.91\",\n sha256 = \"ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.91/download\"],\n strip_prefix = \"async-trait-0.1.91\",\n build_file = Label(\"@crates//crates:BUILD.async-trait-0.1.91.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@crates//crates:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__autocfg-1.5.1\",\n sha256 = \"f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/autocfg/1.5.1/download\"],\n strip_prefix = \"autocfg-1.5.1\",\n build_file = Label(\"@crates//crates:BUILD.autocfg-1.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-0.8.9\",\n sha256 = \"31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.8.9/download\"],\n strip_prefix = \"axum-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.axum-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-core-0.5.6\",\n sha256 = \"08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.5.6/download\"],\n strip_prefix = \"axum-core-0.5.6\",\n build_file = Label(\"@crates//crates:BUILD.axum-core-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.13.1\",\n sha256 = \"9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.13.1/download\"],\n strip_prefix = \"base64-0.13.1\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.22.1\",\n sha256 = \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.22.1/download\"],\n strip_prefix = \"base64-0.22.1\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.23.0\",\n sha256 = \"b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.23.0/download\"],\n strip_prefix = \"base64-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64ct-1.8.3\",\n sha256 = \"2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64ct/1.8.3/download\"],\n strip_prefix = \"base64ct-1.8.3\",\n build_file = Label(\"@crates//crates:BUILD.base64ct-1.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bit-set-0.8.0\",\n sha256 = \"08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-set/0.8.0/download\"],\n strip_prefix = \"bit-set-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.bit-set-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bit-vec-0.8.0\",\n sha256 = \"5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-vec/0.8.0/download\"],\n strip_prefix = \"bit-vec-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.bit-vec-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-1.3.2\",\n sha256 = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/1.3.2/download\"],\n strip_prefix = \"bitflags-1.3.2\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-1.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.13.1\",\n sha256 = \"b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.13.1/download\"],\n strip_prefix = \"bitflags-2.13.1\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-0.1.6\",\n sha256 = \"0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block/0.1.6/download\"],\n strip_prefix = \"block-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.block-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.12.1\",\n sha256 = \"d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.12.1/download\"],\n strip_prefix = \"block-buffer-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block2-0.6.2\",\n sha256 = \"cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block2/0.6.2/download\"],\n strip_prefix = \"block2-0.6.2\",\n build_file = Label(\"@crates//crates:BUILD.block2-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__brotli-8.0.4\",\n sha256 = \"5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/brotli/8.0.4/download\"],\n strip_prefix = \"brotli-8.0.4\",\n build_file = Label(\"@crates//crates:BUILD.brotli-8.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__brotli-decompressor-5.0.3\",\n sha256 = \"3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/brotli-decompressor/5.0.3/download\"],\n strip_prefix = \"brotli-decompressor-5.0.3\",\n build_file = Label(\"@crates//crates:BUILD.brotli-decompressor-5.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bumpalo-3.20.3\",\n sha256 = \"72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.20.3/download\"],\n strip_prefix = \"bumpalo-3.20.3\",\n build_file = Label(\"@crates//crates:BUILD.bumpalo-3.20.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytemuck-1.25.2\",\n sha256 = \"95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytemuck/1.25.2/download\"],\n strip_prefix = \"bytemuck-1.25.2\",\n build_file = Label(\"@crates//crates:BUILD.bytemuck-1.25.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytemuck_derive-1.11.0\",\n sha256 = \"f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytemuck_derive/1.11.0/download\"],\n strip_prefix = \"bytemuck_derive-1.11.0\",\n build_file = Label(\"@crates//crates:BUILD.bytemuck_derive-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__byteorder-1.5.0\",\n sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n strip_prefix = \"byteorder-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.byteorder-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__byteorder-lite-0.1.0\",\n sha256 = \"8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/byteorder-lite/0.1.0/download\"],\n strip_prefix = \"byteorder-lite-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.byteorder-lite-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytes-1.12.1\",\n sha256 = \"fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.12.1/download\"],\n strip_prefix = \"bytes-1.12.1\",\n build_file = Label(\"@crates//crates:BUILD.bytes-1.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-core-0.11.0\",\n sha256 = \"5ecb245093b0f791b89d3420c3df9c6d49c60ab63ba54db896bf8a3baf486706\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-core/0.11.0/download\"],\n strip_prefix = \"candle-core-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-core-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-metal-kernels-0.11.0\",\n sha256 = \"242e83c6acf639bb273c929d73c67a882bb4dd08a140f121096e19ba2f213d3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-metal-kernels/0.11.0/download\"],\n strip_prefix = \"candle-metal-kernels-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-metal-kernels-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-nn-0.11.0\",\n sha256 = \"eaa10b6ccc365b33210ce404fbf45e60d3e0bdac1004463cf1052e6ee1c1739a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-nn/0.11.0/download\"],\n strip_prefix = \"candle-nn-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-nn-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-ug-0.11.0\",\n sha256 = \"257411c33abf7d898a31ac20d80813dfe96ff09e23a73039e22ab293aea9b871\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-ug/0.11.0/download\"],\n strip_prefix = \"candle-ug-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-ug-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__castaway-0.2.4\",\n sha256 = \"dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/castaway/0.2.4/download\"],\n strip_prefix = \"castaway-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.castaway-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cc-1.4.0\",\n sha256 = \"5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.4.0/download\"],\n strip_prefix = \"cc-1.4.0\",\n build_file = Label(\"@crates//crates:BUILD.cc-1.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg_aliases-0.2.2\",\n sha256 = \"f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg_aliases/0.2.2/download\"],\n strip_prefix = \"cfg_aliases-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.cfg_aliases-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__chacha20-0.10.1\",\n sha256 = \"d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chacha20/0.10.1/download\"],\n strip_prefix = \"chacha20-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.chacha20-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__chrono-0.4.45\",\n sha256 = \"1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chrono/0.4.45/download\"],\n strip_prefix = \"chrono-0.4.45\",\n build_file = Label(\"@crates//crates:BUILD.chrono-0.4.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.6.4\",\n sha256 = \"d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.4/download\"],\n strip_prefix = \"clap-4.6.4\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.6.2\",\n sha256 = \"f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.2/download\"],\n strip_prefix = \"clap_builder-4.6.2\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_derive-4.6.4\",\n sha256 = \"d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.4/download\"],\n strip_prefix = \"clap_derive-4.6.4\",\n build_file = Label(\"@crates//crates:BUILD.clap_derive-4.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-1.1.0\",\n sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n strip_prefix = \"clap_lex-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clipboard-win-5.4.1\",\n sha256 = \"bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clipboard-win/5.4.1/download\"],\n strip_prefix = \"clipboard-win-5.4.1\",\n build_file = Label(\"@crates//crates:BUILD.clipboard-win-5.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__color_quant-1.1.0\",\n sha256 = \"3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/color_quant/1.1.0/download\"],\n strip_prefix = \"color_quant-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.color_quant-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colorchoice-1.0.5\",\n sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n strip_prefix = \"colorchoice-1.0.5\",\n build_file = Label(\"@crates//crates:BUILD.colorchoice-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__combine-4.6.7\",\n sha256 = \"ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/combine/4.6.7/download\"],\n strip_prefix = \"combine-4.6.7\",\n build_file = Label(\"@crates//crates:BUILD.combine-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__compact_str-0.9.1\",\n sha256 = \"9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/compact_str/0.9.1/download\"],\n strip_prefix = \"compact_str-0.9.1\",\n build_file = Label(\"@crates//crates:BUILD.compact_str-0.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__compression-codecs-0.4.38\",\n sha256 = \"ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/compression-codecs/0.4.38/download\"],\n strip_prefix = \"compression-codecs-0.4.38\",\n build_file = Label(\"@crates//crates:BUILD.compression-codecs-0.4.38.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__compression-core-0.4.32\",\n sha256 = \"cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/compression-core/0.4.32/download\"],\n strip_prefix = \"compression-core-0.4.32\",\n build_file = Label(\"@crates//crates:BUILD.compression-core-0.4.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__const-oid-0.10.2\",\n sha256 = \"a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/const-oid/0.10.2/download\"],\n strip_prefix = \"const-oid-0.10.2\",\n build_file = Label(\"@crates//crates:BUILD.const-oid-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-0.10.1\",\n sha256 = \"b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.10.1/download\"],\n strip_prefix = \"core-foundation-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-0.9.4\",\n sha256 = \"91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.9.4/download\"],\n strip_prefix = \"core-foundation-0.9.4\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-sys-0.8.7\",\n sha256 = \"773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation-sys/0.8.7/download\"],\n strip_prefix = \"core-foundation-sys-0.8.7\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-graphics-types-0.1.3\",\n sha256 = \"45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-graphics-types/0.1.3/download\"],\n strip_prefix = \"core-graphics-types-0.1.3\",\n build_file = Label(\"@crates//crates:BUILD.core-graphics-types-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.3.0\",\n sha256 = \"8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.3.0/download\"],\n strip_prefix = \"cpufeatures-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crc32fast-1.5.0\",\n sha256 = \"9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crc32fast/1.5.0/download\"],\n strip_prefix = \"crc32fast-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.crc32fast-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-deque-0.8.7\",\n sha256 = \"5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-deque/0.8.7/download\"],\n strip_prefix = \"crossbeam-deque-0.8.7\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-deque-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-epoch-0.9.20\",\n sha256 = \"2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-epoch/0.9.20/download\"],\n strip_prefix = \"crossbeam-epoch-0.9.20\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-epoch-0.9.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-utils-0.8.22\",\n sha256 = \"61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-utils/0.8.22/download\"],\n strip_prefix = \"crossbeam-utils-0.8.22\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-utils-0.8.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crunchy-0.2.4\",\n sha256 = \"460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crunchy/0.2.4/download\"],\n strip_prefix = \"crunchy-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.2.2\",\n sha256 = \"ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.2.2/download\"],\n strip_prefix = \"crypto-common-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__daachorse-1.0.1\",\n sha256 = \"6f55d7153ba3b507595872a3874803f07a8a81d1e888abed8e5db7da0597d6e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/daachorse/1.0.1/download\"],\n strip_prefix = \"daachorse-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.daachorse-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling-0.20.11\",\n sha256 = \"fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling/0.20.11/download\"],\n strip_prefix = \"darling-0.20.11\",\n build_file = Label(\"@crates//crates:BUILD.darling-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling-0.23.0\",\n sha256 = \"25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling/0.23.0/download\"],\n strip_prefix = \"darling-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.darling-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_core-0.20.11\",\n sha256 = \"0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_core/0.20.11/download\"],\n strip_prefix = \"darling_core-0.20.11\",\n build_file = Label(\"@crates//crates:BUILD.darling_core-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_core-0.23.0\",\n sha256 = \"9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_core/0.23.0/download\"],\n strip_prefix = \"darling_core-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.darling_core-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_macro-0.20.11\",\n sha256 = \"fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_macro/0.20.11/download\"],\n strip_prefix = \"darling_macro-0.20.11\",\n build_file = Label(\"@crates//crates:BUILD.darling_macro-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_macro-0.23.0\",\n sha256 = \"ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_macro/0.23.0/download\"],\n strip_prefix = \"darling_macro-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.darling_macro-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dary_heap-0.3.9\",\n sha256 = \"8b1e3a325bc115f096c8b77bbf027a7c2592230e70be2d985be950d3d5e60ebe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dary_heap/0.3.9/download\"],\n strip_prefix = \"dary_heap-0.3.9\",\n build_file = Label(\"@crates//crates:BUILD.dary_heap-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dashmap-6.2.1\",\n sha256 = \"e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dashmap/6.2.1/download\"],\n strip_prefix = \"dashmap-6.2.1\",\n build_file = Label(\"@crates//crates:BUILD.dashmap-6.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__deranged-0.5.8\",\n sha256 = \"7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.5.8/download\"],\n strip_prefix = \"deranged-0.5.8\",\n build_file = Label(\"@crates//crates:BUILD.deranged-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder-0.20.2\",\n sha256 = \"507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder/0.20.2/download\"],\n strip_prefix = \"derive_builder-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder_core-0.20.2\",\n sha256 = \"2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder_core/0.20.2/download\"],\n strip_prefix = \"derive_builder_core-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder_core-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder_macro-0.20.2\",\n sha256 = \"ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder_macro/0.20.2/download\"],\n strip_prefix = \"derive_builder_macro-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder_macro-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.11.3\",\n sha256 = \"f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.11.3/download\"],\n strip_prefix = \"digest-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dirs-6.0.0\",\n sha256 = \"c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dirs/6.0.0/download\"],\n strip_prefix = \"dirs-6.0.0\",\n build_file = Label(\"@crates//crates:BUILD.dirs-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dirs-sys-0.5.0\",\n sha256 = \"e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dirs-sys/0.5.0/download\"],\n strip_prefix = \"dirs-sys-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.dirs-sys-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dispatch2-0.3.1\",\n sha256 = \"1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dispatch2/0.3.1/download\"],\n strip_prefix = \"dispatch2-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.dispatch2-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__displaydoc-0.2.7\",\n sha256 = \"c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.7/download\"],\n strip_prefix = \"displaydoc-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.displaydoc-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-clone-1.0.20\",\n sha256 = \"d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-clone/1.0.20/download\"],\n strip_prefix = \"dyn-clone-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-stack-0.13.2\",\n sha256 = \"1c4713e43e2886ba72b8271aa66c93d722116acf7a75555cce11dcde84388fe8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-stack/0.13.2/download\"],\n strip_prefix = \"dyn-stack-0.13.2\",\n build_file = Label(\"@crates//crates:BUILD.dyn-stack-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-stack-macros-0.1.3\",\n sha256 = \"e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-stack-macros/0.1.3/download\"],\n strip_prefix = \"dyn-stack-macros-0.1.3\",\n build_file = Label(\"@crates//crates:BUILD.dyn-stack-macros-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.17.0\",\n sha256 = \"9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.17.0/download\"],\n strip_prefix = \"either-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__endian-type-0.2.0\",\n sha256 = \"869b0adbda23651a9c5c0c3d270aac9fcb52e8622a8f2b17e57802d7791962f2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/endian-type/0.2.0/download\"],\n strip_prefix = \"endian-type-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.endian-type-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__enum-as-inner-0.6.1\",\n sha256 = \"a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-as-inner/0.6.1/download\"],\n strip_prefix = \"enum-as-inner-0.6.1\",\n build_file = Label(\"@crates//crates:BUILD.enum-as-inner-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crates//crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__error-code-3.3.2\",\n sha256 = \"dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/error-code/3.3.2/download\"],\n strip_prefix = \"error-code-3.3.2\",\n build_file = Label(\"@crates//crates:BUILD.error-code-3.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__esaxx-rs-0.1.10\",\n sha256 = \"d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/esaxx-rs/0.1.10/download\"],\n strip_prefix = \"esaxx-rs-0.1.10\",\n build_file = Label(\"@crates//crates:BUILD.esaxx-rs-0.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fancy-regex-0.17.0\",\n sha256 = \"72cf461f865c862bb7dc573f643dd6a2b6842f7c30b07882b56bd148cc2761b8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fancy-regex/0.17.0/download\"],\n strip_prefix = \"fancy-regex-0.17.0\",\n build_file = Label(\"@crates//crates:BUILD.fancy-regex-0.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fastrand-2.5.0\",\n sha256 = \"da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.5.0/download\"],\n strip_prefix = \"fastrand-2.5.0\",\n build_file = Label(\"@crates//crates:BUILD.fastrand-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fax-0.2.7\",\n sha256 = \"caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fax/0.2.7/download\"],\n strip_prefix = \"fax-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.fax-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fdeflate-0.3.7\",\n sha256 = \"1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fdeflate/0.3.7/download\"],\n strip_prefix = \"fdeflate-0.3.7\",\n build_file = Label(\"@crates//crates:BUILD.fdeflate-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__find-msvc-tools-0.1.9\",\n sha256 = \"5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.9/download\"],\n strip_prefix = \"find-msvc-tools-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.find-msvc-tools-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__flate2-1.1.9\",\n sha256 = \"843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flate2/1.1.9/download\"],\n strip_prefix = \"flate2-1.1.9\",\n build_file = Label(\"@crates//crates:BUILD.flate2-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__float8-0.7.0\",\n sha256 = \"c2d1f04709a8ac06e8e8042875a3c466cc4832d3c1a18dbcb9dba3c6e83046bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/float8/0.7.0/download\"],\n strip_prefix = \"float8-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.float8-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fnv-1.0.7\",\n sha256 = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fnv/1.0.7/download\"],\n strip_prefix = \"fnv-1.0.7\",\n build_file = Label(\"@crates//crates:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foldhash-0.2.0\",\n sha256 = \"77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.2.0/download\"],\n strip_prefix = \"foldhash-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.foldhash-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-0.5.0\",\n sha256 = \"d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types/0.5.0/download\"],\n strip_prefix = \"foreign-types-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-macros-0.2.4\",\n sha256 = \"ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-macros/0.2.4/download\"],\n strip_prefix = \"foreign-types-macros-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-macros-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-shared-0.3.1\",\n sha256 = \"aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-shared/0.3.1/download\"],\n strip_prefix = \"foreign-types-shared-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-shared-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__form_urlencoded-1.2.2\",\n sha256 = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/form_urlencoded/1.2.2/download\"],\n strip_prefix = \"form_urlencoded-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__forwarded-header-value-0.1.1\",\n sha256 = \"8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/forwarded-header-value/0.1.1/download\"],\n strip_prefix = \"forwarded-header-value-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.forwarded-header-value-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-0.3.33\",\n sha256 = \"a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures/0.3.33/download\"],\n strip_prefix = \"futures-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-channel-0.3.33\",\n sha256 = \"262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.33/download\"],\n strip_prefix = \"futures-channel-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-channel-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-core-0.3.33\",\n sha256 = \"2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.33/download\"],\n strip_prefix = \"futures-core-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-core-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-executor-0.3.33\",\n sha256 = \"6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-executor/0.3.33/download\"],\n strip_prefix = \"futures-executor-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-executor-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-io-0.3.33\",\n sha256 = \"4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.33/download\"],\n strip_prefix = \"futures-io-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-io-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-macro-0.3.33\",\n sha256 = \"2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.33/download\"],\n strip_prefix = \"futures-macro-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-macro-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-sink-0.3.33\",\n sha256 = \"e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.33/download\"],\n strip_prefix = \"futures-sink-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-sink-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-task-0.3.33\",\n sha256 = \"b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.33/download\"],\n strip_prefix = \"futures-task-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-task-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-timer-3.0.4\",\n sha256 = \"af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-timer/3.0.4/download\"],\n strip_prefix = \"futures-timer-3.0.4\",\n build_file = Label(\"@crates//crates:BUILD.futures-timer-3.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-util-0.3.33\",\n sha256 = \"a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.33/download\"],\n strip_prefix = \"futures-util-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-util-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-0.18.2\",\n sha256 = \"ab96b703d31950f1aeddded248bc95543c9efc7ac9c4a21fda8703a83ee35451\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm/0.18.2/download\"],\n strip_prefix = \"gemm-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-0.19.0\",\n sha256 = \"aa0673db364b12263d103b68337a68fbecc541d6f6b61ba72fe438654709eacb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm/0.19.0/download\"],\n strip_prefix = \"gemm-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c32-0.18.2\",\n sha256 = \"f6db9fd9f40421d00eea9dd0770045a5603b8d684654816637732463f4073847\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c32/0.18.2/download\"],\n strip_prefix = \"gemm-c32-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c32-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c32-0.19.0\",\n sha256 = \"086936dbdcb99e37aad81d320f98f670e53c1e55a98bee70573e83f95beb128c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c32/0.19.0/download\"],\n strip_prefix = \"gemm-c32-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c32-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c64-0.18.2\",\n sha256 = \"dfcad8a3d35a43758330b635d02edad980c1e143dc2f21e6fd25f9e4eada8edf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c64/0.18.2/download\"],\n strip_prefix = \"gemm-c64-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c64-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c64-0.19.0\",\n sha256 = \"20c8aeeeec425959bda4d9827664029ba1501a90a0d1e6228e48bef741db3a3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c64/0.19.0/download\"],\n strip_prefix = \"gemm-c64-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c64-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-common-0.18.2\",\n sha256 = \"a352d4a69cbe938b9e2a9cb7a3a63b7e72f9349174a2752a558a8a563510d0f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-common/0.18.2/download\"],\n strip_prefix = \"gemm-common-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-common-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-common-0.19.0\",\n sha256 = \"88027625910cc9b1085aaaa1c4bc46bb3a36aad323452b33c25b5e4e7c8e2a3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-common/0.19.0/download\"],\n strip_prefix = \"gemm-common-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-common-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f16-0.18.2\",\n sha256 = \"cff95ae3259432f3c3410eaa919033cd03791d81cebd18018393dc147952e109\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f16/0.18.2/download\"],\n strip_prefix = \"gemm-f16-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f16-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f16-0.19.0\",\n sha256 = \"e3df7a55202e6cd6739d82ae3399c8e0c7e1402859b30e4cb780e61525d9486e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f16/0.19.0/download\"],\n strip_prefix = \"gemm-f16-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f16-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f32-0.18.2\",\n sha256 = \"bc8d3d4385393304f407392f754cd2dc4b315d05063f62cf09f47b58de276864\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f32/0.18.2/download\"],\n strip_prefix = \"gemm-f32-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f32-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f32-0.19.0\",\n sha256 = \"02e0b8c9da1fbec6e3e3ab2ce6bc259ef18eb5f6f0d3e4edf54b75f9fd41a81c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f32/0.19.0/download\"],\n strip_prefix = \"gemm-f32-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f32-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f64-0.18.2\",\n sha256 = \"35b2a4f76ce4b8b16eadc11ccf2e083252d8237c1b589558a49b0183545015bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f64/0.18.2/download\"],\n strip_prefix = \"gemm-f64-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f64-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f64-0.19.0\",\n sha256 = \"056131e8f2a521bfab322f804ccd652520c79700d81209e9d9275bbdecaadc6a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f64/0.19.0/download\"],\n strip_prefix = \"gemm-f64-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f64-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.2.17\",\n sha256 = \"ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.17/download\"],\n strip_prefix = \"getrandom-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.4.3\",\n sha256 = \"300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.3/download\"],\n strip_prefix = \"getrandom-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gif-0.14.2\",\n sha256 = \"ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gif/0.14.2/download\"],\n strip_prefix = \"gif-0.14.2\",\n build_file = Label(\"@crates//crates:BUILD.gif-0.14.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__governor-0.10.4\",\n sha256 = \"9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/governor/0.10.4/download\"],\n strip_prefix = \"governor-0.10.4\",\n build_file = Label(\"@crates//crates:BUILD.governor-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__h2-0.4.15\",\n sha256 = \"6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.4.15/download\"],\n strip_prefix = \"h2-0.4.15\",\n build_file = Label(\"@crates//crates:BUILD.h2-0.4.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__half-2.7.1\",\n sha256 = \"6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/half/2.7.1/download\"],\n strip_prefix = \"half-2.7.1\",\n build_file = Label(\"@crates//crates:BUILD.half-2.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.14.5\",\n sha256 = \"e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.14.5/download\"],\n strip_prefix = \"hashbrown-0.14.5\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.14.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.16.1\",\n sha256 = \"841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.16.1/download\"],\n strip_prefix = \"hashbrown-0.16.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.16.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.17.1\",\n sha256 = \"ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.1/download\"],\n strip_prefix = \"hashbrown-0.17.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__home-0.5.12\",\n sha256 = \"cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/home/0.5.12/download\"],\n strip_prefix = \"home-0.5.12\",\n build_file = Label(\"@crates//crates:BUILD.home-0.5.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-1.5.0\",\n sha256 = \"918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.5.0/download\"],\n strip_prefix = \"http-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.http-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-1.1.0\",\n sha256 = \"ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.1.0/download\"],\n strip_prefix = \"http-body-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.http-body-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-util-0.1.4\",\n sha256 = \"e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.4/download\"],\n strip_prefix = \"http-body-util-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.http-body-util-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-range-header-0.4.2\",\n sha256 = \"9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-range-header/0.4.2/download\"],\n strip_prefix = \"http-range-header-0.4.2\",\n build_file = Label(\"@crates//crates:BUILD.http-range-header-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@crates//crates:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@crates//crates:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hybrid-array-0.4.13\",\n sha256 = \"818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hybrid-array/0.4.13/download\"],\n strip_prefix = \"hybrid-array-0.4.13\",\n build_file = Label(\"@crates//crates:BUILD.hybrid-array-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-1.11.0\",\n sha256 = \"d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.11.0/download\"],\n strip_prefix = \"hyper-1.11.0\",\n build_file = Label(\"@crates//crates:BUILD.hyper-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-rustls-0.27.9\",\n sha256 = \"33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-rustls/0.27.9/download\"],\n strip_prefix = \"hyper-rustls-0.27.9\",\n build_file = Label(\"@crates//crates:BUILD.hyper-rustls-0.27.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-timeout-0.5.2\",\n sha256 = \"2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-timeout/0.5.2/download\"],\n strip_prefix = \"hyper-timeout-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hyper-timeout-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-util-0.1.20\",\n sha256 = \"96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.20/download\"],\n strip_prefix = \"hyper-util-0.1.20\",\n build_file = Label(\"@crates//crates:BUILD.hyper-util-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__iana-time-zone-0.1.65\",\n sha256 = \"e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone/0.1.65/download\"],\n strip_prefix = \"iana-time-zone-0.1.65\",\n build_file = Label(\"@crates//crates:BUILD.iana-time-zone-0.1.65.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__iana-time-zone-haiku-0.1.2\",\n sha256 = \"f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone-haiku/0.1.2/download\"],\n strip_prefix = \"iana-time-zone-haiku-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.iana-time-zone-haiku-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_collections-2.2.0\",\n sha256 = \"2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.2.0/download\"],\n strip_prefix = \"icu_collections-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_collections-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_locale_core-2.2.0\",\n sha256 = \"92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.2.0/download\"],\n strip_prefix = \"icu_locale_core-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_locale_core-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer-2.2.0\",\n sha256 = \"c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.2.0/download\"],\n strip_prefix = \"icu_normalizer-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer_data-2.2.0\",\n sha256 = \"da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.2.0/download\"],\n strip_prefix = \"icu_normalizer_data-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer_data-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties-2.2.0\",\n sha256 = \"bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.2.0/download\"],\n strip_prefix = \"icu_properties-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties_data-2.2.0\",\n sha256 = \"8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.2.0/download\"],\n strip_prefix = \"icu_properties_data-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties_data-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_provider-2.2.0\",\n sha256 = \"139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.2.0/download\"],\n strip_prefix = \"icu_provider-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_provider-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ident_case-1.0.1\",\n sha256 = \"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ident_case/1.0.1/download\"],\n strip_prefix = \"ident_case-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.ident_case-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna-1.1.0\",\n sha256 = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna/1.1.0/download\"],\n strip_prefix = \"idna-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna_adapter-1.2.2\",\n sha256 = \"cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.2/download\"],\n strip_prefix = \"idna_adapter-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.idna_adapter-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__image-0.25.10\",\n sha256 = \"85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/image/0.25.10/download\"],\n strip_prefix = \"image-0.25.10\",\n build_file = Label(\"@crates//crates:BUILD.image-0.25.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__image-webp-0.2.4\",\n sha256 = \"525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/image-webp/0.2.4/download\"],\n strip_prefix = \"image-webp-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.image-webp-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ipnet-2.12.0\",\n sha256 = \"d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipnet/2.12.0/download\"],\n strip_prefix = \"ipnet-2.12.0\",\n build_file = Label(\"@crates//crates:BUILD.ipnet-2.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-0.22.4\",\n sha256 = \"5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni/0.22.4/download\"],\n strip_prefix = \"jni-0.22.4\",\n build_file = Label(\"@crates//crates:BUILD.jni-0.22.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-macros-0.22.4\",\n sha256 = \"a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-macros/0.22.4/download\"],\n strip_prefix = \"jni-macros-0.22.4\",\n build_file = Label(\"@crates//crates:BUILD.jni-macros-0.22.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-sys-0.4.1\",\n sha256 = \"c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-sys/0.4.1/download\"],\n strip_prefix = \"jni-sys-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.jni-sys-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-sys-macros-0.4.1\",\n sha256 = \"38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-sys-macros/0.4.1/download\"],\n strip_prefix = \"jni-sys-macros-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.jni-sys-macros-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jobserver-0.1.35\",\n sha256 = \"1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jobserver/0.1.35/download\"],\n strip_prefix = \"jobserver-0.1.35\",\n build_file = Label(\"@crates//crates:BUILD.jobserver-0.1.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__js-sys-0.3.103\",\n sha256 = \"53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.103/download\"],\n strip_prefix = \"js-sys-0.3.103\",\n build_file = Label(\"@crates//crates:BUILD.js-sys-0.3.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.189\",\n sha256 = \"3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.189/download\"],\n strip_prefix = \"libc-0.2.189\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.189.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libloading-0.8.9\",\n sha256 = \"d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libloading/0.8.9/download\"],\n strip_prefix = \"libloading-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.libloading-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libm-0.2.16\",\n sha256 = \"b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libm/0.2.16/download\"],\n strip_prefix = \"libm-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.libm-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libredox-0.1.18\",\n sha256 = \"c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libredox/0.1.18/download\"],\n strip_prefix = \"libredox-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.libredox-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__linux-raw-sys-0.12.1\",\n sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n strip_prefix = \"linux-raw-sys-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__litemap-0.8.2\",\n sha256 = \"92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.2/download\"],\n strip_prefix = \"litemap-0.8.2\",\n build_file = Label(\"@crates//crates:BUILD.litemap-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@crates//crates:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.33\",\n sha256 = \"0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.33/download\"],\n strip_prefix = \"log-0.4.33\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__macro_rules_attribute-0.2.3\",\n sha256 = \"b3ae8f6d608c795738406608304d30a2dfbdc8e58e44f7ba43236da5208ded3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/macro_rules_attribute/0.2.3/download\"],\n strip_prefix = \"macro_rules_attribute-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.macro_rules_attribute-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__macro_rules_attribute-proc_macro-0.2.3\",\n sha256 = \"fc04a4c58212d57930a24bf47d3fa87485264a3a054e9c10e042eb373573ad3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/macro_rules_attribute-proc_macro/0.2.3/download\"],\n strip_prefix = \"macro_rules_attribute-proc_macro-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.macro_rules_attribute-proc_macro-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__malloc_buf-0.0.6\",\n sha256 = \"62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/malloc_buf/0.0.6/download\"],\n strip_prefix = \"malloc_buf-0.0.6\",\n build_file = Label(\"@crates//crates:BUILD.malloc_buf-0.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__matchers-0.2.0\",\n sha256 = \"d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchers/0.2.0/download\"],\n strip_prefix = \"matchers-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.matchers-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__matchit-0.8.4\",\n sha256 = \"47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.8.4/download\"],\n strip_prefix = \"matchit-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.matchit-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.8.3\",\n sha256 = \"cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.3/download\"],\n strip_prefix = \"memchr-2.8.3\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memmap2-0.9.11\",\n sha256 = \"d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memmap2/0.9.11/download\"],\n strip_prefix = \"memmap2-0.9.11\",\n build_file = Label(\"@crates//crates:BUILD.memmap2-0.9.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__metal-0.29.0\",\n sha256 = \"7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/metal/0.29.0/download\"],\n strip_prefix = \"metal-0.29.0\",\n build_file = Label(\"@crates//crates:BUILD.metal-0.29.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@crates//crates:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mime_guess-2.0.5\",\n sha256 = \"f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime_guess/2.0.5/download\"],\n strip_prefix = \"mime_guess-2.0.5\",\n build_file = Label(\"@crates//crates:BUILD.mime_guess-2.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__minimal-lexical-0.2.1\",\n sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n strip_prefix = \"minimal-lexical-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__miniz_oxide-0.8.9\",\n sha256 = \"1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/miniz_oxide/0.8.9/download\"],\n strip_prefix = \"miniz_oxide-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.miniz_oxide-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mio-1.2.2\",\n sha256 = \"30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.2.2/download\"],\n strip_prefix = \"mio-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.mio-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__monostate-0.1.18\",\n sha256 = \"3341a273f6c9d5bef1908f17b7267bbab0e95c9bf69a0d4dcf8e9e1b2c76ef67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/monostate/0.1.18/download\"],\n strip_prefix = \"monostate-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.monostate-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__monostate-impl-0.1.18\",\n sha256 = \"e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/monostate-impl/0.1.18/download\"],\n strip_prefix = \"monostate-impl-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.monostate-impl-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__moxcms-0.8.1\",\n sha256 = \"bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/moxcms/0.8.1/download\"],\n strip_prefix = \"moxcms-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.moxcms-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nibble_vec-0.1.0\",\n sha256 = \"77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nibble_vec/0.1.0/download\"],\n strip_prefix = \"nibble_vec-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.nibble_vec-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nix-0.31.3\",\n sha256 = \"cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nix/0.31.3/download\"],\n strip_prefix = \"nix-0.31.3\",\n build_file = Label(\"@crates//crates:BUILD.nix-0.31.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nom-7.1.3\",\n sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n strip_prefix = \"nom-7.1.3\",\n build_file = Label(\"@crates//crates:BUILD.nom-7.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nonempty-0.7.0\",\n sha256 = \"e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nonempty/0.7.0/download\"],\n strip_prefix = \"nonempty-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.nonempty-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nonzero_ext-0.3.0\",\n sha256 = \"38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nonzero_ext/0.3.0/download\"],\n strip_prefix = \"nonzero_ext-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.nonzero_ext-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@crates//crates:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-0.4.3\",\n sha256 = \"35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num/0.4.3/download\"],\n strip_prefix = \"num-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.num-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-bigint-0.4.8\",\n sha256 = \"c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-bigint/0.4.8/download\"],\n strip_prefix = \"num-bigint-0.4.8\",\n build_file = Label(\"@crates//crates:BUILD.num-bigint-0.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-complex-0.4.6\",\n sha256 = \"73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-complex/0.4.6/download\"],\n strip_prefix = \"num-complex-0.4.6\",\n build_file = Label(\"@crates//crates:BUILD.num-complex-0.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-conv-0.2.2\",\n sha256 = \"521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.2.2/download\"],\n strip_prefix = \"num-conv-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.num-conv-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-integer-0.1.46\",\n sha256 = \"7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-integer/0.1.46/download\"],\n strip_prefix = \"num-integer-0.1.46\",\n build_file = Label(\"@crates//crates:BUILD.num-integer-0.1.46.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-iter-0.1.46\",\n sha256 = \"c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-iter/0.1.46/download\"],\n strip_prefix = \"num-iter-0.1.46\",\n build_file = Label(\"@crates//crates:BUILD.num-iter-0.1.46.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-rational-0.4.2\",\n sha256 = \"f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-rational/0.4.2/download\"],\n strip_prefix = \"num-rational-0.4.2\",\n build_file = Label(\"@crates//crates:BUILD.num-rational-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-traits-0.2.19\",\n sha256 = \"071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-traits/0.2.19/download\"],\n strip_prefix = \"num-traits-0.2.19\",\n build_file = Label(\"@crates//crates:BUILD.num-traits-0.2.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_cpus-1.17.0\",\n sha256 = \"91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_cpus/1.17.0/download\"],\n strip_prefix = \"num_cpus-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.num_cpus-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_threads-0.1.7\",\n sha256 = \"5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_threads/0.1.7/download\"],\n strip_prefix = \"num_threads-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.num_threads-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc-0.2.7\",\n sha256 = \"915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc/0.2.7/download\"],\n strip_prefix = \"objc-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.objc-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-0.6.4\",\n sha256 = \"3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2/0.6.4/download\"],\n strip_prefix = \"objc2-0.6.4\",\n build_file = Label(\"@crates//crates:BUILD.objc2-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-core-foundation-0.3.2\",\n sha256 = \"2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-core-foundation/0.3.2/download\"],\n strip_prefix = \"objc2-core-foundation-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.objc2-core-foundation-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-encode-4.1.0\",\n sha256 = \"ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-encode/4.1.0/download\"],\n strip_prefix = \"objc2-encode-4.1.0\",\n build_file = Label(\"@crates//crates:BUILD.objc2-encode-4.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-foundation-0.3.2\",\n sha256 = \"e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-foundation/0.3.2/download\"],\n strip_prefix = \"objc2-foundation-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.objc2-foundation-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-metal-0.3.2\",\n sha256 = \"a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-metal/0.3.2/download\"],\n strip_prefix = \"objc2-metal-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.objc2-metal-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.21.4\",\n sha256 = \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.4/download\"],\n strip_prefix = \"once_cell-1.21.4\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.21.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__onig-6.5.3\",\n sha256 = \"0cc3cbf698f9438986c11a880c90a6d04b9de27575afd28bbf45b154b6c709e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/onig/6.5.3/download\"],\n strip_prefix = \"onig-6.5.3\",\n build_file = Label(\"@crates//crates:BUILD.onig-6.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__onig_sys-69.9.3\",\n sha256 = \"1e68317604e77e53b85896388e1a803c1d21b74c899ec9e5e1112db90735edd7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/onig_sys/69.9.3/download\"],\n strip_prefix = \"onig_sys-69.9.3\",\n build_file = Label(\"@crates//crates:BUILD.onig_sys-69.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-probe-0.2.1\",\n sha256 = \"7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-probe/0.2.1/download\"],\n strip_prefix = \"openssl-probe-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.openssl-probe-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-0.32.0\",\n sha256 = \"b0142c63252a9e054e68a4c61a5778f7b14f576274d593f8ce883d191a099682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry/0.32.0/download\"],\n strip_prefix = \"opentelemetry-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-http-0.32.0\",\n sha256 = \"5683015d09e2df236ef005b17f6f196f0d5f6313c4fa43a7b6a53b52776e4331\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-http/0.32.0/download\"],\n strip_prefix = \"opentelemetry-http-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-http-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-otlp-0.32.0\",\n sha256 = \"9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-otlp/0.32.0/download\"],\n strip_prefix = \"opentelemetry-otlp-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-otlp-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-proto-0.32.0\",\n sha256 = \"56d658ba1faf63f7b9c492cfbe6e0ec365440a16132d3270c1065f7b33f1b638\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-proto/0.32.0/download\"],\n strip_prefix = \"opentelemetry-proto-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-proto-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry_sdk-0.32.1\",\n sha256 = \"9b59f80e1ac4d5ff7a2db8fb6c80badb7f0f3f858211fba08dd9aaec750894f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry_sdk/0.32.1/download\"],\n strip_prefix = \"opentelemetry_sdk-0.32.1\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry_sdk-0.32.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__option-ext-0.2.0\",\n sha256 = \"04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/option-ext/0.2.0/download\"],\n strip_prefix = \"option-ext-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.option-ext-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__paris-1.5.15\",\n sha256 = \"8fecab3723493c7851f292cb060f3ee1c42f19b8d749345d0d7eaf3fd19aa62d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/paris/1.5.15/download\"],\n strip_prefix = \"paris-1.5.15\",\n build_file = Label(\"@crates//crates:BUILD.paris-1.5.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot-0.12.5\",\n sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n strip_prefix = \"parking_lot-0.12.5\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot-0.12.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot_core-0.9.12\",\n sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n strip_prefix = \"parking_lot_core-0.9.12\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__paste-1.0.15\",\n sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n strip_prefix = \"paste-1.0.15\",\n build_file = Label(\"@crates//crates:BUILD.paste-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pastey-0.2.3\",\n sha256 = \"2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pastey/0.2.3/download\"],\n strip_prefix = \"pastey-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.pastey-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crates//crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-1.1.13\",\n sha256 = \"2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project/1.1.13/download\"],\n strip_prefix = \"pin-project-1.1.13\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-1.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-internal-1.1.13\",\n sha256 = \"c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-internal/1.1.13/download\"],\n strip_prefix = \"pin-project-internal-1.1.13\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-internal-1.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.17\",\n sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n strip_prefix = \"pin-project-lite-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pkg-config-0.3.33\",\n sha256 = \"19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.33/download\"],\n strip_prefix = \"pkg-config-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.pkg-config-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__png-0.18.1\",\n sha256 = \"60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/png/0.18.1/download\"],\n strip_prefix = \"png-0.18.1\",\n build_file = Label(\"@crates//crates:BUILD.png-0.18.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__portable-atomic-1.14.0\",\n sha256 = \"3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.14.0/download\"],\n strip_prefix = \"portable-atomic-1.14.0\",\n build_file = Label(\"@crates//crates:BUILD.portable-atomic-1.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__potential_utf-0.1.5\",\n sha256 = \"0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.5/download\"],\n strip_prefix = \"potential_utf-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.potential_utf-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__powerfmt-0.2.0\",\n sha256 = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/powerfmt/0.2.0/download\"],\n strip_prefix = \"powerfmt-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ppv-lite86-0.2.21\",\n sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n strip_prefix = \"ppv-lite86-0.2.21\",\n build_file = Label(\"@crates//crates:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.107\",\n sha256 = \"985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.107/download\"],\n strip_prefix = \"proc-macro2-1.0.107\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.107.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__process-wrap-9.1.0\",\n sha256 = \"2e842efad9119158434d193c6682e2ebee4b44d6ad801d7b349623b3f57cdf55\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/process-wrap/9.1.0/download\"],\n strip_prefix = \"process-wrap-9.1.0\",\n build_file = Label(\"@crates//crates:BUILD.process-wrap-9.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-0.14.4\",\n sha256 = \"528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.14.4/download\"],\n strip_prefix = \"prost-0.14.4\",\n build_file = Label(\"@crates//crates:BUILD.prost-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-derive-0.14.4\",\n sha256 = \"b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.14.4/download\"],\n strip_prefix = \"prost-derive-0.14.4\",\n build_file = Label(\"@crates//crates:BUILD.prost-derive-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pulp-0.21.5\",\n sha256 = \"96b86df24f0a7ddd5e4b95c94fc9ed8a98f1ca94d3b01bdce2824097e7835907\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulp/0.21.5/download\"],\n strip_prefix = \"pulp-0.21.5\",\n build_file = Label(\"@crates//crates:BUILD.pulp-0.21.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pulp-0.22.3\",\n sha256 = \"046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulp/0.22.3/download\"],\n strip_prefix = \"pulp-0.22.3\",\n build_file = Label(\"@crates//crates:BUILD.pulp-0.22.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pulp-wasm-simd-flag-0.1.1\",\n sha256 = \"1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulp-wasm-simd-flag/0.1.1/download\"],\n strip_prefix = \"pulp-wasm-simd-flag-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.pulp-wasm-simd-flag-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pxfm-0.1.30\",\n sha256 = \"d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pxfm/0.1.30/download\"],\n strip_prefix = \"pxfm-0.1.30\",\n build_file = Label(\"@crates//crates:BUILD.pxfm-0.1.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quanta-0.12.6\",\n sha256 = \"f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quanta/0.12.6/download\"],\n strip_prefix = \"quanta-0.12.6\",\n build_file = Label(\"@crates//crates:BUILD.quanta-0.12.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quick-error-2.0.1\",\n sha256 = \"a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quick-error/2.0.1/download\"],\n strip_prefix = \"quick-error-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.quick-error-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.47\",\n sha256 = \"1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.47/download\"],\n strip_prefix = \"quote-1.0.47\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-6.0.0\",\n sha256 = \"f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/6.0.0/download\"],\n strip_prefix = \"r-efi-6.0.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__radix_trie-0.3.0\",\n sha256 = \"3b4431027dcd37fc2a73ef740b5f233aa805897935b8bce0195e41bbf9a3289a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/radix_trie/0.3.0/download\"],\n strip_prefix = \"radix_trie-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.radix_trie-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand-0.10.2\",\n sha256 = \"c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.10.2/download\"],\n strip_prefix = \"rand-0.10.2\",\n build_file = Label(\"@crates//crates:BUILD.rand-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand-0.9.5\",\n sha256 = \"b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.9.5/download\"],\n strip_prefix = \"rand-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.rand-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_chacha-0.9.0\",\n sha256 = \"d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.9.0/download\"],\n strip_prefix = \"rand_chacha-0.9.0\",\n build_file = Label(\"@crates//crates:BUILD.rand_chacha-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.10.1\",\n sha256 = \"63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.10.1/download\"],\n strip_prefix = \"rand_core-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.9.5\",\n sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n strip_prefix = \"rand_core-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_distr-0.5.1\",\n sha256 = \"6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_distr/0.5.1/download\"],\n strip_prefix = \"rand_distr-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_distr-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__raw-cpuid-11.6.0\",\n sha256 = \"498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/raw-cpuid/11.6.0/download\"],\n strip_prefix = \"raw-cpuid-11.6.0\",\n build_file = Label(\"@crates//crates:BUILD.raw-cpuid-11.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-1.12.0\",\n sha256 = \"fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon/1.12.0/download\"],\n strip_prefix = \"rayon-1.12.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-1.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-cond-0.4.0\",\n sha256 = \"2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-cond/0.4.0/download\"],\n strip_prefix = \"rayon-cond-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-cond-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-core-1.13.0\",\n sha256 = \"22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-core/1.13.0/download\"],\n strip_prefix = \"rayon-core-1.13.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-core-1.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__reborrow-0.5.5\",\n sha256 = \"03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reborrow/0.5.5/download\"],\n strip_prefix = \"reborrow-0.5.5\",\n build_file = Label(\"@crates//crates:BUILD.reborrow-0.5.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__redox_syscall-0.5.18\",\n sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n strip_prefix = \"redox_syscall-0.5.18\",\n build_file = Label(\"@crates//crates:BUILD.redox_syscall-0.5.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__redox_users-0.5.2\",\n sha256 = \"a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_users/0.5.2/download\"],\n strip_prefix = \"redox_users-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.redox_users-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ref-cast-1.0.26\",\n sha256 = \"216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast/1.0.26/download\"],\n strip_prefix = \"ref-cast-1.0.26\",\n build_file = Label(\"@crates//crates:BUILD.ref-cast-1.0.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ref-cast-impl-1.0.26\",\n sha256 = \"2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast-impl/1.0.26/download\"],\n strip_prefix = \"ref-cast-impl-1.0.26\",\n build_file = Label(\"@crates//crates:BUILD.ref-cast-impl-1.0.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.13.1\",\n sha256 = \"f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.13.1/download\"],\n strip_prefix = \"regex-1.13.1\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.16\",\n sha256 = \"8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.16/download\"],\n strip_prefix = \"regex-automata-0.4.16\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.11\",\n sha256 = \"d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.11/download\"],\n strip_prefix = \"regex-syntax-0.8.11\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__reqwest-0.13.4\",\n sha256 = \"219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reqwest/0.13.4/download\"],\n strip_prefix = \"reqwest-0.13.4\",\n build_file = Label(\"@crates//crates:BUILD.reqwest-0.13.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ring-0.17.14\",\n sha256 = \"a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ring/0.17.14/download\"],\n strip_prefix = \"ring-0.17.14\",\n build_file = Label(\"@crates//crates:BUILD.ring-0.17.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rmcp-3.0.1\",\n sha256 = \"3797d226787327b35b0b6f9e878fe55f3af2bb4daf916c0411079885454042f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rmcp/3.0.1/download\"],\n strip_prefix = \"rmcp-3.0.1\",\n build_file = Label(\"@crates//crates:BUILD.rmcp-3.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rmcp-macros-3.0.1\",\n sha256 = \"a8f5bc0c6851a20cd627ef4b90defb79f39a261c467de52af5d38000d7979c52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rmcp-macros/3.0.1/download\"],\n strip_prefix = \"rmcp-macros-3.0.1\",\n build_file = Label(\"@crates//crates:BUILD.rmcp-macros-3.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustix-1.1.4\",\n sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n strip_prefix = \"rustix-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.rustix-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-0.23.43\",\n sha256 = \"0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls/0.23.43/download\"],\n strip_prefix = \"rustls-0.23.43\",\n build_file = Label(\"@crates//crates:BUILD.rustls-0.23.43.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-native-certs-0.8.4\",\n sha256 = \"dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-native-certs/0.8.4/download\"],\n strip_prefix = \"rustls-native-certs-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.rustls-native-certs-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-pki-types-1.15.1\",\n sha256 = \"2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pki-types/1.15.1/download\"],\n strip_prefix = \"rustls-pki-types-1.15.1\",\n build_file = Label(\"@crates//crates:BUILD.rustls-pki-types-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-platform-verifier-0.7.0\",\n sha256 = \"26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier/0.7.0/download\"],\n strip_prefix = \"rustls-platform-verifier-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.rustls-platform-verifier-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-platform-verifier-android-0.1.1\",\n sha256 = \"f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier-android/0.1.1/download\"],\n strip_prefix = \"rustls-platform-verifier-android-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.rustls-platform-verifier-android-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-webpki-0.103.13\",\n sha256 = \"61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-webpki/0.103.13/download\"],\n strip_prefix = \"rustls-webpki-0.103.13\",\n build_file = Label(\"@crates//crates:BUILD.rustls-webpki-0.103.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustversion-1.0.23\",\n sha256 = \"cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.23/download\"],\n strip_prefix = \"rustversion-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.rustversion-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustyline-18.0.1\",\n sha256 = \"53f6a737db68eb1a8ccff86b584b2fc13eca6a7bb6f78ebc7c529547e3ab9684\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustyline/18.0.1/download\"],\n strip_prefix = \"rustyline-18.0.1\",\n build_file = Label(\"@crates//crates:BUILD.rustyline-18.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.23\",\n sha256 = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.23/download\"],\n strip_prefix = \"ryu-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__safetensors-0.4.5\",\n sha256 = \"44560c11236a6130a46ce36c836a62936dc81ebf8c36a37947423571be0e55b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/safetensors/0.4.5/download\"],\n strip_prefix = \"safetensors-0.4.5\",\n build_file = Label(\"@crates//crates:BUILD.safetensors-0.4.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__safetensors-0.8.0\",\n sha256 = \"79b079b829cb27a1c3c374341345ed2e8b2c0c839034522cee576c140bd7f846\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/safetensors/0.8.0/download\"],\n strip_prefix = \"safetensors-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.safetensors-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__same-file-1.0.6\",\n sha256 = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/same-file/1.0.6/download\"],\n strip_prefix = \"same-file-1.0.6\",\n build_file = Label(\"@crates//crates:BUILD.same-file-1.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schannel-0.1.29\",\n sha256 = \"91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schannel/0.1.29/download\"],\n strip_prefix = \"schannel-0.1.29\",\n build_file = Label(\"@crates//crates:BUILD.schannel-0.1.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars-1.2.2\",\n sha256 = \"687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/1.2.2/download\"],\n strip_prefix = \"schemars-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.schemars-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars_derive-1.2.2\",\n sha256 = \"d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars_derive/1.2.2/download\"],\n strip_prefix = \"schemars_derive-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.schemars_derive-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-3.7.0\",\n sha256 = \"b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework/3.7.0/download\"],\n strip_prefix = \"security-framework-3.7.0\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-3.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-sys-2.17.0\",\n sha256 = \"6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework-sys/2.17.0/download\"],\n strip_prefix = \"security-framework-sys-2.17.0\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-sys-2.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crates//crates:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__seq-macro-0.3.6\",\n sha256 = \"1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/seq-macro/0.3.6/download\"],\n strip_prefix = \"seq-macro-0.3.6\",\n build_file = Label(\"@crates//crates:BUILD.seq-macro-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.229\",\n sha256 = \"4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.229/download\"],\n strip_prefix = \"serde-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.229\",\n sha256 = \"67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.229/download\"],\n strip_prefix = \"serde_core-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.229\",\n sha256 = \"e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.229/download\"],\n strip_prefix = \"serde_derive-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive_internals-0.30.0\",\n sha256 = \"f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive_internals/0.30.0/download\"],\n strip_prefix = \"serde_derive_internals-0.30.0\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive_internals-0.30.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.151\",\n sha256 = \"c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.151/download\"],\n strip_prefix = \"serde_json-1.0.151\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.151.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_path_to_error-0.1.20\",\n sha256 = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_path_to_error/0.1.20/download\"],\n strip_prefix = \"serde_path_to_error-0.1.20\",\n build_file = Label(\"@crates//crates:BUILD.serde_path_to_error-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_urlencoded-0.7.1\",\n sha256 = \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_urlencoded/0.7.1/download\"],\n strip_prefix = \"serde_urlencoded-0.7.1\",\n build_file = Label(\"@crates//crates:BUILD.serde_urlencoded-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_yaml_ng-0.10.0\",\n sha256 = \"7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml_ng/0.10.0/download\"],\n strip_prefix = \"serde_yaml_ng-0.10.0\",\n build_file = Label(\"@crates//crates:BUILD.serde_yaml_ng-0.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.11.0\",\n sha256 = \"446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.11.0/download\"],\n strip_prefix = \"sha2-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__shlex-2.0.1\",\n sha256 = \"f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/2.0.1/download\"],\n strip_prefix = \"shlex-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.shlex-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__signal-hook-registry-1.4.8\",\n sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n strip_prefix = \"signal-hook-registry-1.4.8\",\n build_file = Label(\"@crates//crates:BUILD.signal-hook-registry-1.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simd-adler32-0.3.10\",\n sha256 = \"3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simd-adler32/0.3.10/download\"],\n strip_prefix = \"simd-adler32-0.3.10\",\n build_file = Label(\"@crates//crates:BUILD.simd-adler32-0.3.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simd_cesu8-1.2.0\",\n sha256 = \"11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simd_cesu8/1.2.0/download\"],\n strip_prefix = \"simd_cesu8-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.simd_cesu8-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simdutf8-0.1.5\",\n sha256 = \"e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simdutf8/0.1.5/download\"],\n strip_prefix = \"simdutf8-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.simdutf8-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simplelog-0.12.2\",\n sha256 = \"16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simplelog/0.12.2/download\"],\n strip_prefix = \"simplelog-0.12.2\",\n build_file = Label(\"@crates//crates:BUILD.simplelog-0.12.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__slab-0.4.12\",\n sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n strip_prefix = \"slab-0.4.12\",\n build_file = Label(\"@crates//crates:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.15.2\",\n sha256 = \"8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.2/download\"],\n strip_prefix = \"smallvec-1.15.2\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.15.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.6.5\",\n sha256 = \"c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.5/download\"],\n strip_prefix = \"socket2-0.6.5\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.6.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__spinning_top-0.3.0\",\n sha256 = \"d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spinning_top/0.3.0/download\"],\n strip_prefix = \"spinning_top-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.spinning_top-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__spm_precompiled-0.1.4\",\n sha256 = \"5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spm_precompiled/0.1.4/download\"],\n strip_prefix = \"spm_precompiled-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.spm_precompiled-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__static_assertions-1.1.0\",\n sha256 = \"a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/static_assertions/1.1.0/download\"],\n strip_prefix = \"static_assertions-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.static_assertions-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__strsim-0.11.1\",\n sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n strip_prefix = \"strsim-0.11.1\",\n build_file = Label(\"@crates//crates:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__subtle-2.6.1\",\n sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n strip_prefix = \"subtle-2.6.1\",\n build_file = Label(\"@crates//crates:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.119\",\n sha256 = \"872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.119/download\"],\n strip_prefix = \"syn-2.0.119\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.119.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-3.0.3\",\n sha256 = \"53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/3.0.3/download\"],\n strip_prefix = \"syn-3.0.3\",\n build_file = Label(\"@crates//crates:BUILD.syn-3.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__synstructure-0.13.2\",\n sha256 = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.13.2/download\"],\n strip_prefix = \"synstructure-0.13.2\",\n build_file = Label(\"@crates//crates:BUILD.synstructure-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sysctl-0.6.0\",\n sha256 = \"01198a2debb237c62b6826ec7081082d951f46dbb64b0e8c7649a452230d1dfc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sysctl/0.6.0/download\"],\n strip_prefix = \"sysctl-0.6.0\",\n build_file = Label(\"@crates//crates:BUILD.sysctl-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tempfile-3.27.0\",\n sha256 = \"32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.27.0/download\"],\n strip_prefix = \"tempfile-3.27.0\",\n build_file = Label(\"@crates//crates:BUILD.tempfile-3.27.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__termcolor-1.4.1\",\n sha256 = \"06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/termcolor/1.4.1/download\"],\n strip_prefix = \"termcolor-1.4.1\",\n build_file = Label(\"@crates//crates:BUILD.termcolor-1.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-1.0.69\",\n sha256 = \"b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/1.0.69/download\"],\n strip_prefix = \"thiserror-1.0.69\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-2.0.19\",\n sha256 = \"09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.19/download\"],\n strip_prefix = \"thiserror-2.0.19\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-2.0.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-1.0.69\",\n sha256 = \"4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/1.0.69/download\"],\n strip_prefix = \"thiserror-impl-1.0.69\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-2.0.19\",\n sha256 = \"43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.19/download\"],\n strip_prefix = \"thiserror-impl-2.0.19\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-2.0.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thread_local-1.1.10\",\n sha256 = \"1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.10/download\"],\n strip_prefix = \"thread_local-1.1.10\",\n build_file = Label(\"@crates//crates:BUILD.thread_local-1.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tiff-0.11.3\",\n sha256 = \"b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tiff/0.11.3/download\"],\n strip_prefix = \"tiff-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.tiff-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-0.3.54\",\n sha256 = \"3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.54/download\"],\n strip_prefix = \"time-0.3.54\",\n build_file = Label(\"@crates//crates:BUILD.time-0.3.54.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-core-0.1.9\",\n sha256 = \"9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.9/download\"],\n strip_prefix = \"time-core-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.time-core-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-macros-0.2.32\",\n sha256 = \"7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.32/download\"],\n strip_prefix = \"time-macros-0.2.32\",\n build_file = Label(\"@crates//crates:BUILD.time-macros-0.2.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tinystr-0.8.3\",\n sha256 = \"c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.3/download\"],\n strip_prefix = \"tinystr-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.tinystr-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokenizers-0.22.2\",\n sha256 = \"b238e22d44a15349529690fb07bd645cf58149a1b1e44d6cb5bd1641ff1a6223\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokenizers/0.22.2/download\"],\n strip_prefix = \"tokenizers-0.22.2\",\n build_file = Label(\"@crates//crates:BUILD.tokenizers-0.22.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokenizers-0.23.1\",\n sha256 = \"44e5bea67576e04b6ff8564c5d9e09c2ef0cf476502245f2f120e497769d3112\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokenizers/0.23.1/download\"],\n strip_prefix = \"tokenizers-0.23.1\",\n build_file = Label(\"@crates//crates:BUILD.tokenizers-0.23.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-1.53.1\",\n sha256 = \"202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.53.1/download\"],\n strip_prefix = \"tokio-1.53.1\",\n build_file = Label(\"@crates//crates:BUILD.tokio-1.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-macros-2.7.2\",\n sha256 = \"78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.7.2/download\"],\n strip_prefix = \"tokio-macros-2.7.2\",\n build_file = Label(\"@crates//crates:BUILD.tokio-macros-2.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-rustls-0.26.4\",\n sha256 = \"1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-rustls/0.26.4/download\"],\n strip_prefix = \"tokio-rustls-0.26.4\",\n build_file = Label(\"@crates//crates:BUILD.tokio-rustls-0.26.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-stream-0.1.19\",\n sha256 = \"a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-stream/0.1.19/download\"],\n strip_prefix = \"tokio-stream-0.1.19\",\n build_file = Label(\"@crates//crates:BUILD.tokio-stream-0.1.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-util-0.7.19\",\n sha256 = \"494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.19/download\"],\n strip_prefix = \"tokio-util-0.7.19\",\n build_file = Label(\"@crates//crates:BUILD.tokio-util-0.7.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tonic-0.14.6\",\n sha256 = \"ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic/0.14.6/download\"],\n strip_prefix = \"tonic-0.14.6\",\n build_file = Label(\"@crates//crates:BUILD.tonic-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-0.5.3\",\n sha256 = \"ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.3/download\"],\n strip_prefix = \"tower-0.5.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-http-0.6.11\",\n sha256 = \"4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.6.11/download\"],\n strip_prefix = \"tower-http-0.6.11\",\n build_file = Label(\"@crates//crates:BUILD.tower-http-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-http-0.7.0\",\n sha256 = \"b11f75e912b0c2be01b63d8cf8057b8c3f97cf34abb3d431a3a4c8675498e233\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.7.0/download\"],\n strip_prefix = \"tower-http-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.tower-http-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower_governor-0.8.0\",\n sha256 = \"44de9b94d849d3c46e06a883d72d408c2de6403367b39df2b1c9d9e7b6736fe6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower_governor/0.8.0/download\"],\n strip_prefix = \"tower_governor-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.tower_governor-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-0.1.44\",\n sha256 = \"63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.44/download\"],\n strip_prefix = \"tracing-0.1.44\",\n build_file = Label(\"@crates//crates:BUILD.tracing-0.1.44.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-attributes-0.1.31\",\n sha256 = \"7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.31/download\"],\n strip_prefix = \"tracing-attributes-0.1.31\",\n build_file = Label(\"@crates//crates:BUILD.tracing-attributes-0.1.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-core-0.1.36\",\n sha256 = \"db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.36/download\"],\n strip_prefix = \"tracing-core-0.1.36\",\n build_file = Label(\"@crates//crates:BUILD.tracing-core-0.1.36.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-subscriber-0.3.23\",\n sha256 = \"cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.23/download\"],\n strip_prefix = \"tracing-subscriber-0.3.23\",\n build_file = Label(\"@crates//crates:BUILD.tracing-subscriber-0.3.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typed-path-0.12.3\",\n sha256 = \"8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typed-path/0.12.3/download\"],\n strip_prefix = \"typed-path-0.12.3\",\n build_file = Label(\"@crates//crates:BUILD.typed-path-0.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typenum-1.20.1\",\n sha256 = \"b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.1/download\"],\n strip_prefix = \"typenum-1.20.1\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.20.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ug-0.5.0\",\n sha256 = \"76b761acf8af3494640d826a8609e2265e19778fb43306c7f15379c78c9b05b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ug/0.5.0/download\"],\n strip_prefix = \"ug-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.ug-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ug-metal-0.5.0\",\n sha256 = \"9f7adf545a99a086d362efc739e7cf4317c18cbeda22706000fd434d70ea3d95\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ug-metal/0.5.0/download\"],\n strip_prefix = \"ug-metal-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.ug-metal-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicase-2.9.0\",\n sha256 = \"dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicase/2.9.0/download\"],\n strip_prefix = \"unicase-2.9.0\",\n build_file = Label(\"@crates//crates:BUILD.unicase-2.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-normalization-alignments-0.1.12\",\n sha256 = \"43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-normalization-alignments/0.1.12/download\"],\n strip_prefix = \"unicode-normalization-alignments-0.1.12\",\n build_file = Label(\"@crates//crates:BUILD.unicode-normalization-alignments-0.1.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-segmentation-1.13.3\",\n sha256 = \"c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-segmentation/1.13.3/download\"],\n strip_prefix = \"unicode-segmentation-1.13.3\",\n build_file = Label(\"@crates//crates:BUILD.unicode-segmentation-1.13.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-width-0.2.2\",\n sha256 = \"b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-width/0.2.2/download\"],\n strip_prefix = \"unicode-width-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.unicode-width-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode_categories-0.1.1\",\n sha256 = \"39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode_categories/0.1.1/download\"],\n strip_prefix = \"unicode_categories-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.unicode_categories-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unsafe-libyaml-0.2.11\",\n sha256 = \"673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unsafe-libyaml/0.2.11/download\"],\n strip_prefix = \"unsafe-libyaml-0.2.11\",\n build_file = Label(\"@crates//crates:BUILD.unsafe-libyaml-0.2.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__untrusted-0.9.0\",\n sha256 = \"8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/untrusted/0.9.0/download\"],\n strip_prefix = \"untrusted-0.9.0\",\n build_file = Label(\"@crates//crates:BUILD.untrusted-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__url-2.5.8\",\n sha256 = \"ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/url/2.5.8/download\"],\n strip_prefix = \"url-2.5.8\",\n build_file = Label(\"@crates//crates:BUILD.url-2.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8_iter-1.0.4\",\n sha256 = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8_iter/1.0.4/download\"],\n strip_prefix = \"utf8_iter-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__uuid-1.24.0\",\n sha256 = \"bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.24.0/download\"],\n strip_prefix = \"uuid-1.24.0\",\n build_file = Label(\"@crates//crates:BUILD.uuid-1.24.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__walkdir-2.5.0\",\n sha256 = \"29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/walkdir/2.5.0/download\"],\n strip_prefix = \"walkdir-2.5.0\",\n build_file = Label(\"@crates//crates:BUILD.walkdir-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@crates//crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasip2-1.0.4-wasi-0.2.12\",\n sha256 = \"b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.4+wasi-0.2.12/download\"],\n strip_prefix = \"wasip2-1.0.4+wasi-0.2.12\",\n build_file = Label(\"@crates//crates:BUILD.wasip2-1.0.4+wasi-0.2.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-0.2.126\",\n sha256 = \"4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-futures-0.4.76\",\n sha256 = \"c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-futures/0.4.76/download\"],\n strip_prefix = \"wasm-bindgen-futures-0.4.76\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-futures-0.4.76.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-0.2.126\",\n sha256 = \"167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-support-0.2.126\",\n sha256 = \"f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-support-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-shared-0.2.126\",\n sha256 = \"dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-shared-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__web-sys-0.3.103\",\n sha256 = \"8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-sys/0.3.103/download\"],\n strip_prefix = \"web-sys-0.3.103\",\n build_file = Label(\"@crates//crates:BUILD.web-sys-0.3.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__web-time-1.1.0\",\n sha256 = \"5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-time/1.1.0/download\"],\n strip_prefix = \"web-time-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__webpki-root-certs-1.0.9\",\n sha256 = \"b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/webpki-root-certs/1.0.9/download\"],\n strip_prefix = \"webpki-root-certs-1.0.9\",\n build_file = Label(\"@crates//crates:BUILD.webpki-root-certs-1.0.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__weezl-0.1.12\",\n sha256 = \"a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/weezl/0.1.12/download\"],\n strip_prefix = \"weezl-0.1.12\",\n build_file = Label(\"@crates//crates:BUILD.weezl-0.1.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-0.3.9\",\n sha256 = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi/0.3.9/download\"],\n strip_prefix = \"winapi-0.3.9\",\n build_file = Label(\"@crates//crates:BUILD.winapi-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-i686-pc-windows-gnu-0.4.0\",\n sha256 = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-i686-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-util-0.1.11\",\n sha256 = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-util/0.1.11/download\"],\n strip_prefix = \"winapi-util-0.1.11\",\n build_file = Label(\"@crates//crates:BUILD.winapi-util-0.1.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-x86_64-pc-windows-gnu-0.4.0\",\n sha256 = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-x86_64-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-0.62.2\",\n sha256 = \"527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows/0.62.2/download\"],\n strip_prefix = \"windows-0.62.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-0.62.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-collections-0.3.2\",\n sha256 = \"23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-collections/0.3.2/download\"],\n strip_prefix = \"windows-collections-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-collections-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-core-0.62.2\",\n sha256 = \"b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-core/0.62.2/download\"],\n strip_prefix = \"windows-core-0.62.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-core-0.62.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-future-0.3.2\",\n sha256 = \"e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-future/0.3.2/download\"],\n strip_prefix = \"windows-future-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-future-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-implement-0.60.2\",\n sha256 = \"053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-implement/0.60.2/download\"],\n strip_prefix = \"windows-implement-0.60.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-implement-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-interface-0.59.3\",\n sha256 = \"3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-interface/0.59.3/download\"],\n strip_prefix = \"windows-interface-0.59.3\",\n build_file = Label(\"@crates//crates:BUILD.windows-interface-0.59.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-numerics-0.3.1\",\n sha256 = \"6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-numerics/0.3.1/download\"],\n strip_prefix = \"windows-numerics-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-numerics-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-result-0.4.1\",\n sha256 = \"7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-result/0.4.1/download\"],\n strip_prefix = \"windows-result-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-result-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-strings-0.5.1\",\n sha256 = \"7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-strings/0.5.1/download\"],\n strip_prefix = \"windows-strings-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-strings-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-threading-0.2.1\",\n sha256 = \"3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-threading/0.2.1/download\"],\n strip_prefix = \"windows-threading-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-threading-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wit-bindgen-0.57.1\",\n sha256 = \"1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.57.1/download\"],\n strip_prefix = \"wit-bindgen-0.57.1\",\n build_file = Label(\"@crates//crates:BUILD.wit-bindgen-0.57.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__writeable-0.6.3\",\n sha256 = \"1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.3/download\"],\n strip_prefix = \"writeable-0.6.3\",\n build_file = Label(\"@crates//crates:BUILD.writeable-0.6.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.7.5\",\n sha256 = \"120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.7.5/download\"],\n strip_prefix = \"yoke-0.7.5\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.8.3\",\n sha256 = \"709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.3/download\"],\n strip_prefix = \"yoke-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.7.5\",\n sha256 = \"2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.7.5/download\"],\n strip_prefix = \"yoke-derive-0.7.5\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.8.2\",\n sha256 = \"de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.2/download\"],\n strip_prefix = \"yoke-derive-0.8.2\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.8.55\",\n sha256 = \"b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.55/download\"],\n strip_prefix = \"zerocopy-0.8.55\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.8.55.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.8.55\",\n sha256 = \"0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.55/download\"],\n strip_prefix = \"zerocopy-derive-0.8.55\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.8.55.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-0.1.8\",\n sha256 = \"0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.8/download\"],\n strip_prefix = \"zerofrom-0.1.8\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-derive-0.1.7\",\n sha256 = \"11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.7/download\"],\n strip_prefix = \"zerofrom-derive-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-derive-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zeroize-1.9.0\",\n sha256 = \"e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.9.0/download\"],\n strip_prefix = \"zeroize-1.9.0\",\n build_file = Label(\"@crates//crates:BUILD.zeroize-1.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerotrie-0.2.4\",\n sha256 = \"0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.4/download\"],\n strip_prefix = \"zerotrie-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.zerotrie-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-0.11.6\",\n sha256 = \"90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.6/download\"],\n strip_prefix = \"zerovec-0.11.6\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-0.11.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-derive-0.11.3\",\n sha256 = \"625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.3/download\"],\n strip_prefix = \"zerovec-derive-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-derive-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zip-8.6.0\",\n sha256 = \"2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zip/8.6.0/download\"],\n strip_prefix = \"zip-8.6.0\",\n build_file = Label(\"@crates//crates:BUILD.zip-8.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zmij-1.0.23\",\n sha256 = \"29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.23/download\"],\n strip_prefix = \"zmij-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.zmij-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zstd-0.13.3\",\n sha256 = \"e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zstd/0.13.3/download\"],\n strip_prefix = \"zstd-0.13.3\",\n build_file = Label(\"@crates//crates:BUILD.zstd-0.13.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zstd-safe-7.2.4\",\n sha256 = \"8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zstd-safe/7.2.4/download\"],\n strip_prefix = \"zstd-safe-7.2.4\",\n build_file = Label(\"@crates//crates:BUILD.zstd-safe-7.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zstd-sys-2.0.16-zstd.1.5.7\",\n sha256 = \"91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zstd-sys/2.0.16+zstd.1.5.7/download\"],\n strip_prefix = \"zstd-sys-2.0.16+zstd.1.5.7\",\n build_file = Label(\"@crates//crates:BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zune-core-0.5.1\",\n sha256 = \"cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zune-core/0.5.1/download\"],\n strip_prefix = \"zune-core-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.zune-core-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zune-jpeg-0.5.15\",\n sha256 = \"27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zune-jpeg/0.5.15/download\"],\n strip_prefix = \"zune-jpeg-0.5.15\",\n build_file = Label(\"@crates//crates:BUILD.zune-jpeg-0.5.15.bazel\"),\n )\n\n return [\n struct(repo = \"crates\", is_dev_dep = False),\n struct(repo=\"crates__axum-0.8.9\", is_dev_dep = False),\n struct(repo=\"crates__base64-0.23.0\", is_dev_dep = False),\n struct(repo=\"crates__base64ct-1.8.3\", is_dev_dep = False),\n struct(repo=\"crates__candle-core-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__candle-nn-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__chrono-0.4.45\", is_dev_dep = False),\n struct(repo=\"crates__clap-4.6.4\", is_dev_dep = False),\n struct(repo=\"crates__dirs-6.0.0\", is_dev_dep = False),\n struct(repo=\"crates__half-2.7.1\", is_dev_dep = False),\n struct(repo=\"crates__image-0.25.10\", is_dev_dep = False),\n struct(repo=\"crates__log-0.4.33\", is_dev_dep = False),\n struct(repo=\"crates__opentelemetry-0.32.0\", is_dev_dep = False),\n struct(repo=\"crates__opentelemetry-otlp-0.32.0\", is_dev_dep = False),\n struct(repo=\"crates__opentelemetry_sdk-0.32.1\", is_dev_dep = False),\n struct(repo=\"crates__reqwest-0.13.4\", is_dev_dep = False),\n struct(repo=\"crates__rmcp-3.0.1\", is_dev_dep = False),\n struct(repo=\"crates__rustls-0.23.43\", is_dev_dep = False),\n struct(repo=\"crates__rustyline-18.0.1\", is_dev_dep = False),\n struct(repo=\"crates__safetensors-0.8.0\", is_dev_dep = False),\n struct(repo=\"crates__schemars-1.2.2\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.229\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.151\", is_dev_dep = False),\n struct(repo=\"crates__serde_yaml_ng-0.10.0\", is_dev_dep = False),\n struct(repo=\"crates__sha2-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__simplelog-0.12.2\", is_dev_dep = False),\n struct(repo=\"crates__tokenizers-0.23.1\", is_dev_dep = False),\n struct(repo=\"crates__tokio-1.53.1\", is_dev_dep = False),\n struct(repo=\"crates__tower-http-0.7.0\", is_dev_dep = False),\n struct(repo=\"crates__tower_governor-0.8.0\", is_dev_dep = False),\n struct(repo=\"crates__tracing-0.1.44\", is_dev_dep = False),\n struct(repo=\"crates__tracing-subscriber-0.3.23\", is_dev_dep = False),\n struct(repo=\"crates__uuid-1.24.0\", is_dev_dep = False),\n struct(repo=\"crates__webpki-root-certs-1.0.9\", is_dev_dep = False),\n struct(repo = \"crates__http-body-util-0.1.4\", is_dev_dep = True),\n struct(repo = \"crates__tempfile-3.27.0\", is_dev_dep = True),\n struct(repo = \"crates__tower-0.5.3\", is_dev_dep = True),\n ]\n", + "crates.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_edition](#crate_edition)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe:defs.bzl\", \"crates_vendor_remote_repository\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef crate_edition(package_name = None):\n \"\"\"Finds the Rust edition for the package where this macro is called.\n\n Args:\n package_name (str, optional): The package name whose edition should be\n looked up. Defaults to `native.package_name()` when unset.\n\n Returns:\n str: The Rust edition declared by the package's Cargo.toml file.\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n if package_name not in _CRATE_EDITIONS:\n fail(\"Tried to get crate_edition for package \" + package_name + \" but that package had no Cargo.toml file\")\n\n return _CRATE_EDITIONS[package_name]\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list.\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS, ALIASES, AND EDITIONS\n###############################################################################\n\n_CRATE_EDITIONS = {\n \"domains/graphics/libs/imagine_rust\": \"2024\",\n \"domains/ai/apps/impact_mcp\": \"2024\",\n \"domains/ai/libs/microgpt\": \"2024\",\n \"domains/ai/apps/microgpt_cli\": \"2024\",\n \"domains/ai/apis/microgpt_serve\": \"2024\",\n \"domains/games/apis/mithril\": \"2024\",\n \"domains/graphics/apis/posterize\": \"2024\",\n \"domains/platform/libs/server_pal\": \"2024\",\n \"domains/games/libs/wordchains\": \"2024\",\n \"domains/games/apps/wordchains\": \"2024\",\n}\n\n_NORMAL_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n _COMMON_CONDITION: {\n \"image\": Label(\"@crates//image-0.25.10\"),\n },\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n \"chrono\": Label(\"@crates//chrono-0.4.45\"),\n \"clap\": Label(\"@crates//clap-4.6.4\"),\n \"dirs\": Label(\"@crates//dirs-6.0.0\"),\n \"reqwest\": Label(\"@crates//reqwest-0.13.4\"),\n \"rmcp\": Label(\"@crates//rmcp-3.0.1\"),\n \"schemars\": Label(\"@crates//schemars-1.2.2\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"serde_yaml_ng\": Label(\"@crates//serde_yaml_ng-0.10.0\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n \"uuid\": Label(\"@crates//uuid-1.24.0\"),\n },\n },\n \"domains/ai/libs/microgpt\": {\n _COMMON_CONDITION: {\n \"candle-core\": Label(\"@crates//candle-core-0.11.0\"),\n \"candle-nn\": Label(\"@crates//candle-nn-0.11.0\"),\n \"half\": Label(\"@crates//half-2.7.1\"),\n \"safetensors\": Label(\"@crates//safetensors-0.8.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tokenizers\": Label(\"@crates//tokenizers-0.23.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/ai/apps/microgpt_cli\": {\n _COMMON_CONDITION: {\n \"clap\": Label(\"@crates//clap-4.6.4\"),\n \"rustyline\": Label(\"@crates//rustyline-18.0.1\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n },\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"opentelemetry\": Label(\"@crates//opentelemetry-0.32.0\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/games/apis/mithril\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"base64\": Label(\"@crates//base64-0.23.0\"),\n \"image\": Label(\"@crates//image-0.25.10\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n \"axum\": Label(\"@crates//axum-0.8.9\"),\n \"opentelemetry\": Label(\"@crates//opentelemetry-0.32.0\"),\n \"opentelemetry-otlp\": Label(\"@crates//opentelemetry-otlp-0.32.0\"),\n \"opentelemetry_sdk\": Label(\"@crates//opentelemetry_sdk-0.32.1\"),\n \"reqwest\": Label(\"@crates//reqwest-0.13.4\"),\n \"rustls\": Label(\"@crates//rustls-0.23.43\"),\n \"tokio\": Label(\"@crates//tokio-1.53.1\"),\n \"tower-http\": Label(\"@crates//tower-http-0.7.0\"),\n \"tower_governor\": Label(\"@crates//tower_governor-0.8.0\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crates//tracing-subscriber-0.3.23\"),\n \"webpki-root-certs\": Label(\"@crates//webpki-root-certs-1.0.9\"),\n },\n },\n \"domains/games/libs/wordchains\": {\n _COMMON_CONDITION: {\n \"base64ct\": Label(\"@crates//base64ct-1.8.3\"),\n \"serde\": Label(\"@crates//serde-1.0.229\"),\n \"sha2\": Label(\"@crates//sha2-0.11.0\"),\n \"tracing\": Label(\"@crates//tracing-0.1.44\"),\n },\n },\n \"domains/games/apps/wordchains\": {\n _COMMON_CONDITION: {\n \"clap\": Label(\"@crates//clap-4.6.4\"),\n \"log\": Label(\"@crates//log-0.4.33\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"simplelog\": Label(\"@crates//simplelog-0.12.2\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/libs/microgpt\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/apps/microgpt_cli\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apis/mithril\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/libs/wordchains\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apps/wordchains\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n \"tempfile\": Label(\"@crates//tempfile-3.27.0\"),\n },\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n \"http-body-util\": Label(\"@crates//http-body-util-0.1.4\"),\n \"opentelemetry_sdk\": Label(\"@crates//opentelemetry_sdk-0.32.1\"),\n \"tower\": Label(\"@crates//tower-0.5.3\"),\n },\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n \"http-body-util\": Label(\"@crates//http-body-util-0.1.4\"),\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tower\": Label(\"@crates//tower-0.5.3\"),\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n \"serde_json\": Label(\"@crates//serde_json-1.0.151\"),\n \"tower\": Label(\"@crates//tower-0.5.3\"),\n },\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/platform/libs/server_pal\": {\n _COMMON_CONDITION: {\n },\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"domains/graphics/libs/imagine_rust\": {\n },\n \"domains/ai/apps/impact_mcp\": {\n },\n \"domains/ai/libs/microgpt\": {\n },\n \"domains/ai/apps/microgpt_cli\": {\n },\n \"domains/ai/apis/microgpt_serve\": {\n },\n \"domains/games/apis/mithril\": {\n },\n \"domains/graphics/apis/posterize\": {\n },\n \"domains/platform/libs/server_pal\": {\n },\n \"domains/games/libs/wordchains\": {\n },\n \"domains/games/apps/wordchains\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\": [],\n \"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"android\\\"))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", not(target_os = \\\"wasi\\\")))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(unix, not(target_os = \\\"android\\\"), not(target_vendor = \\\"apple\\\"), not(target_arch = \\\"wasm32\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(unix, not(target_os = \\\"macos\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_arch = \\\"x86\\\", target_arch = \\\"x86_64\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\", target_os = \\\"freebsd\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(any(target_os = \\\"windows\\\", target_arch = \\\"wasm32\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_arch = \\\"wasm32\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_has_atomic = \\\"64\\\"))\": [],\n \"cfg(not(windows))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_arch = \\\"spirv\\\")\": [],\n \"cfg(target_arch = \\\"wasm32\\\")\": [],\n \"cfg(target_arch = \\\"x86\\\")\": [],\n \"cfg(target_arch = \\\"x86_64\\\")\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(target_os = \\\"android\\\")\": [],\n \"cfg(target_os = \\\"haiku\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"redox\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(target_os = \\\"windows\\\")\": [],\n \"cfg(target_vendor = \\\"apple\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"i686-pc-windows-gnu\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-gnu\": [],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n crates_vendor_remote_repository,\n name = \"crates\",\n # Lean interface: just point at `crates.bzl`; the repo rule\n # derives the sibling `BUILD.bazel` and `defs.bzl`.\n crates_module = Label(\"@crates//crates:crates.bzl\"),\n )\n maybe(\n http_archive,\n name = \"crates__adler2-2.0.1\",\n sha256 = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/adler2/2.0.1/download\"],\n strip_prefix = \"adler2-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.adler2-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ahash-0.8.12\",\n sha256 = \"5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ahash/0.8.12/download\"],\n strip_prefix = \"ahash-0.8.12\",\n build_file = Label(\"@crates//crates:BUILD.ahash-0.8.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__alloc-no-stdlib-2.0.4\",\n sha256 = \"cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/alloc-no-stdlib/2.0.4/download\"],\n strip_prefix = \"alloc-no-stdlib-2.0.4\",\n build_file = Label(\"@crates//crates:BUILD.alloc-no-stdlib-2.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__alloc-stdlib-0.2.4\",\n sha256 = \"0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/alloc-stdlib/0.2.4/download\"],\n strip_prefix = \"alloc-stdlib-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.alloc-stdlib-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__allocator-api2-0.2.21\",\n sha256 = \"683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/allocator-api2/0.2.21/download\"],\n strip_prefix = \"allocator-api2-0.2.21\",\n build_file = Label(\"@crates//crates:BUILD.allocator-api2-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__android_system_properties-0.1.5\",\n sha256 = \"819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/android_system_properties/0.1.5/download\"],\n strip_prefix = \"android_system_properties-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.android_system_properties-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anyhow-1.0.104\",\n sha256 = \"330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.104/download\"],\n strip_prefix = \"anyhow-1.0.104\",\n build_file = Label(\"@crates//crates:BUILD.anyhow-1.0.104.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__async-compression-0.4.43\",\n sha256 = \"3976abdc8fe7d1133d43d304afd42abdf5bc3e1319d263d223bde07b5efc4be8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-compression/0.4.43/download\"],\n strip_prefix = \"async-compression-0.4.43\",\n build_file = Label(\"@crates//crates:BUILD.async-compression-0.4.43.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__async-trait-0.1.91\",\n sha256 = \"ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.91/download\"],\n strip_prefix = \"async-trait-0.1.91\",\n build_file = Label(\"@crates//crates:BUILD.async-trait-0.1.91.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@crates//crates:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__autocfg-1.5.1\",\n sha256 = \"f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/autocfg/1.5.1/download\"],\n strip_prefix = \"autocfg-1.5.1\",\n build_file = Label(\"@crates//crates:BUILD.autocfg-1.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-0.8.9\",\n sha256 = \"31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.8.9/download\"],\n strip_prefix = \"axum-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.axum-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-core-0.5.6\",\n sha256 = \"08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.5.6/download\"],\n strip_prefix = \"axum-core-0.5.6\",\n build_file = Label(\"@crates//crates:BUILD.axum-core-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.13.1\",\n sha256 = \"9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.13.1/download\"],\n strip_prefix = \"base64-0.13.1\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.22.1\",\n sha256 = \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.22.1/download\"],\n strip_prefix = \"base64-0.22.1\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.23.0\",\n sha256 = \"b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.23.0/download\"],\n strip_prefix = \"base64-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64ct-1.8.3\",\n sha256 = \"2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64ct/1.8.3/download\"],\n strip_prefix = \"base64ct-1.8.3\",\n build_file = Label(\"@crates//crates:BUILD.base64ct-1.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bit-set-0.8.0\",\n sha256 = \"08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-set/0.8.0/download\"],\n strip_prefix = \"bit-set-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.bit-set-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bit-vec-0.8.0\",\n sha256 = \"5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-vec/0.8.0/download\"],\n strip_prefix = \"bit-vec-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.bit-vec-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-1.3.2\",\n sha256 = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/1.3.2/download\"],\n strip_prefix = \"bitflags-1.3.2\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-1.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.13.1\",\n sha256 = \"b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.13.1/download\"],\n strip_prefix = \"bitflags-2.13.1\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-0.1.6\",\n sha256 = \"0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block/0.1.6/download\"],\n strip_prefix = \"block-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.block-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.12.1\",\n sha256 = \"d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.12.1/download\"],\n strip_prefix = \"block-buffer-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block2-0.6.2\",\n sha256 = \"cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block2/0.6.2/download\"],\n strip_prefix = \"block2-0.6.2\",\n build_file = Label(\"@crates//crates:BUILD.block2-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__brotli-8.0.4\",\n sha256 = \"5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/brotli/8.0.4/download\"],\n strip_prefix = \"brotli-8.0.4\",\n build_file = Label(\"@crates//crates:BUILD.brotli-8.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__brotli-decompressor-5.0.3\",\n sha256 = \"3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/brotli-decompressor/5.0.3/download\"],\n strip_prefix = \"brotli-decompressor-5.0.3\",\n build_file = Label(\"@crates//crates:BUILD.brotli-decompressor-5.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bumpalo-3.20.3\",\n sha256 = \"72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.20.3/download\"],\n strip_prefix = \"bumpalo-3.20.3\",\n build_file = Label(\"@crates//crates:BUILD.bumpalo-3.20.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytemuck-1.25.2\",\n sha256 = \"95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytemuck/1.25.2/download\"],\n strip_prefix = \"bytemuck-1.25.2\",\n build_file = Label(\"@crates//crates:BUILD.bytemuck-1.25.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytemuck_derive-1.11.0\",\n sha256 = \"f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytemuck_derive/1.11.0/download\"],\n strip_prefix = \"bytemuck_derive-1.11.0\",\n build_file = Label(\"@crates//crates:BUILD.bytemuck_derive-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__byteorder-1.5.0\",\n sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n strip_prefix = \"byteorder-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.byteorder-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__byteorder-lite-0.1.0\",\n sha256 = \"8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/byteorder-lite/0.1.0/download\"],\n strip_prefix = \"byteorder-lite-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.byteorder-lite-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytes-1.12.1\",\n sha256 = \"fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.12.1/download\"],\n strip_prefix = \"bytes-1.12.1\",\n build_file = Label(\"@crates//crates:BUILD.bytes-1.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-core-0.11.0\",\n sha256 = \"5ecb245093b0f791b89d3420c3df9c6d49c60ab63ba54db896bf8a3baf486706\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-core/0.11.0/download\"],\n strip_prefix = \"candle-core-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-core-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-metal-kernels-0.11.0\",\n sha256 = \"242e83c6acf639bb273c929d73c67a882bb4dd08a140f121096e19ba2f213d3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-metal-kernels/0.11.0/download\"],\n strip_prefix = \"candle-metal-kernels-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-metal-kernels-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-nn-0.11.0\",\n sha256 = \"eaa10b6ccc365b33210ce404fbf45e60d3e0bdac1004463cf1052e6ee1c1739a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-nn/0.11.0/download\"],\n strip_prefix = \"candle-nn-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-nn-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__candle-ug-0.11.0\",\n sha256 = \"257411c33abf7d898a31ac20d80813dfe96ff09e23a73039e22ab293aea9b871\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/candle-ug/0.11.0/download\"],\n strip_prefix = \"candle-ug-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.candle-ug-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__castaway-0.2.4\",\n sha256 = \"dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/castaway/0.2.4/download\"],\n strip_prefix = \"castaway-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.castaway-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cc-1.4.0\",\n sha256 = \"5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.4.0/download\"],\n strip_prefix = \"cc-1.4.0\",\n build_file = Label(\"@crates//crates:BUILD.cc-1.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg_aliases-0.2.2\",\n sha256 = \"f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg_aliases/0.2.2/download\"],\n strip_prefix = \"cfg_aliases-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.cfg_aliases-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__chacha20-0.10.1\",\n sha256 = \"d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chacha20/0.10.1/download\"],\n strip_prefix = \"chacha20-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.chacha20-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__chrono-0.4.45\",\n sha256 = \"1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chrono/0.4.45/download\"],\n strip_prefix = \"chrono-0.4.45\",\n build_file = Label(\"@crates//crates:BUILD.chrono-0.4.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.6.4\",\n sha256 = \"d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.4/download\"],\n strip_prefix = \"clap-4.6.4\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.6.2\",\n sha256 = \"f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.2/download\"],\n strip_prefix = \"clap_builder-4.6.2\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_derive-4.6.4\",\n sha256 = \"d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.4/download\"],\n strip_prefix = \"clap_derive-4.6.4\",\n build_file = Label(\"@crates//crates:BUILD.clap_derive-4.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-1.1.0\",\n sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n strip_prefix = \"clap_lex-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clipboard-win-5.4.1\",\n sha256 = \"bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clipboard-win/5.4.1/download\"],\n strip_prefix = \"clipboard-win-5.4.1\",\n build_file = Label(\"@crates//crates:BUILD.clipboard-win-5.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__color_quant-1.1.0\",\n sha256 = \"3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/color_quant/1.1.0/download\"],\n strip_prefix = \"color_quant-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.color_quant-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colorchoice-1.0.5\",\n sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n strip_prefix = \"colorchoice-1.0.5\",\n build_file = Label(\"@crates//crates:BUILD.colorchoice-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__combine-4.6.7\",\n sha256 = \"ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/combine/4.6.7/download\"],\n strip_prefix = \"combine-4.6.7\",\n build_file = Label(\"@crates//crates:BUILD.combine-4.6.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__compact_str-0.9.1\",\n sha256 = \"9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/compact_str/0.9.1/download\"],\n strip_prefix = \"compact_str-0.9.1\",\n build_file = Label(\"@crates//crates:BUILD.compact_str-0.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__compression-codecs-0.4.38\",\n sha256 = \"ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/compression-codecs/0.4.38/download\"],\n strip_prefix = \"compression-codecs-0.4.38\",\n build_file = Label(\"@crates//crates:BUILD.compression-codecs-0.4.38.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__compression-core-0.4.32\",\n sha256 = \"cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/compression-core/0.4.32/download\"],\n strip_prefix = \"compression-core-0.4.32\",\n build_file = Label(\"@crates//crates:BUILD.compression-core-0.4.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__const-oid-0.10.2\",\n sha256 = \"a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/const-oid/0.10.2/download\"],\n strip_prefix = \"const-oid-0.10.2\",\n build_file = Label(\"@crates//crates:BUILD.const-oid-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-0.10.1\",\n sha256 = \"b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.10.1/download\"],\n strip_prefix = \"core-foundation-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-0.9.4\",\n sha256 = \"91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.9.4/download\"],\n strip_prefix = \"core-foundation-0.9.4\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-sys-0.8.7\",\n sha256 = \"773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation-sys/0.8.7/download\"],\n strip_prefix = \"core-foundation-sys-0.8.7\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-graphics-types-0.1.3\",\n sha256 = \"45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-graphics-types/0.1.3/download\"],\n strip_prefix = \"core-graphics-types-0.1.3\",\n build_file = Label(\"@crates//crates:BUILD.core-graphics-types-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.3.0\",\n sha256 = \"8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.3.0/download\"],\n strip_prefix = \"cpufeatures-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crc32fast-1.5.0\",\n sha256 = \"9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crc32fast/1.5.0/download\"],\n strip_prefix = \"crc32fast-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.crc32fast-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-deque-0.8.7\",\n sha256 = \"5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-deque/0.8.7/download\"],\n strip_prefix = \"crossbeam-deque-0.8.7\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-deque-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-epoch-0.9.20\",\n sha256 = \"2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-epoch/0.9.20/download\"],\n strip_prefix = \"crossbeam-epoch-0.9.20\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-epoch-0.9.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-utils-0.8.22\",\n sha256 = \"61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-utils/0.8.22/download\"],\n strip_prefix = \"crossbeam-utils-0.8.22\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-utils-0.8.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crunchy-0.2.4\",\n sha256 = \"460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crunchy/0.2.4/download\"],\n strip_prefix = \"crunchy-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.2.2\",\n sha256 = \"ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.2.2/download\"],\n strip_prefix = \"crypto-common-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__daachorse-1.0.1\",\n sha256 = \"6f55d7153ba3b507595872a3874803f07a8a81d1e888abed8e5db7da0597d6e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/daachorse/1.0.1/download\"],\n strip_prefix = \"daachorse-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.daachorse-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling-0.20.11\",\n sha256 = \"fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling/0.20.11/download\"],\n strip_prefix = \"darling-0.20.11\",\n build_file = Label(\"@crates//crates:BUILD.darling-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling-0.23.0\",\n sha256 = \"25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling/0.23.0/download\"],\n strip_prefix = \"darling-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.darling-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_core-0.20.11\",\n sha256 = \"0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_core/0.20.11/download\"],\n strip_prefix = \"darling_core-0.20.11\",\n build_file = Label(\"@crates//crates:BUILD.darling_core-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_core-0.23.0\",\n sha256 = \"9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_core/0.23.0/download\"],\n strip_prefix = \"darling_core-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.darling_core-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_macro-0.20.11\",\n sha256 = \"fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_macro/0.20.11/download\"],\n strip_prefix = \"darling_macro-0.20.11\",\n build_file = Label(\"@crates//crates:BUILD.darling_macro-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_macro-0.23.0\",\n sha256 = \"ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_macro/0.23.0/download\"],\n strip_prefix = \"darling_macro-0.23.0\",\n build_file = Label(\"@crates//crates:BUILD.darling_macro-0.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dary_heap-0.3.9\",\n sha256 = \"8b1e3a325bc115f096c8b77bbf027a7c2592230e70be2d985be950d3d5e60ebe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dary_heap/0.3.9/download\"],\n strip_prefix = \"dary_heap-0.3.9\",\n build_file = Label(\"@crates//crates:BUILD.dary_heap-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dashmap-6.2.1\",\n sha256 = \"e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dashmap/6.2.1/download\"],\n strip_prefix = \"dashmap-6.2.1\",\n build_file = Label(\"@crates//crates:BUILD.dashmap-6.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__deranged-0.5.8\",\n sha256 = \"7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.5.8/download\"],\n strip_prefix = \"deranged-0.5.8\",\n build_file = Label(\"@crates//crates:BUILD.deranged-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder-0.20.2\",\n sha256 = \"507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder/0.20.2/download\"],\n strip_prefix = \"derive_builder-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder_core-0.20.2\",\n sha256 = \"2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder_core/0.20.2/download\"],\n strip_prefix = \"derive_builder_core-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder_core-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder_macro-0.20.2\",\n sha256 = \"ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder_macro/0.20.2/download\"],\n strip_prefix = \"derive_builder_macro-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder_macro-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.11.3\",\n sha256 = \"f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.11.3/download\"],\n strip_prefix = \"digest-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dirs-6.0.0\",\n sha256 = \"c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dirs/6.0.0/download\"],\n strip_prefix = \"dirs-6.0.0\",\n build_file = Label(\"@crates//crates:BUILD.dirs-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dirs-sys-0.5.0\",\n sha256 = \"e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dirs-sys/0.5.0/download\"],\n strip_prefix = \"dirs-sys-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.dirs-sys-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dispatch2-0.3.1\",\n sha256 = \"1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dispatch2/0.3.1/download\"],\n strip_prefix = \"dispatch2-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.dispatch2-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__displaydoc-0.2.7\",\n sha256 = \"c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.7/download\"],\n strip_prefix = \"displaydoc-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.displaydoc-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-clone-1.0.20\",\n sha256 = \"d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-clone/1.0.20/download\"],\n strip_prefix = \"dyn-clone-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-stack-0.13.2\",\n sha256 = \"1c4713e43e2886ba72b8271aa66c93d722116acf7a75555cce11dcde84388fe8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-stack/0.13.2/download\"],\n strip_prefix = \"dyn-stack-0.13.2\",\n build_file = Label(\"@crates//crates:BUILD.dyn-stack-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-stack-macros-0.1.3\",\n sha256 = \"e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-stack-macros/0.1.3/download\"],\n strip_prefix = \"dyn-stack-macros-0.1.3\",\n build_file = Label(\"@crates//crates:BUILD.dyn-stack-macros-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.17.0\",\n sha256 = \"9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.17.0/download\"],\n strip_prefix = \"either-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__endian-type-0.2.0\",\n sha256 = \"869b0adbda23651a9c5c0c3d270aac9fcb52e8622a8f2b17e57802d7791962f2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/endian-type/0.2.0/download\"],\n strip_prefix = \"endian-type-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.endian-type-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__enum-as-inner-0.6.1\",\n sha256 = \"a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-as-inner/0.6.1/download\"],\n strip_prefix = \"enum-as-inner-0.6.1\",\n build_file = Label(\"@crates//crates:BUILD.enum-as-inner-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crates//crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__error-code-3.3.2\",\n sha256 = \"dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/error-code/3.3.2/download\"],\n strip_prefix = \"error-code-3.3.2\",\n build_file = Label(\"@crates//crates:BUILD.error-code-3.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__esaxx-rs-0.1.10\",\n sha256 = \"d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/esaxx-rs/0.1.10/download\"],\n strip_prefix = \"esaxx-rs-0.1.10\",\n build_file = Label(\"@crates//crates:BUILD.esaxx-rs-0.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fancy-regex-0.17.0\",\n sha256 = \"72cf461f865c862bb7dc573f643dd6a2b6842f7c30b07882b56bd148cc2761b8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fancy-regex/0.17.0/download\"],\n strip_prefix = \"fancy-regex-0.17.0\",\n build_file = Label(\"@crates//crates:BUILD.fancy-regex-0.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fastrand-2.5.0\",\n sha256 = \"da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.5.0/download\"],\n strip_prefix = \"fastrand-2.5.0\",\n build_file = Label(\"@crates//crates:BUILD.fastrand-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fax-0.2.7\",\n sha256 = \"caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fax/0.2.7/download\"],\n strip_prefix = \"fax-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.fax-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fdeflate-0.3.7\",\n sha256 = \"1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fdeflate/0.3.7/download\"],\n strip_prefix = \"fdeflate-0.3.7\",\n build_file = Label(\"@crates//crates:BUILD.fdeflate-0.3.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__find-msvc-tools-0.1.9\",\n sha256 = \"5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.9/download\"],\n strip_prefix = \"find-msvc-tools-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.find-msvc-tools-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__flate2-1.1.9\",\n sha256 = \"843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flate2/1.1.9/download\"],\n strip_prefix = \"flate2-1.1.9\",\n build_file = Label(\"@crates//crates:BUILD.flate2-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__float8-0.7.0\",\n sha256 = \"c2d1f04709a8ac06e8e8042875a3c466cc4832d3c1a18dbcb9dba3c6e83046bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/float8/0.7.0/download\"],\n strip_prefix = \"float8-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.float8-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fnv-1.0.7\",\n sha256 = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fnv/1.0.7/download\"],\n strip_prefix = \"fnv-1.0.7\",\n build_file = Label(\"@crates//crates:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foldhash-0.2.0\",\n sha256 = \"77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.2.0/download\"],\n strip_prefix = \"foldhash-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.foldhash-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-0.5.0\",\n sha256 = \"d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types/0.5.0/download\"],\n strip_prefix = \"foreign-types-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-macros-0.2.4\",\n sha256 = \"ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-macros/0.2.4/download\"],\n strip_prefix = \"foreign-types-macros-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-macros-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-shared-0.3.1\",\n sha256 = \"aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-shared/0.3.1/download\"],\n strip_prefix = \"foreign-types-shared-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-shared-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__form_urlencoded-1.2.2\",\n sha256 = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/form_urlencoded/1.2.2/download\"],\n strip_prefix = \"form_urlencoded-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__forwarded-header-value-0.1.1\",\n sha256 = \"8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/forwarded-header-value/0.1.1/download\"],\n strip_prefix = \"forwarded-header-value-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.forwarded-header-value-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-0.3.33\",\n sha256 = \"a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures/0.3.33/download\"],\n strip_prefix = \"futures-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-channel-0.3.33\",\n sha256 = \"262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.33/download\"],\n strip_prefix = \"futures-channel-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-channel-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-core-0.3.33\",\n sha256 = \"2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.33/download\"],\n strip_prefix = \"futures-core-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-core-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-executor-0.3.33\",\n sha256 = \"6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-executor/0.3.33/download\"],\n strip_prefix = \"futures-executor-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-executor-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-io-0.3.33\",\n sha256 = \"4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.33/download\"],\n strip_prefix = \"futures-io-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-io-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-macro-0.3.33\",\n sha256 = \"2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.33/download\"],\n strip_prefix = \"futures-macro-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-macro-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-sink-0.3.33\",\n sha256 = \"e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.33/download\"],\n strip_prefix = \"futures-sink-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-sink-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-task-0.3.33\",\n sha256 = \"b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.33/download\"],\n strip_prefix = \"futures-task-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-task-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-timer-3.0.4\",\n sha256 = \"af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-timer/3.0.4/download\"],\n strip_prefix = \"futures-timer-3.0.4\",\n build_file = Label(\"@crates//crates:BUILD.futures-timer-3.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-util-0.3.33\",\n sha256 = \"a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.33/download\"],\n strip_prefix = \"futures-util-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.futures-util-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-0.18.2\",\n sha256 = \"ab96b703d31950f1aeddded248bc95543c9efc7ac9c4a21fda8703a83ee35451\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm/0.18.2/download\"],\n strip_prefix = \"gemm-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-0.19.0\",\n sha256 = \"aa0673db364b12263d103b68337a68fbecc541d6f6b61ba72fe438654709eacb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm/0.19.0/download\"],\n strip_prefix = \"gemm-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c32-0.18.2\",\n sha256 = \"f6db9fd9f40421d00eea9dd0770045a5603b8d684654816637732463f4073847\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c32/0.18.2/download\"],\n strip_prefix = \"gemm-c32-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c32-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c32-0.19.0\",\n sha256 = \"086936dbdcb99e37aad81d320f98f670e53c1e55a98bee70573e83f95beb128c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c32/0.19.0/download\"],\n strip_prefix = \"gemm-c32-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c32-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c64-0.18.2\",\n sha256 = \"dfcad8a3d35a43758330b635d02edad980c1e143dc2f21e6fd25f9e4eada8edf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c64/0.18.2/download\"],\n strip_prefix = \"gemm-c64-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c64-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-c64-0.19.0\",\n sha256 = \"20c8aeeeec425959bda4d9827664029ba1501a90a0d1e6228e48bef741db3a3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-c64/0.19.0/download\"],\n strip_prefix = \"gemm-c64-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-c64-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-common-0.18.2\",\n sha256 = \"a352d4a69cbe938b9e2a9cb7a3a63b7e72f9349174a2752a558a8a563510d0f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-common/0.18.2/download\"],\n strip_prefix = \"gemm-common-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-common-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-common-0.19.0\",\n sha256 = \"88027625910cc9b1085aaaa1c4bc46bb3a36aad323452b33c25b5e4e7c8e2a3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-common/0.19.0/download\"],\n strip_prefix = \"gemm-common-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-common-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f16-0.18.2\",\n sha256 = \"cff95ae3259432f3c3410eaa919033cd03791d81cebd18018393dc147952e109\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f16/0.18.2/download\"],\n strip_prefix = \"gemm-f16-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f16-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f16-0.19.0\",\n sha256 = \"e3df7a55202e6cd6739d82ae3399c8e0c7e1402859b30e4cb780e61525d9486e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f16/0.19.0/download\"],\n strip_prefix = \"gemm-f16-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f16-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f32-0.18.2\",\n sha256 = \"bc8d3d4385393304f407392f754cd2dc4b315d05063f62cf09f47b58de276864\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f32/0.18.2/download\"],\n strip_prefix = \"gemm-f32-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f32-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f32-0.19.0\",\n sha256 = \"02e0b8c9da1fbec6e3e3ab2ce6bc259ef18eb5f6f0d3e4edf54b75f9fd41a81c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f32/0.19.0/download\"],\n strip_prefix = \"gemm-f32-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f32-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f64-0.18.2\",\n sha256 = \"35b2a4f76ce4b8b16eadc11ccf2e083252d8237c1b589558a49b0183545015bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f64/0.18.2/download\"],\n strip_prefix = \"gemm-f64-0.18.2\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f64-0.18.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gemm-f64-0.19.0\",\n sha256 = \"056131e8f2a521bfab322f804ccd652520c79700d81209e9d9275bbdecaadc6a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gemm-f64/0.19.0/download\"],\n strip_prefix = \"gemm-f64-0.19.0\",\n build_file = Label(\"@crates//crates:BUILD.gemm-f64-0.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.2.17\",\n sha256 = \"ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.17/download\"],\n strip_prefix = \"getrandom-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.4.3\",\n sha256 = \"300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.3/download\"],\n strip_prefix = \"getrandom-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__gif-0.14.2\",\n sha256 = \"ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gif/0.14.2/download\"],\n strip_prefix = \"gif-0.14.2\",\n build_file = Label(\"@crates//crates:BUILD.gif-0.14.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__governor-0.10.4\",\n sha256 = \"9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/governor/0.10.4/download\"],\n strip_prefix = \"governor-0.10.4\",\n build_file = Label(\"@crates//crates:BUILD.governor-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__h2-0.4.15\",\n sha256 = \"6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.4.15/download\"],\n strip_prefix = \"h2-0.4.15\",\n build_file = Label(\"@crates//crates:BUILD.h2-0.4.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__half-2.7.1\",\n sha256 = \"6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/half/2.7.1/download\"],\n strip_prefix = \"half-2.7.1\",\n build_file = Label(\"@crates//crates:BUILD.half-2.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.14.5\",\n sha256 = \"e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.14.5/download\"],\n strip_prefix = \"hashbrown-0.14.5\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.14.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.16.1\",\n sha256 = \"841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.16.1/download\"],\n strip_prefix = \"hashbrown-0.16.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.16.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.17.1\",\n sha256 = \"ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.1/download\"],\n strip_prefix = \"hashbrown-0.17.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__home-0.5.12\",\n sha256 = \"cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/home/0.5.12/download\"],\n strip_prefix = \"home-0.5.12\",\n build_file = Label(\"@crates//crates:BUILD.home-0.5.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-1.5.0\",\n sha256 = \"918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.5.0/download\"],\n strip_prefix = \"http-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.http-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-1.1.0\",\n sha256 = \"ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.1.0/download\"],\n strip_prefix = \"http-body-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.http-body-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-util-0.1.4\",\n sha256 = \"e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.4/download\"],\n strip_prefix = \"http-body-util-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.http-body-util-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-range-header-0.4.2\",\n sha256 = \"9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-range-header/0.4.2/download\"],\n strip_prefix = \"http-range-header-0.4.2\",\n build_file = Label(\"@crates//crates:BUILD.http-range-header-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@crates//crates:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@crates//crates:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hybrid-array-0.4.13\",\n sha256 = \"818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hybrid-array/0.4.13/download\"],\n strip_prefix = \"hybrid-array-0.4.13\",\n build_file = Label(\"@crates//crates:BUILD.hybrid-array-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-1.11.0\",\n sha256 = \"d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.11.0/download\"],\n strip_prefix = \"hyper-1.11.0\",\n build_file = Label(\"@crates//crates:BUILD.hyper-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-rustls-0.27.9\",\n sha256 = \"33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-rustls/0.27.9/download\"],\n strip_prefix = \"hyper-rustls-0.27.9\",\n build_file = Label(\"@crates//crates:BUILD.hyper-rustls-0.27.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-timeout-0.5.2\",\n sha256 = \"2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-timeout/0.5.2/download\"],\n strip_prefix = \"hyper-timeout-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hyper-timeout-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-util-0.1.20\",\n sha256 = \"96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.20/download\"],\n strip_prefix = \"hyper-util-0.1.20\",\n build_file = Label(\"@crates//crates:BUILD.hyper-util-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__iana-time-zone-0.1.65\",\n sha256 = \"e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone/0.1.65/download\"],\n strip_prefix = \"iana-time-zone-0.1.65\",\n build_file = Label(\"@crates//crates:BUILD.iana-time-zone-0.1.65.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__iana-time-zone-haiku-0.1.2\",\n sha256 = \"f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone-haiku/0.1.2/download\"],\n strip_prefix = \"iana-time-zone-haiku-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.iana-time-zone-haiku-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_collections-2.2.0\",\n sha256 = \"2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.2.0/download\"],\n strip_prefix = \"icu_collections-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_collections-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_locale_core-2.2.0\",\n sha256 = \"92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.2.0/download\"],\n strip_prefix = \"icu_locale_core-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_locale_core-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer-2.2.0\",\n sha256 = \"c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.2.0/download\"],\n strip_prefix = \"icu_normalizer-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer_data-2.2.0\",\n sha256 = \"da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.2.0/download\"],\n strip_prefix = \"icu_normalizer_data-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer_data-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties-2.2.0\",\n sha256 = \"bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.2.0/download\"],\n strip_prefix = \"icu_properties-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties_data-2.2.0\",\n sha256 = \"8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.2.0/download\"],\n strip_prefix = \"icu_properties_data-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties_data-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_provider-2.2.0\",\n sha256 = \"139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.2.0/download\"],\n strip_prefix = \"icu_provider-2.2.0\",\n build_file = Label(\"@crates//crates:BUILD.icu_provider-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ident_case-1.0.1\",\n sha256 = \"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ident_case/1.0.1/download\"],\n strip_prefix = \"ident_case-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.ident_case-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna-1.1.0\",\n sha256 = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna/1.1.0/download\"],\n strip_prefix = \"idna-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna_adapter-1.2.2\",\n sha256 = \"cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.2/download\"],\n strip_prefix = \"idna_adapter-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.idna_adapter-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__image-0.25.10\",\n sha256 = \"85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/image/0.25.10/download\"],\n strip_prefix = \"image-0.25.10\",\n build_file = Label(\"@crates//crates:BUILD.image-0.25.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__image-webp-0.2.4\",\n sha256 = \"525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/image-webp/0.2.4/download\"],\n strip_prefix = \"image-webp-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.image-webp-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ipnet-2.12.0\",\n sha256 = \"d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipnet/2.12.0/download\"],\n strip_prefix = \"ipnet-2.12.0\",\n build_file = Label(\"@crates//crates:BUILD.ipnet-2.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-0.22.4\",\n sha256 = \"5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni/0.22.4/download\"],\n strip_prefix = \"jni-0.22.4\",\n build_file = Label(\"@crates//crates:BUILD.jni-0.22.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-macros-0.22.4\",\n sha256 = \"a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-macros/0.22.4/download\"],\n strip_prefix = \"jni-macros-0.22.4\",\n build_file = Label(\"@crates//crates:BUILD.jni-macros-0.22.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-sys-0.4.1\",\n sha256 = \"c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-sys/0.4.1/download\"],\n strip_prefix = \"jni-sys-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.jni-sys-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jni-sys-macros-0.4.1\",\n sha256 = \"38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jni-sys-macros/0.4.1/download\"],\n strip_prefix = \"jni-sys-macros-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.jni-sys-macros-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__jobserver-0.1.35\",\n sha256 = \"1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jobserver/0.1.35/download\"],\n strip_prefix = \"jobserver-0.1.35\",\n build_file = Label(\"@crates//crates:BUILD.jobserver-0.1.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__js-sys-0.3.103\",\n sha256 = \"53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.103/download\"],\n strip_prefix = \"js-sys-0.3.103\",\n build_file = Label(\"@crates//crates:BUILD.js-sys-0.3.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.189\",\n sha256 = \"3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.189/download\"],\n strip_prefix = \"libc-0.2.189\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.189.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libloading-0.8.9\",\n sha256 = \"d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libloading/0.8.9/download\"],\n strip_prefix = \"libloading-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.libloading-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libm-0.2.16\",\n sha256 = \"b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libm/0.2.16/download\"],\n strip_prefix = \"libm-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.libm-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libredox-0.1.18\",\n sha256 = \"c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libredox/0.1.18/download\"],\n strip_prefix = \"libredox-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.libredox-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__linux-raw-sys-0.12.1\",\n sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n strip_prefix = \"linux-raw-sys-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__litemap-0.8.2\",\n sha256 = \"92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.2/download\"],\n strip_prefix = \"litemap-0.8.2\",\n build_file = Label(\"@crates//crates:BUILD.litemap-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@crates//crates:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.33\",\n sha256 = \"0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.33/download\"],\n strip_prefix = \"log-0.4.33\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__macro_rules_attribute-0.2.3\",\n sha256 = \"b3ae8f6d608c795738406608304d30a2dfbdc8e58e44f7ba43236da5208ded3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/macro_rules_attribute/0.2.3/download\"],\n strip_prefix = \"macro_rules_attribute-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.macro_rules_attribute-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__macro_rules_attribute-proc_macro-0.2.3\",\n sha256 = \"fc04a4c58212d57930a24bf47d3fa87485264a3a054e9c10e042eb373573ad3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/macro_rules_attribute-proc_macro/0.2.3/download\"],\n strip_prefix = \"macro_rules_attribute-proc_macro-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.macro_rules_attribute-proc_macro-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__malloc_buf-0.0.6\",\n sha256 = \"62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/malloc_buf/0.0.6/download\"],\n strip_prefix = \"malloc_buf-0.0.6\",\n build_file = Label(\"@crates//crates:BUILD.malloc_buf-0.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__matchers-0.2.0\",\n sha256 = \"d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchers/0.2.0/download\"],\n strip_prefix = \"matchers-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.matchers-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__matchit-0.8.4\",\n sha256 = \"47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.8.4/download\"],\n strip_prefix = \"matchit-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.matchit-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.8.3\",\n sha256 = \"cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.3/download\"],\n strip_prefix = \"memchr-2.8.3\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memmap2-0.9.11\",\n sha256 = \"d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memmap2/0.9.11/download\"],\n strip_prefix = \"memmap2-0.9.11\",\n build_file = Label(\"@crates//crates:BUILD.memmap2-0.9.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__metal-0.29.0\",\n sha256 = \"7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/metal/0.29.0/download\"],\n strip_prefix = \"metal-0.29.0\",\n build_file = Label(\"@crates//crates:BUILD.metal-0.29.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@crates//crates:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mime_guess-2.0.5\",\n sha256 = \"f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime_guess/2.0.5/download\"],\n strip_prefix = \"mime_guess-2.0.5\",\n build_file = Label(\"@crates//crates:BUILD.mime_guess-2.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__minimal-lexical-0.2.1\",\n sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n strip_prefix = \"minimal-lexical-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__miniz_oxide-0.8.9\",\n sha256 = \"1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/miniz_oxide/0.8.9/download\"],\n strip_prefix = \"miniz_oxide-0.8.9\",\n build_file = Label(\"@crates//crates:BUILD.miniz_oxide-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mio-1.2.2\",\n sha256 = \"30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.2.2/download\"],\n strip_prefix = \"mio-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.mio-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__monostate-0.1.18\",\n sha256 = \"3341a273f6c9d5bef1908f17b7267bbab0e95c9bf69a0d4dcf8e9e1b2c76ef67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/monostate/0.1.18/download\"],\n strip_prefix = \"monostate-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.monostate-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__monostate-impl-0.1.18\",\n sha256 = \"e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/monostate-impl/0.1.18/download\"],\n strip_prefix = \"monostate-impl-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.monostate-impl-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__moxcms-0.8.1\",\n sha256 = \"bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/moxcms/0.8.1/download\"],\n strip_prefix = \"moxcms-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.moxcms-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nibble_vec-0.1.0\",\n sha256 = \"77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nibble_vec/0.1.0/download\"],\n strip_prefix = \"nibble_vec-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.nibble_vec-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nix-0.31.3\",\n sha256 = \"cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nix/0.31.3/download\"],\n strip_prefix = \"nix-0.31.3\",\n build_file = Label(\"@crates//crates:BUILD.nix-0.31.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nom-7.1.3\",\n sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n strip_prefix = \"nom-7.1.3\",\n build_file = Label(\"@crates//crates:BUILD.nom-7.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nonempty-0.7.0\",\n sha256 = \"e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nonempty/0.7.0/download\"],\n strip_prefix = \"nonempty-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.nonempty-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nonzero_ext-0.3.0\",\n sha256 = \"38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nonzero_ext/0.3.0/download\"],\n strip_prefix = \"nonzero_ext-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.nonzero_ext-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@crates//crates:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-0.4.3\",\n sha256 = \"35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num/0.4.3/download\"],\n strip_prefix = \"num-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.num-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-bigint-0.4.8\",\n sha256 = \"c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-bigint/0.4.8/download\"],\n strip_prefix = \"num-bigint-0.4.8\",\n build_file = Label(\"@crates//crates:BUILD.num-bigint-0.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-complex-0.4.6\",\n sha256 = \"73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-complex/0.4.6/download\"],\n strip_prefix = \"num-complex-0.4.6\",\n build_file = Label(\"@crates//crates:BUILD.num-complex-0.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-conv-0.2.2\",\n sha256 = \"521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.2.2/download\"],\n strip_prefix = \"num-conv-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.num-conv-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-integer-0.1.46\",\n sha256 = \"7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-integer/0.1.46/download\"],\n strip_prefix = \"num-integer-0.1.46\",\n build_file = Label(\"@crates//crates:BUILD.num-integer-0.1.46.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-iter-0.1.46\",\n sha256 = \"c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-iter/0.1.46/download\"],\n strip_prefix = \"num-iter-0.1.46\",\n build_file = Label(\"@crates//crates:BUILD.num-iter-0.1.46.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-rational-0.4.2\",\n sha256 = \"f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-rational/0.4.2/download\"],\n strip_prefix = \"num-rational-0.4.2\",\n build_file = Label(\"@crates//crates:BUILD.num-rational-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num-traits-0.2.19\",\n sha256 = \"071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-traits/0.2.19/download\"],\n strip_prefix = \"num-traits-0.2.19\",\n build_file = Label(\"@crates//crates:BUILD.num-traits-0.2.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_cpus-1.17.0\",\n sha256 = \"91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_cpus/1.17.0/download\"],\n strip_prefix = \"num_cpus-1.17.0\",\n build_file = Label(\"@crates//crates:BUILD.num_cpus-1.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__num_threads-0.1.7\",\n sha256 = \"5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num_threads/0.1.7/download\"],\n strip_prefix = \"num_threads-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.num_threads-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc-0.2.7\",\n sha256 = \"915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc/0.2.7/download\"],\n strip_prefix = \"objc-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.objc-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-0.6.4\",\n sha256 = \"3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2/0.6.4/download\"],\n strip_prefix = \"objc2-0.6.4\",\n build_file = Label(\"@crates//crates:BUILD.objc2-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-core-foundation-0.3.2\",\n sha256 = \"2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-core-foundation/0.3.2/download\"],\n strip_prefix = \"objc2-core-foundation-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.objc2-core-foundation-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-encode-4.1.0\",\n sha256 = \"ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-encode/4.1.0/download\"],\n strip_prefix = \"objc2-encode-4.1.0\",\n build_file = Label(\"@crates//crates:BUILD.objc2-encode-4.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-foundation-0.3.2\",\n sha256 = \"e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-foundation/0.3.2/download\"],\n strip_prefix = \"objc2-foundation-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.objc2-foundation-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__objc2-metal-0.3.2\",\n sha256 = \"a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-metal/0.3.2/download\"],\n strip_prefix = \"objc2-metal-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.objc2-metal-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.21.4\",\n sha256 = \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.4/download\"],\n strip_prefix = \"once_cell-1.21.4\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.21.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__onig-6.5.3\",\n sha256 = \"0cc3cbf698f9438986c11a880c90a6d04b9de27575afd28bbf45b154b6c709e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/onig/6.5.3/download\"],\n strip_prefix = \"onig-6.5.3\",\n build_file = Label(\"@crates//crates:BUILD.onig-6.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__onig_sys-69.9.3\",\n sha256 = \"1e68317604e77e53b85896388e1a803c1d21b74c899ec9e5e1112db90735edd7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/onig_sys/69.9.3/download\"],\n strip_prefix = \"onig_sys-69.9.3\",\n build_file = Label(\"@crates//crates:BUILD.onig_sys-69.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-probe-0.2.1\",\n sha256 = \"7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-probe/0.2.1/download\"],\n strip_prefix = \"openssl-probe-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.openssl-probe-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-0.32.0\",\n sha256 = \"b0142c63252a9e054e68a4c61a5778f7b14f576274d593f8ce883d191a099682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry/0.32.0/download\"],\n strip_prefix = \"opentelemetry-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-http-0.32.0\",\n sha256 = \"5683015d09e2df236ef005b17f6f196f0d5f6313c4fa43a7b6a53b52776e4331\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-http/0.32.0/download\"],\n strip_prefix = \"opentelemetry-http-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-http-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-otlp-0.32.0\",\n sha256 = \"9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-otlp/0.32.0/download\"],\n strip_prefix = \"opentelemetry-otlp-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-otlp-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry-proto-0.32.0\",\n sha256 = \"56d658ba1faf63f7b9c492cfbe6e0ec365440a16132d3270c1065f7b33f1b638\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry-proto/0.32.0/download\"],\n strip_prefix = \"opentelemetry-proto-0.32.0\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry-proto-0.32.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__opentelemetry_sdk-0.32.1\",\n sha256 = \"9b59f80e1ac4d5ff7a2db8fb6c80badb7f0f3f858211fba08dd9aaec750894f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/opentelemetry_sdk/0.32.1/download\"],\n strip_prefix = \"opentelemetry_sdk-0.32.1\",\n build_file = Label(\"@crates//crates:BUILD.opentelemetry_sdk-0.32.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__option-ext-0.2.0\",\n sha256 = \"04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/option-ext/0.2.0/download\"],\n strip_prefix = \"option-ext-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.option-ext-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__paris-1.5.15\",\n sha256 = \"8fecab3723493c7851f292cb060f3ee1c42f19b8d749345d0d7eaf3fd19aa62d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/paris/1.5.15/download\"],\n strip_prefix = \"paris-1.5.15\",\n build_file = Label(\"@crates//crates:BUILD.paris-1.5.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot-0.12.5\",\n sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n strip_prefix = \"parking_lot-0.12.5\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot-0.12.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot_core-0.9.12\",\n sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n strip_prefix = \"parking_lot_core-0.9.12\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__paste-1.0.15\",\n sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n strip_prefix = \"paste-1.0.15\",\n build_file = Label(\"@crates//crates:BUILD.paste-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pastey-0.2.3\",\n sha256 = \"2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pastey/0.2.3/download\"],\n strip_prefix = \"pastey-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.pastey-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crates//crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-1.1.13\",\n sha256 = \"2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project/1.1.13/download\"],\n strip_prefix = \"pin-project-1.1.13\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-1.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-internal-1.1.13\",\n sha256 = \"c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-internal/1.1.13/download\"],\n strip_prefix = \"pin-project-internal-1.1.13\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-internal-1.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.17\",\n sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n strip_prefix = \"pin-project-lite-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pkg-config-0.3.33\",\n sha256 = \"19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.33/download\"],\n strip_prefix = \"pkg-config-0.3.33\",\n build_file = Label(\"@crates//crates:BUILD.pkg-config-0.3.33.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__png-0.18.1\",\n sha256 = \"60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/png/0.18.1/download\"],\n strip_prefix = \"png-0.18.1\",\n build_file = Label(\"@crates//crates:BUILD.png-0.18.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__portable-atomic-1.14.0\",\n sha256 = \"3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.14.0/download\"],\n strip_prefix = \"portable-atomic-1.14.0\",\n build_file = Label(\"@crates//crates:BUILD.portable-atomic-1.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__potential_utf-0.1.5\",\n sha256 = \"0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.5/download\"],\n strip_prefix = \"potential_utf-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.potential_utf-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__powerfmt-0.2.0\",\n sha256 = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/powerfmt/0.2.0/download\"],\n strip_prefix = \"powerfmt-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ppv-lite86-0.2.21\",\n sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n strip_prefix = \"ppv-lite86-0.2.21\",\n build_file = Label(\"@crates//crates:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.107\",\n sha256 = \"985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.107/download\"],\n strip_prefix = \"proc-macro2-1.0.107\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.107.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__process-wrap-9.1.0\",\n sha256 = \"2e842efad9119158434d193c6682e2ebee4b44d6ad801d7b349623b3f57cdf55\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/process-wrap/9.1.0/download\"],\n strip_prefix = \"process-wrap-9.1.0\",\n build_file = Label(\"@crates//crates:BUILD.process-wrap-9.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-0.14.4\",\n sha256 = \"528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.14.4/download\"],\n strip_prefix = \"prost-0.14.4\",\n build_file = Label(\"@crates//crates:BUILD.prost-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-derive-0.14.4\",\n sha256 = \"b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.14.4/download\"],\n strip_prefix = \"prost-derive-0.14.4\",\n build_file = Label(\"@crates//crates:BUILD.prost-derive-0.14.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pulp-0.21.5\",\n sha256 = \"96b86df24f0a7ddd5e4b95c94fc9ed8a98f1ca94d3b01bdce2824097e7835907\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulp/0.21.5/download\"],\n strip_prefix = \"pulp-0.21.5\",\n build_file = Label(\"@crates//crates:BUILD.pulp-0.21.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pulp-0.22.3\",\n sha256 = \"046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulp/0.22.3/download\"],\n strip_prefix = \"pulp-0.22.3\",\n build_file = Label(\"@crates//crates:BUILD.pulp-0.22.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pulp-wasm-simd-flag-0.1.1\",\n sha256 = \"1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pulp-wasm-simd-flag/0.1.1/download\"],\n strip_prefix = \"pulp-wasm-simd-flag-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.pulp-wasm-simd-flag-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pxfm-0.1.30\",\n sha256 = \"d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pxfm/0.1.30/download\"],\n strip_prefix = \"pxfm-0.1.30\",\n build_file = Label(\"@crates//crates:BUILD.pxfm-0.1.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quanta-0.12.6\",\n sha256 = \"f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quanta/0.12.6/download\"],\n strip_prefix = \"quanta-0.12.6\",\n build_file = Label(\"@crates//crates:BUILD.quanta-0.12.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quick-error-2.0.1\",\n sha256 = \"a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quick-error/2.0.1/download\"],\n strip_prefix = \"quick-error-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.quick-error-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.47\",\n sha256 = \"1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.47/download\"],\n strip_prefix = \"quote-1.0.47\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-6.0.0\",\n sha256 = \"f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/6.0.0/download\"],\n strip_prefix = \"r-efi-6.0.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__radix_trie-0.3.0\",\n sha256 = \"3b4431027dcd37fc2a73ef740b5f233aa805897935b8bce0195e41bbf9a3289a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/radix_trie/0.3.0/download\"],\n strip_prefix = \"radix_trie-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.radix_trie-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand-0.10.2\",\n sha256 = \"c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.10.2/download\"],\n strip_prefix = \"rand-0.10.2\",\n build_file = Label(\"@crates//crates:BUILD.rand-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand-0.9.5\",\n sha256 = \"b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.9.5/download\"],\n strip_prefix = \"rand-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.rand-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_chacha-0.9.0\",\n sha256 = \"d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.9.0/download\"],\n strip_prefix = \"rand_chacha-0.9.0\",\n build_file = Label(\"@crates//crates:BUILD.rand_chacha-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.10.1\",\n sha256 = \"63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.10.1/download\"],\n strip_prefix = \"rand_core-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.9.5\",\n sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n strip_prefix = \"rand_core-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_distr-0.5.1\",\n sha256 = \"6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_distr/0.5.1/download\"],\n strip_prefix = \"rand_distr-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_distr-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__raw-cpuid-11.6.0\",\n sha256 = \"498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/raw-cpuid/11.6.0/download\"],\n strip_prefix = \"raw-cpuid-11.6.0\",\n build_file = Label(\"@crates//crates:BUILD.raw-cpuid-11.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-1.12.0\",\n sha256 = \"fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon/1.12.0/download\"],\n strip_prefix = \"rayon-1.12.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-1.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-cond-0.4.0\",\n sha256 = \"2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-cond/0.4.0/download\"],\n strip_prefix = \"rayon-cond-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-cond-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-core-1.13.0\",\n sha256 = \"22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-core/1.13.0/download\"],\n strip_prefix = \"rayon-core-1.13.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-core-1.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__reborrow-0.5.5\",\n sha256 = \"03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reborrow/0.5.5/download\"],\n strip_prefix = \"reborrow-0.5.5\",\n build_file = Label(\"@crates//crates:BUILD.reborrow-0.5.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__redox_syscall-0.5.18\",\n sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n strip_prefix = \"redox_syscall-0.5.18\",\n build_file = Label(\"@crates//crates:BUILD.redox_syscall-0.5.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__redox_users-0.5.2\",\n sha256 = \"a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_users/0.5.2/download\"],\n strip_prefix = \"redox_users-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.redox_users-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ref-cast-1.0.26\",\n sha256 = \"216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast/1.0.26/download\"],\n strip_prefix = \"ref-cast-1.0.26\",\n build_file = Label(\"@crates//crates:BUILD.ref-cast-1.0.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ref-cast-impl-1.0.26\",\n sha256 = \"2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast-impl/1.0.26/download\"],\n strip_prefix = \"ref-cast-impl-1.0.26\",\n build_file = Label(\"@crates//crates:BUILD.ref-cast-impl-1.0.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.13.1\",\n sha256 = \"f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.13.1/download\"],\n strip_prefix = \"regex-1.13.1\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.16\",\n sha256 = \"8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.16/download\"],\n strip_prefix = \"regex-automata-0.4.16\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.11\",\n sha256 = \"d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.11/download\"],\n strip_prefix = \"regex-syntax-0.8.11\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__reqwest-0.13.4\",\n sha256 = \"219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reqwest/0.13.4/download\"],\n strip_prefix = \"reqwest-0.13.4\",\n build_file = Label(\"@crates//crates:BUILD.reqwest-0.13.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ring-0.17.14\",\n sha256 = \"a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ring/0.17.14/download\"],\n strip_prefix = \"ring-0.17.14\",\n build_file = Label(\"@crates//crates:BUILD.ring-0.17.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rmcp-3.0.1\",\n sha256 = \"3797d226787327b35b0b6f9e878fe55f3af2bb4daf916c0411079885454042f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rmcp/3.0.1/download\"],\n strip_prefix = \"rmcp-3.0.1\",\n build_file = Label(\"@crates//crates:BUILD.rmcp-3.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rmcp-macros-3.0.1\",\n sha256 = \"a8f5bc0c6851a20cd627ef4b90defb79f39a261c467de52af5d38000d7979c52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rmcp-macros/3.0.1/download\"],\n strip_prefix = \"rmcp-macros-3.0.1\",\n build_file = Label(\"@crates//crates:BUILD.rmcp-macros-3.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustix-1.1.4\",\n sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n strip_prefix = \"rustix-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.rustix-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-0.23.43\",\n sha256 = \"0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls/0.23.43/download\"],\n strip_prefix = \"rustls-0.23.43\",\n build_file = Label(\"@crates//crates:BUILD.rustls-0.23.43.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-native-certs-0.8.4\",\n sha256 = \"dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-native-certs/0.8.4/download\"],\n strip_prefix = \"rustls-native-certs-0.8.4\",\n build_file = Label(\"@crates//crates:BUILD.rustls-native-certs-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-pki-types-1.15.1\",\n sha256 = \"2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pki-types/1.15.1/download\"],\n strip_prefix = \"rustls-pki-types-1.15.1\",\n build_file = Label(\"@crates//crates:BUILD.rustls-pki-types-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-platform-verifier-0.7.0\",\n sha256 = \"26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier/0.7.0/download\"],\n strip_prefix = \"rustls-platform-verifier-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.rustls-platform-verifier-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-platform-verifier-android-0.1.1\",\n sha256 = \"f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-platform-verifier-android/0.1.1/download\"],\n strip_prefix = \"rustls-platform-verifier-android-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.rustls-platform-verifier-android-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-webpki-0.103.13\",\n sha256 = \"61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-webpki/0.103.13/download\"],\n strip_prefix = \"rustls-webpki-0.103.13\",\n build_file = Label(\"@crates//crates:BUILD.rustls-webpki-0.103.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustversion-1.0.23\",\n sha256 = \"cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.23/download\"],\n strip_prefix = \"rustversion-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.rustversion-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustyline-18.0.1\",\n sha256 = \"53f6a737db68eb1a8ccff86b584b2fc13eca6a7bb6f78ebc7c529547e3ab9684\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustyline/18.0.1/download\"],\n strip_prefix = \"rustyline-18.0.1\",\n build_file = Label(\"@crates//crates:BUILD.rustyline-18.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.23\",\n sha256 = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.23/download\"],\n strip_prefix = \"ryu-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__safetensors-0.4.5\",\n sha256 = \"44560c11236a6130a46ce36c836a62936dc81ebf8c36a37947423571be0e55b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/safetensors/0.4.5/download\"],\n strip_prefix = \"safetensors-0.4.5\",\n build_file = Label(\"@crates//crates:BUILD.safetensors-0.4.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__safetensors-0.8.0\",\n sha256 = \"79b079b829cb27a1c3c374341345ed2e8b2c0c839034522cee576c140bd7f846\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/safetensors/0.8.0/download\"],\n strip_prefix = \"safetensors-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.safetensors-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__same-file-1.0.6\",\n sha256 = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/same-file/1.0.6/download\"],\n strip_prefix = \"same-file-1.0.6\",\n build_file = Label(\"@crates//crates:BUILD.same-file-1.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schannel-0.1.29\",\n sha256 = \"91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schannel/0.1.29/download\"],\n strip_prefix = \"schannel-0.1.29\",\n build_file = Label(\"@crates//crates:BUILD.schannel-0.1.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars-1.2.2\",\n sha256 = \"687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/1.2.2/download\"],\n strip_prefix = \"schemars-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.schemars-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars_derive-1.2.2\",\n sha256 = \"d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars_derive/1.2.2/download\"],\n strip_prefix = \"schemars_derive-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.schemars_derive-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-3.7.0\",\n sha256 = \"b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework/3.7.0/download\"],\n strip_prefix = \"security-framework-3.7.0\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-3.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-sys-2.17.0\",\n sha256 = \"6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework-sys/2.17.0/download\"],\n strip_prefix = \"security-framework-sys-2.17.0\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-sys-2.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crates//crates:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__seq-macro-0.3.6\",\n sha256 = \"1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/seq-macro/0.3.6/download\"],\n strip_prefix = \"seq-macro-0.3.6\",\n build_file = Label(\"@crates//crates:BUILD.seq-macro-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.229\",\n sha256 = \"4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.229/download\"],\n strip_prefix = \"serde-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.229\",\n sha256 = \"67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.229/download\"],\n strip_prefix = \"serde_core-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.229\",\n sha256 = \"e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.229/download\"],\n strip_prefix = \"serde_derive-1.0.229\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.229.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive_internals-0.30.0\",\n sha256 = \"f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive_internals/0.30.0/download\"],\n strip_prefix = \"serde_derive_internals-0.30.0\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive_internals-0.30.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.151\",\n sha256 = \"c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.151/download\"],\n strip_prefix = \"serde_json-1.0.151\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.151.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_path_to_error-0.1.20\",\n sha256 = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_path_to_error/0.1.20/download\"],\n strip_prefix = \"serde_path_to_error-0.1.20\",\n build_file = Label(\"@crates//crates:BUILD.serde_path_to_error-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_urlencoded-0.7.1\",\n sha256 = \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_urlencoded/0.7.1/download\"],\n strip_prefix = \"serde_urlencoded-0.7.1\",\n build_file = Label(\"@crates//crates:BUILD.serde_urlencoded-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_yaml_ng-0.10.0\",\n sha256 = \"7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml_ng/0.10.0/download\"],\n strip_prefix = \"serde_yaml_ng-0.10.0\",\n build_file = Label(\"@crates//crates:BUILD.serde_yaml_ng-0.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.11.0\",\n sha256 = \"446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.11.0/download\"],\n strip_prefix = \"sha2-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__shlex-2.0.1\",\n sha256 = \"f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/2.0.1/download\"],\n strip_prefix = \"shlex-2.0.1\",\n build_file = Label(\"@crates//crates:BUILD.shlex-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__signal-hook-registry-1.4.8\",\n sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n strip_prefix = \"signal-hook-registry-1.4.8\",\n build_file = Label(\"@crates//crates:BUILD.signal-hook-registry-1.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simd-adler32-0.3.10\",\n sha256 = \"3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simd-adler32/0.3.10/download\"],\n strip_prefix = \"simd-adler32-0.3.10\",\n build_file = Label(\"@crates//crates:BUILD.simd-adler32-0.3.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simd_cesu8-1.2.0\",\n sha256 = \"11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simd_cesu8/1.2.0/download\"],\n strip_prefix = \"simd_cesu8-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.simd_cesu8-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simdutf8-0.1.5\",\n sha256 = \"e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simdutf8/0.1.5/download\"],\n strip_prefix = \"simdutf8-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.simdutf8-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__simplelog-0.12.2\",\n sha256 = \"16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/simplelog/0.12.2/download\"],\n strip_prefix = \"simplelog-0.12.2\",\n build_file = Label(\"@crates//crates:BUILD.simplelog-0.12.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__slab-0.4.12\",\n sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n strip_prefix = \"slab-0.4.12\",\n build_file = Label(\"@crates//crates:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.15.2\",\n sha256 = \"8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.2/download\"],\n strip_prefix = \"smallvec-1.15.2\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.15.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.6.5\",\n sha256 = \"c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.5/download\"],\n strip_prefix = \"socket2-0.6.5\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.6.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__spinning_top-0.3.0\",\n sha256 = \"d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spinning_top/0.3.0/download\"],\n strip_prefix = \"spinning_top-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.spinning_top-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__spm_precompiled-0.1.4\",\n sha256 = \"5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spm_precompiled/0.1.4/download\"],\n strip_prefix = \"spm_precompiled-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.spm_precompiled-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__static_assertions-1.1.0\",\n sha256 = \"a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/static_assertions/1.1.0/download\"],\n strip_prefix = \"static_assertions-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.static_assertions-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__strsim-0.11.1\",\n sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n strip_prefix = \"strsim-0.11.1\",\n build_file = Label(\"@crates//crates:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__subtle-2.6.1\",\n sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n strip_prefix = \"subtle-2.6.1\",\n build_file = Label(\"@crates//crates:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.119\",\n sha256 = \"872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.119/download\"],\n strip_prefix = \"syn-2.0.119\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.119.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-3.0.3\",\n sha256 = \"53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/3.0.3/download\"],\n strip_prefix = \"syn-3.0.3\",\n build_file = Label(\"@crates//crates:BUILD.syn-3.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__synstructure-0.13.2\",\n sha256 = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.13.2/download\"],\n strip_prefix = \"synstructure-0.13.2\",\n build_file = Label(\"@crates//crates:BUILD.synstructure-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sysctl-0.6.0\",\n sha256 = \"01198a2debb237c62b6826ec7081082d951f46dbb64b0e8c7649a452230d1dfc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sysctl/0.6.0/download\"],\n strip_prefix = \"sysctl-0.6.0\",\n build_file = Label(\"@crates//crates:BUILD.sysctl-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tempfile-3.27.0\",\n sha256 = \"32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.27.0/download\"],\n strip_prefix = \"tempfile-3.27.0\",\n build_file = Label(\"@crates//crates:BUILD.tempfile-3.27.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__termcolor-1.4.1\",\n sha256 = \"06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/termcolor/1.4.1/download\"],\n strip_prefix = \"termcolor-1.4.1\",\n build_file = Label(\"@crates//crates:BUILD.termcolor-1.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-1.0.69\",\n sha256 = \"b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/1.0.69/download\"],\n strip_prefix = \"thiserror-1.0.69\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-2.0.19\",\n sha256 = \"09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.19/download\"],\n strip_prefix = \"thiserror-2.0.19\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-2.0.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-1.0.69\",\n sha256 = \"4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/1.0.69/download\"],\n strip_prefix = \"thiserror-impl-1.0.69\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-2.0.19\",\n sha256 = \"43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.19/download\"],\n strip_prefix = \"thiserror-impl-2.0.19\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-2.0.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thread_local-1.1.10\",\n sha256 = \"1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.10/download\"],\n strip_prefix = \"thread_local-1.1.10\",\n build_file = Label(\"@crates//crates:BUILD.thread_local-1.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tiff-0.11.3\",\n sha256 = \"b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tiff/0.11.3/download\"],\n strip_prefix = \"tiff-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.tiff-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-0.3.54\",\n sha256 = \"3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.54/download\"],\n strip_prefix = \"time-0.3.54\",\n build_file = Label(\"@crates//crates:BUILD.time-0.3.54.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-core-0.1.9\",\n sha256 = \"9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.9/download\"],\n strip_prefix = \"time-core-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.time-core-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__time-macros-0.2.32\",\n sha256 = \"7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.32/download\"],\n strip_prefix = \"time-macros-0.2.32\",\n build_file = Label(\"@crates//crates:BUILD.time-macros-0.2.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tinystr-0.8.3\",\n sha256 = \"c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.3/download\"],\n strip_prefix = \"tinystr-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.tinystr-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokenizers-0.22.2\",\n sha256 = \"b238e22d44a15349529690fb07bd645cf58149a1b1e44d6cb5bd1641ff1a6223\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokenizers/0.22.2/download\"],\n strip_prefix = \"tokenizers-0.22.2\",\n build_file = Label(\"@crates//crates:BUILD.tokenizers-0.22.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokenizers-0.23.1\",\n sha256 = \"44e5bea67576e04b6ff8564c5d9e09c2ef0cf476502245f2f120e497769d3112\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokenizers/0.23.1/download\"],\n strip_prefix = \"tokenizers-0.23.1\",\n build_file = Label(\"@crates//crates:BUILD.tokenizers-0.23.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-1.53.1\",\n sha256 = \"202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.53.1/download\"],\n strip_prefix = \"tokio-1.53.1\",\n build_file = Label(\"@crates//crates:BUILD.tokio-1.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-macros-2.7.2\",\n sha256 = \"78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.7.2/download\"],\n strip_prefix = \"tokio-macros-2.7.2\",\n build_file = Label(\"@crates//crates:BUILD.tokio-macros-2.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-rustls-0.26.4\",\n sha256 = \"1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-rustls/0.26.4/download\"],\n strip_prefix = \"tokio-rustls-0.26.4\",\n build_file = Label(\"@crates//crates:BUILD.tokio-rustls-0.26.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-stream-0.1.19\",\n sha256 = \"a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-stream/0.1.19/download\"],\n strip_prefix = \"tokio-stream-0.1.19\",\n build_file = Label(\"@crates//crates:BUILD.tokio-stream-0.1.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-util-0.7.19\",\n sha256 = \"494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.19/download\"],\n strip_prefix = \"tokio-util-0.7.19\",\n build_file = Label(\"@crates//crates:BUILD.tokio-util-0.7.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tonic-0.14.6\",\n sha256 = \"ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic/0.14.6/download\"],\n strip_prefix = \"tonic-0.14.6\",\n build_file = Label(\"@crates//crates:BUILD.tonic-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-0.5.3\",\n sha256 = \"ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.3/download\"],\n strip_prefix = \"tower-0.5.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-http-0.6.11\",\n sha256 = \"4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.6.11/download\"],\n strip_prefix = \"tower-http-0.6.11\",\n build_file = Label(\"@crates//crates:BUILD.tower-http-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-http-0.7.0\",\n sha256 = \"b11f75e912b0c2be01b63d8cf8057b8c3f97cf34abb3d431a3a4c8675498e233\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.7.0/download\"],\n strip_prefix = \"tower-http-0.7.0\",\n build_file = Label(\"@crates//crates:BUILD.tower-http-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower_governor-0.8.0\",\n sha256 = \"44de9b94d849d3c46e06a883d72d408c2de6403367b39df2b1c9d9e7b6736fe6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower_governor/0.8.0/download\"],\n strip_prefix = \"tower_governor-0.8.0\",\n build_file = Label(\"@crates//crates:BUILD.tower_governor-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-0.1.44\",\n sha256 = \"63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.44/download\"],\n strip_prefix = \"tracing-0.1.44\",\n build_file = Label(\"@crates//crates:BUILD.tracing-0.1.44.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-attributes-0.1.31\",\n sha256 = \"7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.31/download\"],\n strip_prefix = \"tracing-attributes-0.1.31\",\n build_file = Label(\"@crates//crates:BUILD.tracing-attributes-0.1.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-core-0.1.36\",\n sha256 = \"db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.36/download\"],\n strip_prefix = \"tracing-core-0.1.36\",\n build_file = Label(\"@crates//crates:BUILD.tracing-core-0.1.36.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-serde-0.2.0\",\n sha256 = \"704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-serde/0.2.0/download\"],\n strip_prefix = \"tracing-serde-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.tracing-serde-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-subscriber-0.3.23\",\n sha256 = \"cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.23/download\"],\n strip_prefix = \"tracing-subscriber-0.3.23\",\n build_file = Label(\"@crates//crates:BUILD.tracing-subscriber-0.3.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typed-path-0.12.3\",\n sha256 = \"8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typed-path/0.12.3/download\"],\n strip_prefix = \"typed-path-0.12.3\",\n build_file = Label(\"@crates//crates:BUILD.typed-path-0.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typenum-1.20.1\",\n sha256 = \"b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.1/download\"],\n strip_prefix = \"typenum-1.20.1\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.20.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ug-0.5.0\",\n sha256 = \"76b761acf8af3494640d826a8609e2265e19778fb43306c7f15379c78c9b05b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ug/0.5.0/download\"],\n strip_prefix = \"ug-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.ug-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ug-metal-0.5.0\",\n sha256 = \"9f7adf545a99a086d362efc739e7cf4317c18cbeda22706000fd434d70ea3d95\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ug-metal/0.5.0/download\"],\n strip_prefix = \"ug-metal-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.ug-metal-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicase-2.9.0\",\n sha256 = \"dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicase/2.9.0/download\"],\n strip_prefix = \"unicase-2.9.0\",\n build_file = Label(\"@crates//crates:BUILD.unicase-2.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-normalization-alignments-0.1.12\",\n sha256 = \"43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-normalization-alignments/0.1.12/download\"],\n strip_prefix = \"unicode-normalization-alignments-0.1.12\",\n build_file = Label(\"@crates//crates:BUILD.unicode-normalization-alignments-0.1.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-segmentation-1.13.3\",\n sha256 = \"c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-segmentation/1.13.3/download\"],\n strip_prefix = \"unicode-segmentation-1.13.3\",\n build_file = Label(\"@crates//crates:BUILD.unicode-segmentation-1.13.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-width-0.2.2\",\n sha256 = \"b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-width/0.2.2/download\"],\n strip_prefix = \"unicode-width-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.unicode-width-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode_categories-0.1.1\",\n sha256 = \"39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode_categories/0.1.1/download\"],\n strip_prefix = \"unicode_categories-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.unicode_categories-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unsafe-libyaml-0.2.11\",\n sha256 = \"673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unsafe-libyaml/0.2.11/download\"],\n strip_prefix = \"unsafe-libyaml-0.2.11\",\n build_file = Label(\"@crates//crates:BUILD.unsafe-libyaml-0.2.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__untrusted-0.9.0\",\n sha256 = \"8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/untrusted/0.9.0/download\"],\n strip_prefix = \"untrusted-0.9.0\",\n build_file = Label(\"@crates//crates:BUILD.untrusted-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__url-2.5.8\",\n sha256 = \"ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/url/2.5.8/download\"],\n strip_prefix = \"url-2.5.8\",\n build_file = Label(\"@crates//crates:BUILD.url-2.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8_iter-1.0.4\",\n sha256 = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8_iter/1.0.4/download\"],\n strip_prefix = \"utf8_iter-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__uuid-1.24.0\",\n sha256 = \"bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.24.0/download\"],\n strip_prefix = \"uuid-1.24.0\",\n build_file = Label(\"@crates//crates:BUILD.uuid-1.24.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__walkdir-2.5.0\",\n sha256 = \"29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/walkdir/2.5.0/download\"],\n strip_prefix = \"walkdir-2.5.0\",\n build_file = Label(\"@crates//crates:BUILD.walkdir-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@crates//crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasip2-1.0.4-wasi-0.2.12\",\n sha256 = \"b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.4+wasi-0.2.12/download\"],\n strip_prefix = \"wasip2-1.0.4+wasi-0.2.12\",\n build_file = Label(\"@crates//crates:BUILD.wasip2-1.0.4+wasi-0.2.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-0.2.126\",\n sha256 = \"4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-futures-0.4.76\",\n sha256 = \"c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-futures/0.4.76/download\"],\n strip_prefix = \"wasm-bindgen-futures-0.4.76\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-futures-0.4.76.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-0.2.126\",\n sha256 = \"167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-support-0.2.126\",\n sha256 = \"f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-support-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-shared-0.2.126\",\n sha256 = \"dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.126/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.126\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-shared-0.2.126.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__web-sys-0.3.103\",\n sha256 = \"8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-sys/0.3.103/download\"],\n strip_prefix = \"web-sys-0.3.103\",\n build_file = Label(\"@crates//crates:BUILD.web-sys-0.3.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__web-time-1.1.0\",\n sha256 = \"5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-time/1.1.0/download\"],\n strip_prefix = \"web-time-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__webpki-root-certs-1.0.9\",\n sha256 = \"b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/webpki-root-certs/1.0.9/download\"],\n strip_prefix = \"webpki-root-certs-1.0.9\",\n build_file = Label(\"@crates//crates:BUILD.webpki-root-certs-1.0.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__weezl-0.1.12\",\n sha256 = \"a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/weezl/0.1.12/download\"],\n strip_prefix = \"weezl-0.1.12\",\n build_file = Label(\"@crates//crates:BUILD.weezl-0.1.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-0.3.9\",\n sha256 = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi/0.3.9/download\"],\n strip_prefix = \"winapi-0.3.9\",\n build_file = Label(\"@crates//crates:BUILD.winapi-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-i686-pc-windows-gnu-0.4.0\",\n sha256 = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-i686-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-util-0.1.11\",\n sha256 = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-util/0.1.11/download\"],\n strip_prefix = \"winapi-util-0.1.11\",\n build_file = Label(\"@crates//crates:BUILD.winapi-util-0.1.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-x86_64-pc-windows-gnu-0.4.0\",\n sha256 = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-x86_64-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-0.62.2\",\n sha256 = \"527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows/0.62.2/download\"],\n strip_prefix = \"windows-0.62.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-0.62.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-collections-0.3.2\",\n sha256 = \"23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-collections/0.3.2/download\"],\n strip_prefix = \"windows-collections-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-collections-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-core-0.62.2\",\n sha256 = \"b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-core/0.62.2/download\"],\n strip_prefix = \"windows-core-0.62.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-core-0.62.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-future-0.3.2\",\n sha256 = \"e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-future/0.3.2/download\"],\n strip_prefix = \"windows-future-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-future-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-implement-0.60.2\",\n sha256 = \"053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-implement/0.60.2/download\"],\n strip_prefix = \"windows-implement-0.60.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-implement-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-interface-0.59.3\",\n sha256 = \"3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-interface/0.59.3/download\"],\n strip_prefix = \"windows-interface-0.59.3\",\n build_file = Label(\"@crates//crates:BUILD.windows-interface-0.59.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-numerics-0.3.1\",\n sha256 = \"6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-numerics/0.3.1/download\"],\n strip_prefix = \"windows-numerics-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-numerics-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-result-0.4.1\",\n sha256 = \"7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-result/0.4.1/download\"],\n strip_prefix = \"windows-result-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-result-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-strings-0.5.1\",\n sha256 = \"7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-strings/0.5.1/download\"],\n strip_prefix = \"windows-strings-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-strings-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-threading-0.2.1\",\n sha256 = \"3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-threading/0.2.1/download\"],\n strip_prefix = \"windows-threading-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-threading-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wit-bindgen-0.57.1\",\n sha256 = \"1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.57.1/download\"],\n strip_prefix = \"wit-bindgen-0.57.1\",\n build_file = Label(\"@crates//crates:BUILD.wit-bindgen-0.57.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__writeable-0.6.3\",\n sha256 = \"1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.3/download\"],\n strip_prefix = \"writeable-0.6.3\",\n build_file = Label(\"@crates//crates:BUILD.writeable-0.6.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.7.5\",\n sha256 = \"120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.7.5/download\"],\n strip_prefix = \"yoke-0.7.5\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.8.3\",\n sha256 = \"709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.3/download\"],\n strip_prefix = \"yoke-0.8.3\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.7.5\",\n sha256 = \"2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.7.5/download\"],\n strip_prefix = \"yoke-derive-0.7.5\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.8.2\",\n sha256 = \"de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.2/download\"],\n strip_prefix = \"yoke-derive-0.8.2\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.8.55\",\n sha256 = \"b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.55/download\"],\n strip_prefix = \"zerocopy-0.8.55\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.8.55.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.8.55\",\n sha256 = \"0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.55/download\"],\n strip_prefix = \"zerocopy-derive-0.8.55\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.8.55.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-0.1.8\",\n sha256 = \"0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.8/download\"],\n strip_prefix = \"zerofrom-0.1.8\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-derive-0.1.7\",\n sha256 = \"11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.7/download\"],\n strip_prefix = \"zerofrom-derive-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-derive-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zeroize-1.9.0\",\n sha256 = \"e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.9.0/download\"],\n strip_prefix = \"zeroize-1.9.0\",\n build_file = Label(\"@crates//crates:BUILD.zeroize-1.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerotrie-0.2.4\",\n sha256 = \"0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.4/download\"],\n strip_prefix = \"zerotrie-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.zerotrie-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-0.11.6\",\n sha256 = \"90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.6/download\"],\n strip_prefix = \"zerovec-0.11.6\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-0.11.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-derive-0.11.3\",\n sha256 = \"625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.3/download\"],\n strip_prefix = \"zerovec-derive-0.11.3\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-derive-0.11.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zip-8.6.0\",\n sha256 = \"2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zip/8.6.0/download\"],\n strip_prefix = \"zip-8.6.0\",\n build_file = Label(\"@crates//crates:BUILD.zip-8.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zmij-1.0.23\",\n sha256 = \"29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.23/download\"],\n strip_prefix = \"zmij-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.zmij-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zstd-0.13.3\",\n sha256 = \"e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zstd/0.13.3/download\"],\n strip_prefix = \"zstd-0.13.3\",\n build_file = Label(\"@crates//crates:BUILD.zstd-0.13.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zstd-safe-7.2.4\",\n sha256 = \"8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zstd-safe/7.2.4/download\"],\n strip_prefix = \"zstd-safe-7.2.4\",\n build_file = Label(\"@crates//crates:BUILD.zstd-safe-7.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zstd-sys-2.0.16-zstd.1.5.7\",\n sha256 = \"91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zstd-sys/2.0.16+zstd.1.5.7/download\"],\n strip_prefix = \"zstd-sys-2.0.16+zstd.1.5.7\",\n build_file = Label(\"@crates//crates:BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zune-core-0.5.1\",\n sha256 = \"cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zune-core/0.5.1/download\"],\n strip_prefix = \"zune-core-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.zune-core-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zune-jpeg-0.5.15\",\n sha256 = \"27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zune-jpeg/0.5.15/download\"],\n strip_prefix = \"zune-jpeg-0.5.15\",\n build_file = Label(\"@crates//crates:BUILD.zune-jpeg-0.5.15.bazel\"),\n )\n\n return [\n struct(repo = \"crates\", is_dev_dep = False),\n struct(repo=\"crates__axum-0.8.9\", is_dev_dep = False),\n struct(repo=\"crates__base64-0.23.0\", is_dev_dep = False),\n struct(repo=\"crates__base64ct-1.8.3\", is_dev_dep = False),\n struct(repo=\"crates__candle-core-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__candle-nn-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__chrono-0.4.45\", is_dev_dep = False),\n struct(repo=\"crates__clap-4.6.4\", is_dev_dep = False),\n struct(repo=\"crates__dirs-6.0.0\", is_dev_dep = False),\n struct(repo=\"crates__half-2.7.1\", is_dev_dep = False),\n struct(repo=\"crates__image-0.25.10\", is_dev_dep = False),\n struct(repo=\"crates__log-0.4.33\", is_dev_dep = False),\n struct(repo=\"crates__opentelemetry-0.32.0\", is_dev_dep = False),\n struct(repo=\"crates__opentelemetry-otlp-0.32.0\", is_dev_dep = False),\n struct(repo=\"crates__opentelemetry_sdk-0.32.1\", is_dev_dep = False),\n struct(repo=\"crates__reqwest-0.13.4\", is_dev_dep = False),\n struct(repo=\"crates__rmcp-3.0.1\", is_dev_dep = False),\n struct(repo=\"crates__rustls-0.23.43\", is_dev_dep = False),\n struct(repo=\"crates__rustyline-18.0.1\", is_dev_dep = False),\n struct(repo=\"crates__safetensors-0.8.0\", is_dev_dep = False),\n struct(repo=\"crates__schemars-1.2.2\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.229\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.151\", is_dev_dep = False),\n struct(repo=\"crates__serde_yaml_ng-0.10.0\", is_dev_dep = False),\n struct(repo=\"crates__sha2-0.11.0\", is_dev_dep = False),\n struct(repo=\"crates__simplelog-0.12.2\", is_dev_dep = False),\n struct(repo=\"crates__tokenizers-0.23.1\", is_dev_dep = False),\n struct(repo=\"crates__tokio-1.53.1\", is_dev_dep = False),\n struct(repo=\"crates__tower-http-0.7.0\", is_dev_dep = False),\n struct(repo=\"crates__tower_governor-0.8.0\", is_dev_dep = False),\n struct(repo=\"crates__tracing-0.1.44\", is_dev_dep = False),\n struct(repo=\"crates__tracing-subscriber-0.3.23\", is_dev_dep = False),\n struct(repo=\"crates__uuid-1.24.0\", is_dev_dep = False),\n struct(repo=\"crates__webpki-root-certs-1.0.9\", is_dev_dep = False),\n struct(repo = \"crates__http-body-util-0.1.4\", is_dev_dep = True),\n struct(repo = \"crates__tempfile-3.27.0\", is_dev_dep = True),\n struct(repo = \"crates__tower-0.5.3\", is_dev_dep = True),\n ]\n", "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\"\"\"Deprecated: re-exports the crate_universe macros from `:crates.bzl`.\"\"\"\n\nload(\n \":crates.bzl\",\n _aliases = \"aliases\",\n _all_crate_deps = \"all_crate_deps\",\n _crate_deps = \"crate_deps\",\n _crate_edition = \"crate_edition\",\n _crate_repositories = \"crate_repositories\",\n)\n\naliases = _aliases\nall_crate_deps = _all_crate_deps\ncrate_deps = _crate_deps\ncrate_edition = _crate_edition\ncrate_repositories = _crate_repositories\n", "axum-0.8.9/BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nalias(\n name = \"axum-0.8.9\",\n actual = \"@crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n", "axum/BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nalias(\n name = \"axum\",\n actual = \"@crates__axum-0.8.9//:axum\",\n tags = [\"manual\"],\n)\n", @@ -6384,6 +6386,19 @@ "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_log\",\n deps = [\n \"@crates__log-0.4.33//:log\",\n \"@crates__once_cell-1.21.4//:once_cell\",\n \"@crates__tracing-core-0.1.36//:tracing_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"log-tracer\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" } }, + "crates__tracing-serde-0.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "remote_patch_strip": 1, + "sha256": "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing-serde/0.2.0/download" + ], + "strip_prefix": "tracing-serde-0.2.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_serde\",\n deps = [\n \"@crates__serde-1.0.229//:serde\",\n \"@crates__tracing-core-0.1.36//:tracing_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, "crates__tracing-subscriber-0.3.23": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -6394,7 +6409,7 @@ "https://static.crates.io/crates/tracing-subscriber/0.3.23/download" ], "strip_prefix": "tracing-subscriber-0.3.23", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_subscriber\",\n deps = [\n \"@crates__matchers-0.2.0//:matchers\",\n \"@crates__nu-ansi-term-0.50.3//:nu_ansi_term\",\n \"@crates__once_cell-1.21.4//:once_cell\",\n \"@crates__regex-automata-0.4.16//:regex_automata\",\n \"@crates__sharded-slab-0.1.7//:sharded_slab\",\n \"@crates__smallvec-1.15.2//:smallvec\",\n \"@crates__thread_local-1.1.10//:thread_local\",\n \"@crates__tracing-0.1.44//:tracing\",\n \"@crates__tracing-core-0.1.36//:tracing_core\",\n \"@crates__tracing-log-0.2.0//:tracing_log\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"ansi\",\n \"default\",\n \"env-filter\",\n \"fmt\",\n \"matchers\",\n \"nu-ansi-term\",\n \"once_cell\",\n \"registry\",\n \"sharded-slab\",\n \"smallvec\",\n \"std\",\n \"thread_local\",\n \"tracing\",\n \"tracing-log\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-subscriber\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.23\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'moon-base'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_subscriber\",\n deps = [\n \"@crates__matchers-0.2.0//:matchers\",\n \"@crates__nu-ansi-term-0.50.3//:nu_ansi_term\",\n \"@crates__once_cell-1.21.4//:once_cell\",\n \"@crates__regex-automata-0.4.16//:regex_automata\",\n \"@crates__serde-1.0.229//:serde\",\n \"@crates__serde_json-1.0.151//:serde_json\",\n \"@crates__sharded-slab-0.1.7//:sharded_slab\",\n \"@crates__smallvec-1.15.2//:smallvec\",\n \"@crates__thread_local-1.1.10//:thread_local\",\n \"@crates__tracing-0.1.44//:tracing\",\n \"@crates__tracing-core-0.1.36//:tracing_core\",\n \"@crates__tracing-log-0.2.0//:tracing_log\",\n \"@crates__tracing-serde-0.2.0//:tracing_serde\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"ansi\",\n \"default\",\n \"env-filter\",\n \"fmt\",\n \"json\",\n \"matchers\",\n \"nu-ansi-term\",\n \"once_cell\",\n \"registry\",\n \"serde\",\n \"serde_json\",\n \"sharded-slab\",\n \"smallvec\",\n \"std\",\n \"thread_local\",\n \"tracing\",\n \"tracing-log\",\n \"tracing-serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-subscriber\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.23\",\n)\n" } }, "crates__try-lock-0.2.5": { diff --git a/bazel/rules/oci.bzl b/bazel/rules/oci.bzl index 989ec94b..7082959b 100644 --- a/bazel/rules/oci.bzl +++ b/bazel/rules/oci.bzl @@ -32,7 +32,7 @@ def _push_and_load(image_name, bin_name): repo_tags = ["ghcr.io/muchq/" + bin_name + ":latest"], ) -def _create_oci_image(bin_name, binary_target, binary_path): +def _create_oci_image(bin_name, binary_target, binary_path, extra_tars = []): """ create oci image, push, and load targets for a binary @@ -40,6 +40,7 @@ def _create_oci_image(bin_name, binary_target, binary_path): bin_name: the binary name for the image binary_target: the bazel target containing the binary binary_path: the path to remap the binary to in the container + extra_tars: further layers for the image """ tar_name = bin_name + "_tar" image_name = bin_name + "_image" @@ -61,7 +62,7 @@ def _create_oci_image(bin_name, binary_target, binary_path): tars = [ "//bazel/rules:ca_certificates_layer", ":" + tar_name, - ], + ] + extra_tars, ) _push_and_load(image_name = image_name, bin_name = bin_name) @@ -74,12 +75,13 @@ def _create_oci_image(bin_name, binary_target, binary_path): tags = ["manual"], ) -def linux_oci_go(bin_name): +def linux_oci_go(bin_name, extra_tars = []): """ generate linux oci container for go binaries Args: bin_name: the binary target name to be wrapper + extra_tars: further layers for the image, e.g. a data file the binary reads """ linux_amd_target_name = bin_name + "_linux_amd64" @@ -91,7 +93,7 @@ def linux_oci_go(bin_name): visibility = ["//visibility:public"], ) - _create_oci_image(bin_name, linux_amd_target_name, "/" + bin_name) + _create_oci_image(bin_name, linux_amd_target_name, "/" + bin_name, extra_tars) def linux_amd64_oci_binary(bin_name): """ diff --git a/bazel/tools.MODULE.bazel b/bazel/tools.MODULE.bazel index 48b61a7e..c4b19e2c 100644 --- a/bazel/tools.MODULE.bazel +++ b/bazel/tools.MODULE.bazel @@ -35,3 +35,14 @@ http_file( sha256 = "3ed0c94610d8bcf7c11bbb49c56aa49c7234d32b66824df91f554169e572da48", urls = ["https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt"], ) + +# DB-IP's free IP-to-country table (CC BY 4.0; muchq.com/stats carries the +# attribution), bundled into the stats image (#1467). DB-IP publishes a new +# file each month under a dated URL and keeps the old ones up, so a refresh +# is a pin bump here and nothing on the host. +http_file( + name = "dbip_country_lite", + downloaded_file_path = "dbip-country-lite.csv.gz", + sha256 = "a32bb3c384bd3de60ad9024596aa5b395a6dd5beaa27a7223407cc2edc681d0b", + urls = ["https://download.db-ip.com/free/dbip-country-lite-2026-09.csv.gz"], +) diff --git a/deploy/consolidated/README.md b/deploy/consolidated/README.md index f24e743c..323b82f8 100644 --- a/deploy/consolidated/README.md +++ b/deploy/consolidated/README.md @@ -220,11 +220,7 @@ COMPOSE_PROFILES=stats deploy.sh runs compose in `~`, where compose reads that file, so every normal deploy includes the trio. Alongside it live `STATS_AWS_ACCESS_KEY_ID`, `STATS_AWS_SECRET_ACCESS_KEY`, -`STATS_S3_BUCKET`, `STATS_S3_REGION`, optionally `STATS_GEO_DB_KEY` (the key of -DB-IP's country CSV in that bucket — upload `dbip-country-lite-YYYY-MM.csv.gz` -under `geo/` and restart `stats` for a new month; unset, the geo rows all read -`--`, and a key that will not load is an error in the log, not a boot -failure), and +`STATS_S3_BUCKET`, `STATS_S3_REGION`, and `STATS_DB_PASSWORD` (same URL-safe rules as the other database passwords: it rides in a libpq URL and a single-quoted SQL literal). Without the `COMPOSE_PROFILES` line the containers keep running after a deploy but silently stop diff --git a/deploy/consolidated/compose.yaml b/deploy/consolidated/compose.yaml index b6b5a934..d0af252b 100644 --- a/deploy/consolidated/compose.yaml +++ b/deploy/consolidated/compose.yaml @@ -662,9 +662,6 @@ services: - AWS_SECRET_ACCESS_KEY=${STATS_AWS_SECRET_ACCESS_KEY} - S3_BUCKET=${STATS_S3_BUCKET} - S3_REGION=${STATS_S3_REGION:-us-east-1} - # DB-IP's country CSV in the same bucket (#1467); empty means every - # geo row reads "--", and so does a key that will not load. - - GEO_DB_KEY=${STATS_GEO_DB_KEY:-} - PORT=8092 networks: - app_network diff --git a/deploy/consolidated/deploy_config_test.go b/deploy/consolidated/deploy_config_test.go index 8270730f..269118e0 100644 --- a/deploy/consolidated/deploy_config_test.go +++ b/deploy/consolidated/deploy_config_test.go @@ -2116,11 +2116,6 @@ func TestTheStatsPairIsProfileGatedTogether(t *testing.T) { if !strings.Contains(serviceBlock(t, "compose.yaml", "stats"), "postgresql://stats:") { t.Errorf("stats names no stats database URL; the aggregates have nowhere to land") } - // The geo database key rides the stats block (#1467); dropping it is an - // all-"--" table with nothing else to say so. - if !strings.Contains(serviceBlock(t, "compose.yaml", "stats"), "GEO_DB_KEY=") { - t.Errorf("the stats service does not pass GEO_DB_KEY; the geo rollup has no database to load") - } } // catchAllIsLastHandle reports whether the site block ends its handle diff --git a/domains/platform/apis/stats/BUILD.bazel b/domains/platform/apis/stats/BUILD.bazel index c1d3af27..a5f00ae0 100644 --- a/domains/platform/apis/stats/BUILD.bazel +++ b/domains/platform/apis/stats/BUILD.bazel @@ -1,4 +1,5 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test") +load("@rules_pkg//pkg:tar.bzl", "pkg_tar") load("//bazel/rules:oci.bzl", "linux_oci_go") # otel_contract pins the query-event vocabulary here against QueryEvent.java. @@ -18,6 +19,7 @@ go_library( importpath = "github.com/muchq/moonbase/domains/platform/apis/stats", visibility = ["//visibility:public"], deps = [ + "//domains/platform/libs/mucks", "@com_github_jackc_pgx_v5//:pgx", "@com_github_jackc_pgx_v5//pgxpool", ], @@ -34,6 +36,7 @@ go_test( "aggregate_test.go", "api_test.go", "classify_test.go", + "fixtures_test.go", "geo_test.go", "loop_test.go", "queries_test.go", @@ -53,9 +56,45 @@ go_binary( visibility = ["//visibility:public"], deps = [ ":stats_lib", - "//domains/platform/libs/mucks", "//domains/platform/libs/s3lite", ], ) -linux_oci_go(bin_name = "stats") +# The IP-to-country table rides in the image at /geo (#1467); main.go's +# GEO_DB_PATH default points at it, and geo_vendor_test pins the two. +pkg_tar( + name = "geo_layer", + srcs = ["@dbip_country_lite//file"], + package_dir = "/geo", +) + +# Integration: the pinned vendor file through the real parser, the layer's +# path against the binary's default, and the whole service end to end — +# shipped objects in a memory bucket, the real loop, the real store on the +# CI postgres, the real router over HTTP. Its own target: the data is a +# few MB the unit suite has no use for, and the database is shared. +go_test( + name = "stats_integration_test", + size = "small", + srcs = [ + "e2e_test.go", + "fixtures_test.go", + "geo_vendor_test.go", + ], + data = [ + ":geo_layer", + "@dbip_country_lite//file", + ], + embed = [":stats_lib"], + env = { + "DBIP_COUNTRY_LITE": "$(rootpath @dbip_country_lite//file)", + "GEO_LAYER_TAR": "$(rootpath :geo_layer)", + }, + env_inherit = ["STATS_TEST_DB_URL"], + tags = ["exclusive"], +) + +linux_oci_go( + bin_name = "stats", + extra_tars = [":geo_layer"], +) diff --git a/domains/platform/apis/stats/README.md b/domains/platform/apis/stats/README.md index a0cc2898..0a01a262 100644 --- a/domains/platform/apis/stats/README.md +++ b/domains/platform/apis/stats/README.md @@ -60,15 +60,17 @@ The geo rollup (#1467) places each request's `client_ip` (`remote_ip` on older lines) in a country and keys `geo_stats` on day, host, agent class, and the two-letter code, with request, 403, and probe counts — where the scrapers, bots, and scanners come from. The database is DB-IP's free -country CSV (`dbip-country-lite-YYYY-MM.csv.gz`, CC BY 4.0; muchq.com's -stats page carries the attribution), uploaded by the operator to the stats -bucket under the key `GEO_DB_KEY` names; the service loads it at boot -into a sorted range table and binary-searches it, no library. Overlapping -rows lose to the range they sit in. An address outside every range, or no -database at all, files under `--`. A key that will not load, after a few -retries for a bucket still waking up, is an error in the log and an -all-`--` table, never a boot failure. A new monthly file is a restart. -Rows aggregated before the database was uploaded stay `--` until a +country CSV (CC BY 4.0; muchq.com's stats page carries the attribution), +pinned by URL and sha256 as `@dbip_country_lite` in +`bazel/tools.MODULE.bazel` and bundled into the image at +`/geo/dbip-country-lite.csv.gz`; a new month is a pin bump, nothing on +the host. The service loads it at boot into a sorted range table and +binary-searches it, no library. Overlapping rows lose to the range they +sit in, and the `ZZ` rows DB-IP uses for reserved and private space are +not placements. An address outside every range files under `--`, and so +does everything when the file will not load — an error in the log, never a +boot failure. `GEO_DB_PATH` points at another file, or empty switches geo +off. Rows aggregated before a database was available stay `--` until a re-aggregation (bump `RollupVersion`). What stays ad hoc: IP-range clusters — a /24 key is caller-shaped and @@ -105,11 +107,19 @@ stay in the log, not on the wire. ## Configuration `STATS_DB_URL` (postgres), `S3_BUCKET`, `S3_REGION`, `AWS_ACCESS_KEY_ID`, -`AWS_SECRET_ACCESS_KEY`, and optionally `GEO_DB_KEY` — the same stats IAM user the shipper writes with, +`AWS_SECRET_ACCESS_KEY` — the same stats IAM user the shipper writes with, which therefore needs `s3:GetObject` and `s3:ListBucket` on the `logs/*` -prefix as well as `s3:PutObject`, and `s3:GetObject` on the geo key's -prefix (`geo/*` in the deployment). `AGGREGATE_INTERVAL` and `PORT` -(default 8092) are optional. +prefix as well as `s3:PutObject`. `AGGREGATE_INTERVAL`, `PORT` +(default 8092), and `GEO_DB_PATH` are optional. -The store integration test needs `STATS_TEST_DB_URL` and skips without it, -like the repo's other Postgres-gated suites. +## Tests + +Unit tests per layer, and two gated suites. `stats_test` holds the store +tests, which need `STATS_TEST_DB_URL` and skip without it, like the repo's +other Postgres-gated suites. `stats_integration_test` is the end-to-end +pattern: `e2e_test.go` puts shipped objects in a memory bucket, runs the +real loop with the real vendor geo file into the real store, and reads +every endpoint through `NewRouter` over HTTP — the same objects production +wires together. A new endpoint or source gets a few lines there, not a new +harness. Locally, a throwaway `postgres:18` in Docker on port 55432 and +`STATS_TEST_DB_URL=postgresql://t:t@localhost:55432/t` run both. diff --git a/domains/platform/apis/stats/api.go b/domains/platform/apis/stats/api.go index 5cec34c1..ac9dfb81 100644 --- a/domains/platform/apis/stats/api.go +++ b/domains/platform/apis/stats/api.go @@ -6,6 +6,8 @@ import ( "log/slog" "net/http" "strconv" + + "github.com/muchq/moonbase/domains/platform/libs/mucks" ) // Reader is what the HTTP handlers need from the store — an interface so @@ -29,6 +31,21 @@ func NewHandlers(reader Reader, logger *slog.Logger) *Handlers { return &Handlers{reader: reader, logger: logger} } +// NewRouter is the service's whole HTTP surface, the one main serves and +// the end-to-end test drives; a route added here is on both. +func NewRouter(h *Handlers) http.Handler { + router := mucks.NewJsonMucks() + router.HandleFunc("GET /health", h.Health) + router.HandleFunc("GET /stats/v1/summary", h.GetSummary) + router.HandleFunc("GET /stats/v1/iili/top", h.GetTopSlugs) + router.HandleFunc("GET /stats/v1/agents", h.GetAgents) + router.HandleFunc("GET /stats/v1/probes", h.GetProbes) + router.HandleFunc("GET /stats/v1/one_d4/queries", h.GetQueries) + router.HandleFunc("GET /stats/v1/one_d4/terms", h.GetQueryTerms) + router.HandleFunc("GET /stats/v1/countries", h.GetCountries) + return router +} + func (h *Handlers) Health(w http.ResponseWriter, _ *http.Request) { w.Write([]byte(`{"status":"healthy"}`)) } diff --git a/domains/platform/apis/stats/e2e_test.go b/domains/platform/apis/stats/e2e_test.go new file mode 100644 index 00000000..e2b522f1 --- /dev/null +++ b/domains/platform/apis/stats/e2e_test.go @@ -0,0 +1,233 @@ +package stats + +import ( + "bytes" + "compress/gzip" + "context" + "encoding/json" + "fmt" + "io" + "io/fs" + "log/slog" + "net/http" + "net/http/httptest" + "os" + "strings" + "testing" + "time" +) + +// The whole service, end to end, through the objects production uses: the +// real vendor file through Locate, shipped objects in an in-memory bucket +// through Aggregator.RunOnce, the real Store on a real Postgres, and the +// real router over HTTP. Each layer has its own tests; this is the one that +// says they fit, and the example to copy for the next endpoint. +// +// Gated on STATS_TEST_DB_URL like the store tests: without it this skips, +// and CI supplies the URL from its postgres service. + +// memoryBucket is the shipper's layout in memory: keys as the shipper +// writes them, gzipped bodies as it uploads them. +type memoryBucket map[string][]byte + +func (b memoryBucket) List(prefix string) ([]string, error) { + var keys []string + for key := range b { + if strings.HasPrefix(key, prefix) { + keys = append(keys, key) + } + } + return keys, nil +} + +func (b memoryBucket) Get(key string) (io.ReadCloser, error) { + body, ok := b[key] + if !ok { + return nil, fs.ErrNotExist + } + return io.NopCloser(bytes.NewReader(body)), nil +} + +func gzipObject(t *testing.T, lines ...string) []byte { + t.Helper() + var buf bytes.Buffer + w := gzip.NewWriter(&buf) + if _, err := w.Write([]byte(strings.Join(lines, "\n") + "\n")); err != nil { + t.Fatal(err) + } + if err := w.Close(); err != nil { + t.Fatal(err) + } + return buf.Bytes() +} + +func caddyLineFor(host, method, uri, ip, agent string, status int) string { + return fmt.Sprintf(`{"status":%d,"request":{"host":%q,"method":%q,"uri":%q,"client_ip":%q,"headers":{"User-Agent":[%q]}}}`, + status, host, method, uri, ip, agent) +} + +func getJSON(t *testing.T, server *httptest.Server, path string) []map[string]any { + t.Helper() + response, err := http.Get(server.URL + path) + if err != nil { + t.Fatal(err) + } + defer response.Body.Close() + if response.StatusCode != http.StatusOK { + t.Fatalf("GET %s = %d", path, response.StatusCode) + } + var body struct { + Rows []map[string]any `json:"rows"` + } + if err := json.NewDecoder(response.Body).Decode(&body); err != nil { + t.Fatalf("GET %s: %v", path, err) + } + return body.Rows +} + +// rowsWhere keeps the rows whose fields all match; the database is shared +// across runs, so every assertion is scoped to this run's own host. +func rowsWhere(rows []map[string]any, match map[string]any) []map[string]any { + var out []map[string]any + for _, row := range rows { + ok := true + for key, want := range match { + if row[key] != want { + ok = false + } + } + if ok { + out = append(out, row) + } + } + return out +} + +func TestEndToEndFromShippedObjectsToEveryEndpoint(t *testing.T) { + url := os.Getenv("STATS_TEST_DB_URL") + if url == "" { + t.Skip("STATS_TEST_DB_URL not set; skipping the end-to-end test") + } + ctx := context.Background() + date := time.Now().UTC().Format("2006-01-02") + host := fmt.Sprintf("e2e-%d.example", time.Now().UnixNano()) + + geo, _, err := Locate(vendorFile(t)) + if err != nil { + t.Fatal(err) + } + bucket := memoryBucket{ + // Two caddy rolls for the same day, so the day's rows accumulate + // across objects the way hourly rolls do in production. + fmt.Sprintf("logs/source=caddy/dt=%s/%s-a.log.gz", date, host): gzipObject(t, + caddyLineFor(host, "GET", "/", "8.8.8.8", "Mozilla/5.0 (Macintosh) Chrome/126.0", 200), + caddyLineFor(host, "GET", "/", "8.8.8.8", "Mozilla/5.0 (Macintosh) Chrome/126.0", 200), + caddyLineFor(host, "GET", "/x", "57.141.3.4", "meta-externalagent/1.1", 403), + caddyLineFor(host, "GET", "/.env", "10.1.2.3", "TLM-Audit-Scanner/1.0", 404), + ), + fmt.Sprintf("logs/source=caddy/dt=%s/%s-b.log.gz", date, host): gzipObject(t, + caddyLineFor(host, "GET", "/.git/config", "57.141.3.4", "meta-externalagent/1.1", 403), + caddyLineFor("i.iili.uk", "GET", "/r/"+host, "8.8.8.8", "curl/8.6.0", 302), + ), + fmt.Sprintf("logs/source=one_d4/dt=%s/%s-events.log.gz", date, host): gzipObject(t, + eventLine("entry", "query", "source", "ui", "fields", "white.elo", "motifs", "fork", + "order_by", "", "player", "false", "limit", "10", "offset", "0", "cache", "live", + "rows", "3", "outcome", "ok", "duration_us", "1500"), + eventLine("entry", "aggregate", "source", "mcp", "fields", "eco", "motifs", "", + "order_by", "", "player", "true", "group_by", "eco", "order", "count", + "min_games", "0", "limit", "20", "rows", "2", "outcome", "ok", "duration_us", "9000"), + ), + } + + store, err := NewStore(ctx, url) + if err != nil { + t.Fatal(err) + } + t.Cleanup(store.Close) + logger := slog.New(slog.NewTextHandler(io.Discard, nil)) + aggregator := &Aggregator{Objects: bucket, Store: store, Logger: logger, Geo: geo} + + processed, err := aggregator.RunOnce(ctx) + if err != nil || processed != 3 { + t.Fatalf("RunOnce = (%d, %v), want all three objects", processed, err) + } + // A second pass finds nothing new: the markers hold, and nothing is + // counted twice. + if processed, err := aggregator.RunOnce(ctx); err != nil || processed != 0 { + t.Fatalf("second RunOnce = (%d, %v), want nothing to do", processed, err) + } + + server := httptest.NewServer(NewRouter(NewHandlers(store, logger))) + t.Cleanup(server.Close) + + // Summary: the host's five requests across three classes, the two 403s + // and the 404 as errors. + summary := rowsWhere(getJSON(t, server, "/stats/v1/summary?days=2"), map[string]any{"host": host}) + byClass := map[string][2]float64{} + for _, row := range summary { + byClass[row["agent_class"].(string)] = [2]float64{row["requests"].(float64), row["errors"].(float64)} + } + if byClass["browser"] != [2]float64{2, 0} || byClass["ai_scraper"] != [2]float64{2, 2} || byClass["bot"] != [2]float64{1, 1} { + t.Errorf("summary by class = %v", byClass) + } + + // Agents: the scraper by name, both of its requests refused. + meta := rowsWhere(getJSON(t, server, "/stats/v1/agents?days=2&limit=2000"), + map[string]any{"host": host, "agent": "meta-externalagent"}) + if len(meta) != 1 || meta[0]["requests"] != float64(2) || meta[0]["blocked"] != float64(2) { + t.Errorf("meta rows = %v", meta) + } + + // Probes: two families on this host, neither served. + probes := rowsWhere(getJSON(t, server, "/stats/v1/probes?days=2"), map[string]any{"host": host}) + families := map[string][2]float64{} + for _, row := range probes { + families[row["probe"].(string)] = [2]float64{row["requests"].(float64), row["served"].(float64)} + } + if families[ProbeEnv] != [2]float64{1, 0} || families[ProbeGit] != [2]float64{1, 0} { + t.Errorf("probe families = %v", families) + } + + // Countries, through the real vendor file: Google's resolver and + // Meta's range in the US, the private scanner unplaced. + countries := rowsWhere(getJSON(t, server, "/stats/v1/countries?days=2&limit=5000"), map[string]any{"host": host}) + placed := map[string]map[string]any{} + for _, row := range countries { + placed[row["agent_class"].(string)+"/"+row["country"].(string)] = row + } + if row := placed["ai_scraper/US"]; row == nil || row["requests"] != float64(2) || row["blocked"] != float64(2) || row["probes"] != float64(1) { + t.Errorf("scraper from US = %v", row) + } + if row := placed["browser/US"]; row == nil || row["requests"] != float64(2) { + t.Errorf("browsers from US = %v", row) + } + if row := placed["bot/"+UnknownCountry]; row == nil || row["requests"] != float64(1) || row["probes"] != float64(1) { + t.Errorf("private-address bot = %v", row) + } + + // Short links: the redirect on i.iili.uk, keyed by this run's slug. + slugs := rowsWhere(getJSON(t, server, "/stats/v1/iili/top?days=2&limit=200"), map[string]any{"slug": host}) + if len(slugs) != 1 || slugs[0]["requests"] != float64(1) { + t.Errorf("slug rows = %v", slugs) + } + + // one_d4 query events: the two entries share the day's rows with every + // other run, so the assertions are that this run's rows are present and + // that the term vocabulary came through; counts are lower bounds here. + queries := getJSON(t, server, "/stats/v1/one_d4/queries?days=2") + if len(rowsWhere(queries, map[string]any{"entry": "query", "source": "ui", "outcome": "ok", "cache": "live"})) != 1 || + len(rowsWhere(queries, map[string]any{"entry": "aggregate", "source": "mcp", "outcome": "ok", "cache": "none"})) != 1 { + t.Errorf("query rows = %v", queries) + } + terms := getJSON(t, server, "/stats/v1/one_d4/terms?days=2&limit=1000") + if len(rowsWhere(terms, map[string]any{"entry": "aggregate", "kind": KindGroupBy, "term": "eco"})) != 1 || + len(rowsWhere(terms, map[string]any{"entry": "query", "kind": KindMotif, "term": "fork"})) != 1 { + t.Errorf("term rows = %v", terms) + } + + // And the health probe, which the container healthcheck reads. + response, err := http.Get(server.URL + "/health") + if err != nil || response.StatusCode != http.StatusOK { + t.Errorf("GET /health = %v, %v", response, err) + } +} diff --git a/domains/platform/apis/stats/fixtures_test.go b/domains/platform/apis/stats/fixtures_test.go new file mode 100644 index 00000000..f2255ee1 --- /dev/null +++ b/domains/platform/apis/stats/fixtures_test.go @@ -0,0 +1,18 @@ +package stats + +import ( + "fmt" + "strings" +) + +// Lines as logback's JsonEncoder writes them for one_d4's query event +// (LogbackConfigTest pins the shape): kvpList is a list of one-entry +// objects, every value a string. +func eventLine(pairs ...string) string { + var kvps []string + for i := 0; i+1 < len(pairs); i += 2 { + kvps = append(kvps, fmt.Sprintf(`{"%s":"%s"}`, pairs[i], pairs[i+1])) + } + return `{"level":"INFO","loggerName":"com.muchq.games.one_d4.query_event","message":"query_event","kvpList":[` + + strings.Join(kvps, ",") + `]}` +} diff --git a/domains/platform/apis/stats/geo.go b/domains/platform/apis/stats/geo.go index 9caac681..9a61d123 100644 --- a/domains/platform/apis/stats/geo.go +++ b/domains/platform/apis/stats/geo.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/netip" + "os" "sort" "strings" ) @@ -18,6 +19,13 @@ type Locator interface { Country(ip string) string } +// DefaultGeoDBPath is where the image lays the DB-IP file (BUILD.bazel's +// geo_layer); geo_layer_test pins the two against each other. +const DefaultGeoDBPath = "/geo/dbip-country-lite.csv.gz" + +// unplacedCode is what DB-IP writes for space it does not place. +const unplacedCode = "ZZ" + // UnknownCountry is the geo row for an address no locator placed: a private // range, a malformed field, or no database loaded at all. const UnknownCountry = "--" @@ -73,6 +81,12 @@ func ParseDBIP(r io.Reader) (*Geo, int, error) { skipped++ continue } + // DB-IP files reserved and private space under ZZ, ISO's "unknown"; + // those rows are not a placement, and reading them as one would give + // every RFC 1918 address a country of its own. + if country == unplacedCode { + continue + } // Compared as stored: a v4-mapped v6 end against a v6 start is an // inverted range once both are unmapped, whatever they looked like. start, end = start.Unmap(), end.Unmap() @@ -126,21 +140,20 @@ func (g *Geo) Country(ip string) string { return candidate.country } -// LoadGeo reads the CSV object (gzipped when the key says so) from the -// bucket the logs live in. The key is the operator's: DB-IP publishes a -// new file monthly under CC BY 4.0, and muchq.com/stats carries the -// attribution. -func LoadGeo(objects ObjectStore, key string) (*Geo, int, error) { - body, err := objects.Get(key) +// LoadGeoFile reads the CSV from disk, gunzipping when the name says so. +// The file rides in the image: DB-IP publishes a new one monthly under +// CC BY 4.0, and muchq.com/stats carries the attribution. +func LoadGeoFile(path string) (*Geo, int, error) { + file, err := os.Open(path) if err != nil { - return nil, 0, fmt.Errorf("fetching geo database %s: %w", key, err) + return nil, 0, fmt.Errorf("opening geo database: %w", err) } - defer body.Close() - var reader io.Reader = body - if strings.HasSuffix(key, ".gz") { - gz, err := gzip.NewReader(body) + defer file.Close() + var reader io.Reader = file + if strings.HasSuffix(path, ".gz") { + gz, err := gzip.NewReader(file) if err != nil { - return nil, 0, fmt.Errorf("geo database %s is not gzip: %w", key, err) + return nil, 0, fmt.Errorf("geo database %s is not gzip: %w", path, err) } defer gz.Close() reader = gz @@ -148,29 +161,19 @@ func LoadGeo(objects ObjectStore, key string) (*Geo, int, error) { return ParseDBIP(reader) } -// Locate is the boot path: no key means no database, and a key that -// fails is retried — a bucket that is briefly unreachable while the -// container starts must not take every endpoint down with it — then -// reported for the caller to carry on without. It never fails a boot: -// an all-"--" table with an error in the log is the visible outcome, and -// a crash loop would hide every other table behind it. -func Locate(objects ObjectStore, key string, attempts int, wait func()) (Locator, int, error) { - if key == "" { +// Locate is the boot path: an empty path means no database, and a file +// that will not load is reported for the caller to run without — an +// all-"--" table with an error in the log, never a boot failure that +// hides every other table behind it. +func Locate(path string) (Locator, int, error) { + if path == "" { return NoLocator{}, 0, nil } - var err error - for attempt := 0; attempt < attempts; attempt++ { - if attempt > 0 { - wait() - } - var geo *Geo - var skipped int - geo, skipped, err = LoadGeo(objects, key) - if err == nil { - return geo, skipped, nil - } + geo, skipped, err := LoadGeoFile(path) + if err != nil { + return NoLocator{}, 0, err } - return NoLocator{}, 0, err + return geo, skipped, nil } // GeoKey is one row of the per-day geo rollup: where a host's traffic of diff --git a/domains/platform/apis/stats/geo_test.go b/domains/platform/apis/stats/geo_test.go index 6d769a4c..edd206fd 100644 --- a/domains/platform/apis/stats/geo_test.go +++ b/domains/platform/apis/stats/geo_test.go @@ -3,7 +3,8 @@ package stats import ( "bytes" "compress/gzip" - "errors" + "os" + "path/filepath" "strings" "testing" ) @@ -22,7 +23,8 @@ not,a,row 2.0.0.0,2.0.0.255,United States 3.0.0.0,2001:db8::,FR 2001:db8::,2001:db8:ffff:ffff:ffff:ffff:ffff:ffff,DE -9.9.9.9,9.9.9.1,ZZ +9.9.9.9,9.9.9.1,FR +0.0.0.0,0.255.255.255,ZZ 1.0.2.0,1.0.2.255,NZ 4.0.0.0,4.0.0.255,FR,extra 10.0.0.0,10.255.255.255,xx @@ -99,7 +101,7 @@ func TestAGeoFileWithNoUsableRowsIsAnError(t *testing.T) { } } -func TestLoadGeoReadsAGzippedObjectAndReportsAMissingOne(t *testing.T) { +func TestLoadGeoFileReadsGzippedOrPlainAndReportsAMissingOne(t *testing.T) { var buf bytes.Buffer w := gzip.NewWriter(&buf) if _, err := w.Write([]byte(dbipSample)); err != nil { @@ -108,59 +110,59 @@ func TestLoadGeoReadsAGzippedObjectAndReportsAMissingOne(t *testing.T) { if err := w.Close(); err != nil { t.Fatal(err) } - objects := &fakeObjects{objects: map[string][]byte{ - "geo/dbip-country-lite.csv.gz": buf.Bytes(), - "geo/plain.csv": []byte(dbipSample), - }, fail: map[string]error{"geo/missing.csv": errors.New("404")}} + dir := t.TempDir() + for name, contents := range map[string][]byte{ + "dbip-country-lite.csv.gz": buf.Bytes(), + "plain.csv": []byte(dbipSample), + "notgzip.csv.gz": []byte("not gzip"), + } { + if err := os.WriteFile(filepath.Join(dir, name), contents, 0o644); err != nil { + t.Fatal(err) + } + } - for _, key := range []string{"geo/dbip-country-lite.csv.gz", "geo/plain.csv"} { - geo, skipped, err := LoadGeo(objects, key) + for _, name := range []string{"dbip-country-lite.csv.gz", "plain.csv"} { + geo, skipped, err := LoadGeoFile(filepath.Join(dir, name)) if err != nil { - t.Fatalf("%s: %v", key, err) + t.Fatalf("%s: %v", name, err) } if geo.Country("57.141.3.4") != "US" || skipped != 6 { - t.Errorf("%s loaded but places nothing, or lost the skip count (%d)", key, skipped) + t.Errorf("%s loaded but places nothing, or lost the skip count (%d)", name, skipped) } } - if _, _, err := LoadGeo(objects, "geo/missing.csv"); err == nil { + if _, _, err := LoadGeoFile(filepath.Join(dir, "missing.csv")); err == nil { t.Error("a missing database loaded without complaint") } - if _, _, err := LoadGeo(&fakeObjects{objects: map[string][]byte{"geo/x.gz": []byte("not gzip")}}, "geo/x.gz"); err == nil { + if _, _, err := LoadGeoFile(filepath.Join(dir, "notgzip.csv.gz")); err == nil { t.Error("a .gz that is not gzip loaded without complaint") } } -// A quoted field with a stray quote is a bad row, not a dead database. -func TestAStrayQuoteIsOneSkippedRowNotAFailedLoad(t *testing.T) { - geo, skipped, err := ParseDBIP(strings.NewReader("1.0.0.0,1.0.0.255,AU\n\"1.0.1.0,1.0.1.255,\"C\"N\n")) - if err != nil || skipped != 1 || geo.Country("1.0.0.7") != "AU" { - t.Errorf("ParseDBIP = (%v, %d, %v); want the good row kept and the bad one counted", geo != nil, skipped, err) - } -} - -func TestLocateNeverFailsABootAndRetriesABucketThatIsNotThereYet(t *testing.T) { - geo, _, err := Locate(&fakeObjects{}, "", 3, func() {}) +func TestLocateNeverFailsABoot(t *testing.T) { + geo, _, err := Locate("") if _, none := geo.(NoLocator); !none || err != nil { - t.Errorf("Locate with no key = (%T, %v), want NoLocator and no error", geo, err) + t.Errorf("Locate with no path = (%T, %v), want NoLocator and no error", geo, err) } - objects := &fakeObjects{objects: map[string][]byte{"geo/plain.csv": []byte(dbipSample)}, - fail: map[string]error{"geo/plain.csv": errors.New("503 slow down")}} - waits := 0 - // The bucket answers on the third try. - geo, _, err = Locate(objects, "geo/plain.csv", 5, func() { - waits++ - if waits == 2 { - delete(objects.fail, "geo/plain.csv") - } - }) - if err != nil || geo.Country("57.141.3.4") != "US" || waits != 2 { - t.Errorf("Locate after a flaky bucket = (%v, %v, %d waits); want the database on the third try", geo, err, waits) + path := filepath.Join(t.TempDir(), "plain.csv") + if err := os.WriteFile(path, []byte(dbipSample), 0o644); err != nil { + t.Fatal(err) + } + geo, _, err = Locate(path) + if err != nil || geo.Country("57.141.3.4") != "US" { + t.Errorf("Locate(%s) = (%v, %v); want the database", path, geo, err) } - geo, _, err = Locate(&fakeObjects{fail: map[string]error{"geo/missing.csv": errors.New("404")}}, - "geo/missing.csv", 3, func() {}) + geo, _, err = Locate(filepath.Join(t.TempDir(), "missing.csv")) if _, none := geo.(NoLocator); !none || err == nil { - t.Errorf("Locate with a key that never loads = (%T, %v); want NoLocator and the error to log", geo, err) + t.Errorf("Locate with a file that is not there = (%T, %v); want NoLocator and the error to log", geo, err) + } +} + +// A quoted field with a stray quote is a bad row, not a dead database. +func TestAStrayQuoteIsOneSkippedRowNotAFailedLoad(t *testing.T) { + geo, skipped, err := ParseDBIP(strings.NewReader("1.0.0.0,1.0.0.255,AU\n\"1.0.1.0,1.0.1.255,\"C\"N\n")) + if err != nil || skipped != 1 || geo.Country("1.0.0.7") != "AU" { + t.Errorf("ParseDBIP = (%v, %d, %v); want the good row kept and the bad one counted", geo != nil, skipped, err) } } diff --git a/domains/platform/apis/stats/geo_vendor_test.go b/domains/platform/apis/stats/geo_vendor_test.go new file mode 100644 index 00000000..645fc414 --- /dev/null +++ b/domains/platform/apis/stats/geo_vendor_test.go @@ -0,0 +1,89 @@ +package stats + +import ( + "archive/tar" + "io" + "os" + "path/filepath" + "strings" + "testing" +) + +// The pinned DB-IP file through the real parser: the fixture in geo_test.go +// says what the format is, this says the vendor still agrees. Data deps +// resolve relative to the runfiles root. +func TestThePinnedVendorFileLoadsAndPlacesKnownAddresses(t *testing.T) { + geo, skipped, err := LoadGeoFile(vendorFile(t)) + if err != nil { + t.Fatal(err) + } + // The file has hundreds of thousands of ranges and no bad rows. Both + // bounds are loose on purpose: a new month moves the count, a parser + // that silently drops half the file does not. + if len(geo.ranges) < 100_000 { + t.Errorf("only %d ranges loaded from the vendor file", len(geo.ranges)) + } + if skipped > 100 { + t.Errorf("%d rows of the vendor file were skipped; the format has drifted from what ParseDBIP reads", skipped) + } + // Meta's crawler range from the git.muchq.com guard, and a Google + // resolver: allocations that have been where they are for years. + for ip, want := range map[string]string{"57.141.3.4": "US", "8.8.8.8": "US"} { + if got := geo.Country(ip); got != want { + t.Errorf("Country(%s) = %q, want %q", ip, got, want) + } + } + if geo.Country("10.1.2.3") != "" { + t.Error("a private address was placed in a country") + } +} + +// The image lays the file where main.go's default looks: one string, pinned +// from both sides through the layer tar the image is built from. +func TestTheImageLayerPutsTheFileWhereTheBinaryLooks(t *testing.T) { + file, err := os.Open(layerTar(t)) + if err != nil { + t.Fatal(err) + } + defer file.Close() + reader := tar.NewReader(file) + var names []string + for { + header, err := reader.Next() + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + names = append(names, "/"+strings.TrimPrefix(header.Name, "./")) + } + for _, name := range names { + if name == DefaultGeoDBPath { + return + } + } + t.Errorf("geo_layer holds %v; the binary reads %s", names, DefaultGeoDBPath) +} + +func vendorFile(t *testing.T) string { + t.Helper() + return runfile(t, "DBIP_COUNTRY_LITE") +} + +func layerTar(t *testing.T) string { + t.Helper() + return runfile(t, "GEO_LAYER_TAR") +} + +// Bazel passes data files by rootpath in env (BUILD.bazel's go_test env): +// relative to the runfiles root, while the test runs in its package +// directory, so they are joined back through TEST_SRCDIR. +func runfile(t *testing.T, name string) string { + t.Helper() + path := os.Getenv(name) + if path == "" { + t.Skipf("%s not set; run under bazel test", name) + } + return filepath.Join(os.Getenv("TEST_SRCDIR"), os.Getenv("TEST_WORKSPACE"), path) +} diff --git a/domains/platform/apis/stats/main/main.go b/domains/platform/apis/stats/main/main.go index d7d3fc49..849f9fb8 100644 --- a/domains/platform/apis/stats/main/main.go +++ b/domains/platform/apis/stats/main/main.go @@ -12,7 +12,6 @@ import ( "time" "github.com/muchq/moonbase/domains/platform/apis/stats" - "github.com/muchq/moonbase/domains/platform/libs/mucks" "github.com/muchq/moonbase/domains/platform/libs/s3lite" ) @@ -59,19 +58,23 @@ func main() { Client: &http.Client{Timeout: 5 * time.Minute}, Now: time.Now, } - // The geo database is optional. A key that will not load is logged and - // the service runs without it — every geo row reads "--" — rather than - // crash-looping the other endpoints behind a bucket hiccup or a typo. - geoKey := os.Getenv("GEO_DB_KEY") - geo, skipped, err := stats.Locate(objects, geoKey, 5, func() { time.Sleep(10 * time.Second) }) + // The geo database rides in the image; GEO_DB_PATH points elsewhere or, + // empty, switches geo off. A file that will not load is logged and the + // service runs without it — every geo row reads "--" — rather than + // failing a boot the other endpoints do not depend on. + geoPath, geoSet := os.LookupEnv("GEO_DB_PATH") + if !geoSet { + geoPath = stats.DefaultGeoDBPath + } + geo, skipped, err := stats.Locate(geoPath) switch { case err != nil: logger.Error("cannot load the geo database; geo rows will all read "+stats.UnknownCountry, - "key", geoKey, "error", err) - case geoKey == "": - logger.Warn("GEO_DB_KEY is not set; geo rows will all read " + stats.UnknownCountry) + "path", geoPath, "error", err) + case geoPath == "": + logger.Warn("GEO_DB_PATH is empty; geo rows will all read " + stats.UnknownCountry) default: - logger.Info("geo database loaded", "key", geoKey, "skipped_lines", skipped) + logger.Info("geo database loaded", "path", geoPath, "skipped_lines", skipped) } aggregator := &stats.Aggregator{ @@ -94,16 +97,7 @@ func main() { } }() - handlers := stats.NewHandlers(store, logger) - router := mucks.NewJsonMucks() - router.HandleFunc("GET /health", handlers.Health) - router.HandleFunc("GET /stats/v1/summary", handlers.GetSummary) - router.HandleFunc("GET /stats/v1/iili/top", handlers.GetTopSlugs) - router.HandleFunc("GET /stats/v1/agents", handlers.GetAgents) - router.HandleFunc("GET /stats/v1/probes", handlers.GetProbes) - router.HandleFunc("GET /stats/v1/one_d4/queries", handlers.GetQueries) - router.HandleFunc("GET /stats/v1/one_d4/terms", handlers.GetQueryTerms) - router.HandleFunc("GET /stats/v1/countries", handlers.GetCountries) + router := stats.NewRouter(stats.NewHandlers(store, logger)) logger.Info("stats started", "port", port, "interval", interval.String()) if err := http.ListenAndServe(":"+port, router); err != nil { diff --git a/domains/platform/apis/stats/queries_test.go b/domains/platform/apis/stats/queries_test.go index e7d141a3..9be91587 100644 --- a/domains/platform/apis/stats/queries_test.go +++ b/domains/platform/apis/stats/queries_test.go @@ -1,23 +1,10 @@ package stats import ( - "fmt" "strings" "testing" ) -// Lines as logback's JsonEncoder writes them for one_d4's query event -// (LogbackConfigTest pins the shape): kvpList is a list of one-entry -// objects, every value a string. -func eventLine(pairs ...string) string { - var kvps []string - for i := 0; i+1 < len(pairs); i += 2 { - kvps = append(kvps, fmt.Sprintf(`{"%s":"%s"}`, pairs[i], pairs[i+1])) - } - return `{"level":"INFO","loggerName":"com.muchq.games.one_d4.query_event","message":"query_event","kvpList":[` + - strings.Join(kvps, ",") + `]}` -} - func TestConsumeQueryEventsRollsUpTheBoundedPartAndTheTerms(t *testing.T) { lines := strings.Join([]string{ eventLine("entry", "query", "source", "ui", "fields", "white.elo,eco", "motifs", "fork", diff --git a/domains/platform/apps/log_shipper/README.md b/domains/platform/apps/log_shipper/README.md index 866f2fc4..7f7655bf 100644 --- a/domains/platform/apps/log_shipper/README.md +++ b/domains/platform/apps/log_shipper/README.md @@ -41,7 +41,7 @@ and anything that is not a rolled log are never touched. | --- | --- | | `S3_BUCKET` | Destination bucket (required) | | `S3_REGION` | Bucket's region (required) | -| `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` | The stats IAM user: `s3:PutObject` for this shipper, plus `s3:GetObject`/`s3:ListBucket` for the aggregator, all scoped to the bucket's `logs/*` prefix, plus `s3:GetObject` on the geo database's prefix (required) | +| `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` | The stats IAM user: `s3:PutObject` for this shipper, plus `s3:GetObject`/`s3:ListBucket` for the aggregator, all scoped to the bucket's `logs/*` prefix (required) | | `LOG_DIRS` | `label=dir` pairs, comma-separated: each directory ships under `logs/source=