From 0686249cfcd25eb68a82c2e915857fdd79a06d0e Mon Sep 17 00:00:00 2001 From: Kat Fox Date: Fri, 10 Apr 2026 12:53:12 +0100 Subject: [PATCH] [verilator] Add shutdown request mechanism Prior to this commit, Verilator tests would sometimes fail due to the chip simulation testbench calling $finish before `opentitantool console` could drain the UART buffer, triggering a test failure even after success was visibly reported over UART. To fix this, a 'virtual' REQUEST_EXIT pin has been added to the GPIO DPI to trigger a graceful shutdown of the verilated testbench, with the host then waiting a fixed timeout for the child subprocess to exit before killing it as before. Signed-off-by: Kat Fox --- MODULE.bazel.lock | 24 ++++++++++--- hw/dv/dpi/gpiodpi/gpiodpi.c | 25 ++++++++++--- hw/dv/dpi/gpiodpi/gpiodpi.h | 18 ++++++++-- hw/dv/dpi/gpiodpi/gpiodpi.sv | 25 ++++++++----- hw/top_earlgrey/dv/verilator/chip_sim_tb.sv | 9 +++-- sw/host/ot_transports/verilator/BUILD | 2 ++ .../ot_transports/verilator/src/subprocess.rs | 29 +++++++++++---- .../ot_transports/verilator/src/transport.rs | 35 ++++++++++++++----- third_party/rust/Cargo.lock | 10 ++++++ third_party/rust/Cargo.toml | 2 ++ 10 files changed, 141 insertions(+), 38 deletions(-) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index fb732c3e1a2..9e1f8c755cb 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -6445,8 +6445,8 @@ "@@+tock+elf2tab//Cargo.toml": "b3d5d0abcf067b73e0bbfed145dcf6c94b235100d14a6d5bfaed59ce585e0a54", "@@//third_party/mdbook/Cargo.lock": "016b012024cd9dce5be7c958215a9e09e13f005f42f66b199adeebf8f711a1b6", "@@//third_party/mdbook/Cargo.toml": "334d3b905cce5adf4db0c4dbccd00adf5e99e68af9cdda0e40bc9d970a882eec", - "@@//third_party/rust/Cargo.lock": "05b5db7d96aa8be48c0646b0b49828f4f888e4df848db118ba595d6d52b702c7", - "@@//third_party/rust/Cargo.toml": "a297fd699b3244e86c06675d7e2fdb402a90358c2399856914ffaacb1216e256", + "@@//third_party/rust/Cargo.lock": "c6b16443dbaf0d03ae96963b152933ee53e5580043fbbdf1ef11d55bdf7339b0", + "@@//third_party/rust/Cargo.toml": "c27ca4226ea4dd0e655d74fd5d7b458a454e005ebd78e83c997abb1dae4f3d04", "@@//third_party/tock/Cargo.lock": "b5a7a833ae205f1e3697a510e97e3185b44b195d7a22879b4669bff95febd5c8", "@@//third_party/tock/Cargo.toml": "3bceef09052741f82b750258f9ea85405e5ad48eafba2aafda6faf50ca147ef4" }, @@ -6465,9 +6465,9 @@ "repoRuleId": "@@rules_rust+//crate_universe:extensions.bzl%_generate_repo", "attributes": { "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 'lowrisc_opentitan'\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 = \"aes-0.8.4\",\n actual = \"@crate_index__aes-0.8.4//:aes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"aes\",\n actual = \"@crate_index__aes-0.8.4//:aes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anstyle-1.0.11\",\n actual = \"@crate_index__anstyle-1.0.11//:anstyle\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anstyle\",\n actual = \"@crate_index__anstyle-1.0.11//:anstyle\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow-1.0.98\",\n actual = \"@crate_index__anyhow-1.0.98//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow\",\n actual = \"@crate_index__anyhow-1.0.98//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"arrayvec-0.7.6\",\n actual = \"@crate_index__arrayvec-0.7.6//:arrayvec\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"arrayvec\",\n actual = \"@crate_index__arrayvec-0.7.6//:arrayvec\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"asn1-0.22.0\",\n actual = \"@crate_index__asn1-0.22.0//:asn1\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"asn1\",\n actual = \"@crate_index__asn1-0.22.0//:asn1\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64ct-1.8.0\",\n actual = \"@crate_index__base64ct-1.8.0//:base64ct\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64ct\",\n actual = \"@crate_index__base64ct-1.8.0//:base64ct\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitflags-2.9.1\",\n actual = \"@crate_index__bitflags-2.9.1//:bitflags\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitflags\",\n actual = \"@crate_index__bitflags-2.9.1//:bitflags\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"byteorder-1.5.0\",\n actual = \"@crate_index__byteorder-1.5.0//:byteorder\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"byteorder\",\n actual = \"@crate_index__byteorder-1.5.0//:byteorder\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"chrono-0.4.41\",\n actual = \"@crate_index__chrono-0.4.41//:chrono\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"chrono\",\n actual = \"@crate_index__chrono-0.4.41//:chrono\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.5.48\",\n actual = \"@crate_index__clap-4.5.48//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crate_index__clap-4.5.48//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"const-oid-0.9.6\",\n actual = \"@crate_index__const-oid-0.9.6//:const_oid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"const-oid\",\n actual = \"@crate_index__const-oid-0.9.6//:const_oid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"crc-3.3.0\",\n actual = \"@crate_index__crc-3.3.0//:crc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"crc\",\n actual = \"@crate_index__crc-3.3.0//:crc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-0.10.0\",\n actual = \"@crate_index__cryptoki-0.10.0//:cryptoki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki\",\n actual = \"@crate_index__cryptoki-0.10.0//:cryptoki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-sys-0.4.0\",\n actual = \"@crate_index__cryptoki-sys-0.4.0//:cryptoki_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-sys\",\n actual = \"@crate_index__cryptoki-sys-0.4.0//:cryptoki_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-sys-binding-srcs\",\n actual = \"@crate_index__cryptoki-sys-0.4.0//:binding_srcs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"der-0.7.10\",\n actual = \"@crate_index__der-0.7.10//:der\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"der\",\n actual = \"@crate_index__der-0.7.10//:der\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"deser-hjson-2.2.4\",\n actual = \"@crate_index__deser-hjson-2.2.4//:deser_hjson\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"deser-hjson\",\n actual = \"@crate_index__deser-hjson-2.2.4//:deser_hjson\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"directories-6.0.0\",\n actual = \"@crate_index__directories-6.0.0//:directories\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"directories\",\n actual = \"@crate_index__directories-6.0.0//:directories\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ecdsa-0.16.9\",\n actual = \"@crate_index__ecdsa-0.16.9//:ecdsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ecdsa\",\n actual = \"@crate_index__ecdsa-0.16.9//:ecdsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"elliptic-curve-0.13.8\",\n actual = \"@crate_index__elliptic-curve-0.13.8//:elliptic_curve\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"elliptic-curve\",\n actual = \"@crate_index__elliptic-curve-0.13.8//:elliptic_curve\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"embedded-hal-1.0.0\",\n actual = \"@crate_index__embedded-hal-1.0.0//:embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"embedded-hal\",\n actual = \"@crate_index__embedded-hal-1.0.0//:embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger-0.11.8\",\n actual = \"@crate_index__env_logger-0.11.8//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger\",\n actual = \"@crate_index__env_logger-0.11.8//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"erased-serde-0.4.6\",\n actual = \"@crate_index__erased-serde-0.4.6//:erased_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"erased-serde\",\n actual = \"@crate_index__erased-serde-0.4.6//:erased_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"foreign-types-0.3.2\",\n actual = \"@crate_index__foreign-types-0.3.2//:foreign_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"foreign-types\",\n actual = \"@crate_index__foreign-types-0.3.2//:foreign_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-0.1.3\",\n actual = \"@crate_index__ftdi-0.1.3//:ftdi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi\",\n actual = \"@crate_index__ftdi-0.1.3//:ftdi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-embedded-hal-0.23.2\",\n actual = \"@crate_index__ftdi-embedded-hal-0.23.2//:ftdi_embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-embedded-hal\",\n actual = \"@crate_index__ftdi-embedded-hal-0.23.2//:ftdi_embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-mpsse-0.1.2\",\n actual = \"@crate_index__ftdi-mpsse-0.1.2//:ftdi_mpsse\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-mpsse\",\n actual = \"@crate_index__ftdi-mpsse-0.1.2//:ftdi_mpsse\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"heck-0.5.0\",\n actual = \"@crate_index__heck-0.5.0//:heck\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"heck\",\n actual = \"@crate_index__heck-0.5.0//:heck\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hex-0.4.3\",\n actual = \"@crate_index__hex-0.4.3//:hex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hex\",\n actual = \"@crate_index__hex-0.4.3//:hex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime-2.2.0\",\n actual = \"@crate_index__humantime-2.2.0//:humantime\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime\",\n actual = \"@crate_index__humantime-2.2.0//:humantime\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime-serde-1.1.1\",\n actual = \"@crate_index__humantime-serde-1.1.1//:humantime_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime-serde\",\n actual = \"@crate_index__humantime-serde-1.1.1//:humantime_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap-2.10.0\",\n actual = \"@crate_index__indexmap-2.10.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap\",\n actual = \"@crate_index__indexmap-2.10.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif-0.18.0\",\n actual = \"@crate_index__indicatif-0.18.0//:indicatif\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif\",\n actual = \"@crate_index__indicatif-0.18.0//:indicatif\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indoc-2.0.6\",\n actual = \"@crate_index__indoc-2.0.6//:indoc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indoc\",\n actual = \"@crate_index__indoc-2.0.6//:indoc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"inventory-0.3.20\",\n actual = \"@crate_index__inventory-0.3.20//:inventory\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"inventory\",\n actual = \"@crate_index__inventory-0.3.20//:inventory\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"itertools-0.14.0\",\n actual = \"@crate_index__itertools-0.14.0//:itertools\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"itertools\",\n actual = \"@crate_index__itertools-0.14.0//:itertools\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libloading-0.8.8\",\n actual = \"@crate_index__libloading-0.8.8//:libloading\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libloading\",\n actual = \"@crate_index__libloading-0.8.8//:libloading\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.27\",\n actual = \"@crate_index__log-0.4.27//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crate_index__log-0.4.27//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-bigint-dig-0.8.4\",\n actual = \"@crate_index__num-bigint-dig-0.8.4//:num_bigint_dig\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-bigint-dig\",\n actual = \"@crate_index__num-bigint-dig-0.8.4//:num_bigint_dig\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-traits-0.2.19\",\n actual = \"@crate_index__num-traits-0.2.19//:num_traits\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-traits\",\n actual = \"@crate_index__num-traits-0.2.19//:num_traits\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"object-0.36.7\",\n actual = \"@crate_index__object-0.36.7//:object\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"object\",\n actual = \"@crate_index__object-0.36.7//:object\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell-1.21.3\",\n actual = \"@crate_index__once_cell-1.21.3//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell\",\n actual = \"@crate_index__once_cell-1.21.3//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl-0.10.73\",\n actual = \"@crate_index__openssl-0.10.73//:openssl\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl\",\n actual = \"@crate_index__openssl-0.10.73//:openssl\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl-sys-0.9.109\",\n actual = \"@crate_index__openssl-sys-0.9.109//:openssl_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl-sys\",\n actual = \"@crate_index__openssl-sys-0.9.109//:openssl_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p256-0.13.2\",\n actual = \"@crate_index__p256-0.13.2//:p256\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p256\",\n actual = \"@crate_index__p256-0.13.2//:p256\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p384-0.13.1\",\n actual = \"@crate_index__p384-0.13.1//:p384\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p384\",\n actual = \"@crate_index__p384-0.13.1//:p384\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"paste-1.0.15\",\n actual = \"@crate_index__paste-1.0.15//:paste\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"paste\",\n actual = \"@crate_index__paste-1.0.15//:paste\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pem-rfc7468-0.7.0\",\n actual = \"@crate_index__pem-rfc7468-0.7.0//:pem_rfc7468\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pem-rfc7468\",\n actual = \"@crate_index__pem-rfc7468-0.7.0//:pem_rfc7468\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest-2.8.1\",\n actual = \"@crate_index__pest-2.8.1//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest\",\n actual = \"@crate_index__pest-2.8.1//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive-2.8.1\",\n actual = \"@crate_index__pest_derive-2.8.1//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive\",\n actual = \"@crate_index__pest_derive-2.8.1//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2-1.0.95\",\n actual = \"@crate_index__proc-macro2-1.0.95//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2\",\n actual = \"@crate_index__proc-macro2-1.0.95//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote-1.0.40\",\n actual = \"@crate_index__quote-1.0.40//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote\",\n actual = \"@crate_index__quote-1.0.40//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand-0.8.5\",\n actual = \"@crate_index__rand-0.8.5//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand\",\n actual = \"@crate_index__rand-0.8.5//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand_chacha-0.3.1\",\n actual = \"@crate_index__rand_chacha-0.3.1//:rand_chacha\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand_chacha\",\n actual = \"@crate_index__rand_chacha-0.3.1//:rand_chacha\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex-1.11.1\",\n actual = \"@crate_index__regex-1.11.1//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex\",\n actual = \"@crate_index__regex-1.11.1//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rsa-0.9.8\",\n actual = \"@crate_index__rsa-0.9.8//:rsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rsa\",\n actual = \"@crate_index__rsa-0.9.8//:rsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusb-0.9.4\",\n actual = \"@crate_index__rusb-0.9.4//:rusb\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusb\",\n actual = \"@crate_index__rusb-0.9.4//:rusb\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustix-1.0.8\",\n actual = \"@crate_index__rustix-1.0.8//:rustix\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustix\",\n actual = \"@crate_index__rustix-1.0.8//:rustix\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scopeguard-1.2.0\",\n actual = \"@crate_index__scopeguard-1.2.0//:scopeguard\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scopeguard\",\n actual = \"@crate_index__scopeguard-1.2.0//:scopeguard\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.219\",\n actual = \"@crate_index__serde-1.0.219//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crate_index__serde-1.0.219//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_bytes-0.11.17\",\n actual = \"@crate_index__serde_bytes-0.11.17//:serde_bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_bytes\",\n actual = \"@crate_index__serde_bytes-0.11.17//:serde_bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.142\",\n actual = \"@crate_index__serde_json-1.0.142//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crate_index__serde_json-1.0.142//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_with-3.14.0\",\n actual = \"@crate_index__serde_with-3.14.0//:serde_with\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_with\",\n actual = \"@crate_index__serde_with-3.14.0//:serde_with\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serialport-4.7.2\",\n actual = \"@crate_index__serialport-4.7.2//:serialport\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serialport\",\n actual = \"@crate_index__serialport-4.7.2//:serialport\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2-0.10.9\",\n actual = \"@crate_index__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2\",\n actual = \"@crate_index__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha3-0.10.8\",\n actual = \"@crate_index__sha3-0.10.8//:sha3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha3\",\n actual = \"@crate_index__sha3-0.10.8//:sha3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"shellwords-1.1.0\",\n actual = \"@crate_index__shellwords-1.1.0//:shellwords\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"shellwords\",\n actual = \"@crate_index__shellwords-1.1.0//:shellwords\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"strum-0.27.2\",\n actual = \"@crate_index__strum-0.27.2//:strum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"strum\",\n actual = \"@crate_index__strum-0.27.2//:strum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn-2.0.104\",\n actual = \"@crate_index__syn-2.0.104//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn\",\n actual = \"@crate_index__syn-2.0.104//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.20.0\",\n actual = \"@crate_index__tempfile-3.20.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@crate_index__tempfile-3.20.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-2.0.12\",\n actual = \"@crate_index__thiserror-2.0.12//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@crate_index__thiserror-2.0.12//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tiny-keccak-2.0.2\",\n actual = \"@crate_index__tiny-keccak-2.0.2//:tiny_keccak\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tiny-keccak\",\n actual = \"@crate_index__tiny-keccak-2.0.2//:tiny_keccak\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.47.1\",\n actual = \"@crate_index__tokio-1.47.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crate_index__tokio-1.47.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"typetag-0.2.20\",\n actual = \"@crate_index__typetag-0.2.20//:typetag\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"typetag\",\n actual = \"@crate_index__typetag-0.2.20//:typetag\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zerocopy-0.8.26\",\n actual = \"@crate_index__zerocopy-0.8.26//:zerocopy\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zerocopy\",\n actual = \"@crate_index__zerocopy-0.8.26//:zerocopy\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zeroize-1.8.1\",\n actual = \"@crate_index__zeroize-1.8.1//:zeroize\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zeroize\",\n actual = \"@crate_index__zeroize-1.8.1//:zeroize\",\n tags = [\"manual\"],\n)\n", + "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 'lowrisc_opentitan'\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 = \"aes-0.8.4\",\n actual = \"@crate_index__aes-0.8.4//:aes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"aes\",\n actual = \"@crate_index__aes-0.8.4//:aes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anstyle-1.0.11\",\n actual = \"@crate_index__anstyle-1.0.11//:anstyle\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anstyle\",\n actual = \"@crate_index__anstyle-1.0.11//:anstyle\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow-1.0.98\",\n actual = \"@crate_index__anyhow-1.0.98//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow\",\n actual = \"@crate_index__anyhow-1.0.98//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"arrayvec-0.7.6\",\n actual = \"@crate_index__arrayvec-0.7.6//:arrayvec\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"arrayvec\",\n actual = \"@crate_index__arrayvec-0.7.6//:arrayvec\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"asn1-0.22.0\",\n actual = \"@crate_index__asn1-0.22.0//:asn1\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"asn1\",\n actual = \"@crate_index__asn1-0.22.0//:asn1\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64ct-1.8.0\",\n actual = \"@crate_index__base64ct-1.8.0//:base64ct\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"base64ct\",\n actual = \"@crate_index__base64ct-1.8.0//:base64ct\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitflags-2.9.1\",\n actual = \"@crate_index__bitflags-2.9.1//:bitflags\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bitflags\",\n actual = \"@crate_index__bitflags-2.9.1//:bitflags\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"byteorder-1.5.0\",\n actual = \"@crate_index__byteorder-1.5.0//:byteorder\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"byteorder\",\n actual = \"@crate_index__byteorder-1.5.0//:byteorder\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"chrono-0.4.41\",\n actual = \"@crate_index__chrono-0.4.41//:chrono\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"chrono\",\n actual = \"@crate_index__chrono-0.4.41//:chrono\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.5.48\",\n actual = \"@crate_index__clap-4.5.48//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crate_index__clap-4.5.48//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"const-oid-0.9.6\",\n actual = \"@crate_index__const-oid-0.9.6//:const_oid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"const-oid\",\n actual = \"@crate_index__const-oid-0.9.6//:const_oid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"crc-3.3.0\",\n actual = \"@crate_index__crc-3.3.0//:crc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"crc\",\n actual = \"@crate_index__crc-3.3.0//:crc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-0.10.0\",\n actual = \"@crate_index__cryptoki-0.10.0//:cryptoki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki\",\n actual = \"@crate_index__cryptoki-0.10.0//:cryptoki\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-sys-0.4.0\",\n actual = \"@crate_index__cryptoki-sys-0.4.0//:cryptoki_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-sys\",\n actual = \"@crate_index__cryptoki-sys-0.4.0//:cryptoki_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cryptoki-sys-binding-srcs\",\n actual = \"@crate_index__cryptoki-sys-0.4.0//:binding_srcs\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"der-0.7.10\",\n actual = \"@crate_index__der-0.7.10//:der\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"der\",\n actual = \"@crate_index__der-0.7.10//:der\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"deser-hjson-2.2.4\",\n actual = \"@crate_index__deser-hjson-2.2.4//:deser_hjson\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"deser-hjson\",\n actual = \"@crate_index__deser-hjson-2.2.4//:deser_hjson\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"directories-6.0.0\",\n actual = \"@crate_index__directories-6.0.0//:directories\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"directories\",\n actual = \"@crate_index__directories-6.0.0//:directories\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ecdsa-0.16.9\",\n actual = \"@crate_index__ecdsa-0.16.9//:ecdsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ecdsa\",\n actual = \"@crate_index__ecdsa-0.16.9//:ecdsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"elliptic-curve-0.13.8\",\n actual = \"@crate_index__elliptic-curve-0.13.8//:elliptic_curve\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"elliptic-curve\",\n actual = \"@crate_index__elliptic-curve-0.13.8//:elliptic_curve\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"embedded-hal-1.0.0\",\n actual = \"@crate_index__embedded-hal-1.0.0//:embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"embedded-hal\",\n actual = \"@crate_index__embedded-hal-1.0.0//:embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger-0.11.8\",\n actual = \"@crate_index__env_logger-0.11.8//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger\",\n actual = \"@crate_index__env_logger-0.11.8//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"erased-serde-0.4.6\",\n actual = \"@crate_index__erased-serde-0.4.6//:erased_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"erased-serde\",\n actual = \"@crate_index__erased-serde-0.4.6//:erased_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"foreign-types-0.3.2\",\n actual = \"@crate_index__foreign-types-0.3.2//:foreign_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"foreign-types\",\n actual = \"@crate_index__foreign-types-0.3.2//:foreign_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-0.1.3\",\n actual = \"@crate_index__ftdi-0.1.3//:ftdi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi\",\n actual = \"@crate_index__ftdi-0.1.3//:ftdi\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-embedded-hal-0.23.2\",\n actual = \"@crate_index__ftdi-embedded-hal-0.23.2//:ftdi_embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-embedded-hal\",\n actual = \"@crate_index__ftdi-embedded-hal-0.23.2//:ftdi_embedded_hal\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-mpsse-0.1.2\",\n actual = \"@crate_index__ftdi-mpsse-0.1.2//:ftdi_mpsse\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ftdi-mpsse\",\n actual = \"@crate_index__ftdi-mpsse-0.1.2//:ftdi_mpsse\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"heck-0.5.0\",\n actual = \"@crate_index__heck-0.5.0//:heck\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"heck\",\n actual = \"@crate_index__heck-0.5.0//:heck\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hex-0.4.3\",\n actual = \"@crate_index__hex-0.4.3//:hex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"hex\",\n actual = \"@crate_index__hex-0.4.3//:hex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime-2.2.0\",\n actual = \"@crate_index__humantime-2.2.0//:humantime\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime\",\n actual = \"@crate_index__humantime-2.2.0//:humantime\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime-serde-1.1.1\",\n actual = \"@crate_index__humantime-serde-1.1.1//:humantime_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"humantime-serde\",\n actual = \"@crate_index__humantime-serde-1.1.1//:humantime_serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap-2.10.0\",\n actual = \"@crate_index__indexmap-2.10.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indexmap\",\n actual = \"@crate_index__indexmap-2.10.0//:indexmap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif-0.18.0\",\n actual = \"@crate_index__indicatif-0.18.0//:indicatif\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif\",\n actual = \"@crate_index__indicatif-0.18.0//:indicatif\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indoc-2.0.6\",\n actual = \"@crate_index__indoc-2.0.6//:indoc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indoc\",\n actual = \"@crate_index__indoc-2.0.6//:indoc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"inventory-0.3.20\",\n actual = \"@crate_index__inventory-0.3.20//:inventory\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"inventory\",\n actual = \"@crate_index__inventory-0.3.20//:inventory\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"itertools-0.14.0\",\n actual = \"@crate_index__itertools-0.14.0//:itertools\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"itertools\",\n actual = \"@crate_index__itertools-0.14.0//:itertools\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libloading-0.8.8\",\n actual = \"@crate_index__libloading-0.8.8//:libloading\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libloading\",\n actual = \"@crate_index__libloading-0.8.8//:libloading\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.27\",\n actual = \"@crate_index__log-0.4.27//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crate_index__log-0.4.27//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-bigint-dig-0.8.4\",\n actual = \"@crate_index__num-bigint-dig-0.8.4//:num_bigint_dig\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-bigint-dig\",\n actual = \"@crate_index__num-bigint-dig-0.8.4//:num_bigint_dig\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-traits-0.2.19\",\n actual = \"@crate_index__num-traits-0.2.19//:num_traits\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"num-traits\",\n actual = \"@crate_index__num-traits-0.2.19//:num_traits\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"object-0.36.7\",\n actual = \"@crate_index__object-0.36.7//:object\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"object\",\n actual = \"@crate_index__object-0.36.7//:object\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell-1.21.3\",\n actual = \"@crate_index__once_cell-1.21.3//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell\",\n actual = \"@crate_index__once_cell-1.21.3//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl-0.10.73\",\n actual = \"@crate_index__openssl-0.10.73//:openssl\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl\",\n actual = \"@crate_index__openssl-0.10.73//:openssl\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl-sys-0.9.109\",\n actual = \"@crate_index__openssl-sys-0.9.109//:openssl_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"openssl-sys\",\n actual = \"@crate_index__openssl-sys-0.9.109//:openssl_sys\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p256-0.13.2\",\n actual = \"@crate_index__p256-0.13.2//:p256\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p256\",\n actual = \"@crate_index__p256-0.13.2//:p256\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p384-0.13.1\",\n actual = \"@crate_index__p384-0.13.1//:p384\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"p384\",\n actual = \"@crate_index__p384-0.13.1//:p384\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"paste-1.0.15\",\n actual = \"@crate_index__paste-1.0.15//:paste\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"paste\",\n actual = \"@crate_index__paste-1.0.15//:paste\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pem-rfc7468-0.7.0\",\n actual = \"@crate_index__pem-rfc7468-0.7.0//:pem_rfc7468\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pem-rfc7468\",\n actual = \"@crate_index__pem-rfc7468-0.7.0//:pem_rfc7468\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest-2.8.1\",\n actual = \"@crate_index__pest-2.8.1//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest\",\n actual = \"@crate_index__pest-2.8.1//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive-2.8.1\",\n actual = \"@crate_index__pest_derive-2.8.1//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive\",\n actual = \"@crate_index__pest_derive-2.8.1//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2-1.0.95\",\n actual = \"@crate_index__proc-macro2-1.0.95//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2\",\n actual = \"@crate_index__proc-macro2-1.0.95//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote-1.0.40\",\n actual = \"@crate_index__quote-1.0.40//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote\",\n actual = \"@crate_index__quote-1.0.40//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand-0.8.5\",\n actual = \"@crate_index__rand-0.8.5//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand\",\n actual = \"@crate_index__rand-0.8.5//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand_chacha-0.3.1\",\n actual = \"@crate_index__rand_chacha-0.3.1//:rand_chacha\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand_chacha\",\n actual = \"@crate_index__rand_chacha-0.3.1//:rand_chacha\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex-1.11.1\",\n actual = \"@crate_index__regex-1.11.1//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex\",\n actual = \"@crate_index__regex-1.11.1//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rsa-0.9.8\",\n actual = \"@crate_index__rsa-0.9.8//:rsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rsa\",\n actual = \"@crate_index__rsa-0.9.8//:rsa\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusb-0.9.4\",\n actual = \"@crate_index__rusb-0.9.4//:rusb\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusb\",\n actual = \"@crate_index__rusb-0.9.4//:rusb\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustix-1.0.8\",\n actual = \"@crate_index__rustix-1.0.8//:rustix\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rustix\",\n actual = \"@crate_index__rustix-1.0.8//:rustix\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scopeguard-1.2.0\",\n actual = \"@crate_index__scopeguard-1.2.0//:scopeguard\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"scopeguard\",\n actual = \"@crate_index__scopeguard-1.2.0//:scopeguard\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.219\",\n actual = \"@crate_index__serde-1.0.219//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crate_index__serde-1.0.219//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_bytes-0.11.17\",\n actual = \"@crate_index__serde_bytes-0.11.17//:serde_bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_bytes\",\n actual = \"@crate_index__serde_bytes-0.11.17//:serde_bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.142\",\n actual = \"@crate_index__serde_json-1.0.142//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crate_index__serde_json-1.0.142//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_with-3.14.0\",\n actual = \"@crate_index__serde_with-3.14.0//:serde_with\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_with\",\n actual = \"@crate_index__serde_with-3.14.0//:serde_with\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serialport-4.7.2\",\n actual = \"@crate_index__serialport-4.7.2//:serialport\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serialport\",\n actual = \"@crate_index__serialport-4.7.2//:serialport\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2-0.10.9\",\n actual = \"@crate_index__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2\",\n actual = \"@crate_index__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha3-0.10.8\",\n actual = \"@crate_index__sha3-0.10.8//:sha3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha3\",\n actual = \"@crate_index__sha3-0.10.8//:sha3\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"shellwords-1.1.0\",\n actual = \"@crate_index__shellwords-1.1.0//:shellwords\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"shellwords\",\n actual = \"@crate_index__shellwords-1.1.0//:shellwords\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"strum-0.27.2\",\n actual = \"@crate_index__strum-0.27.2//:strum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"strum\",\n actual = \"@crate_index__strum-0.27.2//:strum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn-2.0.104\",\n actual = \"@crate_index__syn-2.0.104//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn\",\n actual = \"@crate_index__syn-2.0.104//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.20.0\",\n actual = \"@crate_index__tempfile-3.20.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@crate_index__tempfile-3.20.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-2.0.12\",\n actual = \"@crate_index__thiserror-2.0.12//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@crate_index__thiserror-2.0.12//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tiny-keccak-2.0.2\",\n actual = \"@crate_index__tiny-keccak-2.0.2//:tiny_keccak\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tiny-keccak\",\n actual = \"@crate_index__tiny-keccak-2.0.2//:tiny_keccak\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.47.1\",\n actual = \"@crate_index__tokio-1.47.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crate_index__tokio-1.47.1//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"typetag-0.2.20\",\n actual = \"@crate_index__typetag-0.2.20//:typetag\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"typetag\",\n actual = \"@crate_index__typetag-0.2.20//:typetag\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"wait-timeout-0.2.1\",\n actual = \"@crate_index__wait-timeout-0.2.1//:wait_timeout\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"wait-timeout\",\n actual = \"@crate_index__wait-timeout-0.2.1//:wait_timeout\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zerocopy-0.8.26\",\n actual = \"@crate_index__zerocopy-0.8.26//:zerocopy\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zerocopy\",\n actual = \"@crate_index__zerocopy-0.8.26//:zerocopy\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zeroize-1.8.1\",\n actual = \"@crate_index__zeroize-1.8.1//:zeroize\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"zeroize\",\n actual = \"@crate_index__zeroize-1.8.1//:zeroize\",\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", - "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 'lowrisc_opentitan'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\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\", \"new_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/private:local_crate_mirror.bzl\", \"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 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 AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n \"aes\": Label(\"@crate_index//:aes-0.8.4\"),\n \"anstyle\": Label(\"@crate_index//:anstyle-1.0.11\"),\n \"anyhow\": Label(\"@crate_index//:anyhow-1.0.98\"),\n \"arrayvec\": Label(\"@crate_index//:arrayvec-0.7.6\"),\n \"asn1\": Label(\"@crate_index//:asn1-0.22.0\"),\n \"base64ct\": Label(\"@crate_index//:base64ct-1.8.0\"),\n \"bitflags\": Label(\"@crate_index//:bitflags-2.9.1\"),\n \"byteorder\": Label(\"@crate_index//:byteorder-1.5.0\"),\n \"chrono\": Label(\"@crate_index//:chrono-0.4.41\"),\n \"clap\": Label(\"@crate_index//:clap-4.5.48\"),\n \"const-oid\": Label(\"@crate_index//:const-oid-0.9.6\"),\n \"crc\": Label(\"@crate_index//:crc-3.3.0\"),\n \"cryptoki\": Label(\"@crate_index//:cryptoki-0.10.0\"),\n \"cryptoki-sys\": Label(\"@crate_index//:cryptoki-sys-0.4.0\"),\n \"der\": Label(\"@crate_index//:der-0.7.10\"),\n \"deser-hjson\": Label(\"@crate_index//:deser-hjson-2.2.4\"),\n \"directories\": Label(\"@crate_index//:directories-6.0.0\"),\n \"ecdsa\": Label(\"@crate_index//:ecdsa-0.16.9\"),\n \"elliptic-curve\": Label(\"@crate_index//:elliptic-curve-0.13.8\"),\n \"embedded-hal\": Label(\"@crate_index//:embedded-hal-1.0.0\"),\n \"env_logger\": Label(\"@crate_index//:env_logger-0.11.8\"),\n \"erased-serde\": Label(\"@crate_index//:erased-serde-0.4.6\"),\n \"foreign-types\": Label(\"@crate_index//:foreign-types-0.3.2\"),\n \"ftdi\": Label(\"@crate_index//:ftdi-0.1.3\"),\n \"ftdi-embedded-hal\": Label(\"@crate_index//:ftdi-embedded-hal-0.23.2\"),\n \"ftdi-mpsse\": Label(\"@crate_index//:ftdi-mpsse-0.1.2\"),\n \"heck\": Label(\"@crate_index//:heck-0.5.0\"),\n \"hex\": Label(\"@crate_index//:hex-0.4.3\"),\n \"humantime\": Label(\"@crate_index//:humantime-2.2.0\"),\n \"humantime-serde\": Label(\"@crate_index//:humantime-serde-1.1.1\"),\n \"indexmap\": Label(\"@crate_index//:indexmap-2.10.0\"),\n \"indicatif\": Label(\"@crate_index//:indicatif-0.18.0\"),\n \"inventory\": Label(\"@crate_index//:inventory-0.3.20\"),\n \"itertools\": Label(\"@crate_index//:itertools-0.14.0\"),\n \"libloading\": Label(\"@crate_index//:libloading-0.8.8\"),\n \"log\": Label(\"@crate_index//:log-0.4.27\"),\n \"num-bigint-dig\": Label(\"@crate_index//:num-bigint-dig-0.8.4\"),\n \"num-traits\": Label(\"@crate_index//:num-traits-0.2.19\"),\n \"object\": Label(\"@crate_index//:object-0.36.7\"),\n \"once_cell\": Label(\"@crate_index//:once_cell-1.21.3\"),\n \"openssl\": Label(\"@crate_index//:openssl-0.10.73\"),\n \"openssl-sys\": Label(\"@crate_index//:openssl-sys-0.9.109\"),\n \"p256\": Label(\"@crate_index//:p256-0.13.2\"),\n \"p384\": Label(\"@crate_index//:p384-0.13.1\"),\n \"pem-rfc7468\": Label(\"@crate_index//:pem-rfc7468-0.7.0\"),\n \"pest\": Label(\"@crate_index//:pest-2.8.1\"),\n \"proc-macro2\": Label(\"@crate_index//:proc-macro2-1.0.95\"),\n \"quote\": Label(\"@crate_index//:quote-1.0.40\"),\n \"rand\": Label(\"@crate_index//:rand-0.8.5\"),\n \"rand_chacha\": Label(\"@crate_index//:rand_chacha-0.3.1\"),\n \"regex\": Label(\"@crate_index//:regex-1.11.1\"),\n \"rsa\": Label(\"@crate_index//:rsa-0.9.8\"),\n \"rusb\": Label(\"@crate_index//:rusb-0.9.4\"),\n \"rustix\": Label(\"@crate_index//:rustix-1.0.8\"),\n \"scopeguard\": Label(\"@crate_index//:scopeguard-1.2.0\"),\n \"serde\": Label(\"@crate_index//:serde-1.0.219\"),\n \"serde_bytes\": Label(\"@crate_index//:serde_bytes-0.11.17\"),\n \"serde_json\": Label(\"@crate_index//:serde_json-1.0.142\"),\n \"serde_with\": Label(\"@crate_index//:serde_with-3.14.0\"),\n \"serialport\": Label(\"@crate_index//:serialport-4.7.2\"),\n \"sha2\": Label(\"@crate_index//:sha2-0.10.9\"),\n \"sha3\": Label(\"@crate_index//:sha3-0.10.8\"),\n \"shellwords\": Label(\"@crate_index//:shellwords-1.1.0\"),\n \"strum\": Label(\"@crate_index//:strum-0.27.2\"),\n \"syn\": Label(\"@crate_index//:syn-2.0.104\"),\n \"tempfile\": Label(\"@crate_index//:tempfile-3.20.0\"),\n \"thiserror\": Label(\"@crate_index//:thiserror-2.0.12\"),\n \"tiny-keccak\": Label(\"@crate_index//:tiny-keccak-2.0.2\"),\n \"tokio\": Label(\"@crate_index//:tokio-1.47.1\"),\n \"typetag\": Label(\"@crate_index//:typetag-0.2.20\"),\n \"zerocopy\": Label(\"@crate_index//:zerocopy-0.8.26\"),\n \"zeroize\": Label(\"@crate_index//:zeroize-1.8.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"third_party/rust\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n \"paste\": Label(\"@crate_index//:paste-1.0.15\"),\n \"pest_derive\": Label(\"@crate_index//:pest_derive-2.8.1\"),\n },\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n \"indoc\": Label(\"@crate_index//:indoc-2.0.6\"),\n },\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-linux-android\": [],\n \"aarch64-pc-windows-gnullvm\": [],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"), 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: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: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\\\")))))))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\": [],\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 = \\\"linux\\\", not(target_env = \\\"musl\\\")))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(tokio_uring, target_os = \\\"linux\\\"))\": [],\n \"cfg(all(windows, target_env = \\\"msvc\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@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 = \\\"macos\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(windows, target_os = \\\"cygwin\\\"))\": [],\n \"cfg(not(all(windows, target_env = \\\"msvc\\\")))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_has_atomic = \\\"ptr\\\"))\": [],\n \"cfg(target_arch = \\\"aarch64\\\")\": [],\n \"cfg(target_arch = \\\"wasm32\\\")\": [],\n \"cfg(target_family = \\\"wasm\\\")\": [],\n \"cfg(target_os = \\\"android\\\")\": [],\n \"cfg(target_os = \\\"haiku\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\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\\\")\": [],\n \"cfg(tokio_taskdump)\": [],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"cfg(windows_raw_dylib)\": [],\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 http_archive,\n name = \"crate_index__addr2line-0.24.2\",\n sha256 = \"dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/addr2line/0.24.2/download\"],\n strip_prefix = \"addr2line-0.24.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.addr2line-0.24.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.adler2-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__aes-0.8.4\",\n sha256 = \"b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aes/0.8.4/download\"],\n strip_prefix = \"aes-0.8.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.aes-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__aho-corasick-1.1.3\",\n sha256 = \"8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.3/download\"],\n strip_prefix = \"aho-corasick-1.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.aho-corasick-1.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__android-tzdata-0.1.1\",\n sha256 = \"e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/android-tzdata/0.1.1/download\"],\n strip_prefix = \"android-tzdata-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.android-tzdata-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.android_system_properties-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstream-0.6.20\",\n sha256 = \"3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/0.6.20/download\"],\n strip_prefix = \"anstream-0.6.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstream-0.6.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-1.0.11\",\n sha256 = \"862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.11/download\"],\n strip_prefix = \"anstyle-1.0.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-1.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-parse-0.2.7\",\n sha256 = \"4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/0.2.7/download\"],\n strip_prefix = \"anstyle-parse-0.2.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-parse-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-query-1.1.4\",\n sha256 = \"9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.4/download\"],\n strip_prefix = \"anstyle-query-1.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-query-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-wincon-3.0.10\",\n sha256 = \"3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.10/download\"],\n strip_prefix = \"anstyle-wincon-3.0.10\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-wincon-3.0.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anyhow-1.0.98\",\n sha256 = \"e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.98/download\"],\n strip_prefix = \"anyhow-1.0.98\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anyhow-1.0.98.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__arrayvec-0.7.6\",\n sha256 = \"7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/arrayvec/0.7.6/download\"],\n strip_prefix = \"arrayvec-0.7.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.arrayvec-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__asn1-0.22.0\",\n sha256 = \"df42c2b01c5e1060b8281f67b4e5fb858260694916a667345a7305cd11e5dbfa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1/0.22.0/download\"],\n strip_prefix = \"asn1-0.22.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.asn1-0.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__asn1_derive-0.22.0\",\n sha256 = \"cdccf849b54365e3693e9a90ad36e4482b79937e6373ac8e2cf229c985187b21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1_derive/0.22.0/download\"],\n strip_prefix = \"asn1_derive-0.22.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.asn1_derive-0.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__autocfg-1.5.0\",\n sha256 = \"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/autocfg/1.5.0/download\"],\n strip_prefix = \"autocfg-1.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.autocfg-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__backtrace-0.3.75\",\n sha256 = \"6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/backtrace/0.3.75/download\"],\n strip_prefix = \"backtrace-0.3.75\",\n build_file = Label(\"@crate_index//crate_index:BUILD.backtrace-0.3.75.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__base16ct-0.2.0\",\n sha256 = \"4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base16ct/0.2.0/download\"],\n strip_prefix = \"base16ct-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.base16ct-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__base64ct-1.8.0\",\n sha256 = \"55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64ct/1.8.0/download\"],\n strip_prefix = \"base64ct-1.8.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.base64ct-1.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.bitflags-1.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bitflags-2.9.1\",\n sha256 = \"1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.9.1/download\"],\n strip_prefix = \"bitflags-2.9.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bitflags-2.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bumpalo-3.19.0\",\n sha256 = \"46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.19.0/download\"],\n strip_prefix = \"bumpalo-3.19.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bumpalo-3.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.byteorder-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bytes-1.10.1\",\n sha256 = \"d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.10.1/download\"],\n strip_prefix = \"bytes-1.10.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bytes-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cc-1.2.31\",\n sha256 = \"c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.31/download\"],\n strip_prefix = \"cc-1.2.31\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cc-1.2.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cfg-if-1.0.1\",\n sha256 = \"9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.1/download\"],\n strip_prefix = \"cfg-if-1.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cfg-if-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__chrono-0.4.41\",\n sha256 = \"c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chrono/0.4.41/download\"],\n strip_prefix = \"chrono-0.4.41\",\n build_file = Label(\"@crate_index//crate_index:BUILD.chrono-0.4.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cipher-0.4.4\",\n sha256 = \"773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cipher/0.4.4/download\"],\n strip_prefix = \"cipher-0.4.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cipher-0.4.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap-4.5.48\",\n sha256 = \"e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.5.48/download\"],\n strip_prefix = \"clap-4.5.48\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap-4.5.48.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_builder-4.5.48\",\n sha256 = \"c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.5.48/download\"],\n strip_prefix = \"clap_builder-4.5.48\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_builder-4.5.48.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_derive-4.5.47\",\n sha256 = \"bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.5.47/download\"],\n strip_prefix = \"clap_derive-4.5.47\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_derive-4.5.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_lex-0.7.5\",\n sha256 = \"b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/0.7.5/download\"],\n strip_prefix = \"clap_lex-0.7.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_lex-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__colorchoice-1.0.4\",\n sha256 = \"b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.4/download\"],\n strip_prefix = \"colorchoice-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.colorchoice-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__console-0.16.0\",\n sha256 = \"2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/console/0.16.0/download\"],\n strip_prefix = \"console-0.16.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.console-0.16.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__const-oid-0.9.6\",\n sha256 = \"c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/const-oid/0.9.6/download\"],\n strip_prefix = \"const-oid-0.9.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.const-oid-0.9.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.core-foundation-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crc-3.3.0\",\n sha256 = \"9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crc/3.3.0/download\"],\n strip_prefix = \"crc-3.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crc-3.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crc-catalog-2.4.0\",\n sha256 = \"19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crc-catalog/2.4.0/download\"],\n strip_prefix = \"crc-catalog-2.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crc-catalog-2.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.crc32fast-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crypto-bigint-0.5.5\",\n sha256 = \"0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-bigint/0.5.5/download\"],\n strip_prefix = \"crypto-bigint-0.5.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crypto-bigint-0.5.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crypto-common-0.1.6\",\n sha256 = \"1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.6/download\"],\n strip_prefix = \"crypto-common-0.1.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crypto-common-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cryptoki-0.10.0\",\n patch_args = [\n \"-p2\",\n ],\n patches = [\n \"@@//third_party/rust/patches:cryptoki-profile.patch\",\n \"@@//third_party/rust/patches:cryptoki-vendor-defined-mechanism-type.patch\",\n ],\n sha256 = \"781357a7779a8e92ea985121bbf379a9adf0777f44ab6392efc6abd5aa9b67db\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cryptoki/0.10.0/download\"],\n strip_prefix = \"cryptoki-0.10.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cryptoki-0.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cryptoki-sys-0.4.0\",\n sha256 = \"753e27d860277930ae9f394c119c8c70303236aab0ffab1d51f3d207dbb2bc4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cryptoki-sys/0.4.0/download\"],\n strip_prefix = \"cryptoki-sys-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cryptoki-sys-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.darling-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.darling_core-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.darling_macro-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__der-0.7.10\",\n sha256 = \"e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/der/0.7.10/download\"],\n strip_prefix = \"der-0.7.10\",\n build_file = Label(\"@crate_index//crate_index:BUILD.der-0.7.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__deranged-0.4.0\",\n sha256 = \"9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.4.0/download\"],\n strip_prefix = \"deranged-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.deranged-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__deser-hjson-2.2.4\",\n sha256 = \"7d94aac4095c08ded7e4b9ba7fc2b2929f11b94bb96897ca188b0f64e01688e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deser-hjson/2.2.4/download\"],\n strip_prefix = \"deser-hjson-2.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.deser-hjson-2.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__directories-6.0.0\",\n sha256 = \"16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/directories/6.0.0/download\"],\n strip_prefix = \"directories-6.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.directories-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.dirs-sys-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ecdsa-0.16.9\",\n sha256 = \"ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ecdsa/0.16.9/download\"],\n strip_prefix = \"ecdsa-0.16.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ecdsa-0.16.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__elliptic-curve-0.13.8\",\n sha256 = \"b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/elliptic-curve/0.13.8/download\"],\n strip_prefix = \"elliptic-curve-0.13.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.elliptic-curve-0.13.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-hal-0.2.7\",\n sha256 = \"35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-hal/0.2.7/download\"],\n strip_prefix = \"embedded-hal-0.2.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-hal-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-hal-1.0.0\",\n sha256 = \"361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-hal/1.0.0/download\"],\n strip_prefix = \"embedded-hal-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-hal-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-hal-nb-1.0.0\",\n sha256 = \"fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-hal-nb/1.0.0/download\"],\n strip_prefix = \"embedded-hal-nb-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-hal-nb-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__encode_unicode-1.0.0\",\n sha256 = \"34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/encode_unicode/1.0.0/download\"],\n strip_prefix = \"encode_unicode-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.encode_unicode-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__env_filter-0.1.3\",\n sha256 = \"186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_filter/0.1.3/download\"],\n strip_prefix = \"env_filter-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.env_filter-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__env_logger-0.11.8\",\n sha256 = \"13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_logger/0.11.8/download\"],\n strip_prefix = \"env_logger-0.11.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.env_logger-0.11.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__erased-serde-0.4.6\",\n sha256 = \"e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/erased-serde/0.4.6/download\"],\n strip_prefix = \"erased-serde-0.4.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.erased-serde-0.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__errno-0.3.13\",\n sha256 = \"778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.13/download\"],\n strip_prefix = \"errno-0.3.13\",\n build_file = Label(\"@crate_index//crate_index:BUILD.errno-0.3.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__fastrand-2.3.0\",\n sha256 = \"37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.3.0/download\"],\n strip_prefix = \"fastrand-2.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.fastrand-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ff-0.13.1\",\n sha256 = \"c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ff/0.13.1/download\"],\n strip_prefix = \"ff-0.13.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ff-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__flate2-1.1.2\",\n sha256 = \"4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flate2/1.1.2/download\"],\n strip_prefix = \"flate2-1.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.flate2-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__foreign-types-0.3.2\",\n sha256 = \"f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types/0.3.2/download\"],\n strip_prefix = \"foreign-types-0.3.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.foreign-types-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__foreign-types-shared-0.1.1\",\n sha256 = \"00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-shared/0.1.1/download\"],\n strip_prefix = \"foreign-types-shared-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.foreign-types-shared-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ftdi-0.1.3\",\n sha256 = \"2f9c8c625c6b8634ce70cd8cbb2ab8a103e4c2b4185c86d9954d2e16b1ef7c4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ftdi/0.1.3/download\"],\n strip_prefix = \"ftdi-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ftdi-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ftdi-embedded-hal-0.23.2\",\n sha256 = \"0fe355bc850d50b44519d42f875b788e6cb01fd52e4a6292250b23b29d6d5d8e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ftdi-embedded-hal/0.23.2/download\"],\n strip_prefix = \"ftdi-embedded-hal-0.23.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ftdi-embedded-hal-0.23.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ftdi-mpsse-0.1.2\",\n sha256 = \"5dd2c246fb727197d284bf7273718ed6b1c9a94a128bb618b97f13daec658a12\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ftdi-mpsse/0.1.2/download\"],\n strip_prefix = \"ftdi-mpsse-0.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ftdi-mpsse-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__getrandom-0.2.16\",\n sha256 = \"335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.16/download\"],\n strip_prefix = \"getrandom-0.2.16\",\n build_file = Label(\"@crate_index//crate_index:BUILD.getrandom-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__getrandom-0.3.3\",\n sha256 = \"26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.3/download\"],\n strip_prefix = \"getrandom-0.3.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.getrandom-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__gimli-0.31.1\",\n sha256 = \"07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gimli/0.31.1/download\"],\n strip_prefix = \"gimli-0.31.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.gimli-0.31.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__group-0.13.0\",\n sha256 = \"f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/group/0.13.0/download\"],\n strip_prefix = \"group-0.13.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.group-0.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hashbrown-0.12.3\",\n sha256 = \"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.12.3/download\"],\n strip_prefix = \"hashbrown-0.12.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hashbrown-0.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hashbrown-0.15.4\",\n sha256 = \"5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.15.4/download\"],\n strip_prefix = \"hashbrown-0.15.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hashbrown-0.15.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hex-0.4.3\",\n sha256 = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hex/0.4.3/download\"],\n strip_prefix = \"hex-0.4.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hex-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hkdf-0.12.4\",\n sha256 = \"7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hkdf/0.12.4/download\"],\n strip_prefix = \"hkdf-0.12.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hkdf-0.12.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hmac-0.12.1\",\n sha256 = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hmac/0.12.1/download\"],\n strip_prefix = \"hmac-0.12.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hmac-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__humantime-2.2.0\",\n sha256 = \"9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/humantime/2.2.0/download\"],\n strip_prefix = \"humantime-2.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.humantime-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__humantime-serde-1.1.1\",\n sha256 = \"57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/humantime-serde/1.1.1/download\"],\n strip_prefix = \"humantime-serde-1.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.humantime-serde-1.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iana-time-zone-0.1.63\",\n sha256 = \"b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone/0.1.63/download\"],\n strip_prefix = \"iana-time-zone-0.1.63\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iana-time-zone-0.1.63.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.iana-time-zone-haiku-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.ident_case-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indexmap-1.9.3\",\n sha256 = \"bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/1.9.3/download\"],\n strip_prefix = \"indexmap-1.9.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indexmap-1.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indexmap-2.10.0\",\n sha256 = \"fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.10.0/download\"],\n strip_prefix = \"indexmap-2.10.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indexmap-2.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indicatif-0.18.0\",\n sha256 = \"70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indicatif/0.18.0/download\"],\n strip_prefix = \"indicatif-0.18.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indicatif-0.18.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indoc-2.0.6\",\n sha256 = \"f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indoc/2.0.6/download\"],\n strip_prefix = \"indoc-2.0.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indoc-2.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__inout-0.1.4\",\n sha256 = \"879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/inout/0.1.4/download\"],\n strip_prefix = \"inout-0.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.inout-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__inventory-0.3.20\",\n sha256 = \"ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/inventory/0.3.20/download\"],\n strip_prefix = \"inventory-0.3.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.inventory-0.3.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__io-kit-sys-0.4.1\",\n sha256 = \"617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/io-kit-sys/0.4.1/download\"],\n strip_prefix = \"io-kit-sys-0.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.io-kit-sys-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__io-uring-0.7.9\",\n sha256 = \"d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/io-uring/0.7.9/download\"],\n strip_prefix = \"io-uring-0.7.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.io-uring-0.7.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__is_terminal_polyfill-1.70.1\",\n sha256 = \"7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.1/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.is_terminal_polyfill-1.70.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__itoa-1.0.15\",\n sha256 = \"4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.15/download\"],\n strip_prefix = \"itoa-1.0.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.itoa-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__jiff-0.2.15\",\n sha256 = \"be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff/0.2.15/download\"],\n strip_prefix = \"jiff-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.jiff-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__jiff-static-0.2.15\",\n sha256 = \"03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-static/0.2.15/download\"],\n strip_prefix = \"jiff-static-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.jiff-static-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__js-sys-0.3.77\",\n sha256 = \"1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.77/download\"],\n strip_prefix = \"js-sys-0.3.77\",\n build_file = Label(\"@crate_index//crate_index:BUILD.js-sys-0.3.77.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__keccak-0.1.5\",\n sha256 = \"ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/keccak/0.1.5/download\"],\n strip_prefix = \"keccak-0.1.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.keccak-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libc-0.2.174\",\n sha256 = \"1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.174/download\"],\n strip_prefix = \"libc-0.2.174\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libc-0.2.174.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libftdi1-sys-1.1.3\",\n sha256 = \"575286f9af093f56c7805f4f94874871b84216d1545f499d2cbad9e370000fe7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libftdi1-sys/1.1.3/download\"],\n strip_prefix = \"libftdi1-sys-1.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libftdi1-sys-1.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libloading-0.8.8\",\n sha256 = \"07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libloading/0.8.8/download\"],\n strip_prefix = \"libloading-0.8.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libloading-0.8.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libm-0.2.15\",\n sha256 = \"f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libm/0.2.15/download\"],\n strip_prefix = \"libm-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libm-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libredox-0.1.9\",\n sha256 = \"391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libredox/0.1.9/download\"],\n strip_prefix = \"libredox-0.1.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libredox-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libudev-0.3.0\",\n sha256 = \"78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libudev/0.3.0/download\"],\n strip_prefix = \"libudev-0.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libudev-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libudev-sys-0.1.4\",\n patch_args = [\n \"-p1\",\n ],\n patches = [\n \"@@//third_party/rust/patches:libudev-sys-0.1.4.patch\",\n ],\n sha256 = \"3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libudev-sys/0.1.4/download\"],\n strip_prefix = \"libudev-sys-0.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libudev-sys-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libusb1-sys-0.7.0\",\n sha256 = \"da050ade7ac4ff1ba5379af847a10a10a8e284181e060105bf8d86960ce9ce0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libusb1-sys/0.7.0/download\"],\n strip_prefix = \"libusb1-sys-0.7.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libusb1-sys-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__linux-raw-sys-0.9.4\",\n sha256 = \"cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.9.4/download\"],\n strip_prefix = \"linux-raw-sys-0.9.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.linux-raw-sys-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__lock_api-0.4.13\",\n sha256 = \"96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.13/download\"],\n strip_prefix = \"lock_api-0.4.13\",\n build_file = Label(\"@crate_index//crate_index:BUILD.lock_api-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__log-0.4.27\",\n sha256 = \"13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.27/download\"],\n strip_prefix = \"log-0.4.27\",\n build_file = Label(\"@crate_index//crate_index:BUILD.log-0.4.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__mach2-0.4.3\",\n sha256 = \"d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mach2/0.4.3/download\"],\n strip_prefix = \"mach2-0.4.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.mach2-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__memchr-2.7.5\",\n sha256 = \"32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.7.5/download\"],\n strip_prefix = \"memchr-2.7.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.memchr-2.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.miniz_oxide-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__mio-1.0.4\",\n sha256 = \"78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.0.4/download\"],\n strip_prefix = \"mio-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.mio-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nb-0.1.3\",\n sha256 = \"801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nb/0.1.3/download\"],\n strip_prefix = \"nb-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nb-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nb-1.1.0\",\n sha256 = \"8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nb/1.1.0/download\"],\n strip_prefix = \"nb-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nb-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nix-0.26.4\",\n sha256 = \"598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nix/0.26.4/download\"],\n strip_prefix = \"nix-0.26.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nix-0.26.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-bigint-dig-0.8.4\",\n sha256 = \"dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-bigint-dig/0.8.4/download\"],\n strip_prefix = \"num-bigint-dig-0.8.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-bigint-dig-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-conv-0.1.0\",\n sha256 = \"51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.1.0/download\"],\n strip_prefix = \"num-conv-0.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-conv-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.num-integer-0.1.46.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-iter-0.1.45\",\n sha256 = \"1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-iter/0.1.45/download\"],\n strip_prefix = \"num-iter-0.1.45\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-iter-0.1.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.num-traits-0.2.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__object-0.36.7\",\n sha256 = \"62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/object/0.36.7/download\"],\n strip_prefix = \"object-0.36.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.object-0.36.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__once_cell-1.21.3\",\n sha256 = \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.3/download\"],\n strip_prefix = \"once_cell-1.21.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.once_cell-1.21.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__once_cell_polyfill-1.70.1\",\n sha256 = \"a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.1/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.once_cell_polyfill-1.70.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__openssl-0.10.73\",\n sha256 = \"8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl/0.10.73/download\"],\n strip_prefix = \"openssl-0.10.73\",\n build_file = Label(\"@crate_index//crate_index:BUILD.openssl-0.10.73.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__openssl-macros-0.1.1\",\n sha256 = \"a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-macros/0.1.1/download\"],\n strip_prefix = \"openssl-macros-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.openssl-macros-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__openssl-sys-0.9.109\",\n sha256 = \"90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-sys/0.9.109/download\"],\n strip_prefix = \"openssl-sys-0.9.109\",\n build_file = Label(\"@crate_index//crate_index:BUILD.openssl-sys-0.9.109.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.option-ext-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__p256-0.13.2\",\n sha256 = \"c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/p256/0.13.2/download\"],\n strip_prefix = \"p256-0.13.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.p256-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__p384-0.13.1\",\n sha256 = \"fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/p384/0.13.1/download\"],\n strip_prefix = \"p384-0.13.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.p384-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__parking_lot-0.12.4\",\n sha256 = \"70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.4/download\"],\n strip_prefix = \"parking_lot-0.12.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.parking_lot-0.12.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__parking_lot_core-0.9.11\",\n sha256 = \"bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.11/download\"],\n strip_prefix = \"parking_lot_core-0.9.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.parking_lot_core-0.9.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.paste-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pem-rfc7468-0.7.0\",\n sha256 = \"88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pem-rfc7468/0.7.0/download\"],\n strip_prefix = \"pem-rfc7468-0.7.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pem-rfc7468-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest-2.8.1\",\n sha256 = \"1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.8.1/download\"],\n strip_prefix = \"pest-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest_derive-2.8.1\",\n sha256 = \"bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.8.1/download\"],\n strip_prefix = \"pest_derive-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest_derive-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest_generator-2.8.1\",\n sha256 = \"87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.8.1/download\"],\n strip_prefix = \"pest_generator-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest_generator-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest_meta-2.8.1\",\n sha256 = \"edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.8.1/download\"],\n strip_prefix = \"pest_meta-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest_meta-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pkcs1-0.7.5\",\n sha256 = \"c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkcs1/0.7.5/download\"],\n strip_prefix = \"pkcs1-0.7.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pkcs1-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pkcs8-0.10.2\",\n sha256 = \"f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkcs8/0.10.2/download\"],\n strip_prefix = \"pkcs8-0.10.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pkcs8-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pkg-config-0.3.32\",\n sha256 = \"7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.32/download\"],\n strip_prefix = \"pkg-config-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pkg-config-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__portable-atomic-1.11.1\",\n sha256 = \"f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.11.1/download\"],\n strip_prefix = \"portable-atomic-1.11.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.portable-atomic-1.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__portable-atomic-util-0.2.4\",\n sha256 = \"d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic-util/0.2.4/download\"],\n strip_prefix = \"portable-atomic-util-0.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.portable-atomic-util-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__primeorder-0.13.6\",\n sha256 = \"353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/primeorder/0.13.6/download\"],\n strip_prefix = \"primeorder-0.13.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.primeorder-0.13.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__proc-macro2-1.0.95\",\n sha256 = \"02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.95/download\"],\n strip_prefix = \"proc-macro2-1.0.95\",\n build_file = Label(\"@crate_index//crate_index:BUILD.proc-macro2-1.0.95.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__quote-1.0.40\",\n sha256 = \"1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.40/download\"],\n strip_prefix = \"quote-1.0.40\",\n build_file = Label(\"@crate_index//crate_index:BUILD.quote-1.0.40.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand-0.8.5\",\n sha256 = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.8.5/download\"],\n strip_prefix = \"rand-0.8.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand_chacha-0.3.1\",\n sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n strip_prefix = \"rand_chacha-0.3.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand_chacha-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand_core-0.6.4\",\n sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n strip_prefix = \"rand_core-0.6.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand_core-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__redox_syscall-0.5.17\",\n sha256 = \"5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.17/download\"],\n strip_prefix = \"redox_syscall-0.5.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.redox_syscall-0.5.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.redox_users-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ref-cast-1.0.24\",\n sha256 = \"4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast/1.0.24/download\"],\n strip_prefix = \"ref-cast-1.0.24\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ref-cast-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ref-cast-impl-1.0.24\",\n sha256 = \"1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast-impl/1.0.24/download\"],\n strip_prefix = \"ref-cast-impl-1.0.24\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ref-cast-impl-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-1.11.1\",\n sha256 = \"b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.11.1/download\"],\n strip_prefix = \"regex-1.11.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-1.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-automata-0.4.9\",\n sha256 = \"809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.9/download\"],\n strip_prefix = \"regex-automata-0.4.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-automata-0.4.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-syntax-0.8.5\",\n sha256 = \"2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.5/download\"],\n strip_prefix = \"regex-syntax-0.8.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-syntax-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rfc6979-0.4.0\",\n sha256 = \"f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rfc6979/0.4.0/download\"],\n strip_prefix = \"rfc6979-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rfc6979-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rsa-0.9.8\",\n sha256 = \"78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rsa/0.9.8/download\"],\n strip_prefix = \"rsa-0.9.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rsa-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rusb-0.9.4\",\n sha256 = \"ab9f9ff05b63a786553a4c02943b74b34a988448671001e9a27e2f0565cc05a4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusb/0.9.4/download\"],\n strip_prefix = \"rusb-0.9.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rusb-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustc-demangle-0.1.26\",\n sha256 = \"56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-demangle/0.1.26/download\"],\n strip_prefix = \"rustc-demangle-0.1.26\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustc-demangle-0.1.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustix-1.0.8\",\n sha256 = \"11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.0.8/download\"],\n strip_prefix = \"rustix-1.0.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustix-1.0.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustversion-1.0.21\",\n sha256 = \"8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.21/download\"],\n strip_prefix = \"rustversion-1.0.21\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustversion-1.0.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ruzstd-0.7.3\",\n sha256 = \"fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ruzstd/0.7.3/download\"],\n strip_prefix = \"ruzstd-0.7.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ruzstd-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ryu-1.0.20\",\n sha256 = \"28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.20/download\"],\n strip_prefix = \"ryu-1.0.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ryu-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__schemars-0.9.0\",\n sha256 = \"4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/0.9.0/download\"],\n strip_prefix = \"schemars-0.9.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.schemars-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__schemars-1.0.4\",\n sha256 = \"82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/1.0.4/download\"],\n strip_prefix = \"schemars-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.schemars-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sec1-0.7.3\",\n sha256 = \"d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sec1/0.7.3/download\"],\n strip_prefix = \"sec1-0.7.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sec1-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__secrecy-0.8.0\",\n sha256 = \"9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secrecy/0.8.0/download\"],\n strip_prefix = \"secrecy-0.8.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.secrecy-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde-1.0.219\",\n sha256 = \"5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.219/download\"],\n strip_prefix = \"serde-1.0.219\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde-1.0.219.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_bytes-0.11.17\",\n sha256 = \"8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_bytes/0.11.17/download\"],\n strip_prefix = \"serde_bytes-0.11.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_bytes-0.11.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_derive-1.0.219\",\n sha256 = \"5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.219/download\"],\n strip_prefix = \"serde_derive-1.0.219\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_derive-1.0.219.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_json-1.0.142\",\n sha256 = \"030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.142/download\"],\n strip_prefix = \"serde_json-1.0.142\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_json-1.0.142.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_with-3.14.0\",\n sha256 = \"f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_with/3.14.0/download\"],\n strip_prefix = \"serde_with-3.14.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_with-3.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_with_macros-3.14.0\",\n sha256 = \"de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_with_macros/3.14.0/download\"],\n strip_prefix = \"serde_with_macros-3.14.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_with_macros-3.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serialport-4.7.2\",\n sha256 = \"cdb0bc984f6af6ef8bab54e6cf2071579ee75b9286aa9f2319a0d220c28b0a2b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serialport/4.7.2/download\"],\n strip_prefix = \"serialport-4.7.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serialport-4.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sha3-0.10.8\",\n sha256 = \"75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha3/0.10.8/download\"],\n strip_prefix = \"sha3-0.10.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sha3-0.10.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__shellwords-1.1.0\",\n sha256 = \"89e515aa4699a88148ed5ef96413ceef0048ce95b43fbc955a33bde0a70fcae6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shellwords/1.1.0/download\"],\n strip_prefix = \"shellwords-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.shellwords-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__signal-hook-registry-1.4.6\",\n sha256 = \"b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.6/download\"],\n strip_prefix = \"signal-hook-registry-1.4.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.signal-hook-registry-1.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__signature-2.2.0\",\n sha256 = \"77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signature/2.2.0/download\"],\n strip_prefix = \"signature-2.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.signature-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__slab-0.4.11\",\n sha256 = \"7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.11/download\"],\n strip_prefix = \"slab-0.4.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.slab-0.4.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__socket2-0.6.0\",\n sha256 = \"233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.0/download\"],\n strip_prefix = \"socket2-0.6.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.socket2-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__spin-0.9.8\",\n sha256 = \"6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spin/0.9.8/download\"],\n strip_prefix = \"spin-0.9.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.spin-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__spki-0.7.3\",\n sha256 = \"d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spki/0.7.3/download\"],\n strip_prefix = \"spki-0.7.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.spki-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.static_assertions-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__strum-0.27.2\",\n sha256 = \"af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strum/0.27.2/download\"],\n strip_prefix = \"strum-0.27.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.strum-0.27.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__strum_macros-0.27.2\",\n sha256 = \"7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strum_macros/0.27.2/download\"],\n strip_prefix = \"strum_macros-0.27.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.strum_macros-0.27.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__syn-2.0.104\",\n sha256 = \"17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.104/download\"],\n strip_prefix = \"syn-2.0.104\",\n build_file = Label(\"@crate_index//crate_index:BUILD.syn-2.0.104.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tempfile-3.20.0\",\n sha256 = \"e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.20.0/download\"],\n strip_prefix = \"tempfile-3.20.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tempfile-3.20.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thiserror-2.0.12\",\n sha256 = \"567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.12/download\"],\n strip_prefix = \"thiserror-2.0.12\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thiserror-2.0.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thiserror-impl-2.0.12\",\n sha256 = \"7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.12/download\"],\n strip_prefix = \"thiserror-impl-2.0.12\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thiserror-impl-2.0.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-0.3.41\",\n sha256 = \"8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.41/download\"],\n strip_prefix = \"time-0.3.41\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-0.3.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-core-0.1.4\",\n sha256 = \"c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.4/download\"],\n strip_prefix = \"time-core-0.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-core-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-macros-0.2.22\",\n sha256 = \"3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.22/download\"],\n strip_prefix = \"time-macros-0.2.22\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-macros-0.2.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tiny-keccak-2.0.2\",\n sha256 = \"2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tiny-keccak/2.0.2/download\"],\n strip_prefix = \"tiny-keccak-2.0.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tiny-keccak-2.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-1.47.1\",\n sha256 = \"89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.47.1/download\"],\n strip_prefix = \"tokio-1.47.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-1.47.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-macros-2.5.0\",\n sha256 = \"6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.5.0/download\"],\n strip_prefix = \"tokio-macros-2.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-macros-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__twox-hash-1.6.3\",\n sha256 = \"97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/twox-hash/1.6.3/download\"],\n strip_prefix = \"twox-hash-1.6.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.twox-hash-1.6.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typeid-1.0.3\",\n sha256 = \"bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typeid/1.0.3/download\"],\n strip_prefix = \"typeid-1.0.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typeid-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typenum-1.18.0\",\n sha256 = \"1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.18.0/download\"],\n strip_prefix = \"typenum-1.18.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typenum-1.18.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typetag-0.2.20\",\n sha256 = \"73f22b40dd7bfe8c14230cf9702081366421890435b2d625fa92b4acc4c3de6f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typetag/0.2.20/download\"],\n strip_prefix = \"typetag-0.2.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typetag-0.2.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typetag-impl-0.2.20\",\n sha256 = \"35f5380909ffc31b4de4f4bdf96b877175a016aa2ca98cee39fcfd8c4d53d952\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typetag-impl/0.2.20/download\"],\n strip_prefix = \"typetag-impl-0.2.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typetag-impl-0.2.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ucd-trie-0.1.7\",\n sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n strip_prefix = \"ucd-trie-0.1.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unescaper-0.1.6\",\n sha256 = \"c01d12e3a56a4432a8b436f293c25f4808bdf9e9f9f98f9260bba1f1bc5a1f26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unescaper/0.1.6/download\"],\n strip_prefix = \"unescaper-0.1.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unescaper-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-ident-1.0.18\",\n sha256 = \"5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.18/download\"],\n strip_prefix = \"unicode-ident-1.0.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-ident-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-width-0.2.1\",\n sha256 = \"4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-width/0.2.1/download\"],\n strip_prefix = \"unicode-width-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-width-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unit-prefix-0.5.1\",\n sha256 = \"323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unit-prefix/0.5.1/download\"],\n strip_prefix = \"unit-prefix-0.5.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unit-prefix-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__vcpkg-0.2.15\",\n sha256 = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/vcpkg/0.2.15/download\"],\n strip_prefix = \"vcpkg-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__void-1.0.2\",\n sha256 = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/void/1.0.2/download\"],\n strip_prefix = \"void-1.0.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.void-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasi-0.14.2-wasi-0.2.4\",\n sha256 = \"9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.14.2+wasi-0.2.4/download\"],\n strip_prefix = \"wasi-0.14.2+wasi-0.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasi-0.14.2+wasi-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-0.2.100\",\n sha256 = \"1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-backend-0.2.100\",\n sha256 = \"2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-backend/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-backend-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-backend-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-macro-0.2.100\",\n sha256 = \"7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-macro-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-macro-support-0.2.100\",\n sha256 = \"8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-macro-support-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-shared-0.2.100\",\n sha256 = \"1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-shared-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.winapi-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-core-0.61.2\",\n sha256 = \"c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-core/0.61.2/download\"],\n strip_prefix = \"windows-core-0.61.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-core-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-implement-0.60.0\",\n sha256 = \"a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-implement/0.60.0/download\"],\n strip_prefix = \"windows-implement-0.60.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-implement-0.60.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-interface-0.59.1\",\n sha256 = \"bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-interface/0.59.1/download\"],\n strip_prefix = \"windows-interface-0.59.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-interface-0.59.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-link-0.1.3\",\n sha256 = \"5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.1.3/download\"],\n strip_prefix = \"windows-link-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-link-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-result-0.3.4\",\n sha256 = \"56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-result/0.3.4/download\"],\n strip_prefix = \"windows-result-0.3.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-result-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-strings-0.4.2\",\n sha256 = \"56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-strings/0.4.2/download\"],\n strip_prefix = \"windows-strings-0.4.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-strings-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.59.0\",\n sha256 = \"1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.59.0/download\"],\n strip_prefix = \"windows-sys-0.59.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.59.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.60.2\",\n sha256 = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.60.2/download\"],\n strip_prefix = \"windows-sys-0.60.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-targets-0.53.3\",\n sha256 = \"d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.53.3/download\"],\n strip_prefix = \"windows-targets-0.53.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-targets-0.53.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_gnullvm-0.53.0\",\n sha256 = \"86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.53.0/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_gnullvm-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_msvc-0.53.0\",\n sha256 = \"c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.53.0/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_msvc-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnu-0.53.0\",\n sha256 = \"c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.53.0/download\"],\n strip_prefix = \"windows_i686_gnu-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnu-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnullvm-0.53.0\",\n sha256 = \"9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.53.0/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnullvm-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_msvc-0.53.0\",\n sha256 = \"581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.53.0/download\"],\n strip_prefix = \"windows_i686_msvc-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_msvc-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnu-0.53.0\",\n sha256 = \"2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.53.0/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnu-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnullvm-0.53.0\",\n sha256 = \"0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.53.0/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnullvm-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_msvc-0.53.0\",\n sha256 = \"271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.53.0/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_msvc-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-rt-0.39.0\",\n sha256 = \"6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rt/0.39.0/download\"],\n strip_prefix = \"wit-bindgen-rt-0.39.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-rt-0.39.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zerocopy-0.8.26\",\n sha256 = \"1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.26/download\"],\n strip_prefix = \"zerocopy-0.8.26\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zerocopy-0.8.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zerocopy-derive-0.8.26\",\n sha256 = \"9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.26/download\"],\n strip_prefix = \"zerocopy-derive-0.8.26\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zerocopy-derive-0.8.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zeroize-1.8.1\",\n sha256 = \"ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.8.1/download\"],\n strip_prefix = \"zeroize-1.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zeroize-1.8.1.bazel\"),\n )\n\n return [\n struct(repo=\"crate_index__aes-0.8.4\", is_dev_dep = False),\n struct(repo=\"crate_index__anstyle-1.0.11\", is_dev_dep = False),\n struct(repo=\"crate_index__anyhow-1.0.98\", is_dev_dep = False),\n struct(repo=\"crate_index__arrayvec-0.7.6\", is_dev_dep = False),\n struct(repo=\"crate_index__asn1-0.22.0\", is_dev_dep = False),\n struct(repo=\"crate_index__base64ct-1.8.0\", is_dev_dep = False),\n struct(repo=\"crate_index__bitflags-2.9.1\", is_dev_dep = False),\n struct(repo=\"crate_index__byteorder-1.5.0\", is_dev_dep = False),\n struct(repo=\"crate_index__chrono-0.4.41\", is_dev_dep = False),\n struct(repo=\"crate_index__clap-4.5.48\", is_dev_dep = False),\n struct(repo=\"crate_index__const-oid-0.9.6\", is_dev_dep = False),\n struct(repo=\"crate_index__crc-3.3.0\", is_dev_dep = False),\n struct(repo=\"crate_index__cryptoki-0.10.0\", is_dev_dep = False),\n struct(repo=\"crate_index__cryptoki-sys-0.4.0\", is_dev_dep = False),\n struct(repo=\"crate_index__der-0.7.10\", is_dev_dep = False),\n struct(repo=\"crate_index__deser-hjson-2.2.4\", is_dev_dep = False),\n struct(repo=\"crate_index__directories-6.0.0\", is_dev_dep = False),\n struct(repo=\"crate_index__ecdsa-0.16.9\", is_dev_dep = False),\n struct(repo=\"crate_index__elliptic-curve-0.13.8\", is_dev_dep = False),\n struct(repo=\"crate_index__embedded-hal-1.0.0\", is_dev_dep = False),\n struct(repo=\"crate_index__env_logger-0.11.8\", is_dev_dep = False),\n struct(repo=\"crate_index__erased-serde-0.4.6\", is_dev_dep = False),\n struct(repo=\"crate_index__foreign-types-0.3.2\", is_dev_dep = False),\n struct(repo=\"crate_index__ftdi-0.1.3\", is_dev_dep = False),\n struct(repo=\"crate_index__ftdi-embedded-hal-0.23.2\", is_dev_dep = False),\n struct(repo=\"crate_index__ftdi-mpsse-0.1.2\", is_dev_dep = False),\n struct(repo=\"crate_index__heck-0.5.0\", is_dev_dep = False),\n struct(repo=\"crate_index__hex-0.4.3\", is_dev_dep = False),\n struct(repo=\"crate_index__humantime-2.2.0\", is_dev_dep = False),\n struct(repo=\"crate_index__humantime-serde-1.1.1\", is_dev_dep = False),\n struct(repo=\"crate_index__indexmap-2.10.0\", is_dev_dep = False),\n struct(repo=\"crate_index__indicatif-0.18.0\", is_dev_dep = False),\n struct(repo=\"crate_index__inventory-0.3.20\", is_dev_dep = False),\n struct(repo=\"crate_index__itertools-0.14.0\", is_dev_dep = False),\n struct(repo=\"crate_index__libloading-0.8.8\", is_dev_dep = False),\n struct(repo=\"crate_index__log-0.4.27\", is_dev_dep = False),\n struct(repo=\"crate_index__num-bigint-dig-0.8.4\", is_dev_dep = False),\n struct(repo=\"crate_index__num-traits-0.2.19\", is_dev_dep = False),\n struct(repo=\"crate_index__object-0.36.7\", is_dev_dep = False),\n struct(repo=\"crate_index__once_cell-1.21.3\", is_dev_dep = False),\n struct(repo=\"crate_index__openssl-0.10.73\", is_dev_dep = False),\n struct(repo=\"crate_index__openssl-sys-0.9.109\", is_dev_dep = False),\n struct(repo=\"crate_index__p256-0.13.2\", is_dev_dep = False),\n struct(repo=\"crate_index__p384-0.13.1\", is_dev_dep = False),\n struct(repo=\"crate_index__paste-1.0.15\", is_dev_dep = False),\n struct(repo=\"crate_index__pem-rfc7468-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__pest-2.8.1\", is_dev_dep = False),\n struct(repo=\"crate_index__pest_derive-2.8.1\", is_dev_dep = False),\n struct(repo=\"crate_index__proc-macro2-1.0.95\", is_dev_dep = False),\n struct(repo=\"crate_index__quote-1.0.40\", is_dev_dep = False),\n struct(repo=\"crate_index__rand-0.8.5\", is_dev_dep = False),\n struct(repo=\"crate_index__rand_chacha-0.3.1\", is_dev_dep = False),\n struct(repo=\"crate_index__regex-1.11.1\", is_dev_dep = False),\n struct(repo=\"crate_index__rsa-0.9.8\", is_dev_dep = False),\n struct(repo=\"crate_index__rusb-0.9.4\", is_dev_dep = False),\n struct(repo=\"crate_index__rustix-1.0.8\", is_dev_dep = False),\n struct(repo=\"crate_index__scopeguard-1.2.0\", is_dev_dep = False),\n struct(repo=\"crate_index__serde-1.0.219\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_bytes-0.11.17\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_json-1.0.142\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_with-3.14.0\", is_dev_dep = False),\n struct(repo=\"crate_index__serialport-4.7.2\", is_dev_dep = False),\n struct(repo=\"crate_index__sha2-0.10.9\", is_dev_dep = False),\n struct(repo=\"crate_index__sha3-0.10.8\", is_dev_dep = False),\n struct(repo=\"crate_index__shellwords-1.1.0\", is_dev_dep = False),\n struct(repo=\"crate_index__strum-0.27.2\", is_dev_dep = False),\n struct(repo=\"crate_index__syn-2.0.104\", is_dev_dep = False),\n struct(repo=\"crate_index__tempfile-3.20.0\", is_dev_dep = False),\n struct(repo=\"crate_index__thiserror-2.0.12\", is_dev_dep = False),\n struct(repo=\"crate_index__tiny-keccak-2.0.2\", is_dev_dep = False),\n struct(repo=\"crate_index__tokio-1.47.1\", is_dev_dep = False),\n struct(repo=\"crate_index__typetag-0.2.20\", is_dev_dep = False),\n struct(repo=\"crate_index__zerocopy-0.8.26\", is_dev_dep = False),\n struct(repo=\"crate_index__zeroize-1.8.1\", is_dev_dep = False),\n struct(repo = \"crate_index__indoc-2.0.6\", 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 'lowrisc_opentitan'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\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\", \"new_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/private:local_crate_mirror.bzl\", \"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 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 AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n \"aes\": Label(\"@crate_index//:aes-0.8.4\"),\n \"anstyle\": Label(\"@crate_index//:anstyle-1.0.11\"),\n \"anyhow\": Label(\"@crate_index//:anyhow-1.0.98\"),\n \"arrayvec\": Label(\"@crate_index//:arrayvec-0.7.6\"),\n \"asn1\": Label(\"@crate_index//:asn1-0.22.0\"),\n \"base64ct\": Label(\"@crate_index//:base64ct-1.8.0\"),\n \"bitflags\": Label(\"@crate_index//:bitflags-2.9.1\"),\n \"byteorder\": Label(\"@crate_index//:byteorder-1.5.0\"),\n \"chrono\": Label(\"@crate_index//:chrono-0.4.41\"),\n \"clap\": Label(\"@crate_index//:clap-4.5.48\"),\n \"const-oid\": Label(\"@crate_index//:const-oid-0.9.6\"),\n \"crc\": Label(\"@crate_index//:crc-3.3.0\"),\n \"cryptoki\": Label(\"@crate_index//:cryptoki-0.10.0\"),\n \"cryptoki-sys\": Label(\"@crate_index//:cryptoki-sys-0.4.0\"),\n \"der\": Label(\"@crate_index//:der-0.7.10\"),\n \"deser-hjson\": Label(\"@crate_index//:deser-hjson-2.2.4\"),\n \"directories\": Label(\"@crate_index//:directories-6.0.0\"),\n \"ecdsa\": Label(\"@crate_index//:ecdsa-0.16.9\"),\n \"elliptic-curve\": Label(\"@crate_index//:elliptic-curve-0.13.8\"),\n \"embedded-hal\": Label(\"@crate_index//:embedded-hal-1.0.0\"),\n \"env_logger\": Label(\"@crate_index//:env_logger-0.11.8\"),\n \"erased-serde\": Label(\"@crate_index//:erased-serde-0.4.6\"),\n \"foreign-types\": Label(\"@crate_index//:foreign-types-0.3.2\"),\n \"ftdi\": Label(\"@crate_index//:ftdi-0.1.3\"),\n \"ftdi-embedded-hal\": Label(\"@crate_index//:ftdi-embedded-hal-0.23.2\"),\n \"ftdi-mpsse\": Label(\"@crate_index//:ftdi-mpsse-0.1.2\"),\n \"heck\": Label(\"@crate_index//:heck-0.5.0\"),\n \"hex\": Label(\"@crate_index//:hex-0.4.3\"),\n \"humantime\": Label(\"@crate_index//:humantime-2.2.0\"),\n \"humantime-serde\": Label(\"@crate_index//:humantime-serde-1.1.1\"),\n \"indexmap\": Label(\"@crate_index//:indexmap-2.10.0\"),\n \"indicatif\": Label(\"@crate_index//:indicatif-0.18.0\"),\n \"inventory\": Label(\"@crate_index//:inventory-0.3.20\"),\n \"itertools\": Label(\"@crate_index//:itertools-0.14.0\"),\n \"libloading\": Label(\"@crate_index//:libloading-0.8.8\"),\n \"log\": Label(\"@crate_index//:log-0.4.27\"),\n \"num-bigint-dig\": Label(\"@crate_index//:num-bigint-dig-0.8.4\"),\n \"num-traits\": Label(\"@crate_index//:num-traits-0.2.19\"),\n \"object\": Label(\"@crate_index//:object-0.36.7\"),\n \"once_cell\": Label(\"@crate_index//:once_cell-1.21.3\"),\n \"openssl\": Label(\"@crate_index//:openssl-0.10.73\"),\n \"openssl-sys\": Label(\"@crate_index//:openssl-sys-0.9.109\"),\n \"p256\": Label(\"@crate_index//:p256-0.13.2\"),\n \"p384\": Label(\"@crate_index//:p384-0.13.1\"),\n \"pem-rfc7468\": Label(\"@crate_index//:pem-rfc7468-0.7.0\"),\n \"pest\": Label(\"@crate_index//:pest-2.8.1\"),\n \"proc-macro2\": Label(\"@crate_index//:proc-macro2-1.0.95\"),\n \"quote\": Label(\"@crate_index//:quote-1.0.40\"),\n \"rand\": Label(\"@crate_index//:rand-0.8.5\"),\n \"rand_chacha\": Label(\"@crate_index//:rand_chacha-0.3.1\"),\n \"regex\": Label(\"@crate_index//:regex-1.11.1\"),\n \"rsa\": Label(\"@crate_index//:rsa-0.9.8\"),\n \"rusb\": Label(\"@crate_index//:rusb-0.9.4\"),\n \"rustix\": Label(\"@crate_index//:rustix-1.0.8\"),\n \"scopeguard\": Label(\"@crate_index//:scopeguard-1.2.0\"),\n \"serde\": Label(\"@crate_index//:serde-1.0.219\"),\n \"serde_bytes\": Label(\"@crate_index//:serde_bytes-0.11.17\"),\n \"serde_json\": Label(\"@crate_index//:serde_json-1.0.142\"),\n \"serde_with\": Label(\"@crate_index//:serde_with-3.14.0\"),\n \"serialport\": Label(\"@crate_index//:serialport-4.7.2\"),\n \"sha2\": Label(\"@crate_index//:sha2-0.10.9\"),\n \"sha3\": Label(\"@crate_index//:sha3-0.10.8\"),\n \"shellwords\": Label(\"@crate_index//:shellwords-1.1.0\"),\n \"strum\": Label(\"@crate_index//:strum-0.27.2\"),\n \"syn\": Label(\"@crate_index//:syn-2.0.104\"),\n \"tempfile\": Label(\"@crate_index//:tempfile-3.20.0\"),\n \"thiserror\": Label(\"@crate_index//:thiserror-2.0.12\"),\n \"tiny-keccak\": Label(\"@crate_index//:tiny-keccak-2.0.2\"),\n \"tokio\": Label(\"@crate_index//:tokio-1.47.1\"),\n \"typetag\": Label(\"@crate_index//:typetag-0.2.20\"),\n \"wait-timeout\": Label(\"@crate_index//:wait-timeout-0.2.1\"),\n \"zerocopy\": Label(\"@crate_index//:zerocopy-0.8.26\"),\n \"zeroize\": Label(\"@crate_index//:zeroize-1.8.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"third_party/rust\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n \"paste\": Label(\"@crate_index//:paste-1.0.15\"),\n \"pest_derive\": Label(\"@crate_index//:pest_derive-2.8.1\"),\n },\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"third_party/rust\": {\n _COMMON_CONDITION: {\n \"indoc\": Label(\"@crate_index//:indoc-2.0.6\"),\n },\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"third_party/rust\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"third_party/rust\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-linux-android\": [],\n \"aarch64-pc-windows-gnullvm\": [],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"), 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: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: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\\\")))))))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\": [],\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 = \\\"linux\\\", not(target_env = \\\"musl\\\")))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(all(tokio_uring, target_os = \\\"linux\\\"))\": [],\n \"cfg(all(windows, target_env = \\\"msvc\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@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 = \\\"macos\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(windows, target_os = \\\"cygwin\\\"))\": [],\n \"cfg(not(all(windows, target_env = \\\"msvc\\\")))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_has_atomic = \\\"ptr\\\"))\": [],\n \"cfg(target_arch = \\\"aarch64\\\")\": [],\n \"cfg(target_arch = \\\"wasm32\\\")\": [],\n \"cfg(target_family = \\\"wasm\\\")\": [],\n \"cfg(target_os = \\\"android\\\")\": [],\n \"cfg(target_os = \\\"haiku\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\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\\\")\": [],\n \"cfg(tokio_taskdump)\": [],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"cfg(windows_raw_dylib)\": [],\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 http_archive,\n name = \"crate_index__addr2line-0.24.2\",\n sha256 = \"dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/addr2line/0.24.2/download\"],\n strip_prefix = \"addr2line-0.24.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.addr2line-0.24.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.adler2-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__aes-0.8.4\",\n sha256 = \"b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aes/0.8.4/download\"],\n strip_prefix = \"aes-0.8.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.aes-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__aho-corasick-1.1.3\",\n sha256 = \"8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.3/download\"],\n strip_prefix = \"aho-corasick-1.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.aho-corasick-1.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__android-tzdata-0.1.1\",\n sha256 = \"e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/android-tzdata/0.1.1/download\"],\n strip_prefix = \"android-tzdata-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.android-tzdata-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.android_system_properties-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstream-0.6.20\",\n sha256 = \"3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/0.6.20/download\"],\n strip_prefix = \"anstream-0.6.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstream-0.6.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-1.0.11\",\n sha256 = \"862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.11/download\"],\n strip_prefix = \"anstyle-1.0.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-1.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-parse-0.2.7\",\n sha256 = \"4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/0.2.7/download\"],\n strip_prefix = \"anstyle-parse-0.2.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-parse-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-query-1.1.4\",\n sha256 = \"9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.4/download\"],\n strip_prefix = \"anstyle-query-1.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-query-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-wincon-3.0.10\",\n sha256 = \"3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.10/download\"],\n strip_prefix = \"anstyle-wincon-3.0.10\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-wincon-3.0.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anyhow-1.0.98\",\n sha256 = \"e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.98/download\"],\n strip_prefix = \"anyhow-1.0.98\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anyhow-1.0.98.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__arrayvec-0.7.6\",\n sha256 = \"7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/arrayvec/0.7.6/download\"],\n strip_prefix = \"arrayvec-0.7.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.arrayvec-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__asn1-0.22.0\",\n sha256 = \"df42c2b01c5e1060b8281f67b4e5fb858260694916a667345a7305cd11e5dbfa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1/0.22.0/download\"],\n strip_prefix = \"asn1-0.22.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.asn1-0.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__asn1_derive-0.22.0\",\n sha256 = \"cdccf849b54365e3693e9a90ad36e4482b79937e6373ac8e2cf229c985187b21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/asn1_derive/0.22.0/download\"],\n strip_prefix = \"asn1_derive-0.22.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.asn1_derive-0.22.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__autocfg-1.5.0\",\n sha256 = \"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/autocfg/1.5.0/download\"],\n strip_prefix = \"autocfg-1.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.autocfg-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__backtrace-0.3.75\",\n sha256 = \"6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/backtrace/0.3.75/download\"],\n strip_prefix = \"backtrace-0.3.75\",\n build_file = Label(\"@crate_index//crate_index:BUILD.backtrace-0.3.75.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__base16ct-0.2.0\",\n sha256 = \"4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base16ct/0.2.0/download\"],\n strip_prefix = \"base16ct-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.base16ct-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__base64ct-1.8.0\",\n sha256 = \"55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64ct/1.8.0/download\"],\n strip_prefix = \"base64ct-1.8.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.base64ct-1.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.bitflags-1.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bitflags-2.9.1\",\n sha256 = \"1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.9.1/download\"],\n strip_prefix = \"bitflags-2.9.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bitflags-2.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bumpalo-3.19.0\",\n sha256 = \"46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.19.0/download\"],\n strip_prefix = \"bumpalo-3.19.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bumpalo-3.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.byteorder-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bytes-1.10.1\",\n sha256 = \"d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.10.1/download\"],\n strip_prefix = \"bytes-1.10.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bytes-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cc-1.2.31\",\n sha256 = \"c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.31/download\"],\n strip_prefix = \"cc-1.2.31\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cc-1.2.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cfg-if-1.0.1\",\n sha256 = \"9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.1/download\"],\n strip_prefix = \"cfg-if-1.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cfg-if-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__chrono-0.4.41\",\n sha256 = \"c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/chrono/0.4.41/download\"],\n strip_prefix = \"chrono-0.4.41\",\n build_file = Label(\"@crate_index//crate_index:BUILD.chrono-0.4.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cipher-0.4.4\",\n sha256 = \"773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cipher/0.4.4/download\"],\n strip_prefix = \"cipher-0.4.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cipher-0.4.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap-4.5.48\",\n sha256 = \"e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.5.48/download\"],\n strip_prefix = \"clap-4.5.48\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap-4.5.48.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_builder-4.5.48\",\n sha256 = \"c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.5.48/download\"],\n strip_prefix = \"clap_builder-4.5.48\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_builder-4.5.48.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_derive-4.5.47\",\n sha256 = \"bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.5.47/download\"],\n strip_prefix = \"clap_derive-4.5.47\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_derive-4.5.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_lex-0.7.5\",\n sha256 = \"b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/0.7.5/download\"],\n strip_prefix = \"clap_lex-0.7.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_lex-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__colorchoice-1.0.4\",\n sha256 = \"b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.4/download\"],\n strip_prefix = \"colorchoice-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.colorchoice-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__console-0.16.0\",\n sha256 = \"2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/console/0.16.0/download\"],\n strip_prefix = \"console-0.16.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.console-0.16.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__const-oid-0.9.6\",\n sha256 = \"c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/const-oid/0.9.6/download\"],\n strip_prefix = \"const-oid-0.9.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.const-oid-0.9.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.core-foundation-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crc-3.3.0\",\n sha256 = \"9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crc/3.3.0/download\"],\n strip_prefix = \"crc-3.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crc-3.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crc-catalog-2.4.0\",\n sha256 = \"19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crc-catalog/2.4.0/download\"],\n strip_prefix = \"crc-catalog-2.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crc-catalog-2.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.crc32fast-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.crunchy-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crypto-bigint-0.5.5\",\n sha256 = \"0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-bigint/0.5.5/download\"],\n strip_prefix = \"crypto-bigint-0.5.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crypto-bigint-0.5.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crypto-common-0.1.6\",\n sha256 = \"1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.6/download\"],\n strip_prefix = \"crypto-common-0.1.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crypto-common-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cryptoki-0.10.0\",\n patch_args = [\n \"-p2\",\n ],\n patches = [\n \"@@//third_party/rust/patches:cryptoki-profile.patch\",\n \"@@//third_party/rust/patches:cryptoki-vendor-defined-mechanism-type.patch\",\n ],\n sha256 = \"781357a7779a8e92ea985121bbf379a9adf0777f44ab6392efc6abd5aa9b67db\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cryptoki/0.10.0/download\"],\n strip_prefix = \"cryptoki-0.10.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cryptoki-0.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cryptoki-sys-0.4.0\",\n sha256 = \"753e27d860277930ae9f394c119c8c70303236aab0ffab1d51f3d207dbb2bc4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cryptoki-sys/0.4.0/download\"],\n strip_prefix = \"cryptoki-sys-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cryptoki-sys-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.darling-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.darling_core-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.darling_macro-0.20.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__der-0.7.10\",\n sha256 = \"e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/der/0.7.10/download\"],\n strip_prefix = \"der-0.7.10\",\n build_file = Label(\"@crate_index//crate_index:BUILD.der-0.7.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__deranged-0.4.0\",\n sha256 = \"9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.4.0/download\"],\n strip_prefix = \"deranged-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.deranged-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__deser-hjson-2.2.4\",\n sha256 = \"7d94aac4095c08ded7e4b9ba7fc2b2929f11b94bb96897ca188b0f64e01688e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deser-hjson/2.2.4/download\"],\n strip_prefix = \"deser-hjson-2.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.deser-hjson-2.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__directories-6.0.0\",\n sha256 = \"16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/directories/6.0.0/download\"],\n strip_prefix = \"directories-6.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.directories-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.dirs-sys-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ecdsa-0.16.9\",\n sha256 = \"ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ecdsa/0.16.9/download\"],\n strip_prefix = \"ecdsa-0.16.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ecdsa-0.16.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__elliptic-curve-0.13.8\",\n sha256 = \"b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/elliptic-curve/0.13.8/download\"],\n strip_prefix = \"elliptic-curve-0.13.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.elliptic-curve-0.13.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-hal-0.2.7\",\n sha256 = \"35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-hal/0.2.7/download\"],\n strip_prefix = \"embedded-hal-0.2.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-hal-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-hal-1.0.0\",\n sha256 = \"361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-hal/1.0.0/download\"],\n strip_prefix = \"embedded-hal-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-hal-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-hal-nb-1.0.0\",\n sha256 = \"fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-hal-nb/1.0.0/download\"],\n strip_prefix = \"embedded-hal-nb-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-hal-nb-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__encode_unicode-1.0.0\",\n sha256 = \"34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/encode_unicode/1.0.0/download\"],\n strip_prefix = \"encode_unicode-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.encode_unicode-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__env_filter-0.1.3\",\n sha256 = \"186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_filter/0.1.3/download\"],\n strip_prefix = \"env_filter-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.env_filter-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__env_logger-0.11.8\",\n sha256 = \"13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_logger/0.11.8/download\"],\n strip_prefix = \"env_logger-0.11.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.env_logger-0.11.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__erased-serde-0.4.6\",\n sha256 = \"e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/erased-serde/0.4.6/download\"],\n strip_prefix = \"erased-serde-0.4.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.erased-serde-0.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__errno-0.3.13\",\n sha256 = \"778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.13/download\"],\n strip_prefix = \"errno-0.3.13\",\n build_file = Label(\"@crate_index//crate_index:BUILD.errno-0.3.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__fastrand-2.3.0\",\n sha256 = \"37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.3.0/download\"],\n strip_prefix = \"fastrand-2.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.fastrand-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ff-0.13.1\",\n sha256 = \"c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ff/0.13.1/download\"],\n strip_prefix = \"ff-0.13.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ff-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__flate2-1.1.2\",\n sha256 = \"4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flate2/1.1.2/download\"],\n strip_prefix = \"flate2-1.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.flate2-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__foreign-types-0.3.2\",\n sha256 = \"f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types/0.3.2/download\"],\n strip_prefix = \"foreign-types-0.3.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.foreign-types-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__foreign-types-shared-0.1.1\",\n sha256 = \"00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-shared/0.1.1/download\"],\n strip_prefix = \"foreign-types-shared-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.foreign-types-shared-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ftdi-0.1.3\",\n sha256 = \"2f9c8c625c6b8634ce70cd8cbb2ab8a103e4c2b4185c86d9954d2e16b1ef7c4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ftdi/0.1.3/download\"],\n strip_prefix = \"ftdi-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ftdi-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ftdi-embedded-hal-0.23.2\",\n sha256 = \"0fe355bc850d50b44519d42f875b788e6cb01fd52e4a6292250b23b29d6d5d8e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ftdi-embedded-hal/0.23.2/download\"],\n strip_prefix = \"ftdi-embedded-hal-0.23.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ftdi-embedded-hal-0.23.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ftdi-mpsse-0.1.2\",\n sha256 = \"5dd2c246fb727197d284bf7273718ed6b1c9a94a128bb618b97f13daec658a12\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ftdi-mpsse/0.1.2/download\"],\n strip_prefix = \"ftdi-mpsse-0.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ftdi-mpsse-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__getrandom-0.2.16\",\n sha256 = \"335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.16/download\"],\n strip_prefix = \"getrandom-0.2.16\",\n build_file = Label(\"@crate_index//crate_index:BUILD.getrandom-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__getrandom-0.3.3\",\n sha256 = \"26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.3/download\"],\n strip_prefix = \"getrandom-0.3.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.getrandom-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__gimli-0.31.1\",\n sha256 = \"07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/gimli/0.31.1/download\"],\n strip_prefix = \"gimli-0.31.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.gimli-0.31.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__group-0.13.0\",\n sha256 = \"f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/group/0.13.0/download\"],\n strip_prefix = \"group-0.13.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.group-0.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hashbrown-0.12.3\",\n sha256 = \"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.12.3/download\"],\n strip_prefix = \"hashbrown-0.12.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hashbrown-0.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hashbrown-0.15.4\",\n sha256 = \"5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.15.4/download\"],\n strip_prefix = \"hashbrown-0.15.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hashbrown-0.15.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hex-0.4.3\",\n sha256 = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hex/0.4.3/download\"],\n strip_prefix = \"hex-0.4.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hex-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hkdf-0.12.4\",\n sha256 = \"7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hkdf/0.12.4/download\"],\n strip_prefix = \"hkdf-0.12.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hkdf-0.12.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hmac-0.12.1\",\n sha256 = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hmac/0.12.1/download\"],\n strip_prefix = \"hmac-0.12.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hmac-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__humantime-2.2.0\",\n sha256 = \"9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/humantime/2.2.0/download\"],\n strip_prefix = \"humantime-2.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.humantime-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__humantime-serde-1.1.1\",\n sha256 = \"57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/humantime-serde/1.1.1/download\"],\n strip_prefix = \"humantime-serde-1.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.humantime-serde-1.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iana-time-zone-0.1.63\",\n sha256 = \"b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iana-time-zone/0.1.63/download\"],\n strip_prefix = \"iana-time-zone-0.1.63\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iana-time-zone-0.1.63.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.iana-time-zone-haiku-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.ident_case-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indexmap-1.9.3\",\n sha256 = \"bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/1.9.3/download\"],\n strip_prefix = \"indexmap-1.9.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indexmap-1.9.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indexmap-2.10.0\",\n sha256 = \"fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.10.0/download\"],\n strip_prefix = \"indexmap-2.10.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indexmap-2.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indicatif-0.18.0\",\n sha256 = \"70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indicatif/0.18.0/download\"],\n strip_prefix = \"indicatif-0.18.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indicatif-0.18.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indoc-2.0.6\",\n sha256 = \"f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indoc/2.0.6/download\"],\n strip_prefix = \"indoc-2.0.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indoc-2.0.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__inout-0.1.4\",\n sha256 = \"879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/inout/0.1.4/download\"],\n strip_prefix = \"inout-0.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.inout-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__inventory-0.3.20\",\n sha256 = \"ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/inventory/0.3.20/download\"],\n strip_prefix = \"inventory-0.3.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.inventory-0.3.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__io-kit-sys-0.4.1\",\n sha256 = \"617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/io-kit-sys/0.4.1/download\"],\n strip_prefix = \"io-kit-sys-0.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.io-kit-sys-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__io-uring-0.7.9\",\n sha256 = \"d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/io-uring/0.7.9/download\"],\n strip_prefix = \"io-uring-0.7.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.io-uring-0.7.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__is_terminal_polyfill-1.70.1\",\n sha256 = \"7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.1/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.is_terminal_polyfill-1.70.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__itoa-1.0.15\",\n sha256 = \"4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.15/download\"],\n strip_prefix = \"itoa-1.0.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.itoa-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__jiff-0.2.15\",\n sha256 = \"be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff/0.2.15/download\"],\n strip_prefix = \"jiff-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.jiff-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__jiff-static-0.2.15\",\n sha256 = \"03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-static/0.2.15/download\"],\n strip_prefix = \"jiff-static-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.jiff-static-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__js-sys-0.3.77\",\n sha256 = \"1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.77/download\"],\n strip_prefix = \"js-sys-0.3.77\",\n build_file = Label(\"@crate_index//crate_index:BUILD.js-sys-0.3.77.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__keccak-0.1.5\",\n sha256 = \"ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/keccak/0.1.5/download\"],\n strip_prefix = \"keccak-0.1.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.keccak-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libc-0.2.174\",\n sha256 = \"1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.174/download\"],\n strip_prefix = \"libc-0.2.174\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libc-0.2.174.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libftdi1-sys-1.1.3\",\n sha256 = \"575286f9af093f56c7805f4f94874871b84216d1545f499d2cbad9e370000fe7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libftdi1-sys/1.1.3/download\"],\n strip_prefix = \"libftdi1-sys-1.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libftdi1-sys-1.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libloading-0.8.8\",\n sha256 = \"07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libloading/0.8.8/download\"],\n strip_prefix = \"libloading-0.8.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libloading-0.8.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libm-0.2.15\",\n sha256 = \"f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libm/0.2.15/download\"],\n strip_prefix = \"libm-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libm-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libredox-0.1.9\",\n sha256 = \"391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libredox/0.1.9/download\"],\n strip_prefix = \"libredox-0.1.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libredox-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libudev-0.3.0\",\n sha256 = \"78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libudev/0.3.0/download\"],\n strip_prefix = \"libudev-0.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libudev-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libudev-sys-0.1.4\",\n patch_args = [\n \"-p1\",\n ],\n patches = [\n \"@@//third_party/rust/patches:libudev-sys-0.1.4.patch\",\n ],\n sha256 = \"3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libudev-sys/0.1.4/download\"],\n strip_prefix = \"libudev-sys-0.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libudev-sys-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libusb1-sys-0.7.0\",\n sha256 = \"da050ade7ac4ff1ba5379af847a10a10a8e284181e060105bf8d86960ce9ce0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libusb1-sys/0.7.0/download\"],\n strip_prefix = \"libusb1-sys-0.7.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libusb1-sys-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__linux-raw-sys-0.9.4\",\n sha256 = \"cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.9.4/download\"],\n strip_prefix = \"linux-raw-sys-0.9.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.linux-raw-sys-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__lock_api-0.4.13\",\n sha256 = \"96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.13/download\"],\n strip_prefix = \"lock_api-0.4.13\",\n build_file = Label(\"@crate_index//crate_index:BUILD.lock_api-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__log-0.4.27\",\n sha256 = \"13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.27/download\"],\n strip_prefix = \"log-0.4.27\",\n build_file = Label(\"@crate_index//crate_index:BUILD.log-0.4.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__mach2-0.4.3\",\n sha256 = \"d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mach2/0.4.3/download\"],\n strip_prefix = \"mach2-0.4.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.mach2-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__memchr-2.7.5\",\n sha256 = \"32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.7.5/download\"],\n strip_prefix = \"memchr-2.7.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.memchr-2.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.miniz_oxide-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__mio-1.0.4\",\n sha256 = \"78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.0.4/download\"],\n strip_prefix = \"mio-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.mio-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nb-0.1.3\",\n sha256 = \"801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nb/0.1.3/download\"],\n strip_prefix = \"nb-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nb-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nb-1.1.0\",\n sha256 = \"8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nb/1.1.0/download\"],\n strip_prefix = \"nb-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nb-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nix-0.26.4\",\n sha256 = \"598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nix/0.26.4/download\"],\n strip_prefix = \"nix-0.26.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nix-0.26.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-bigint-dig-0.8.4\",\n sha256 = \"dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-bigint-dig/0.8.4/download\"],\n strip_prefix = \"num-bigint-dig-0.8.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-bigint-dig-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-conv-0.1.0\",\n sha256 = \"51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.1.0/download\"],\n strip_prefix = \"num-conv-0.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-conv-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.num-integer-0.1.46.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-iter-0.1.45\",\n sha256 = \"1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-iter/0.1.45/download\"],\n strip_prefix = \"num-iter-0.1.45\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-iter-0.1.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.num-traits-0.2.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__object-0.36.7\",\n sha256 = \"62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/object/0.36.7/download\"],\n strip_prefix = \"object-0.36.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.object-0.36.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__once_cell-1.21.3\",\n sha256 = \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.3/download\"],\n strip_prefix = \"once_cell-1.21.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.once_cell-1.21.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__once_cell_polyfill-1.70.1\",\n sha256 = \"a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.1/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.once_cell_polyfill-1.70.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__openssl-0.10.73\",\n sha256 = \"8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl/0.10.73/download\"],\n strip_prefix = \"openssl-0.10.73\",\n build_file = Label(\"@crate_index//crate_index:BUILD.openssl-0.10.73.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__openssl-macros-0.1.1\",\n sha256 = \"a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-macros/0.1.1/download\"],\n strip_prefix = \"openssl-macros-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.openssl-macros-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__openssl-sys-0.9.109\",\n sha256 = \"90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-sys/0.9.109/download\"],\n strip_prefix = \"openssl-sys-0.9.109\",\n build_file = Label(\"@crate_index//crate_index:BUILD.openssl-sys-0.9.109.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.option-ext-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__p256-0.13.2\",\n sha256 = \"c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/p256/0.13.2/download\"],\n strip_prefix = \"p256-0.13.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.p256-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__p384-0.13.1\",\n sha256 = \"fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/p384/0.13.1/download\"],\n strip_prefix = \"p384-0.13.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.p384-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__parking_lot-0.12.4\",\n sha256 = \"70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.4/download\"],\n strip_prefix = \"parking_lot-0.12.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.parking_lot-0.12.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__parking_lot_core-0.9.11\",\n sha256 = \"bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.11/download\"],\n strip_prefix = \"parking_lot_core-0.9.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.parking_lot_core-0.9.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.paste-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pem-rfc7468-0.7.0\",\n sha256 = \"88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pem-rfc7468/0.7.0/download\"],\n strip_prefix = \"pem-rfc7468-0.7.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pem-rfc7468-0.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest-2.8.1\",\n sha256 = \"1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.8.1/download\"],\n strip_prefix = \"pest-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest_derive-2.8.1\",\n sha256 = \"bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.8.1/download\"],\n strip_prefix = \"pest_derive-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest_derive-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest_generator-2.8.1\",\n sha256 = \"87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.8.1/download\"],\n strip_prefix = \"pest_generator-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest_generator-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pest_meta-2.8.1\",\n sha256 = \"edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.8.1/download\"],\n strip_prefix = \"pest_meta-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pest_meta-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pkcs1-0.7.5\",\n sha256 = \"c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkcs1/0.7.5/download\"],\n strip_prefix = \"pkcs1-0.7.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pkcs1-0.7.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pkcs8-0.10.2\",\n sha256 = \"f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkcs8/0.10.2/download\"],\n strip_prefix = \"pkcs8-0.10.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pkcs8-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pkg-config-0.3.32\",\n sha256 = \"7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.32/download\"],\n strip_prefix = \"pkg-config-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pkg-config-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__portable-atomic-1.11.1\",\n sha256 = \"f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.11.1/download\"],\n strip_prefix = \"portable-atomic-1.11.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.portable-atomic-1.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__portable-atomic-util-0.2.4\",\n sha256 = \"d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic-util/0.2.4/download\"],\n strip_prefix = \"portable-atomic-util-0.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.portable-atomic-util-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__primeorder-0.13.6\",\n sha256 = \"353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/primeorder/0.13.6/download\"],\n strip_prefix = \"primeorder-0.13.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.primeorder-0.13.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__proc-macro2-1.0.95\",\n sha256 = \"02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.95/download\"],\n strip_prefix = \"proc-macro2-1.0.95\",\n build_file = Label(\"@crate_index//crate_index:BUILD.proc-macro2-1.0.95.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__quote-1.0.40\",\n sha256 = \"1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.40/download\"],\n strip_prefix = \"quote-1.0.40\",\n build_file = Label(\"@crate_index//crate_index:BUILD.quote-1.0.40.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand-0.8.5\",\n sha256 = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.8.5/download\"],\n strip_prefix = \"rand-0.8.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand_chacha-0.3.1\",\n sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n strip_prefix = \"rand_chacha-0.3.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand_chacha-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand_core-0.6.4\",\n sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n strip_prefix = \"rand_core-0.6.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand_core-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__redox_syscall-0.5.17\",\n sha256 = \"5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.17/download\"],\n strip_prefix = \"redox_syscall-0.5.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.redox_syscall-0.5.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.redox_users-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ref-cast-1.0.24\",\n sha256 = \"4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast/1.0.24/download\"],\n strip_prefix = \"ref-cast-1.0.24\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ref-cast-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ref-cast-impl-1.0.24\",\n sha256 = \"1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ref-cast-impl/1.0.24/download\"],\n strip_prefix = \"ref-cast-impl-1.0.24\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ref-cast-impl-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-1.11.1\",\n sha256 = \"b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.11.1/download\"],\n strip_prefix = \"regex-1.11.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-1.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-automata-0.4.9\",\n sha256 = \"809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.9/download\"],\n strip_prefix = \"regex-automata-0.4.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-automata-0.4.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-syntax-0.8.5\",\n sha256 = \"2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.5/download\"],\n strip_prefix = \"regex-syntax-0.8.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-syntax-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rfc6979-0.4.0\",\n sha256 = \"f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rfc6979/0.4.0/download\"],\n strip_prefix = \"rfc6979-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rfc6979-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rsa-0.9.8\",\n sha256 = \"78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rsa/0.9.8/download\"],\n strip_prefix = \"rsa-0.9.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rsa-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rusb-0.9.4\",\n sha256 = \"ab9f9ff05b63a786553a4c02943b74b34a988448671001e9a27e2f0565cc05a4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusb/0.9.4/download\"],\n strip_prefix = \"rusb-0.9.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rusb-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustc-demangle-0.1.26\",\n sha256 = \"56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-demangle/0.1.26/download\"],\n strip_prefix = \"rustc-demangle-0.1.26\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustc-demangle-0.1.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustix-1.0.8\",\n sha256 = \"11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.0.8/download\"],\n strip_prefix = \"rustix-1.0.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustix-1.0.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustversion-1.0.21\",\n sha256 = \"8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.21/download\"],\n strip_prefix = \"rustversion-1.0.21\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustversion-1.0.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ruzstd-0.7.3\",\n sha256 = \"fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ruzstd/0.7.3/download\"],\n strip_prefix = \"ruzstd-0.7.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ruzstd-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ryu-1.0.20\",\n sha256 = \"28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.20/download\"],\n strip_prefix = \"ryu-1.0.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ryu-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__schemars-0.9.0\",\n sha256 = \"4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/0.9.0/download\"],\n strip_prefix = \"schemars-0.9.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.schemars-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__schemars-1.0.4\",\n sha256 = \"82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/1.0.4/download\"],\n strip_prefix = \"schemars-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.schemars-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sec1-0.7.3\",\n sha256 = \"d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sec1/0.7.3/download\"],\n strip_prefix = \"sec1-0.7.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sec1-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__secrecy-0.8.0\",\n sha256 = \"9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/secrecy/0.8.0/download\"],\n strip_prefix = \"secrecy-0.8.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.secrecy-0.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde-1.0.219\",\n sha256 = \"5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.219/download\"],\n strip_prefix = \"serde-1.0.219\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde-1.0.219.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_bytes-0.11.17\",\n sha256 = \"8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_bytes/0.11.17/download\"],\n strip_prefix = \"serde_bytes-0.11.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_bytes-0.11.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_derive-1.0.219\",\n sha256 = \"5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.219/download\"],\n strip_prefix = \"serde_derive-1.0.219\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_derive-1.0.219.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_json-1.0.142\",\n sha256 = \"030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.142/download\"],\n strip_prefix = \"serde_json-1.0.142\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_json-1.0.142.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_with-3.14.0\",\n sha256 = \"f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_with/3.14.0/download\"],\n strip_prefix = \"serde_with-3.14.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_with-3.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_with_macros-3.14.0\",\n sha256 = \"de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_with_macros/3.14.0/download\"],\n strip_prefix = \"serde_with_macros-3.14.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_with_macros-3.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serialport-4.7.2\",\n sha256 = \"cdb0bc984f6af6ef8bab54e6cf2071579ee75b9286aa9f2319a0d220c28b0a2b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serialport/4.7.2/download\"],\n strip_prefix = \"serialport-4.7.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serialport-4.7.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sha3-0.10.8\",\n sha256 = \"75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha3/0.10.8/download\"],\n strip_prefix = \"sha3-0.10.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sha3-0.10.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__shellwords-1.1.0\",\n sha256 = \"89e515aa4699a88148ed5ef96413ceef0048ce95b43fbc955a33bde0a70fcae6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shellwords/1.1.0/download\"],\n strip_prefix = \"shellwords-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.shellwords-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__signal-hook-registry-1.4.6\",\n sha256 = \"b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.6/download\"],\n strip_prefix = \"signal-hook-registry-1.4.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.signal-hook-registry-1.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__signature-2.2.0\",\n sha256 = \"77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signature/2.2.0/download\"],\n strip_prefix = \"signature-2.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.signature-2.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__slab-0.4.11\",\n sha256 = \"7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.11/download\"],\n strip_prefix = \"slab-0.4.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.slab-0.4.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__socket2-0.6.0\",\n sha256 = \"233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.0/download\"],\n strip_prefix = \"socket2-0.6.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.socket2-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__spin-0.9.8\",\n sha256 = \"6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spin/0.9.8/download\"],\n strip_prefix = \"spin-0.9.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.spin-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__spki-0.7.3\",\n sha256 = \"d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spki/0.7.3/download\"],\n strip_prefix = \"spki-0.7.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.spki-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.static_assertions-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__strum-0.27.2\",\n sha256 = \"af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strum/0.27.2/download\"],\n strip_prefix = \"strum-0.27.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.strum-0.27.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__strum_macros-0.27.2\",\n sha256 = \"7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strum_macros/0.27.2/download\"],\n strip_prefix = \"strum_macros-0.27.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.strum_macros-0.27.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.subtle-2.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__syn-2.0.104\",\n sha256 = \"17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.104/download\"],\n strip_prefix = \"syn-2.0.104\",\n build_file = Label(\"@crate_index//crate_index:BUILD.syn-2.0.104.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tempfile-3.20.0\",\n sha256 = \"e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.20.0/download\"],\n strip_prefix = \"tempfile-3.20.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tempfile-3.20.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thiserror-2.0.12\",\n sha256 = \"567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.12/download\"],\n strip_prefix = \"thiserror-2.0.12\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thiserror-2.0.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thiserror-impl-2.0.12\",\n sha256 = \"7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.12/download\"],\n strip_prefix = \"thiserror-impl-2.0.12\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thiserror-impl-2.0.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-0.3.41\",\n sha256 = \"8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.41/download\"],\n strip_prefix = \"time-0.3.41\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-0.3.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-core-0.1.4\",\n sha256 = \"c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.4/download\"],\n strip_prefix = \"time-core-0.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-core-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-macros-0.2.22\",\n sha256 = \"3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.22/download\"],\n strip_prefix = \"time-macros-0.2.22\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-macros-0.2.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tiny-keccak-2.0.2\",\n sha256 = \"2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tiny-keccak/2.0.2/download\"],\n strip_prefix = \"tiny-keccak-2.0.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tiny-keccak-2.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-1.47.1\",\n sha256 = \"89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.47.1/download\"],\n strip_prefix = \"tokio-1.47.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-1.47.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-macros-2.5.0\",\n sha256 = \"6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.5.0/download\"],\n strip_prefix = \"tokio-macros-2.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-macros-2.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__twox-hash-1.6.3\",\n sha256 = \"97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/twox-hash/1.6.3/download\"],\n strip_prefix = \"twox-hash-1.6.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.twox-hash-1.6.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typeid-1.0.3\",\n sha256 = \"bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typeid/1.0.3/download\"],\n strip_prefix = \"typeid-1.0.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typeid-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typenum-1.18.0\",\n sha256 = \"1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.18.0/download\"],\n strip_prefix = \"typenum-1.18.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typenum-1.18.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typetag-0.2.20\",\n sha256 = \"73f22b40dd7bfe8c14230cf9702081366421890435b2d625fa92b4acc4c3de6f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typetag/0.2.20/download\"],\n strip_prefix = \"typetag-0.2.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typetag-0.2.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__typetag-impl-0.2.20\",\n sha256 = \"35f5380909ffc31b4de4f4bdf96b877175a016aa2ca98cee39fcfd8c4d53d952\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typetag-impl/0.2.20/download\"],\n strip_prefix = \"typetag-impl-0.2.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.typetag-impl-0.2.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ucd-trie-0.1.7\",\n sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n strip_prefix = \"ucd-trie-0.1.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unescaper-0.1.6\",\n sha256 = \"c01d12e3a56a4432a8b436f293c25f4808bdf9e9f9f98f9260bba1f1bc5a1f26\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unescaper/0.1.6/download\"],\n strip_prefix = \"unescaper-0.1.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unescaper-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-ident-1.0.18\",\n sha256 = \"5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.18/download\"],\n strip_prefix = \"unicode-ident-1.0.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-ident-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-width-0.2.1\",\n sha256 = \"4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-width/0.2.1/download\"],\n strip_prefix = \"unicode-width-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-width-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unit-prefix-0.5.1\",\n sha256 = \"323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unit-prefix/0.5.1/download\"],\n strip_prefix = \"unit-prefix-0.5.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unit-prefix-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__vcpkg-0.2.15\",\n sha256 = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/vcpkg/0.2.15/download\"],\n strip_prefix = \"vcpkg-0.2.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__void-1.0.2\",\n sha256 = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/void/1.0.2/download\"],\n strip_prefix = \"void-1.0.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.void-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wait-timeout-0.2.1\",\n sha256 = \"09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wait-timeout/0.2.1/download\"],\n strip_prefix = \"wait-timeout-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wait-timeout-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasi-0.14.2-wasi-0.2.4\",\n sha256 = \"9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.14.2+wasi-0.2.4/download\"],\n strip_prefix = \"wasi-0.14.2+wasi-0.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasi-0.14.2+wasi-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-0.2.100\",\n sha256 = \"1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-backend-0.2.100\",\n sha256 = \"2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-backend/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-backend-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-backend-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-macro-0.2.100\",\n sha256 = \"7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-macro-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-macro-support-0.2.100\",\n sha256 = \"8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-macro-support-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-shared-0.2.100\",\n sha256 = \"1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.100/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.100\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-shared-0.2.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.winapi-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-core-0.61.2\",\n sha256 = \"c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-core/0.61.2/download\"],\n strip_prefix = \"windows-core-0.61.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-core-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-implement-0.60.0\",\n sha256 = \"a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-implement/0.60.0/download\"],\n strip_prefix = \"windows-implement-0.60.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-implement-0.60.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-interface-0.59.1\",\n sha256 = \"bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-interface/0.59.1/download\"],\n strip_prefix = \"windows-interface-0.59.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-interface-0.59.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-link-0.1.3\",\n sha256 = \"5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.1.3/download\"],\n strip_prefix = \"windows-link-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-link-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-result-0.3.4\",\n sha256 = \"56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-result/0.3.4/download\"],\n strip_prefix = \"windows-result-0.3.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-result-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-strings-0.4.2\",\n sha256 = \"56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-strings/0.4.2/download\"],\n strip_prefix = \"windows-strings-0.4.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-strings-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.59.0\",\n sha256 = \"1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.59.0/download\"],\n strip_prefix = \"windows-sys-0.59.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.59.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.60.2\",\n sha256 = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.60.2/download\"],\n strip_prefix = \"windows-sys-0.60.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-targets-0.53.3\",\n sha256 = \"d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.53.3/download\"],\n strip_prefix = \"windows-targets-0.53.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-targets-0.53.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_gnullvm-0.53.0\",\n sha256 = \"86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.53.0/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_gnullvm-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_msvc-0.53.0\",\n sha256 = \"c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.53.0/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_msvc-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnu-0.53.0\",\n sha256 = \"c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.53.0/download\"],\n strip_prefix = \"windows_i686_gnu-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnu-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnullvm-0.53.0\",\n sha256 = \"9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.53.0/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnullvm-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_msvc-0.53.0\",\n sha256 = \"581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.53.0/download\"],\n strip_prefix = \"windows_i686_msvc-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_msvc-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnu-0.53.0\",\n sha256 = \"2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.53.0/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnu-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnullvm-0.53.0\",\n sha256 = \"0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.53.0/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnullvm-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_msvc-0.53.0\",\n sha256 = \"271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.53.0/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.53.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_msvc-0.53.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-rt-0.39.0\",\n sha256 = \"6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rt/0.39.0/download\"],\n strip_prefix = \"wit-bindgen-rt-0.39.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-rt-0.39.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zerocopy-0.8.26\",\n sha256 = \"1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.26/download\"],\n strip_prefix = \"zerocopy-0.8.26\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zerocopy-0.8.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zerocopy-derive-0.8.26\",\n sha256 = \"9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.26/download\"],\n strip_prefix = \"zerocopy-derive-0.8.26\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zerocopy-derive-0.8.26.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zeroize-1.8.1\",\n sha256 = \"ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zeroize/1.8.1/download\"],\n strip_prefix = \"zeroize-1.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zeroize-1.8.1.bazel\"),\n )\n\n return [\n struct(repo=\"crate_index__aes-0.8.4\", is_dev_dep = False),\n struct(repo=\"crate_index__anstyle-1.0.11\", is_dev_dep = False),\n struct(repo=\"crate_index__anyhow-1.0.98\", is_dev_dep = False),\n struct(repo=\"crate_index__arrayvec-0.7.6\", is_dev_dep = False),\n struct(repo=\"crate_index__asn1-0.22.0\", is_dev_dep = False),\n struct(repo=\"crate_index__base64ct-1.8.0\", is_dev_dep = False),\n struct(repo=\"crate_index__bitflags-2.9.1\", is_dev_dep = False),\n struct(repo=\"crate_index__byteorder-1.5.0\", is_dev_dep = False),\n struct(repo=\"crate_index__chrono-0.4.41\", is_dev_dep = False),\n struct(repo=\"crate_index__clap-4.5.48\", is_dev_dep = False),\n struct(repo=\"crate_index__const-oid-0.9.6\", is_dev_dep = False),\n struct(repo=\"crate_index__crc-3.3.0\", is_dev_dep = False),\n struct(repo=\"crate_index__cryptoki-0.10.0\", is_dev_dep = False),\n struct(repo=\"crate_index__cryptoki-sys-0.4.0\", is_dev_dep = False),\n struct(repo=\"crate_index__der-0.7.10\", is_dev_dep = False),\n struct(repo=\"crate_index__deser-hjson-2.2.4\", is_dev_dep = False),\n struct(repo=\"crate_index__directories-6.0.0\", is_dev_dep = False),\n struct(repo=\"crate_index__ecdsa-0.16.9\", is_dev_dep = False),\n struct(repo=\"crate_index__elliptic-curve-0.13.8\", is_dev_dep = False),\n struct(repo=\"crate_index__embedded-hal-1.0.0\", is_dev_dep = False),\n struct(repo=\"crate_index__env_logger-0.11.8\", is_dev_dep = False),\n struct(repo=\"crate_index__erased-serde-0.4.6\", is_dev_dep = False),\n struct(repo=\"crate_index__foreign-types-0.3.2\", is_dev_dep = False),\n struct(repo=\"crate_index__ftdi-0.1.3\", is_dev_dep = False),\n struct(repo=\"crate_index__ftdi-embedded-hal-0.23.2\", is_dev_dep = False),\n struct(repo=\"crate_index__ftdi-mpsse-0.1.2\", is_dev_dep = False),\n struct(repo=\"crate_index__heck-0.5.0\", is_dev_dep = False),\n struct(repo=\"crate_index__hex-0.4.3\", is_dev_dep = False),\n struct(repo=\"crate_index__humantime-2.2.0\", is_dev_dep = False),\n struct(repo=\"crate_index__humantime-serde-1.1.1\", is_dev_dep = False),\n struct(repo=\"crate_index__indexmap-2.10.0\", is_dev_dep = False),\n struct(repo=\"crate_index__indicatif-0.18.0\", is_dev_dep = False),\n struct(repo=\"crate_index__inventory-0.3.20\", is_dev_dep = False),\n struct(repo=\"crate_index__itertools-0.14.0\", is_dev_dep = False),\n struct(repo=\"crate_index__libloading-0.8.8\", is_dev_dep = False),\n struct(repo=\"crate_index__log-0.4.27\", is_dev_dep = False),\n struct(repo=\"crate_index__num-bigint-dig-0.8.4\", is_dev_dep = False),\n struct(repo=\"crate_index__num-traits-0.2.19\", is_dev_dep = False),\n struct(repo=\"crate_index__object-0.36.7\", is_dev_dep = False),\n struct(repo=\"crate_index__once_cell-1.21.3\", is_dev_dep = False),\n struct(repo=\"crate_index__openssl-0.10.73\", is_dev_dep = False),\n struct(repo=\"crate_index__openssl-sys-0.9.109\", is_dev_dep = False),\n struct(repo=\"crate_index__p256-0.13.2\", is_dev_dep = False),\n struct(repo=\"crate_index__p384-0.13.1\", is_dev_dep = False),\n struct(repo=\"crate_index__paste-1.0.15\", is_dev_dep = False),\n struct(repo=\"crate_index__pem-rfc7468-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__pest-2.8.1\", is_dev_dep = False),\n struct(repo=\"crate_index__pest_derive-2.8.1\", is_dev_dep = False),\n struct(repo=\"crate_index__proc-macro2-1.0.95\", is_dev_dep = False),\n struct(repo=\"crate_index__quote-1.0.40\", is_dev_dep = False),\n struct(repo=\"crate_index__rand-0.8.5\", is_dev_dep = False),\n struct(repo=\"crate_index__rand_chacha-0.3.1\", is_dev_dep = False),\n struct(repo=\"crate_index__regex-1.11.1\", is_dev_dep = False),\n struct(repo=\"crate_index__rsa-0.9.8\", is_dev_dep = False),\n struct(repo=\"crate_index__rusb-0.9.4\", is_dev_dep = False),\n struct(repo=\"crate_index__rustix-1.0.8\", is_dev_dep = False),\n struct(repo=\"crate_index__scopeguard-1.2.0\", is_dev_dep = False),\n struct(repo=\"crate_index__serde-1.0.219\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_bytes-0.11.17\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_json-1.0.142\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_with-3.14.0\", is_dev_dep = False),\n struct(repo=\"crate_index__serialport-4.7.2\", is_dev_dep = False),\n struct(repo=\"crate_index__sha2-0.10.9\", is_dev_dep = False),\n struct(repo=\"crate_index__sha3-0.10.8\", is_dev_dep = False),\n struct(repo=\"crate_index__shellwords-1.1.0\", is_dev_dep = False),\n struct(repo=\"crate_index__strum-0.27.2\", is_dev_dep = False),\n struct(repo=\"crate_index__syn-2.0.104\", is_dev_dep = False),\n struct(repo=\"crate_index__tempfile-3.20.0\", is_dev_dep = False),\n struct(repo=\"crate_index__thiserror-2.0.12\", is_dev_dep = False),\n struct(repo=\"crate_index__tiny-keccak-2.0.2\", is_dev_dep = False),\n struct(repo=\"crate_index__tokio-1.47.1\", is_dev_dep = False),\n struct(repo=\"crate_index__typetag-0.2.20\", is_dev_dep = False),\n struct(repo=\"crate_index__wait-timeout-0.2.1\", is_dev_dep = False),\n struct(repo=\"crate_index__zerocopy-0.8.26\", is_dev_dep = False),\n struct(repo=\"crate_index__zeroize-1.8.1\", is_dev_dep = False),\n struct(repo = \"crate_index__indoc-2.0.6\", is_dev_dep = True),\n ]\n" } } }, @@ -10240,6 +10240,22 @@ "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 'lowrisc_opentitan'\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 = \"void\",\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 = \"2015\",\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=void\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.2\",\n)\n" } }, + "crate_index__wait-timeout-0.2.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wait-timeout/0.2.1/download" + ], + "strip_prefix": "wait-timeout-0.2.1", + "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 'lowrisc_opentitan'\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 = \"wait_timeout\",\n deps = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.174//:libc\", # cfg(unix)\n ],\n \"//conditions:default\": [],\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 = \"2015\",\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=wait-timeout\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, "crate_index__wasi-0.11.1-wasi-snapshot-preview1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { diff --git a/hw/dv/dpi/gpiodpi/gpiodpi.c b/hw/dv/dpi/gpiodpi/gpiodpi.c index 30816e10ef2..a9968756965 100644 --- a/hw/dv/dpi/gpiodpi/gpiodpi.c +++ b/hw/dv/dpi/gpiodpi/gpiodpi.c @@ -1,4 +1,5 @@ // Copyright lowRISC contributors (OpenTitan project). +// Copyright zeroRISC Inc. // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 @@ -46,6 +47,8 @@ struct gpiodpi_ctx { // A counter of calls into the host_to_device_tick function; used to // avoid excessive `read` syscalls to the pipe fd. uint32_t counter; + // A designated 'virtual' pin index which the host can use to trigger an exit. + uint32_t pin_req_exit; // File descriptors and paths for the device-to-host and host-to-device // FIFOs. @@ -107,7 +110,7 @@ static void print_usage(char *rfifo, char *wfifo, int n_bits) { wfifo); } -void *gpiodpi_create(const char *name, int n_bits) { +void *gpiodpi_create(const char *name, int n_bits, int pin_req_exit) { struct gpiodpi_ctx *ctx = (struct gpiodpi_ctx *)malloc(sizeof(struct gpiodpi_ctx)); assert(ctx); @@ -117,6 +120,12 @@ void *gpiodpi_create(const char *name, int n_bits) { assert(n_bits <= 32 && "n_bits must be <= 32"); ctx->n_bits = n_bits; + // pin_req_exit must not be the index of a physical pin, and also must have an + // index which fits in a byte for the host to trigger it. + assert(pin_req_exit >= n_bits && "pin_req_exit must be >= n_bits"); + assert(pin_req_exit < 256 && "pin_req_exit must be < 256"); + ctx->pin_req_exit = pin_req_exit; + ctx->driven_pin_values = 0; ctx->weak_pins = 0; ctx->counter = 0; @@ -211,9 +220,10 @@ static void set_bit_val(uint32_t *word, uint32_t idx, bool val) { } } -uint32_t gpiodpi_host_to_device_tick(void *ctx_void, svBitVecVal *gpio_oe, - svBitVecVal *gpio_pull_en, - svBitVecVal *gpio_pull_sel) { +svBitVecVal gpiodpi_host_to_device_tick(void *ctx_void, svBitVecVal *gpio_oe, + svBitVecVal *gpio_pull_en, + svBitVecVal *gpio_pull_sel, + svBit *req_exit) { struct gpiodpi_ctx *ctx = (struct gpiodpi_ctx *)ctx_void; assert(ctx); @@ -247,7 +257,7 @@ uint32_t gpiodpi_host_to_device_tick(void *ctx_void, svBitVecVal *gpio_oe, } CLR_BIT(ctx->driven_pin_values, idx); set_bit_val(&ctx->weak_pins, idx, weak); - } else { + } else if (idx != ctx->pin_req_exit) { fprintf(stderr, "GPIO: Host tried to pull invalid pin low: pin %2d\n", idx); @@ -267,6 +277,11 @@ uint32_t gpiodpi_host_to_device_tick(void *ctx_void, svBitVecVal *gpio_oe, } SET_BIT(ctx->driven_pin_values, idx); set_bit_val(&ctx->weak_pins, idx, weak); + } else if (idx == ctx->pin_req_exit) { + // The request exit pin triggers an exit upon being set; the + // corresponding GPIO DPI SystemVerilog file triggers a $finish + // when req_exit is set high. + *req_exit = 1; } else { fprintf(stderr, "GPIO: Host tried to pull invalid pin high: pin %2d\n", diff --git a/hw/dv/dpi/gpiodpi/gpiodpi.h b/hw/dv/dpi/gpiodpi/gpiodpi.h index 90830f1dc6d..847fb60b901 100644 --- a/hw/dv/dpi/gpiodpi/gpiodpi.h +++ b/hw/dv/dpi/gpiodpi/gpiodpi.h @@ -1,4 +1,5 @@ // Copyright lowRISC contributors (OpenTitan project). +// Copyright zeroRISC Inc. // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 @@ -17,13 +18,19 @@ extern "C" { * @param name a name to use when creating the inner FIFO. * @param n_bits number of bits to write in each direction; this must be at * most 32 bits. + * @param pin_req_exit 'virtual' pin index which the host can use to trigger + * simulation exit; this index must be at least n_bits and at most 255. */ -void *gpiodpi_create(const char *name, int n_bits); +void *gpiodpi_create(const char *name, int n_bits, int pin_req_exit); /** * Attempt to post the current GPIO state to the outside world. * * Intended to be called from SystemVerilog. + * + * @param ctx_void void pointer to the GPIO DPI context. + * @param gpio_data pointer to the GPIO data bit vector. + * @param gpio_data pointer to the GPIO output enable bit vector. */ void gpiodpi_device_to_host(void *ctx_void, svBitVecVal *gpio_data, svBitVecVal *gpio_oe); @@ -38,11 +45,18 @@ void gpiodpi_device_to_host(void *ctx_void, svBitVecVal *gpio_data, * commands are ignored. * * Intended to be called from SystemVerilog. + * @param ctx_void void pointer to the GPIO DPI context. + * @param gpio_oe pointer to the GPIO output enable bit vector. + * @param gpio_pull_en pointer to GPIO pull up/down enable bit vector. + * @param gpio_pull_sel pointer to the GPIO pull up/down selection bit vector. + * @param pin_req_exit 'virtual' pin index which the host can use to trigger + * simulation exit; this index must be at least n_bits and at most 255. * @return the values to pull the GPIO pins to. */ uint32_t gpiodpi_host_to_device_tick(void *ctx_void, svBitVecVal *gpio_oe, svBitVecVal *gpio_pull_en, - svBitVecVal *gpio_pull_sel); + svBitVecVal *gpio_pull_sel, + svBit *req_exit); /** * Relinquish resources held by a GPIO DPI interface. diff --git a/hw/dv/dpi/gpiodpi/gpiodpi.sv b/hw/dv/dpi/gpiodpi/gpiodpi.sv index f44caac15c8..2f36699d498 100644 --- a/hw/dv/dpi/gpiodpi/gpiodpi.sv +++ b/hw/dv/dpi/gpiodpi/gpiodpi.sv @@ -1,11 +1,13 @@ // Copyright lowRISC contributors (OpenTitan project). +// Copyright zeroRISC Inc. // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 module gpiodpi #( parameter string NAME = "gpio0", - parameter int N_GPIO = 32 + parameter int N_GPIO = 32, + parameter int PIN_REQ_EXIT = 254 )( input logic clk_i, input logic rst_ni, @@ -18,7 +20,7 @@ module gpiodpi input logic [N_GPIO-1:0] gpio_pull_sel ); import "DPI-C" function - chandle gpiodpi_create(input string name, input int n_bits); + chandle gpiodpi_create(input string name, input int n_bits, input int pin_req_exit); import "DPI-C" function void gpiodpi_device_to_host(input chandle ctx, input logic [N_GPIO-1:0] gpio_d2p, @@ -31,13 +33,15 @@ module gpiodpi int gpiodpi_host_to_device_tick(input chandle ctx, input logic [N_GPIO-1:0] gpio_en_d2p, input logic [N_GPIO-1:0] gpio_pull_en, - input logic [N_GPIO-1:0] gpio_pull_sel); + input logic [N_GPIO-1:0] gpio_pull_sel, + output bit req_exit); + bit req_exit; chandle ctx; function automatic void initialize(); $display($time, "GPIO: creating gpiodpi"); - ctx = gpiodpi_create(NAME, N_GPIO); + ctx = gpiodpi_create(NAME, N_GPIO, PIN_REQ_EXIT); endfunction // Allow being activated past initial time. @@ -62,16 +66,21 @@ module gpiodpi if (gpio_d2p_r != gpio_d2p) begin gpiodpi_device_to_host(ctx, gpio_d2p, gpio_en_d2p); end + if (req_exit) begin + $display("GPIO: Host pulled REQ_EXIT high, exiting simulation."); + $finish; + end end - logic gpio_write_pulse; - + // The req_exit signal starts low at initialization, and is set by the DPI + // function gpiodpi_host_to_device_tick in response to the host asserting the + // 'virtual' pin REQUEST_EXIT with index designated by PIN_REQ_EXIT. always_ff @(posedge eff_clk or negedge rst_ni) begin if (!rst_ni) begin gpio_p2d <= '0; // default value end else begin - gpio_p2d <= gpiodpi_host_to_device_tick(ctx, gpio_en_d2p, gpio_pull_en, gpio_pull_sel); + gpio_p2d <= gpiodpi_host_to_device_tick(ctx, gpio_en_d2p, gpio_pull_en, gpio_pull_sel, + req_exit); end end - endmodule diff --git a/hw/top_earlgrey/dv/verilator/chip_sim_tb.sv b/hw/top_earlgrey/dv/verilator/chip_sim_tb.sv index 0b8094e760c..9fbf3a560f1 100644 --- a/hw/top_earlgrey/dv/verilator/chip_sim_tb.sv +++ b/hw/top_earlgrey/dv/verilator/chip_sim_tb.sv @@ -1,4 +1,5 @@ // Copyright lowRISC contributors (OpenTitan project). +// Copyright zeroRISC Inc. // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 @@ -198,13 +199,15 @@ module chip_sim_tb ( `SIM_SRAM_IF.start_addr = `VERILATOR_TEST_STATUS_ADDR; u_sw_test_status_if.sw_test_status_addr = `SIM_SRAM_IF.start_addr; end - + // Print the test status on completion once, using the sw_test_status_printed + // variable to ensure we don't double-print the results. + bit sw_test_status_printed; always @(posedge clk_i) begin - if (u_sw_test_status_if.sw_test_done) begin + if (u_sw_test_status_if.sw_test_done && !sw_test_status_printed) begin $display("Verilator sim termination requested"); $display("Your simulation wrote to 0x%h", u_sw_test_status_if.sw_test_status_addr); dv_test_status_pkg::dv_test_status(u_sw_test_status_if.sw_test_passed); - $finish; + sw_test_status_printed = 1'b1; end end diff --git a/sw/host/ot_transports/verilator/BUILD b/sw/host/ot_transports/verilator/BUILD index 5a3f1f5aa7b..5c9046a23dd 100644 --- a/sw/host/ot_transports/verilator/BUILD +++ b/sw/host/ot_transports/verilator/BUILD @@ -1,4 +1,5 @@ # Copyright lowRISC contributors (OpenTitan project). +# Copyright zeroRISC Inc. # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 @@ -25,6 +26,7 @@ rust_library( "@crate_index//:log", "@crate_index//:regex", "@crate_index//:serde", + "@crate_index//:wait-timeout", ], ) diff --git a/sw/host/ot_transports/verilator/src/subprocess.rs b/sw/host/ot_transports/verilator/src/subprocess.rs index 5f98158f7a9..4a433de32f6 100644 --- a/sw/host/ot_transports/verilator/src/subprocess.rs +++ b/sw/host/ot_transports/verilator/src/subprocess.rs @@ -1,4 +1,5 @@ // Copyright lowRISC contributors (OpenTitan project). +// Copyright zeroRISC Inc. // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 @@ -6,6 +7,7 @@ use std::io::ErrorKind; use std::process::{Child, Command, Stdio}; use std::sync::{Arc, Mutex}; use std::time::{Duration, Instant}; +use wait_timeout::ChildExt; use anyhow::{Context, Result, anyhow, ensure}; use regex::Regex; @@ -141,11 +143,22 @@ impl Subprocess { Err(anyhow!("Timed out")) } - /// Kill the verilator subprocess. - pub fn kill(&mut self) -> Result<()> { - match self.child.kill() { - Err(error) if error.kind() != ErrorKind::InvalidInput => Err(error.into()), - _ => Ok(()), + /// Shutdown the verilator subprocess with a timeout. + pub fn shutdown_with_timeout(&mut self, timeout: Duration) -> Result<()> { + // Try waiting for the process to exit on its own; if dispatch() was + // called on the parent VerilatorTransport, then the REQUEST_EXIT pin + // was already asserted, meaning that the verilator subprocess should be + // shutting down on its own now. + log::info!("Waiting for verilator subprocess to terminate."); + match self.child.wait_timeout(timeout)? { + Some(_) => Ok(()), + None => { + log::warn!("Verilator shutdown timeout expired, sending kill."); + match self.child.kill() { + Err(error) if error.kind() != ErrorKind::InvalidInput => Err(error.into()), + _ => Ok(()), + } + } } } } @@ -178,9 +191,11 @@ mod test { } #[test] - fn test_kill() -> Result<()> { + fn test_shutdown_with_timeout() -> Result<()> { + // Subprocess will not shut itself down, so this exercises the shutdown + // timeout logic instead. let mut subprocess = echo_subprocess()?; - subprocess.kill()?; + subprocess.shutdown_with_timeout(Duration::from_secs(1))?; Ok(()) } } diff --git a/sw/host/ot_transports/verilator/src/transport.rs b/sw/host/ot_transports/verilator/src/transport.rs index abaee98aeae..e0079057543 100644 --- a/sw/host/ot_transports/verilator/src/transport.rs +++ b/sw/host/ot_transports/verilator/src/transport.rs @@ -1,4 +1,5 @@ // Copyright lowRISC contributors (OpenTitan project). +// Copyright zeroRISC Inc. // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 @@ -23,7 +24,14 @@ use opentitanlib::util::parse_int::ParseInt; use super::gpio::{GpioInner, VerilatorGpioPin}; use super::subprocess::{Options, Subprocess}; +/// Baud for UART communication with host. const UART_BAUD: u32 = 40; +/// Timeout in milliseconds to wait after requesting exit for the verilator subprocess to finish. +const REQUEST_EXIT_TIMEOUT: u64 = 2000; +/// 'Virtual' pin used for requesting the verilator subprocess exit gracefully. +const REQUEST_EXIT_PIN: u8 = 254; +/// Disconnected 'virtual' reset pin, required by opentitanlib in every transport's interface definition. +const RESET_PIN: u8 = 255; pub(crate) struct Inner { uart: Option>, @@ -79,10 +87,26 @@ impl Verilator { }) } + /// Helper function to fetch a verilator GPIO pin by index. + fn get_gpio_pin(&self, pin: u8) -> Result> { + ensure!( + pin < 32 || pin == REQUEST_EXIT_PIN || pin == RESET_PIN, + GpioError::InvalidPinNumber(pin) + ); + let mut inner = self.inner.borrow_mut(); + Ok(inner + .gpio + .pins + .entry(pin) + .or_insert_with(|| VerilatorGpioPin::new(self.inner.clone(), pin)) + .clone()) + } + /// Shuts down the verilator subprocess. pub fn shutdown(&mut self) -> Result<()> { + self.get_gpio_pin(REQUEST_EXIT_PIN)?.write(true)?; if let Some(mut subprocess) = self.subprocess.take() { - subprocess.kill() + subprocess.shutdown_with_timeout(Duration::from_millis(REQUEST_EXIT_TIMEOUT)) } else { Ok(()) } @@ -116,14 +140,7 @@ impl Transport for Verilator { fn gpio_pin(&self, instance: &str) -> Result> { let pin = u8::from_str(instance).with_context(|| format!("can't convert {instance:?}"))?; - ensure!(pin < 32 || pin == 255, GpioError::InvalidPinNumber(pin)); - let mut inner = self.inner.borrow_mut(); - Ok(inner - .gpio - .pins - .entry(pin) - .or_insert_with(|| VerilatorGpioPin::new(self.inner.clone(), pin)) - .clone()) + self.get_gpio_pin(pin) } fn dispatch(&self, action: &dyn Any) -> Result>> { diff --git a/third_party/rust/Cargo.lock b/third_party/rust/Cargo.lock index 2d5935e4013..01ee4b28feb 100644 --- a/third_party/rust/Cargo.lock +++ b/third_party/rust/Cargo.lock @@ -299,6 +299,7 @@ dependencies = [ "tiny-keccak", "tokio", "typetag", + "wait-timeout", "zerocopy", "zeroize", ] @@ -2288,6 +2289,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" diff --git a/third_party/rust/Cargo.toml b/third_party/rust/Cargo.toml index 44f101b6a06..8307035d880 100644 --- a/third_party/rust/Cargo.toml +++ b/third_party/rust/Cargo.toml @@ -1,4 +1,5 @@ # Copyright lowRISC contributors (OpenTitan project). +# Copyright zeroRISC Inc. # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 @@ -84,6 +85,7 @@ thiserror = "2" tiny-keccak = {version = "2.0.2", features = ["cshake"]} tokio = { version = "1", features = ["full"] } typetag = "0.2" +wait-timeout = "0.2.1" zerocopy = { version = "0.8", features = ["derive"] } zeroize = "1.8.1"